[PATCH 07/15] arc: libgloss: Use atexit to setup fini routines

[email protected]
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
From: Claudiu Zissulescu <[email protected]>

Use atexit funtion to setup fini routines to be called on exit
instead of filling in __atexit structures manually.

Signed-off-by: Claudiu Zissulescu <[email protected]>
---
 libgloss/arc/crt0.S | 25 +++++--------------------
 1 file changed, 5 insertions(+), 20 deletions(-)

diff --git a/libgloss/arc/crt0.S b/libgloss/arc/crt0.S
index 235f81028..1999e602b 100644
--- a/libgloss/arc/crt0.S
+++ b/libgloss/arc/crt0.S
@@ -178,27 +178,12 @@ __start:
 
 #endif /* !__ARC601__ */
 
-; Some  targets use the .init and .fini sections to create constructors and
-; destructors, and for these targets we need to call the _init function and
-; arrange for _fini to be called at program exit.
-	mov_s	r13, r0
-	mov_s	r14, r1
-	; calling atexit drags in malloc, so instead poke the function
-	; address directly into the reent structure
-	ld	r1, [gp, @_impure_ptr@sda]
-	mov_s	r1, @__atexit0
-	mov_s	r2, @__atexit
-	st_s	r1, [r2, 0]		; __atexit = &__atexit0
-	mov_s	r0, 1
-	st_s	r0, [r1, 4]		; __atexit0._ind = 1
-	mov_s	r0, @_fini
-	st_s	r0, [r1, 8]		; __atexit0._fns[0] = _fini
-; branch to _init
-#if defined (__ARCEM__) || defined (__ARCHS__)
+	;; Call constructors
 	jl	@_init
-#else
-	bl	@_init
-#endif /* __ARCEM__ || __ARCHS__ */
+
+;;; Setup fini routines to be called from exit
+	mov_s	r0, @_fini
+	jl	@atexit
 
 #ifdef PROFILE_SUPPORT /* Defined in gcrt0.S.  */
 	mov	r0,@__start
-- 
2.39.2
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.