diff options
author | Eric Andersen <andersen@codepoet.org> | 2001-08-28 17:15:53 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2001-08-28 17:15:53 +0000 |
commit | 1220fd70ca9b9534a2b831bd9f937436968b5d07 (patch) | |
tree | 68fe1509bf46f230a610c8f9d3631ea94026dc8b | |
parent | 22e8adca0dc97c39af187d1ce1ba1cd962b6ca0a (diff) |
This will hopefully make global constructors and destructors work
-rw-r--r-- | libc/sysdeps/linux/arm/crt0.S | 12 | ||||
-rw-r--r-- | libc/sysdeps/linux/i386/crt0.S | 14 | ||||
-rw-r--r-- | libc/sysdeps/linux/i386/crt0.c | 7 | ||||
-rw-r--r-- | libc/sysdeps/linux/powerpc/crt0.S | 12 | ||||
-rw-r--r-- | libc/sysdeps/linux/powerpc/crt0.c | 18 |
5 files changed, 62 insertions, 1 deletions
diff --git a/libc/sysdeps/linux/arm/crt0.S b/libc/sysdeps/linux/arm/crt0.S index 243977b7f..01bcb321f 100644 --- a/libc/sysdeps/linux/arm/crt0.S +++ b/libc/sysdeps/linux/arm/crt0.S @@ -62,3 +62,15 @@ _start: /* Ok, now run uClibc's main() -- shouldn't return */ 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 diff --git a/libc/sysdeps/linux/i386/crt0.S b/libc/sysdeps/linux/i386/crt0.S index 79e0a6748..0095e6c67 100644 --- a/libc/sysdeps/linux/i386/crt0.S +++ b/libc/sysdeps/linux/i386/crt0.S @@ -71,3 +71,17 @@ _start: /* Ok, now run uClibc's main() -- shouldn't return */ 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 + diff --git a/libc/sysdeps/linux/i386/crt0.c b/libc/sysdeps/linux/i386/crt0.c index c40224ca6..0498d06e1 100644 --- a/libc/sysdeps/linux/i386/crt0.c +++ b/libc/sysdeps/linux/i386/crt0.c @@ -24,6 +24,13 @@ 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) { unsigned int argc; diff --git a/libc/sysdeps/linux/powerpc/crt0.S b/libc/sysdeps/linux/powerpc/crt0.S index 9eed91ebf..9866b20e9 100644 --- a/libc/sysdeps/linux/powerpc/crt0.S +++ b/libc/sysdeps/linux/powerpc/crt0.S @@ -55,4 +55,16 @@ _start: 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 diff --git a/libc/sysdeps/linux/powerpc/crt0.c b/libc/sysdeps/linux/powerpc/crt0.c index b7e7f9b15..2460e910c 100644 --- a/libc/sysdeps/linux/powerpc/crt0.c +++ b/libc/sysdeps/linux/powerpc/crt0.c @@ -30,7 +30,23 @@ asm( "\tstwu 1,-32(1)\n" "\tmtlr 0\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); |