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: 1891910 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=ltBIRfg1; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TNF8Q1kfgz23gP for ; Mon, 29 Jan 2024 02:04:38 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2E58D3858281 for ; Sun, 28 Jan 2024 15:04:36 +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-Google-Smtp-Source: AGHT+IGXUzFxTa1PyTQ19p6ajvInhf4RmWOMNSkkbcIZLqg1c66Z5qKHB128Euj/oJwV3bdP8FHuiw== 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+incoming=patchwork.ozlabs.org@gcc.gnu.org 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];