Updated gcc 4.4.3 IA toolchain doesn't require the .ctors list

Orig-Change-Id: Ia840a19a45257128eccdcf25d105f500f2d90741
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Signed-off-by: Bruce Beare <bruce.j.beare@intel.com>
This commit is contained in:
Bruce Beare 2011-01-27 10:23:16 -08:00 committed by David 'Digit' Turner
parent b1dd939e90
commit bf29647964
8 changed files with 5 additions and 87 deletions

View file

@ -66,14 +66,7 @@ _start:
1: .long __PREINIT_ARRAY__ 1: .long __PREINIT_ARRAY__
.long __INIT_ARRAY__ .long __INIT_ARRAY__
.long __FINI_ARRAY__ .long __FINI_ARRAY__
.long __CTOR_LIST__
# the .ctors section contains a list of pointers to "constructor"
# functions that need to be called in order during C library initialization,
# just before the program is being run. This is a C++ requirement
#
# the last entry shall be 0, and is defined in crtend.S
#
.section .preinit_array, "aw" .section .preinit_array, "aw"
.globl __PREINIT_ARRAY__ .globl __PREINIT_ARRAY__
__PREINIT_ARRAY__: __PREINIT_ARRAY__:
@ -89,9 +82,4 @@ __INIT_ARRAY__:
__FINI_ARRAY__: __FINI_ARRAY__:
.long -1 .long -1
.section .ctors, "aw"
.globl __CTOR_LIST__
__CTOR_LIST__:
.long -1
#include "__dso_handle.S" #include "__dso_handle.S"

View file

@ -5,15 +5,6 @@ _on_dlclose:
call __cxa_finalize call __cxa_finalize
ret ret
/* we put the _init() function here in case the user files for the shared
* libs want to drop things into .init section.
* We then will call our ctors from crtend_so.o */
.section .init
.align 4
.type _init, @function
.globl _init
_init:
.section .init_array, "aw" .section .init_array, "aw"
.align 4 .align 4
.type __INIT_ARRAY__, @object .type __INIT_ARRAY__, @object
@ -29,11 +20,4 @@ __FINI_ARRAY__:
.long -1 .long -1
.long _on_dlclose .long _on_dlclose
.section .ctors, "aw"
.align 4
.type __CTOR_LIST__, @object
.globl __CTOR_LIST__
__CTOR_LIST__:
.long -1
#include "__dso_handle.S" #include "__dso_handle.S"

View file

@ -65,7 +65,6 @@ _start:
1: .long __PREINIT_ARRAY__ 1: .long __PREINIT_ARRAY__
.long __INIT_ARRAY__ .long __INIT_ARRAY__
.long __FINI_ARRAY__ .long __FINI_ARRAY__
.long __CTOR_LIST__
.section .preinit_array, "aw" .section .preinit_array, "aw"
.globl __PREINIT_ARRAY__ .globl __PREINIT_ARRAY__
@ -82,9 +81,4 @@ __INIT_ARRAY__:
__FINI_ARRAY__: __FINI_ARRAY__:
.long -1 .long -1
.section .ctors, "aw"
.globl __CTOR_LIST__
__CTOR_LIST__:
.long -1
#include "__dso_handle.S" #include "__dso_handle.S"

View file

@ -1,4 +1,3 @@
.section .preinit_array, "aw" .section .preinit_array, "aw"
.long 0 .long 0
@ -7,7 +6,3 @@
.section .fini_array, "aw" .section .fini_array, "aw"
.long 0 .long 0
.section .ctors, "aw"
.long 0

View file

@ -1,44 +1,3 @@
.text
.align 4
.type __bionic_call_ctors, @function
/*
* The CTORS_LIST is marked by -1 (start) and 0 (end).
* We mark the end of the .ctors section with the __CTOR_END__ section so
* that we can just iterate backwards from it until we hit -1 and execute
* all the function pointers. This seems to be the way to do it for SVR4
* derived systems.
*/
__bionic_call_ctors:
pushl %esi
mov $__CTOR_END__, %esi
0:
/* now grab the next function pointer and check if its -1. If not,
* call it, otherwise we're done. We use %esi since it's callee saved.
*/
subl $4, %esi
mov (%esi), %eax
cmp $0xffffffff, %eax
je 1f
call *%eax
jmp 0b
1:
/* we're done */
popl %esi
ret
.section .init
.align 4
call __bionic_call_ctors
ret
.section .ctors, "aw", @progbits
.align 4
.type __CTOR_END__, @object
__CTOR_END__:
.long 0
.section .init_array, "aw" .section .init_array, "aw"
.long 0 .long 0

View file

@ -35,7 +35,9 @@ typedef struct
void (**preinit_array)(void); void (**preinit_array)(void);
void (**init_array)(void); void (**init_array)(void);
void (**fini_array)(void); void (**fini_array)(void);
#ifndef __i386__
void (**ctors_array)(void); void (**ctors_array)(void);
#endif
} structors_array_t; } structors_array_t;
extern void __libc_init_common(uintptr_t *elfdata); extern void __libc_init_common(uintptr_t *elfdata);

View file

@ -75,8 +75,10 @@ __noreturn void __libc_init(uintptr_t *elfdata,
/* pre-init array. */ /* pre-init array. */
call_array(structors->preinit_array); call_array(structors->preinit_array);
#ifndef __i386__
/* .ctors section initializers, for non-arm-eabi ABIs */ /* .ctors section initializers, for non-arm-eabi ABIs */
call_array(structors->ctors_array); call_array(structors->ctors_array);
#endif
// call static constructors // call static constructors
call_array(structors->init_array); call_array(structors->init_array);

View file

@ -44,9 +44,3 @@ _start:
popl %esp popl %esp
jmp *%eax jmp *%eax
.section .ctors, "wa"
.globl __CTOR_LIST__
__CTOR_LIST__:
.long -1