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.