From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30116 invoked by alias); 23 May 2019 00:42:05 -0000 Mailing-List: contact newlib-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: newlib-cvs-owner@sourceware.org Received: (qmail 30095 invoked by uid 19); 23 May 2019 00:42:05 -0000 Date: Thu, 23 May 2019 00:42:00 -0000 Message-ID: <20190523004205.30094.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Jim Wilson To: newlib-cvs@sourceware.org Subject: [newlib-cygwin] RISC-V: Add _LITE_EXIT in crt0.S. X-Act-Checkin: newlib-cygwin X-Git-Author: Jim Wilson X-Git-Refname: refs/heads/master X-Git-Oldrev: 5c86f0da5f07791c01477380a0635c6d38a9b33b X-Git-Newrev: 77ac27dcf8ebd6ea314b32e563f3d128fe431581 X-SW-Source: 2019-q2/txt/msg00014.txt.bz2 https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=77ac27dcf8ebd6ea314b32e563f3d128fe431581 commit 77ac27dcf8ebd6ea314b32e563f3d128fe431581 Author: Jim Wilson Date: Wed May 22 17:41:25 2019 -0700 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. Diff: --- libgloss/riscv/crt0.S | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libgloss/riscv/crt0.S b/libgloss/riscv/crt0.S index 588becf..160c078 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