From 2404223df651ceef42c6e2f2c9fa42fb7963db10 Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Tue, 2 Jul 2013 21:34:35 +0000 Subject: [PATCH] 2013-07-02 Joey Ye * arm/crt0.S (_mainCRTStartup): Weak reference to atexit and _fini when lite exit is enabled. --- libgloss/ChangeLog | 5 +++++ libgloss/arm/crt0.S | 18 +++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/libgloss/ChangeLog b/libgloss/ChangeLog index d454c3019..6fdfccd16 100644 --- a/libgloss/ChangeLog +++ b/libgloss/ChangeLog @@ -1,3 +1,8 @@ +2013-07-02 Joey Ye + + * arm/crt0.S (_mainCRTStartup): Weak reference to atexit and _fini + when lite exit is enabled. + 2013-06-28 Yufeng Zhang * aarch64/syscalls.c (POINTER_TO_PARAM_BLOCK_T): New macro. diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S index 92e76480c..f7ed5c5bd 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