RISC-V: Add _LITE_EXIT in crt0.S.

This patch adds _LITE_EXIT in crt0.S to enable "lite exit" technique in
RISC-V. The changes have been tested in riscv/riscv-gnu-toolchain by
riscv-dejagnu with riscv-sim.exp/riscv-sim-nano.exp.
This commit is contained in:
Jim Wilson 2019-05-22 17:41:25 -07:00
parent 5c86f0da5f
commit 77ac27dcf8
1 changed files with 13 additions and 0 deletions

View File

@ -9,6 +9,8 @@
http://www.opensource.org/licenses.
*/
#include "newlib.h"
#=========================================================================
# crt0.S : Entry point for RISC-V user programs
#=========================================================================
@ -30,9 +32,20 @@ _start:
sub a2, a2, a0
li a1, 0
call memset
#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 atexit
la a0, atexit
beqz a0, .Lweak_atexit
.weak __libc_fini_array
#endif
la a0, __libc_fini_array # Register global termination functions
call atexit # to be called upon exit
#ifdef _LITE_EXIT
.Lweak_atexit:
#endif
call __libc_init_array # Run global initialization functions
lw a0, 0(sp) # a0 = argc