From patchwork Wed Jan 3 17:56:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dimitar Dimitrov X-Patchwork-Id: 83266 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 97A1B38582BC for ; Wed, 3 Jan 2024 17:57:34 +0000 (GMT) X-Original-To: newlib@sourceware.org Delivered-To: newlib@sourceware.org Received: from server28.superhosting.bg (server28.superhosting.bg [217.174.156.11]) by sourceware.org (Postfix) with ESMTPS id 93B6B3858C2F for ; Wed, 3 Jan 2024 17:57:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 93B6B3858C2F 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 93B6B3858C2F 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=1704304630; cv=none; b=uZrirwdwTTKVm+aoFDgiv8q3essQ6HwRVHTFxd/yVDOmSHvDfW7s7wEc42kImcPI2+EiHe3LV/dTIT32A8dNKyhRQN+tm6ChxRdqAAyyld7SwAXLynrufdu7ttEmOWGKuMbC+DQXlpsxC25N768mkrLeJrsuTsUGmghWEtmgN4Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704304630; c=relaxed/simple; bh=RYINSizOvp/Jb4SJR5vMSqIEw5y6RkYyiDuwkmWl8xQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=FUk1AjLZRK9E5rSqgCc1CYi63PZ0kE15lx0/9XabQZohW9FwgdabdOfbx2JY6cfiPHxDraNwfH1wHoaEqj9eueF21k8ktPvYxcBVaBhZi9DtywtV+Np2l2lkCgvFKfYmh1Q9tISscdlg0nXf+TRxwF5D34xiztFnwmeSRZCdZmU= 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=FkKGfACINqQIBgoBTzXq48s5Rmp7ke2ezfGlr5Omwyg=; b=xnIHoi0sE3ayzA0y45HBoJBOfi P5aPFivNjKR+7gc940EXoXY4huQTKHIWjlphL6YDeYxgrFXdUFEk3VkcOxp4I6cPXgWDSsf5G+Q7z SBM1/m1PyVN0juIdIr0iypov6yUAwYCOVEuh8a92fMbfMBSOrdXKDdCUx/8gpn0oHeUBO98O+xSaO gBd0EOVl+XzUn/pNmCAwe854oj8ggdwu6YGvxYk9qVQk9d+QyK00jfN87zhlUV7PPnjkOCniCSYAk aCel27RJuGPBF4nEytiOzLNnmMiLW5M6rpD7EAzCfapd8hHA8nvvqBtugfHDskLf76Z61v8ZbRU/H 5g7wVjHw==; Received: from [95.42.20.142] (port=43848 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 1rL5U2-0009hZ-0p; Wed, 03 Jan 2024 19:57:04 +0200 From: Dimitar Dimitrov To: newlib@sourceware.org Cc: Dimitar Dimitrov Subject: [PATCH v2 1/2] libgloss: merge pru into top-level Makefile Date: Wed, 3 Jan 2024 19:56:54 +0200 Message-ID: <20240103175655.1394938-1-dimitar@dinux.eu> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 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.9 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 X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: newlib-bounces+patchwork=sourceware.org@sourceware.org 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. Signed-off-by: Dimitar Dimitrov --- Changes since v1: - Retained copyright in pru/Makefile.inc. - Addec crt0*.s to libobjs_a_SOURCES. - Rebased. libgloss/Makefile.am | 3 + libgloss/configure.ac | 7 +- libgloss/pru/Makefile.in | 145 -------------------------------------- libgloss/pru/Makefile.inc | 48 +++++++++++++ libgloss/pru/crt0-minrt.S | 59 ++++++++++++++++ libgloss/pru/crt0.S | 6 -- 6 files changed, 113 insertions(+), 155 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 a8a445b1d..6c8d551ab 100644 --- a/libgloss/Makefile.am +++ b/libgloss/Makefile.am @@ -99,6 +99,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 ec6dec0a0..b9240e1fd 100644 --- a/libgloss/configure.ac +++ b/libgloss/configure.ac @@ -235,8 +235,7 @@ case "${target}" in subdirs="$subdirs or1k" ;; pru-*-*) - AC_CONFIG_FILES([pru/Makefile]) - subdirs="$subdirs pru" + config_pru=true ;; nios2-*-*) config_nios2=true @@ -247,8 +246,8 @@ 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 i960 iq2000 libnosys lm32 moxie nios2 riscv - v850 wince xtensa + aarch64 arc arm bfin csky d30v i960 iq2000 libnosys lm32 moxie nios2 pru + riscv v850 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..7c119dc67 --- /dev/null +++ b/libgloss/pru/Makefile.inc @@ -0,0 +1,48 @@ +## SPDX-License-Identifier: BSD-2-Clause-FreeBSD +## +## Copyright 2018-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. + +multilibtool_DATA += \ + %D%/crt0.o \ + %D%/crt0-minrt.o + +pru_devicespecsdir = $(multilibtooldir)/device-specs +pru_devicespecs_DATA = %D%/device-specs/sim + +libobjs_a_SOURCES += \ + %D%/crt0.S \ + %D%/crt0-minrt.S + +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: