/[grub]/grub2/kern/dl.c
ViewVC logotype

Diff of /grub2/kern/dl.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.10 by marco_g, Mon Feb 14 18:41:33 2005 UTC revision 1.11 by hollisb, Sat Dec 10 05:24:59 2005 UTC
# Line 507  static void Line 507  static void
507  grub_dl_flush_cache (grub_dl_t mod)  grub_dl_flush_cache (grub_dl_t mod)
508  {  {
509    grub_dl_segment_t seg;    grub_dl_segment_t seg;
510      
511    for (seg = mod->segment; seg; seg = seg->next)    for (seg = mod->segment; seg; seg = seg->next) {
512      grub_arch_sync_caches (seg->addr, seg->size);      if (seg->size) {
513          grub_dprintf ("modules", "flushing 0x%x bytes at %p\n", seg->size,
514                        seg->addr);
515          grub_arch_sync_caches (seg->addr, seg->size);
516        }
517      }
518  }  }
519    
520  /* Load a module from core memory.  */  /* Load a module from core memory.  */
# Line 518  grub_dl_load_core (void *addr, grub_size Line 523  grub_dl_load_core (void *addr, grub_size
523  {  {
524    Elf_Ehdr *e;    Elf_Ehdr *e;
525    grub_dl_t mod;    grub_dl_t mod;
526      
527      grub_dprintf ("modules", "module at %p, size 0x%x\n", addr, size);
528    e = addr;    e = addr;
529    if (grub_dl_check_header (e, size))    if (grub_dl_check_header (e, size))
530      return 0;      return 0;
531      
532    if (e->e_type != ET_REL)    if (e->e_type != ET_REL)
533      {      {
534        grub_error (GRUB_ERR_BAD_MODULE, "invalid ELF file type");        grub_error (GRUB_ERR_BAD_MODULE, "invalid ELF file type");
# Line 547  grub_dl_load_core (void *addr, grub_size Line 553  grub_dl_load_core (void *addr, grub_size
553    mod->init = 0;    mod->init = 0;
554    mod->fini = 0;    mod->fini = 0;
555    
556      grub_dprintf ("modules", "relocating to %p\n", mod);
557    if (grub_dl_resolve_name (mod, e)    if (grub_dl_resolve_name (mod, e)
558        || grub_dl_resolve_dependencies (mod, e)        || grub_dl_resolve_dependencies (mod, e)
559        || grub_dl_load_segments (mod, e)        || grub_dl_load_segments (mod, e)
# Line 559  grub_dl_load_core (void *addr, grub_size Line 566  grub_dl_load_core (void *addr, grub_size
566      }      }
567    
568    grub_dl_flush_cache (mod);    grub_dl_flush_cache (mod);
569      
570      grub_dprintf ("modules", "module name: %s\n", mod->name);
571      grub_dprintf ("modules", "init function: %p\n", mod->init);
572    grub_dl_call_init (mod);    grub_dl_call_init (mod);
573      
574    if (grub_dl_add (mod))    if (grub_dl_add (mod))
575      {      {
576        grub_dl_unload (mod);        grub_dl_unload (mod);
577        return 0;        return 0;
578      }      }
579      
580    return mod;    return mod;
581  }  }
582    

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.11

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26