From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from rock.gnat.com (rock.gnat.com [IPv6:2620:20:4000:0:a9e:1ff:fe9b:1d1]) by sourceware.org (Postfix) with ESMTP id 38160385780A for ; Tue, 5 Jan 2021 07:51:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 38160385780A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oliva@adacore.com Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 1318B1174F7; Tue, 5 Jan 2021 02:51:16 -0500 (EST) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id lIsvSyHk-loP; Tue, 5 Jan 2021 02:51:16 -0500 (EST) Received: from free.home (tron.gnat.com [IPv6:2620:20:4000:0:46a8:42ff:fe0e:e294]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by rock.gnat.com (Postfix) with ESMTPS id C89C91166E5; Tue, 5 Jan 2021 02:51:15 -0500 (EST) Received: from livre (livre.home [172.31.160.2]) by free.home (8.15.2/8.15.2) with ESMTPS id 1057p9Yp407269 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 5 Jan 2021 04:51:09 -0300 From: Alexandre Oliva To: hainque@adacore.com Cc: gcc-patches@gcc.gnu.org Subject: robustify vxworks glimits.h overriding Organization: Free thinker, does not speak for AdaCore Errors-To: aoliva@lxoliva.fsfla.org Date: Tue, 05 Jan 2021 04:51:09 -0300 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Scanned-By: MIMEDefang 2.84 X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Jan 2021 07:51:17 -0000 The glimits.h overriding used in gcc/config/t-vxworks was fragile: the intermediate file would already be there in a rebuild, and so the adjustments would not be made, so the generated limits.h would miss them, causing limits-width-[12] tests to fail on that target. While changing it, I also replaced the modern $(cmd) shell syntax with the more portable `cmd` construct. Regstrapped on x86_64-linux-gnu, also tested on x-arm-wrs-vxworks7r2. I'm checking it in unless there are objections in the next 24 hours. for gcc/ChangeLog * Makefile.in (T_GLIMITS_H): New. (stmp-int-hdrs): Depend on it, use it. * config/t-vxworks (T_GLIMITS_H): Override it. (vxw-glimits.h): New. --- gcc/Makefile.in | 9 ++++++--- gcc/config/t-vxworks | 33 ++++++++++----------------------- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 6847022f1082e..310b556c3fe38 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -449,6 +449,9 @@ USER_H = $(srcdir)/ginclude/float.h \ USER_H_INC_NEXT_PRE = @user_headers_inc_next_pre@ USER_H_INC_NEXT_POST = @user_headers_inc_next_post@ +# Enable target overriding of this fragment, as in config/t-vxworks. +T_GLIMITS_H = $(srcdir)/glimits.h + # The GCC to use for compiling crt*.o. # Usually the one we just built. # Don't use this as a dependency--use $(GCC_PASSES). @@ -3075,7 +3078,7 @@ gcov-tool$(exeext): $(GCOV_TOOL_OBJS) $(LIBDEPS) # be rebuilt. # Build the include directories. -stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) fixinc_list +stmp-int-hdrs: $(STMP_FIXINC) $(T_GLIMITS_H) $(USER_H) fixinc_list # Copy in the headers provided with gcc. # # The sed command gets just the last file name component; @@ -3129,9 +3132,9 @@ stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) fixinc_list multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \ fix_dir=include-fixed$${multi_dir}; \ if $(LIMITS_H_TEST) ; then \ - cat $(srcdir)/limitx.h $(srcdir)/glimits.h $(srcdir)/limity.h > tmp-xlimits.h; \ + cat $(srcdir)/limitx.h $(T_GLIMITS_H) $(srcdir)/limity.h > tmp-xlimits.h; \ else \ - cat $(srcdir)/glimits.h > tmp-xlimits.h; \ + cat $(T_GLIMITS_H) > tmp-xlimits.h; \ fi; \ $(mkinstalldirs) $${fix_dir}; \ chmod a+rx $${fix_dir} || true; \ diff --git a/gcc/config/t-vxworks b/gcc/config/t-vxworks index 221f53ce3112a..e60fd31bf0943 100644 --- a/gcc/config/t-vxworks +++ b/gcc/config/t-vxworks @@ -43,29 +43,16 @@ $(INSTALL_HEADERS_DIR): install-stdint.h LIMITS_H_TEST = true STMP_FIXINC = stmp-fixinc -# VxWorks system environments have been GCC based for a long time and we need -# to make sure that our files and the system ones use distinct macro names to -# protect against recursive inclusions. We achieve this by temporarily -# substituting the headers used by stmp-int-headers with alternative versions -# where we add some version indication in the inclusion-protection macro +# VxWorks system environments have been GCC based for a long time and +# we need to make sure that our files and the system ones use distinct +# macro names to protect against recursive inclusions. We achieve +# this by modifying the GLIMITS_H fragment that goes into limits.h +# with some version indication in the inclusion-protection macro # names. -# Before the standard stmp-int-headers operations take place, arrange to -# copy the current version of the relevant header files locally, generate -# the alternate version and replace the original version with ours: +T_GLIMITS_H = vxw-glimits.h -stmp-int-hdrs: subst-glimits.h - -subst-%.h: - cp -p $(srcdir)/$*.h orig-$*.h - ID=$$(echo $(BASEVER_c) | sed -e 's/\./_/g'); \ - sed -e "s/_LIMITS_H__/_LIMITS_H__$${ID}_/" < $(srcdir)/$*.h > $@ - cp $@ $(srcdir)/$*.h - -# Then arrange to restore the original versions after the standard -# operations have taken place: - -INSTALL_HEADERS += restore-glimits.h - -restore-glimits.h: stmp-int-hdrs - cp -p orig-glimits.h $(srcdir)/glimits.h +vxw-glimits.h: $(srcdir)/glimits.h + ID=`echo $(BASEVER_c) | sed -e 's/\./_/g'` && \ + sed -e "s/_LIMITS_H__/_LIMITS_H__$${ID}_/" < $(srcdir)/glimits.h > $@T + mv $@T $@ -- Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ Free Software Activist GNU Toolchain Engineer Vim, Vi, Voltei pro Emacs -- GNUlius Caesar