diff options
author | Claudiu Zissulescu <claziss@gmail.com> | 2024-05-21 10:56:50 +0100 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2024-05-22 14:25:50 -0400 |
commit | 6cfdd3350ee6f8c8ba8ccd46505d70a624ef3f75 (patch) | |
tree | ae556122ad5d30c1f529b798dbcae56908f96411 | |
parent | 6d5331054ee3c957a4d3c8df05321f670c962020 (diff) | |
download | newlib-6cfdd3350ee6f8c8ba8ccd46505d70a624ef3f75.zip newlib-6cfdd3350ee6f8c8ba8ccd46505d70a624ef3f75.tar.gz newlib-6cfdd3350ee6f8c8ba8ccd46505d70a624ef3f75.tar.bz2 |
arc: libgloss: Use atexit to setup fini routines
Use atexit funtion to setup fini routines to be called on exit
instead of filling in __atexit structures manually.
Signed-off-by: Claudiu Zissulescu <claziss@gmail.com>
-rw-r--r-- | libgloss/arc/crt0.S | 25 |
1 files changed, 5 insertions, 20 deletions
diff --git a/libgloss/arc/crt0.S b/libgloss/arc/crt0.S index 235f810..1999e60 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 |