From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from server28.superhosting.bg (server28.superhosting.bg [217.174.156.11]) by sourceware.org (Postfix) with ESMTPS id B304B3858413 for ; Tue, 2 Jan 2024 08:24:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B304B3858413 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=dinux.eu Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=dinux.eu ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B304B3858413 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=217.174.156.11 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704183900; cv=none; b=jYRnj9RnBOTxYORkGDxwTBGBTtXmC+X5qhk+uoVCCbFKN34XT7W2uqkbNxW+ACb+3IQYQvofx0ljcz758AUWSkzjaWAim0uvy2hAF+BDrRNQwPsXI28XOSWNNdFbTJPjO/pT+W+vRFaL9D5GNEgLplRHpOJzpz/cEg5LsUzH5vk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704183900; c=relaxed/simple; bh=a2phqN2/b8k9Ez1hA6ty/dfUM1K18qqFi/7U5PzRd84=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=rzwziWPWLvj3U9xn88NhkcEAuiLZJKsQZHH7EjedaijEYS/IM6Xb+HsOnbM1GLxhmwoOKM/P40ayrCrsz301kBUgnJgINywUe4JjghwhOh0wFio72g/JdUAK7IlIbmDiOiJnRhx2Mqd9WqwZ5WSHR03Iz1dNzI/ZwqjJSu0/LDM= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=dinux.eu; s=default; h=Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject: Cc:To:From:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=XKynugJOdBAT/29qT+eTC/zWw8TAIBvO7b60Jt4fmk4=; b=S9lYknq00exsrlm9dByadLusAW uNLD/1ui3XygE+DpcynDVysp4pRrDWJLeNqDYoAmjz+2RR4Y0J2Eh1F27oQV4PeJ9AFDhlnRPpRcA PxOsFpVWYssNCyJhMLMDBbxSMcncFqrwVN6PHACT0r5wwIaJ9Z6vnPZvYiaI9i9ccWJOiyg0ByDc7 rT7h2hNm5Z0msG96YRvAjwnSjerI/0LYy0pe8sWUC8ZQEg+ov55Q5TUeFnKK2IxDplhX96jrYGKjK d63UjHtnM9abq+t2n+XsbS+YSEVl/7DnsBPqRUD6RfltyVXjW6EnwvZdr2nNcfqoV+wemp3XOrTKZ TcvHYctA==; Received: from [95.42.20.142] (port=44062 helo=kendros.lan) by server28.superhosting.bg with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96.2) (envelope-from ) id 1rKa4f-0001sD-2u; Tue, 02 Jan 2024 10:24:47 +0200 From: Dimitar Dimitrov To: newlib@sourceware.org Cc: Dimitar Dimitrov Subject: [PATCH 1/2] libgloss: merge pru into top-level Makefile Date: Tue, 2 Jan 2024 10:24:31 +0200 Message-ID: <20240102082432.1304654-1-dimitar@dinux.eu> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - server28.superhosting.bg X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - dinux.eu X-Get-Message-Sender-Via: server28.superhosting.bg: authenticated_id: dimitar@dinux.eu X-Authenticated-Sender: server28.superhosting.bg: dimitar@dinux.eu X-Source: X-Source-Args: X-Source-Dir: X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Avoid a recursive make to speed things up a bit. This change was inspired by the recent similar patch for c6x: https://sourceware.org/pipermail/newlib/2023/020869.html While at it, fork crt0-minrt.S into a separate source file instead of relying on a predefined macro to generate two different object files. This improves clarity, simplifies the build rules, and would allow further optimization in crt0-minrt.S to be implemented more cleanly. Regression tested with clean toolchain build (Binutils+GCC+Newlib) and running the GCC testsuite. Signed-off-by: Dimitar Dimitrov --- libgloss/Makefile.am | 3 + libgloss/configure.ac | 5 +- libgloss/pru/Makefile.in | 145 -------------------------------------- libgloss/pru/Makefile.inc | 19 +++++ libgloss/pru/crt0-minrt.S | 59 ++++++++++++++++ libgloss/pru/crt0.S | 6 -- 6 files changed, 83 insertions(+), 154 deletions(-) delete mode 100644 libgloss/pru/Makefile.in create mode 100644 libgloss/pru/Makefile.inc create mode 100644 libgloss/pru/crt0-minrt.S diff --git a/libgloss/Makefile.am b/libgloss/Makefile.am index 0d4460b58..c45f0fa2e 100644 --- a/libgloss/Makefile.am +++ b/libgloss/Makefile.am @@ -93,6 +93,9 @@ endif if CONFIG_NIOS2 include nios2/Makefile.inc endif +if CONFIG_PRU +include pru/Makefile.inc +endif if CONFIG_RISCV include riscv/Makefile.inc endif diff --git a/libgloss/configure.ac b/libgloss/configure.ac index 268d86c51..695f37f15 100644 --- a/libgloss/configure.ac +++ b/libgloss/configure.ac @@ -238,8 +238,7 @@ case "${target}" in subdirs="$subdirs or1k" ;; pru-*-*) - AC_CONFIG_FILES([pru/Makefile]) - subdirs="$subdirs pru" + config_pru=true ;; nios2-*-*) config_nios2=true @@ -250,7 +249,7 @@ AC_SUBST(subdirs) dnl These subdirs have converted to non-recursive make. Hopefully someday all dnl the ports above will too! m4_foreach_w([SUBDIR], [ - aarch64 arc arm bfin csky d30v iq2000 libnosys lm32 nios2 riscv wince xtensa + aarch64 arc arm bfin csky d30v iq2000 libnosys lm32 nios2 pru riscv wince xtensa ], [dnl AM_CONDITIONAL([CONFIG_]m4_toupper(SUBDIR), [test x$config_]SUBDIR = xtrue) ]) diff --git a/libgloss/pru/Makefile.in b/libgloss/pru/Makefile.in deleted file mode 100644 index fc5905a5e..000000000 --- a/libgloss/pru/Makefile.in +++ /dev/null @@ -1,145 +0,0 @@ -# SPDX-License-Identifier: BSD-2-Clause-FreeBSD -# -# Copyright 2018-2019 Dimitar Dimitrov -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -VPATH = @srcdir@ @srcdir@/.. - -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -includedir = @includedir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ - -AR = @AR@ - -LD = @LD@ - -RANLIB = @RANLIB@ - -OBJDUMP = `t='$(program_transform_name)'; echo objdump | sed -e $$t` -OBJCOPY = `t='$(program_transform_name)'; echo objcopy | sed -e $$t` - -# object files needed -OBJS = \ - do_global_dtors.o gettimeofday.o \ - isatty.o putnum.o raise.o \ - inbyte.o outbyte.o sbrk.o stat.o syscalls.o \ - do_global_dtors.o - -# Object files specific to particular targets. -EVALOBJS = ${OBJS} - -CRTOBJS = crt0.o crt0-minrt.o -OUTPUTS = libgloss.a $(CRTOBJS) - -INCLUDES = -I$(srcdir)/.. - -# Note that when building the library, ${MULTILIB} is not the way multilib -# options are passed; they're passed in $(CFLAGS). -CFLAGS_FOR_TARGET = ${MULTILIB} ${INCLUDES} -LDFLAGS_FOR_TARGET = ${MULTILIB} - -.c.o: - $(CC) $(CFLAGS_FOR_TARGET) -Os $(INCLUDES) -c $(CFLAGS) $< - -.C.o: - $(CC) $(CFLAGS_FOR_TARGET) -Os $(INCLUDES) -c $(CFLAGS) $< -.s.o: - $(AS) $(ASFLAGS_FOR_TARGET) $(ASFLAGS) -o $*.o $< - -# -# GCC knows to run the preprocessor on .S files before it assembles them. -# -.S.o: - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< - -all: ${OUTPUTS} - -# -# here's where we build the library for each target -# - -libgloss.a: $(EVALOBJS) - ${AR} ${ARFLAGS} $@ $(EVALOBJS) - ${RANLIB} $@ - -# C Runtime Library startup code. -crt0.o: $(srcdir)/crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) $< -c -o $@ - -crt0-minrt.o: $(srcdir)/crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -DMINRT $< -c -o $@ - -doc: - -clean mostlyclean: - rm -f $(OUTPUTS) *.i *~ *.o *-test *.srec *.dis *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile $(OUTPUTS) - -.PHONY: install info install-info clean-info -install: $(OUTPUTS) - for outputs in ${OUTPUTS}; do\ - ${INSTALL_DATA} $${outputs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR}/$${outputs}; \ - done - for s in $(SCRIPTS); do \ - b=`basename $$s`; \ - ${INSTALL_DATA} $$s ${DESTDIR}${tooldir}/lib${MULTISUBDIR}/$$b ;\ - done - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR}/device-specs; \ - for s in ${srcdir}/device-specs/*; do \ - b=`basename $$s`; \ - $(INSTALL_DATA) $$s $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/device-specs/$$b ;\ - done - -info: -install-info: -clean-info: - -Makefile: $(srcdir)/Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/pru/Makefile.inc b/libgloss/pru/Makefile.inc new file mode 100644 index 000000000..fbab7d8f9 --- /dev/null +++ b/libgloss/pru/Makefile.inc @@ -0,0 +1,19 @@ +multilibtool_DATA += \ + %D%/crt0.o \ + %D%/crt0-minrt.o + +pru_devicespecsdir = $(multilibtooldir)/device-specs +pru_devicespecs_DATA = %D%/device-specs/sim + +multilibtool_LIBRARIES += %D%/libgloss.a +%C%_libgloss_a_SOURCES = \ + %D%/do_global_dtors.c \ + %D%/gettimeofday.c \ + %D%/isatty.c \ + %D%/putnum.c \ + %D%/raise.c \ + %D%/inbyte.c \ + %D%/outbyte.c \ + %D%/sbrk.c \ + %D%/stat.c \ + %D%/syscalls.S diff --git a/libgloss/pru/crt0-minrt.S b/libgloss/pru/crt0-minrt.S new file mode 100644 index 000000000..60647d372 --- /dev/null +++ b/libgloss/pru/crt0-minrt.S @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * crt0-minrt.S -- Minimal PRU startup code + * + * Copyright (c) 2024 Dimitar Dimitrov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "newlib.h" + + .extern main + + .text + .section .init0, "x" + .global _start +_start: + /* Initialize stack pointer. */ + ldi32 sp, _stack_top + + /* DATA and BSS are handled by the loader, so nothing to do here. */ + + /* Just in case main() tries to access argc, argv[] and envp. */ + zero r14, 3 * 4 + + /* Call main. */ + call main + + /* We should never reach here. */ +_crt_exit: + halt + jmp _crt_exit + + /* PRU obviously has no shared libraries, but dso_handle + helps to achieve better GCC test coverage. Besides, + it should be free with minrt. */ + .section .data + .global __dso_handle + .weak __dso_handle +__dso_handle: + .long 0 diff --git a/libgloss/pru/crt0.S b/libgloss/pru/crt0.S index b3f0d53a9..ad31cc9cc 100644 --- a/libgloss/pru/crt0.S +++ b/libgloss/pru/crt0.S @@ -39,7 +39,6 @@ _start: /* DATA and BSS are handled by the loader, so nothing to do here. */ -#if !defined(MINRT) .extern _do_global_dtors /* Ensure destructors get called. Call is per GNU ABI (i.e. 32-bit function pointers). But it is also compatible with the TI ABI @@ -60,27 +59,22 @@ ctors_loop: add r5, r5, 2 jmp ctors_loop ctors_done: -#endif /* Just in case main() tries to access argc, argv[] and envp. */ zero r14, 3 * 4 -#if !defined(MINRT) .weak __c_args__ ldi32 r5, __c_args__ qbeq __skip_c_args, r5, 0 lbbo r14, r5, 0, 4 /* argc */ add r15, r5, 4 /* argv */ __skip_c_args: -#endif /* Call main */ call main -#if !defined(MINRT) /* Call exit */ call exit -#endif /* We should never reach here. */ _crt_exit: -- 2.43.0