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:
parent
b1dd939e90
commit
bf29647964
8 changed files with 5 additions and 87 deletions
|
@ -66,14 +66,7 @@ _start:
|
|||
1: .long __PREINIT_ARRAY__
|
||||
.long __INIT_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"
|
||||
.globl __PREINIT_ARRAY__
|
||||
__PREINIT_ARRAY__:
|
||||
|
@ -89,9 +82,4 @@ __INIT_ARRAY__:
|
|||
__FINI_ARRAY__:
|
||||
.long -1
|
||||
|
||||
.section .ctors, "aw"
|
||||
.globl __CTOR_LIST__
|
||||
__CTOR_LIST__:
|
||||
.long -1
|
||||
|
||||
#include "__dso_handle.S"
|
||||
|
|
|
@ -5,15 +5,6 @@ _on_dlclose:
|
|||
call __cxa_finalize
|
||||
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"
|
||||
.align 4
|
||||
.type __INIT_ARRAY__, @object
|
||||
|
@ -29,11 +20,4 @@ __FINI_ARRAY__:
|
|||
.long -1
|
||||
.long _on_dlclose
|
||||
|
||||
.section .ctors, "aw"
|
||||
.align 4
|
||||
.type __CTOR_LIST__, @object
|
||||
.globl __CTOR_LIST__
|
||||
__CTOR_LIST__:
|
||||
.long -1
|
||||
|
||||
#include "__dso_handle.S"
|
||||
|
|
|
@ -65,7 +65,6 @@ _start:
|
|||
1: .long __PREINIT_ARRAY__
|
||||
.long __INIT_ARRAY__
|
||||
.long __FINI_ARRAY__
|
||||
.long __CTOR_LIST__
|
||||
|
||||
.section .preinit_array, "aw"
|
||||
.globl __PREINIT_ARRAY__
|
||||
|
@ -82,9 +81,4 @@ __INIT_ARRAY__:
|
|||
__FINI_ARRAY__:
|
||||
.long -1
|
||||
|
||||
.section .ctors, "aw"
|
||||
.globl __CTOR_LIST__
|
||||
__CTOR_LIST__:
|
||||
.long -1
|
||||
|
||||
#include "__dso_handle.S"
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
.section .preinit_array, "aw"
|
||||
.long 0
|
||||
|
||||
|
@ -7,7 +6,3 @@
|
|||
|
||||
.section .fini_array, "aw"
|
||||
.long 0
|
||||
|
||||
.section .ctors, "aw"
|
||||
.long 0
|
||||
|
||||
|
|
|
@ -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"
|
||||
.long 0
|
||||
|
|
|
@ -35,7 +35,9 @@ typedef struct
|
|||
void (**preinit_array)(void);
|
||||
void (**init_array)(void);
|
||||
void (**fini_array)(void);
|
||||
#ifndef __i386__
|
||||
void (**ctors_array)(void);
|
||||
#endif
|
||||
} structors_array_t;
|
||||
|
||||
extern void __libc_init_common(uintptr_t *elfdata);
|
||||
|
|
|
@ -75,8 +75,10 @@ __noreturn void __libc_init(uintptr_t *elfdata,
|
|||
/* pre-init array. */
|
||||
call_array(structors->preinit_array);
|
||||
|
||||
#ifndef __i386__
|
||||
/* .ctors section initializers, for non-arm-eabi ABIs */
|
||||
call_array(structors->ctors_array);
|
||||
#endif
|
||||
|
||||
// call static constructors
|
||||
call_array(structors->init_array);
|
||||
|
|
|
@ -44,9 +44,3 @@ _start:
|
|||
popl %esp
|
||||
jmp *%eax
|
||||
|
||||
.section .ctors, "wa"
|
||||
.globl __CTOR_LIST__
|
||||
|
||||
__CTOR_LIST__:
|
||||
.long -1
|
||||
|
||||
|
|
Loading…
Reference in a new issue