From patchwork Sun Jan 28 15:03:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Iain Sandoe X-Patchwork-Id: 193142 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:2087:b0:106:209c:c626 with SMTP id gs7csp85510dyb; Sun, 28 Jan 2024 07:04:57 -0800 (PST) X-Google-Smtp-Source: AGHT+IGpd/vMEFO7HX50iMBBn4GnYPfUi2wlY3m0gvu7XwDw6X/oifrwhnlyaOQ28GCrf58ZEOOD X-Received: by 2002:ac8:5805:0:b0:42a:751e:c2c2 with SMTP id g5-20020ac85805000000b0042a751ec2c2mr4380501qtg.40.1706454296996; Sun, 28 Jan 2024 07:04:56 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706454296; cv=pass; d=google.com; s=arc-20160816; b=DqsGBgkP/RVypI2OSO1bGUIEVU6pErynlhu76hqeoOt/UHV1Lt9U/PGp11cGmQS6dt 5UZuJJ9JqJet8xMaSV1GmllguL3BXXsGrK1h/efVp/STNIIrBhTlaYb2aPT8jExbWDPI Wsa99VqlylEUEquwkepRYbHvQz9i+m6u5ixIRlzxxBfOx0aGTKXqzFl6lxn0yRpVquB8 3CkzAUaltcPBay2uAXoSWJfCO+oAJKaHaYJf50XRFbZQZnCgrMp2ZsJ8IIPzX6zZ/RmC buI4brgNrxc/yW6yC4+Ai5KG1igJzOEE3WJpP5Na5RK71fqMN2wcSX1D4h5598T0i4NL PhkA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:reply-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:message-id:date:subject:cc:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=NgtXRz/PtzgaWtG59nWVJAwnj+NnRY/ysrhh5Xz87NE=; fh=HpGyPhETBvl4zejgufl7c2nTNpZufIxjdWMis6jurMQ=; b=Y//NQc0vSc8awPkogTsPAnEXgzohPLH86Igg2iCFoXnL4SGDl5dy+uINm6FoWou8Mt ATsr35XI5J613/9kF69TVgQ9VDGwRMOK3ESMv/DroBHjCQZTVkaBR90K6ZxZAIjocx+k 2L0CWbbUwcyQ5QDos38L0BaI52MXEv7UgehHRvUYDpc8F7KwoG9357kiVZ4Nk6NsK61/ EgImA3eF9goXiSovd7wYA0pDaItFxbJw6lxkFYt1Q0KE9z2MVrS0a+7J3W0eel48f9Bp ISpHixQOPlgd4sxScP4OhG6DnYDnmNQ3yKffPBRFKidGU4CuUzGmNOBZlUGI/l2EJVIW gJ6A== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=ltBIRfg1; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id 1-20020ac85741000000b0042a4e7b0f38si5651415qtx.519.2024.01.28.07.04.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jan 2024 07:04:56 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=ltBIRfg1; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AEDC43858438 for ; Sun, 28 Jan 2024 15:04:56 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by sourceware.org (Postfix) with ESMTPS id E6F9D3858402 for ; Sun, 28 Jan 2024 15:03:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E6F9D3858402 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E6F9D3858402 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::430 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706454214; cv=none; b=ba3V7ku8eLRnRm59tgFn+S0LEgzg0qfxyzt9abnVf0wuNOY0MjRUsj3RaD5z8lYk0P3xA7Oibcb/KkQVet0wD/Gjn1vP5owEzKhlJ13J1CJQBKxh22Fqwq/pxOQFz/19Tb7ADDVqk//xhNHvdgQzGURl+X0G2n6D6kcEDEPtMpg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706454214; c=relaxed/simple; bh=tqLOl4WDOHUdM8GgV9YzTr/1KYoRQo5Caz57oiC6mjY=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=WCvJfCQ5rmkOidhiP+opyzwJydzB1cKzhZKczlDtlHxHdMFiXaCoY7rOkcit944JIq1T/UGU02oAUpvHdYdRJJ4sJSKO9hhOM0BLi5Xj2JDovhiLMynVgRFkSkLxtpSRHKIW+6ZWKAIO39l/bieYVy2YB/D2e6reMjtX7zAmZK0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-339261a6ec2so1910292f8f.0 for ; Sun, 28 Jan 2024 07:03:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706454210; x=1707059010; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:reply-to:message-id:date :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=NgtXRz/PtzgaWtG59nWVJAwnj+NnRY/ysrhh5Xz87NE=; b=ltBIRfg1fjQom9JwRg/S/IVLzkhlSPrR+k8NSlRKSUXLf7s818R1mJCXQnHm7Iirlz 30Rk8Q4AnmS8y7A6E6c2jtcmEr/htYQI3Z9i7L6x3uHfSbjS/2Ahvspdg7AvzYB1IhBF FubOqEuoyIpMftofk4DHUvcIMtpwHMimeTgX3lB3uwqcRLX1JiYFQsuGoa9dROl8fDL4 6Hsj5SwmvrY2wbzA7JIQ7JWGOerjgHLDXYfNKIZ8JeGmFdXvsX2hUZfEuflXCiq+fHyF sc3NYJ5lK2gVNB5uqm8lauwLXxIqLCQPlMxwJSvPxnXnIaEH/Jt8mIuSOOwXL3xS7ACm O3QA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706454210; x=1707059010; h=content-transfer-encoding:mime-version:reply-to:message-id:date :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=NgtXRz/PtzgaWtG59nWVJAwnj+NnRY/ysrhh5Xz87NE=; b=jAVld1DFVsHaklekNHptZOedqIRBRAnw+/X3nmuZWegxNj7mN5DpSl/FufrGVbXfcn eIXc2BrOtWH2FEgbbr6jr9a2KRyYRp5TypxniYWfaB1O+7J3o2vhYQflmM9OGHZGx+CD psE7oiRoU1Lrpbnhjunq5cuo/IUyISwGE+AynglCzD42fR9G3FNEwGaRj3kIcuq2Hnab HARHnYj5wcrwq53KJbDBXvLv9axyAnHfHSVjXvmD7aN7wiRjFkEjV0v2Dnqrhyq2A90D 9DhFH8xQ7FntGHhsILJJCiqbXN6Eo+aT/WXj6+nt2RqvZBW25nSnGEZnMRXFSQjHXBNA futw== X-Gm-Message-State: AOJu0YwHHShi5qMwY5yhWXl8lsdfToKXCw6zzQdEQBDm7gaga7QHhG83 Z7LbNI2u0ELEA+KYeIPaaoNwqnlKahbdNascj7wQZBk7+JIAPEc+L+sMpMS4 X-Received: by 2002:a5d:690c:0:b0:33a:e9b5:b14d with SMTP id t12-20020a5d690c000000b0033ae9b5b14dmr938482wru.65.1706454210484; Sun, 28 Jan 2024 07:03:30 -0800 (PST) Received: from localhost.localdomain (host81-138-1-83.in-addr.btopenworld.com. [81.138.1.83]) by smtp.gmail.com with ESMTPSA id p4-20020a056000018400b00337d71bb3c0sm5780859wrx.46.2024.01.28.07.03.29 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 28 Jan 2024 07:03:30 -0800 (PST) From: Iain Sandoe X-Google-Original-From: Iain Sandoe To: gcc-patches@gcc.gnu.org Cc: ro@CeBiTec.Uni-Bielefeld.DE Subject: [PATCH] testsuite, Objective-C++: Update link flags [PR112863]. Date: Sun, 28 Jan 2024 15:03:29 +0000 Message-Id: <20240128150329.21209-1-iain@sandoe.co.uk> X-Mailer: git-send-email 2.39.2 (Apple Git-143) MIME-Version: 1.0 X-Spam-Status: No, score=-8.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: iain@sandoe.co.uk Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789347020576966068 X-GMAIL-MSGID: 1789347020576966068 Tested on i686, x86_64, aarch64 Darwin, x86_64, aarch64 Linux, OK for trunk? thanks, Iain --- 8< --- These regressions are caused by missing or duplicate runpaths which now fire linker warnings. We need to add options to locate libobjc (and on Darwin libobjc-gnu) along with libstdc++. Usually '-L' options are added to point to the relevant directories for the uninstalled libraries. In cases where libraries are available as both shared and convenience some additional checks are made. For some targets -static-xxxx options are handled by specs substitution and need a '-B' option rather than '-L'. For Darwin, when embedded runpaths are in use (the default for all versions after macOS 10.11), '-B' is also needed to provide the runpath. When '-B' is used, this results in a '-L' for each path that exists (so that appending a '-L' as well is a needless duplicate). There are also cases where tools warn for duplicates, leading to spurious fails. PR target/112863 gcc/testsuite/ChangeLog: * lib/obj-c++.exp: Decide on whether to present -B or -L to reference the paths to uninstalled libobjc/libobjc-gnu and libstdc++ and use that to generate the link flags. --- gcc/testsuite/lib/obj-c++.exp | 69 +++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/gcc/testsuite/lib/obj-c++.exp b/gcc/testsuite/lib/obj-c++.exp index 397b70cb96a..854dc264f9d 100644 --- a/gcc/testsuite/lib/obj-c++.exp +++ b/gcc/testsuite/lib/obj-c++.exp @@ -110,34 +110,43 @@ proc obj-c++_link_flags { paths } { set shlib_ext [get_shlib_extension] verbose "shared lib extension: $shlib_ext" + # We need to add options to locate libobjc/libobjc-gnu and libstdc++ + # Usually '-L' options are added to point to the relevant directories for + # the uninstalled libraries. + + # In cases where libraries are available as both shared and convenience + # some additional checks are made. + + # For some targets -static-xxxx options are handled by specs substitution + # and need a '-B' option rather than '-L'. For Darwin, when embedded + # runpaths are in use (the default for all versions after macOS 10.11), + # '-B' is also needed to provide the runpath. + # When '-B' is used, this results in a '-L' for each path that exists (so + # that appending a '-L' as well is a needless duplicate). There are also + # cases where tools warn for duplicates, leading to spurious fails. + # Therefore the objective of the code below is to add just one '-L' or + # '-B' for each of the libraries. + + set target_wants_B_option 0 + if { [istarget *-*-darwin9* ] || [istarget *-*-darwin\[12\]* ] } { + set target_wants_B_option 1 + } + if { $gccpath != "" } { - if [file exists "${gccpath}/lib/libstdc++.a"] { - append ld_library_path ":${gccpath}/lib" - } - if [file exists "${gccpath}/libg++/libg++.a"] { - append flags " -L${gccpath}/libg++ " - append ld_library_path ":${gccpath}/libg++" - } - if [file exists "${gccpath}/libstdc++/libstdc++.a"] { - append flags " -L${gccpath}/libstdc++ " - append ld_library_path ":${gccpath}/libstdc++" - } - if [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.a"] { - # Allow for %s spec substitutions - append flags " -B${gccpath}/libstdc++-v3/src/.libs " - append flags " -L${gccpath}/libstdc++-v3/src/.libs " - append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs" - } - # Look for libstdc++.${shlib_ext}. - if [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] { - # Allow for %s spec substitutions - append flags " -B${gccpath}/libstdc++-v3/src/.libs " - append flags " -L${gccpath}/libstdc++-v3/src/.libs " - append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs" + if { [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.a"] || + [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] } { + if { $target_wants_B_option } { + append flags "-B${gccpath}/libstdc++-v3/src/.libs " + } else { + append flags "-L${gccpath}/libstdc++-v3/src/.libs " + } + append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs" } + if [file exists "${gccpath}/libiberty/libiberty.a"] { append flags " -L${gccpath}/libiberty " } + if [file exists "${gccpath}/librx/librx.a"] { append flags " -L${gccpath}/librx " } @@ -159,9 +168,11 @@ proc obj-c++_link_flags { paths } { if { $libobjc_dir != "" } { set libobjc_dir [file dirname ${libobjc_dir}] - # Allow for %s spec substitutions - append flags " -B${libobjc_dir} " - append flags " -L${libobjc_dir} " + if { $target_wants_B_option } { + append flags "-B${libobjc_dir} " + } else { + append flags "-L${libobjc_dir} " + } append ld_library_path ":${libobjc_dir}" } append ld_library_path \ @@ -176,7 +187,11 @@ proc obj-c++_link_flags { paths } { } set libstdcpp [lookfor_file ${tool_root_dir} libstdc++]; if { $libstdcpp != "" } { - append flags "-L${libstdcpp} "; + if { $target_wants_B_option } { + append flags "-B${libstdcpp} " + } else { + append flags "-L${libstdcpp} " + } append ld_library_path ":${libstdcpp}" } set libiberty [lookfor_file ${tool_root_dir} libiberty];