diff options
-rw-r--r-- | libgloss/ChangeLog | 5 | ||||
-rw-r--r-- | libgloss/arm/crt0.S | 18 |
2 files changed, 22 insertions, 1 deletions
diff --git a/libgloss/ChangeLog b/libgloss/ChangeLog index d454c30..6fdfccd 100644 --- a/libgloss/ChangeLog +++ b/libgloss/ChangeLog @@ -1,3 +1,8 @@ +2013-07-02 Joey Ye <joey.ye@arm.com> + + * arm/crt0.S (_mainCRTStartup): Weak reference to atexit and _fini + when lite exit is enabled. + 2013-06-28 Yufeng Zhang <Yufeng.Zhang@arm.com> * aarch64/syscalls.c (POINTER_TO_PARAM_BLOCK_T): New macro. diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S index 92e7648..f7ed5c5 100644 --- a/libgloss/arm/crt0.S +++ b/libgloss/arm/crt0.S @@ -390,12 +390,21 @@ __change_mode: for _fini to be called at program exit. */ movs r4, r0 movs r5, r1 +#ifdef _LITE_EXIT + /* Make reference to atexit weak to avoid unconditionally pulling in + support code. Refer to comments in __atexit.c for more details. */ + .weak FUNCTION(atexit) + ldr r0, .Latexit + cmp r0, #0 + beq .Lweak_atexit +#endif ldr r0, .Lfini bl FUNCTION (atexit) +.Lweak_atexit: bl FUNCTION (_init) movs r0, r4 movs r1, r5 -#endif +#endif bl FUNCTION (main) bl FUNCTION (exit) /* Should not return. */ @@ -465,6 +474,13 @@ change_back: .LC2: .word __bss_end__ #ifdef __USES_INITFINI__ +#ifdef _LITE_EXIT +.Latexit: + .word FUNCTION(atexit) + + /* Weak reference _fini in case of lite exit. */ + .weak FUNCTION(_fini) +#endif .Lfini: .word FUNCTION(_fini) #endif |