summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libgloss/riscv/crt0.S13
1 files changed, 13 insertions, 0 deletions
diff --git a/libgloss/riscv/crt0.S b/libgloss/riscv/crt0.S
index 588becfae..160c07853 100644
--- a/libgloss/riscv/crt0.S
+++ b/libgloss/riscv/crt0.S
@@ -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