Skip to contentSkip to conversation

minios: use NULL sentinel at end of [CD]TOR list

PATCH New Jeremy Fitzhardinge 1 participant 1 message Aug 20, 2011

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 minios: use NULL sentinel at end of [CD]TOR list

Use the NULL pointer at the end of the [CD]TOR list rather than relying on a count.

I hit a linker bug where the [CD]TOR list count was being miscomputed, but its just simpler to use a sentinel.

extras/mini-os/arch/ia64/minios-ia64.lds +0 -2
diff -r b81c0417b901 extras/mini-os/arch/ia64/minios-ia64.lds
@@ -55,7 +55,6 @@
   .ctors : AT(ADDR(.ctors) - (((5<<(61))+0x100000000) - (1 << 20)))
 	{
         __CTOR_LIST__ = .;
-        QUAD((__CTOR_END__ - __CTOR_LIST__) / 8 - 2)
         *(.ctors)
 	CONSTRUCTORS
         QUAD(0)
@@ -65,7 +64,6 @@
   .dtors : AT(ADDR(.dtors) - (((5<<(61))+0x100000000) - (1 << 20)))
         {
         __DTOR_LIST__ = .;
-        QUAD((__DTOR_END__ - __DTOR_LIST__) / 8 - 2)
         *(.dtors)
         QUAD(0)
         __DTOR_END__ = .;
extras/mini-os/arch/x86/minios-x86_32.lds +0 -2
diff -r b81c0417b901 extras/mini-os/arch/x86/minios-x86_32.lds
@@ -30,7 +30,6 @@
 
   .ctors : {
         __CTOR_LIST__ = .;
-        LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
         *(.ctors)
 	CONSTRUCTORS
         LONG(0)
@@ -39,7 +38,6 @@
 
   .dtors : {
         __DTOR_LIST__ = .;
-        LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
         *(.dtors)
         LONG(0)
         __DTOR_END__ = .;
extras/mini-os/arch/x86/minios-x86_64.lds +0 -2
diff -r b81c0417b901 extras/mini-os/arch/x86/minios-x86_64.lds
@@ -30,7 +30,6 @@
 
   .ctors : {
         __CTOR_LIST__ = .;
-        QUAD((__CTOR_END__ - __CTOR_LIST__) / 8 - 2)
         *(.ctors)
 	CONSTRUCTORS
         QUAD(0)
@@ -39,7 +38,6 @@
 
   .dtors : {
         __DTOR_LIST__ = .;
-        QUAD((__DTOR_END__ - __DTOR_LIST__) / 8 - 2)
         *(.dtors)
         QUAD(0)
         __DTOR_END__ = .;
extras/mini-os/main.c +2 -2
diff -r b81c0417b901 extras/mini-os/main.c
@@ -153,7 +153,7 @@
 
     __libc_init_array();
     environ = envp;
-    for (i = 1; i <= __CTOR_LIST__[0]; i++)
+    for (i = 0; __CTOR_LIST__[i] != 0; i++)
         ((void((*)(void)))__CTOR_LIST__[i]) ();
     tzset();
 
@@ -164,7 +164,7 @@
 {
     int i;
 
-    for (i = 1; i <= __DTOR_LIST__[0]; i++)
+    for (i = 0; __DTOR_LIST__[i] != 0; i++)
         ((void((*)(void)))__DTOR_LIST__[i]) ();
     close_all_files();
     __libc_fini_array();