module: Define __{ctors,dtors}_end symbols
authorChandramouli Narayanan <chandramouli.narayanan@intel.com>
Wed, 22 Aug 2012 10:37:50 +0000 (11:37 +0100)
committerMatt Fleming <matt.fleming@intel.com>
Wed, 22 Aug 2012 10:42:19 +0000 (11:42 +0100)
This patch fixes linker script for module initialization.  The old
__module_*_ptr symbols are no longer used, instead we now have an
array of constructors and destructors.

Signed-off-by: Chandramouli Narayanan <chandramouli.narayanan@intel.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
com32/lib/i386/elf.ld
com32/lib/sys/module/common.c
com32/lib/sys/module/elf_module.c
com32/lib/x86_64/elf.ld

index 158badb..fc2e7db 100644 (file)
@@ -91,13 +91,9 @@ SECTIONS
        __ctors_start = .;
     KEEP (*(SORT(.ctors.*)))
     KEEP (*(.ctors))
-    LONG(0x00000000)
-    __module_init_ptr = .;
     KEEP (*(.ctors_modinit))
-    LONG(0x00000000)
-    __module_main_ptr = .;
     KEEP (*(.ctors_modmain))
-    LONG(0x00000000)
+       __ctors_end = .;
   }
   
   .dtors          :
@@ -105,10 +101,8 @@ SECTIONS
        __dtors_start = .;
     KEEP (*(SORT(.dtors.*)))
     KEEP (*(.dtors))
-    LONG(0x00000000)
-    __module_exit_ptr = .;
     KEEP (*(.dtors_modexit))
-    LONG(0x00000000)
+       __dtors_end = .;
   }
   
   .jcr            : { KEEP (*(.jcr)) }
index dc3754c..e6af486 100644 (file)
@@ -423,7 +423,7 @@ int _module_unload(struct elf_module *module) {
 int module_unload(struct elf_module *module) {
        module_ctor_t *dtor;
 
-       for (dtor = module->dtors; *dtor; dtor++)
+       for (dtor = module->dtors; dtor && *dtor; dtor++)
                (*dtor) ();
 
        return _module_unload(module);
index d973272..4ee296c 100644 (file)
@@ -288,7 +288,7 @@ int module_load(struct elf_module *module) {
                        (module->exit_func == NULL) ? NULL : *(module->exit_func));
        */
 
-       for (ctor = module->ctors; *ctor; ctor++)
+       for (ctor = module->ctors; ctor && *ctor; ctor++)
                (*ctor) ();
 
        return 0;
index bf9881f..4e88bcb 100644 (file)
@@ -92,13 +92,9 @@ SECTIONS
        __ctors_start = .;
     KEEP (*(SORT(.ctors.*)))
     KEEP (*(.ctors))
-    LONG(0x00000000)
-    __module_init_ptr = .;
     KEEP (*(.ctors_modinit))
-    LONG(0x00000000)
-    __module_main_ptr = .;
     KEEP (*(.ctors_modmain))
-    LONG(0x00000000)
+       __ctors_end = .;
   }
   
   .dtors          :
@@ -106,10 +102,8 @@ SECTIONS
        __dtors_start = .;
     KEEP (*(SORT(.dtors.*)))
     KEEP (*(.dtors))
-    LONG(0x00000000)
-    __module_exit_ptr = .;
     KEEP (*(.dtors_modexit))
-    LONG(0x00000000)
+       __dtors_end = .;
   }
   
   .jcr            : { KEEP (*(.jcr)) }