From patchwork Sun Apr 24 08:53:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yang Yujie X-Patchwork-Id: 53147 X-Patchwork-Delegate: dmalcolm@redhat.com 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 56AD03857C48 for ; Sun, 24 Apr 2022 08:53:37 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id DA10F3858D33 for ; Sun, 24 Apr 2022 08:53:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DA10F3858D33 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from [10.20.4.39] (unknown [192.168.200.1]) by mail.loongson.cn (Coremail) with SMTP id AQAAf9Dx7xP7D2ViR2kvAA--.32845S3; Sun, 24 Apr 2022 16:53:15 +0800 (CST) From: Yang Yujie Subject: [PATCH] libgccjit: allow common objects in $(EXTRA_GCC_OBJS) and $(EXTRA_OBJS) To: gcc-patches@gcc.gnu.org References: Message-ID: <74ff07d7-1fe0-1e36-aeba-22739b9ff389@loongson.cn> Date: Sun, 24 Apr 2022 16:53:15 +0800 User-Agent: Mozilla/5.0 (X11; Linux mips64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CM-TRANSID: AQAAf9Dx7xP7D2ViR2kvAA--.32845S3 X-Coremail-Antispam: 1UD129KBjvdXoWrtw1UXFWfAFyDKF4UKw4rKrg_yoWxtwb_ZF y7t3W5ur43ua1Yg3W2yry2yrW3uryrAw15Z34rXw4Igry8JF43AF4qyasxuryrtFsakrn2 g3W5Xwn3Zr1agjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT 9fnUUIcSsGvfJ3UbIYCTnIWIevJa73UjIFyTuYvj4RJUUUUUUUU X-CM-SenderInfo: 51dqw5pxmlvqxorr0wxvrqhubq/ X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: , Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hello, This patch fixes libgccjit link failure on loongarch* targets, and could probably be useful for future ports. Currently libgccjit is linked with objects from $(EXTRA_GCC_OBJS) and libbackend.a, which is in turn linked with $(EXTRA_OBJS) files. Thus, common object files that's shared between those two $(EXTRA_*) lists would cause the linker to abort for "redefined symbol"s. For now, this patch doesn't affect any target other than LoongArch, but might be useful for future ports that want to share more object files between the compiler proper and the GCC driver than ${cpu_arch}-common.o. Regression tested on loongarch64-linux-gnuf64 an x86_64-pc-linux-gnu. Ok for trunk? Yujie From 5d9121fa052c556fd854596af35da8e5649e8f08 Mon Sep 17 00:00:00 2001 From: Yang Yujie Date: Fri, 22 Apr 2022 14:36:37 +0800 Subject: [PATCH] libgccjit: allow common objects in $(EXTRA_GCC_OBJS) and $(EXTRA_OBJS) The final link of libgccjit involves libbackend.a and $(EXTRA_GCC_OBJS) as input, where libbackend.a contains object files from the $(EXTRA_OBJS) list. This assumes that no target-specific object file should be shared between those two lists (or the linker would complain about redefined symbols and abort). With this patch, libgccjit can built properly for LoongArch and other architectures that shares target-specific objects between gcc and cc1 etc. * gcc/jit/ChangeLog: * Make-lang.in: only link objects from $(EXTRA_GCC_OBJS) that's not in $(EXTRA_OBJS) into libgccjit. --- gcc/jit/Make-lang.in | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gcc/jit/Make-lang.in b/gcc/jit/Make-lang.in index 6e10abfd0ac..248ec45b729 100644 --- a/gcc/jit/Make-lang.in +++ b/gcc/jit/Make-lang.in @@ -157,18 +157,23 @@ LIBGCCJIT_EXTRA_OPTS = $(LIBGCCJIT_VERSION_SCRIPT_OPTION) \ endif endif +# Only link objects from $(EXTRA_GCC_OBJS) that's not already +# included in libbackend.a ($(EXTRA_OBJS)). +EXTRA_GCC_OBJS_EXCLUSIVE = $(foreach _obj1, $(EXTRA_GCC_OBJS), \ + $(if $(filter $(_obj1), $(EXTRA_OBJS)),, $(_obj1))) + # We avoid using $(BACKEND) from Makefile.in in order to avoid pulling # in main.o $(LIBGCCJIT_FILENAME): $(jit_OBJS) \ libbackend.a libcommon-target.a libcommon.a \ $(CPPLIB) $(LIBDECNUMBER) \ $(LIBDEPS) $(srcdir)/jit/libgccjit.map \ - $(EXTRA_GCC_OBJS) $(jit.prev) + $(EXTRA_GCC_OBJS_EXCLUSIVE) $(jit.prev) @$(call LINK_PROGRESS,$(INDEX.jit),start) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ -shared \ $(jit_OBJS) libbackend.a libcommon-target.a libcommon.a \ $(CPPLIB) $(LIBDECNUMBER) $(EXTRA_GCC_LIBS) $(LIBS) $(BACKENDLIBS) \ - $(EXTRA_GCC_OBJS) \ + $(EXTRA_GCC_OBJS_EXCLUSIVE) \ $(LIBGCCJIT_EXTRA_OPTS) @$(call LINK_PROGRESS,$(INDEX.jit),end) -- 2.31.1