[PATCH 2/2] RISC-V: Add _LITE_EXIT in crt0.S.

[email protected]
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
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.

 From d51d7c69a2c60041ef583686f24ccae74b675edc Mon Sep 17 00:00:00 2001
 From: Ilia Diachkov <[email protected]>
Date: Sat, 18 May 2019 02:08:36 +0300
Subject: [PATCH 2/2] RISC-V: Add _LITE_EXIT in crt0.S.

---
  libgloss/riscv/crt0.S | 11 +++++++++++
  1 file changed, 11 insertions(+)

diff --git a/libgloss/riscv/crt0.S b/libgloss/riscv/crt0.S
index 3d2a12d..7e1c025 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,18 @@ _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
+.Lweak_atexit:
    call    __libc_init_array       # Run global initialization functions

    lw      a0, 0(sp)                  # a0 = argc
-- 
1.8.3.1
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.