Browse Source

This will hopefully make global constructors and destructors work

Eric Andersen 24 years ago
parent
commit
1220fd70ca

+ 12 - 0
libc/sysdeps/linux/arm/crt0.S

@@ -62,3 +62,15 @@ _start:
 	/* Ok, now run uClibc's main() -- shouldn't return */
 	/* Ok, now run uClibc's main() -- shouldn't return */
 	bl	__uClibc_main
 	bl	__uClibc_main
 
 
+/* a little bit of stuff to support C++ */
+	.section .ctors,"aw"
+	.align 4
+	.global __CTOR_LIST__
+__CTOR_LIST__:
+	.long -1
+
+	.section .dtors,"aw"
+	.align 4
+	.global __DTOR_LIST__
+__DTOR_LIST__:
+	.long -1

+ 14 - 0
libc/sysdeps/linux/i386/crt0.S

@@ -71,3 +71,17 @@ _start:
 
 
 	/* Ok, now run uClibc's main() -- shouldn't return */
 	/* Ok, now run uClibc's main() -- shouldn't return */
 	call __uClibc_main
 	call __uClibc_main
+
+/* a little bit of stuff to support C++ */
+	.section .ctors,"aw"
+	.align 4
+	.global __CTOR_LIST__
+__CTOR_LIST__:
+	.long -1
+
+	.section .dtors,"aw"
+	.align 4
+	.global __DTOR_LIST__
+__DTOR_LIST__:
+	.long -1
+

+ 7 - 0
libc/sysdeps/linux/i386/crt0.c

@@ -24,6 +24,13 @@
 
 
 extern void __uClibc_main(int argc,void *argv,void *envp);
 extern void __uClibc_main(int argc,void *argv,void *envp);
 
 
+/* a little bit of stuff to support C++ */
+__asm__(".section .ctors,\"aw\"\n.align 4\n.global __CTOR_LIST__\n"
+	"__CTOR_LIST__:\n.long -1\n");
+
+__asm__(".section .dtors,\"aw\"\n.align 4\n.global __DTOR_LIST__\n"
+	"__DTOR_LIST__:\n.long -1\n");
+
 void _start(unsigned int first_arg)
 void _start(unsigned int first_arg)
 {
 {
 	unsigned int argc;
 	unsigned int argc;

+ 12 - 0
libc/sysdeps/linux/powerpc/crt0.S

@@ -55,4 +55,16 @@ _start:
 
 
 	bl	__uClibc_main
 	bl	__uClibc_main
 	
 	
+/* a little bit of stuff to support C++ */
+	.section .ctors,"aw"
+	.align 4
+	.global __CTOR_LIST__
+__CTOR_LIST__:
+	.long -1
+
+	.section .dtors,"aw"
+	.align 4
+	.global __DTOR_LIST__
+__DTOR_LIST__:
+	.long -1
 
 

+ 17 - 1
libc/sysdeps/linux/powerpc/crt0.c

@@ -30,7 +30,23 @@ asm(
 	"\tstwu	1,-32(1)\n"
 	"\tstwu	1,-32(1)\n"
 	"\tmtlr 0\n"
 	"\tmtlr 0\n"
 	//"\tstw 0,0(1)\n"
 	//"\tstw 0,0(1)\n"
-	"\tb _start2\n");
+	"\tb _start2\n
+	
+	");
+
+/* a little bit of stuff to support C++ */
+asm(
+	"\t.section .ctors,\"aw\"\n"
+	"\t.align 4\n"
+	"\t.global __CTOR_LIST__\n"
+	"__CTOR_LIST__:\n"
+	"\t.long -1\n"
+	"\t.section .dtors,\"aw\"\n"
+	"\t.align 4\n"
+	"\t.global __DTOR_LIST__\n"
+	"__DTOR_LIST__:\n"
+	"\t.long -1\n"
+	);
 
 
 void __uClibc_main(int argc,void *argv,void *envp);
 void __uClibc_main(int argc,void *argv,void *envp);