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>
This commit is contained in:
parent
6d5331054e
commit
6cfdd3350e
|
@ -178,27 +178,12 @@ __start:
|
||||||
|
|
||||||
#endif /* !__ARC601__ */
|
#endif /* !__ARC601__ */
|
||||||
|
|
||||||
; Some targets use the .init and .fini sections to create constructors and
|
;; Call constructors
|
||||||
; 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__)
|
|
||||||
jl @_init
|
jl @_init
|
||||||
#else
|
|
||||||
bl @_init
|
;;; Setup fini routines to be called from exit
|
||||||
#endif /* __ARCEM__ || __ARCHS__ */
|
mov_s r0, @_fini
|
||||||
|
jl @atexit
|
||||||
|
|
||||||
#ifdef PROFILE_SUPPORT /* Defined in gcrt0.S. */
|
#ifdef PROFILE_SUPPORT /* Defined in gcrt0.S. */
|
||||||
mov r0,@__start
|
mov r0,@__start
|
||||||
|
|
Loading…
Reference in New Issue