Merge remote-tracking branch 'mfleming/elflink' into for-hpa/elflink/firmware
authorMatt Fleming <matt.fleming@intel.com>
Mon, 13 Aug 2012 15:45:11 +0000 (16:45 +0100)
committerMatt Fleming <matt.fleming@intel.com>
Mon, 13 Aug 2012 15:45:37 +0000 (16:45 +0100)
Conflicts:
com32/lib/sys/module/common.c

1  2 
com32/include/sys/module.h
com32/lib/sys/module/common.c
core/elflink/load_env32.c
mk/elf.mk

Simple merge
@@@ -429,18 -422,42 +429,42 @@@ int module_unload(struct elf_module *mo
        return _module_unload(module);
  }
  
 -static Elf32_Sym *module_find_symbol_sysv(const char *name, struct elf_module *module) {
+ struct elf_module *unload_modules_since(const char *name) {
+       struct elf_module *m, *mod, *begin = NULL;
+       for_each_module(mod) {
+               if (!strcmp(mod->name, name)) {
+                       begin = mod;
+                       break;
+               }
+       }
+       if (!begin)
+               return begin;
+       for_each_module_safe(mod, m) {
+               if (mod == begin)
+                       break;
+               if (mod != begin)
+                       module_unload(mod);
+       }
+       return begin;
+ }
 +static Elf_Sym *module_find_symbol_sysv(const char *name, struct elf_module *module) {
        unsigned long h = elf_hash((const unsigned char*)name);
 -      Elf32_Word *cr_word = module->hash_table;
 +      Elf_Word *cr_word = module->hash_table;
  
 -      Elf32_Word nbucket = *cr_word++;
 +      Elf_Word nbucket = *cr_word++;
        cr_word++; // Skip nchain
  
 -      Elf32_Word *bkt = cr_word;
 -      Elf32_Word *chn = cr_word + nbucket;
 +      Elf_Word *bkt = cr_word;
 +      Elf_Word *chn = cr_word + nbucket;
  
 -      Elf32_Word crt_index = bkt[h % module->hash_table[0]];
 -      Elf32_Sym *crt_sym;
 +      Elf_Word crt_index = bkt[h % module->hash_table[0]];
 +      Elf_Sym *crt_sym;
  
  
        while (crt_index != STN_UNDEF) {
Simple merge
diff --cc mk/elf.mk
Simple merge