[PATCH v2 3/4] Align libgloss/arm and libc/sys/arm sources: Lite exit support

Alexander Fedotov <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Applied changes from commit 2404223:

	* arm/crt0.S (_mainCRTStartup): Weak reference to atexit and _fini
		when lite exit is enabled.
---
 newlib/libc/sys/arm/crt0.S | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/newlib/libc/sys/arm/crt0.S b/newlib/libc/sys/arm/crt0.S
index a55aa365b..5e677a23c 100644
--- a/newlib/libc/sys/arm/crt0.S
+++ b/newlib/libc/sys/arm/crt0.S
@@ -518,8 +518,17 @@ __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
@@ -589,6 +598,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
-- 
2.17.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.