{"id":2231900,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2231900/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/patch/ydd5x5742ml.fsf_-_@CeBiTec.Uni-Bielefeld.DE/","project":{"id":17,"url":"http://patchwork.ozlabs.org/api/1.1/projects/17/?format=json","name":"GNU Compiler Collection","link_name":"gcc","list_id":"gcc-patches.gcc.gnu.org","list_email":"gcc-patches@gcc.gnu.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<ydd5x5742ml.fsf_-_@CeBiTec.Uni-Bielefeld.DE>","date":"2026-05-01T14:37:38","name":"[v2,4/6] Remove HAVE_GNU_LD","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"897f59f9d683ade9a8fb260b13f0fe20d16de95a","submitter":{"id":4362,"url":"http://patchwork.ozlabs.org/api/1.1/people/4362/?format=json","name":"Rainer Orth","email":"ro@CeBiTec.Uni-Bielefeld.DE"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/gcc/patch/ydd5x5742ml.fsf_-_@CeBiTec.Uni-Bielefeld.DE/mbox/","series":[{"id":502464,"url":"http://patchwork.ozlabs.org/api/1.1/series/502464/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/list/?series=502464","date":"2026-05-01T14:22:24","name":null,"version":2,"mbox":"http://patchwork.ozlabs.org/series/502464/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2231900/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2231900/checks/","tags":{},"headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=cebitec.uni-bielefeld.de header.i=@cebitec.uni-bielefeld.de\n header.a=rsa-sha256 header.s=20200306 header.b=TaB3D4N4;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=cebitec.uni-bielefeld.de header.i=@cebitec.uni-bielefeld.de\n header.a=rsa-sha256 header.s=20200306 header.b=TaB3D4N4","sourceware.org; dmarc=none (p=none dis=none)\n header.from=CeBiTec.Uni-Bielefeld.DE","sourceware.org;\n spf=pass smtp.mailfrom=cebitec.uni-bielefeld.de","server2.sourceware.org;\n arc=none smtp.remote-ip=129.70.160.84"],"Received":["from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g6YYd1fZqz1y04\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 02 May 2026 00:38:13 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 3C74A43B5517\n\tfor <incoming@patchwork.ozlabs.org>; Fri,  1 May 2026 14:38:11 +0000 (GMT)","from smtp.CeBiTec.Uni-Bielefeld.DE (smtp.CeBiTec.Uni-Bielefeld.DE\n [129.70.160.84])\n by sourceware.org (Postfix) with ESMTPS id 25A3943B5509;\n Fri,  1 May 2026 14:37:41 +0000 (GMT)","from localhost (localhost.CeBiTec.Uni-Bielefeld.DE [127.0.0.1])\n by smtp.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTP id 40114C791D;\n Fri,  1 May 2026 16:37:40 +0200 (CEST)","from smtp.CeBiTec.Uni-Bielefeld.DE ([127.0.0.1])\n by localhost (smtp.cebitec.uni-bielefeld.de [127.0.0.1]) (amavisd-new,\n port 10026)\n with ESMTP id CFkEXJHbu_Ha; Fri,  1 May 2026 16:37:39 +0200 (CEST)","from manam.CeBiTec.Uni-Bielefeld.DE (p508551ea.dip0.t-ipconnect.de\n [80.133.81.234]) (Authenticated sender: ro)\n by smtp.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTPSA id 5E6A5D830B;\n Fri,  1 May 2026 16:37:39 +0200 (CEST)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 3C74A43B5517","OpenDKIM Filter v2.11.0 sourceware.org 25A3943B5509"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 25A3943B5509","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 25A3943B5509","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777646261; cv=none;\n b=kdOy/l8EKbdgR1YptSu1i99x5W+Q4Zc5cqNUqYLCadHS/d1R9bS8X/Zt3u/iOCXrwgnPaDPHTC/ko+hyOX7B5ncX8WsiXQ2jj7Ty0J8XM6BLtL5EbYm3N9UQR9vXEymvxLKu97RZZcAZHwT2Y0P/81UMCVtlvn3FT4kM5FRvSws=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777646261; c=relaxed/simple;\n bh=cWFwGDXI9+SCbGtmiMm1m6GVHmc+rzmyD7BsajbtcDI=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=SQHl3WJtwAXZlHwjydq/hTozo0RAB4989ef5PnmVHIZEEzaREnCMCZSEmstCRs926EaR08JbRdiSSrPOb0sV4PmXPerEK9JzX5cTur3Fqk6LI9NQ4M8xLW0xOBsICCDU+nh78bjS/m3Xzvh0OzYEtExneIG1m+OXI3eCjzT4xiU=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=\n cebitec.uni-bielefeld.de; h=content-type:content-type\n :mime-version:user-agent:message-id:date:date:references\n :in-reply-to:subject:subject:from:from:received:received; s=\n 20200306; t=1777646259; bh=cWFwGDXI9+SCbGtmiMm1m6GVHmc+rzmyD7Bsa\n jbtcDI=; b=TaB3D4N463v1afa44EtpBjfLBXrc5CJG1SO3TfnJs0t0gSbYshus4\n ZGYaMLcpsl9RZiZ3AH7/UVfFphRjmuTyQuaWAJ13kOzmhpXq88a/i/sjiQOmv3c8\n qZ430L57s81zH2ymGgAtyOcYpw1yq17QeMlFjVVMEc7ykNHCRphW7FFrqtvlcBI1\n splZrCPkazGYmslqP00BqDINRf+CkO8XRfX2KaJFb4WWanShDdVUgv4DtAIzd5Zf\n xrQOB9jz3AycKNSmGiJR22Ut4ZwUGg5X95+HlCO2mAggrSI+NscTpm7x55CP2WDi\n O0lB9zRkqCecuhWmyEHyYOKFfks0A8RmQ==","X-Virus-Scanned":"amavisd-new at cebitec.uni-bielefeld.de","From":"Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>","To":"Eric Botcazou <botcazou@adacore.com>","Cc":"gcc-patches@gcc.gnu.org,  Alexandre Oliva <aoliva@gcc.gnu.org>,\n Douglas Rupp <douglas.b.rupp@gmail.com>,\n Tristan Gingold <tgingold@free.fr>, Richard Biener <rguenther@suse.de>","Subject":"[PATCH v2 4/6] Remove HAVE_GNU_LD","In-Reply-To":"<5723075.Lt9SDvczpP@fomalhaut> (Eric Botcazou's message of \"Thu,\n 30 Apr 2026 21:45:29 +0200\")","References":"<yddqznx9846.fsf@CeBiTec.Uni-Bielefeld.DE>\n <12884745.O9o76ZdvQC@arcturus>\n <ydd7bpp92r1.fsf@CeBiTec.Uni-Bielefeld.DE>\n <5723075.Lt9SDvczpP@fomalhaut>","Date":"Fri, 01 May 2026 16:37:38 +0200","Message-ID":"<ydd5x5742ml.fsf_-_@CeBiTec.Uni-Bielefeld.DE>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","Content-Type":"multipart/mixed; boundary=\"=-=-=\"","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"},"content":"Hi Eric,\n\n>> Apart from Solaris, the only cases that would be affected are VMS\n>> (highly unlikely to change at this point), __svr4__ && __i386__ (the\n>> original SysVr4/x86, I believe, if this still exists/is supported).\n>\n> OK, then let's further clean things up by removing the VMS and SYSVr4/x86 \n> parts.  And let's add \"other\" between \"all\" and \"systems\" in the sentence.\n\ndone in the attached v2 patch.\n\nThis leaves this part:\n\n\t* collect2.cc: Check HAVE_LD_AT_FILE instead of HAVE_GNU_LD.\n\nalthough this borders on obvious.\n\nSpeaking of VMS: two patches in this series\n\n\tbuild: Remove $gas\n        https://gcc.gnu.org/pipermail/gcc-patches/2026-April/715163.html\nand\n\tRemove HAVE_GNU_LD\n        https://gcc.gnu.org/pipermail/gcc-patches/2026-April/715165.html\n\naffect either the ia64-vms or alpha-vms targets.  I've Cc'ed the listed\nmaintainers, but wonder if they are still active.\n\nCan you shed some light at the status of VMS support in GCC?\n\n\tRainer","diff":"# HG changeset patch\n# Parent  c397271d4262e7700ffb301e9cca725b7f8fa95e\nRemove HAVE_GNU_LD\n\ndiff --git a/gcc/ada/link.c b/gcc/ada/link.c\n--- a/gcc/ada/link.c\n+++ b/gcc/ada/link.c\n@@ -160,9 +160,9 @@ const char *__gnat_object_library_extens\n unsigned char __gnat_separate_run_path_options = 0;\n const char *__gnat_default_libgcc_subdir = \"lib\";\n \n-#elif (HAVE_GNU_LD)\n-/*  These are the settings for all systems that use gnu ld. GNU style response\n-    file is supported, the shared library default is STATIC.  */\n+#elif (HAVE_LD_AT_FILE)\n+/*  These are the settings for all other systems that support GNU style\n+    response files.  The shared library default is STATIC.  */\n \n const char *__gnat_object_file_option = \"-Wl,@\";\n const char *__gnat_run_path_option = \"\";\n@@ -174,17 +174,6 @@ const char *__gnat_object_library_extens\n unsigned char __gnat_separate_run_path_options = 0;\n const char *__gnat_default_libgcc_subdir = \"lib\";\n \n-#elif defined (VMS)\n-const char *__gnat_object_file_option = \"\";\n-const char *__gnat_run_path_option = \"\";\n-char __gnat_shared_libgnat_default = STATIC;\n-char __gnat_shared_libgcc_default = STATIC;\n-int __gnat_link_max = 2147483647;\n-unsigned char __gnat_objlist_file_supported = 0;\n-const char *__gnat_object_library_extension = \".olb\";\n-unsigned char __gnat_separate_run_path_options = 0;\n-const char *__gnat_default_libgcc_subdir = \"lib\";\n-\n #elif defined (__sun__)\n const char *__gnat_object_file_option = \"\";\n const char *__gnat_run_path_option = \"-Wl,-R\";\n@@ -202,17 +191,6 @@ const char *__gnat_default_libgcc_subdir\n const char *__gnat_default_libgcc_subdir = \"lib\";\n #endif\n \n-#elif defined (__svr4__) && defined (__i386__)\n-const char *__gnat_object_file_option = \"\";\n-const char *__gnat_run_path_option = \"\";\n-char __gnat_shared_libgnat_default = STATIC;\n-char __gnat_shared_libgcc_default = STATIC;\n-int __gnat_link_max = 2147483647;\n-unsigned char __gnat_objlist_file_supported = 0;\n-const char *__gnat_object_library_extension = \".a\";\n-unsigned char __gnat_separate_run_path_options = 0;\n-const char *__gnat_default_libgcc_subdir = \"lib\";\n-\n #else\n \n /*  These are the default settings for all other systems. No response file\ndiff --git a/gcc/collect2.cc b/gcc/collect2.cc\n--- a/gcc/collect2.cc\n+++ b/gcc/collect2.cc\n@@ -718,7 +718,7 @@ maybe_run_lto_and_relink (char **lto_ld_\n \n       /* Run the linker again, this time replacing the object files\n          optimized by the LTO with the temporary file generated by the LTO.  */\n-      fork_execute (\"ld\", out_lto_ld_argv, HAVE_GNU_LD && at_file_supplied,\n+      fork_execute (\"ld\", out_lto_ld_argv, HAVE_LD_AT_FILE && at_file_supplied,\n \t\t    \"ld_args\");\n       /* We assume that temp files were created, and therefore we need to take\n          that into account (maybe run dsymutil).  */\n@@ -731,7 +731,7 @@ maybe_run_lto_and_relink (char **lto_ld_\n     {\n       /* Our caller is relying on us to do the link\n          even though there is no LTO back end work to be done.  */\n-      fork_execute (\"ld\", lto_ld_argv, HAVE_GNU_LD && at_file_supplied,\n+      fork_execute (\"ld\", lto_ld_argv, HAVE_LD_AT_FILE && at_file_supplied,\n \t\t    \"ld_args\");\n       /* No LTO objects were found, so no new temp file.  */\n       post_ld_pass (/*temp_file*/false);\n@@ -749,7 +749,7 @@ do_link (char **ld_argv, const char *ats\n   const char *prog = \"ld\";\n   pex = collect_execute (prog, ld_argv, NULL, NULL,\n \t\t\t PEX_LAST | PEX_SEARCH,\n-\t\t\t HAVE_GNU_LD && at_file_supplied, atsuffix);\n+\t\t\t HAVE_LD_AT_FILE && at_file_supplied, atsuffix);\n   int ret = collect_wait (prog, pex);\n   if (ret)\n     {\n@@ -1809,7 +1809,8 @@ main (int argc, char **argv)\n     maybe_run_lto_and_relink (ld2_argv, object_lst, object, true);\n   else\n     {\n-      fork_execute (\"ld\", ld2_argv, HAVE_GNU_LD && at_file_supplied, \"ld_args\");\n+      fork_execute (\"ld\", ld2_argv, HAVE_LD_AT_FILE && at_file_supplied,\n+\t\t    \"ld_args\");\n       post_ld_pass (/*temp_file*/false);\n     }\n \ndiff --git a/gcc/config.in b/gcc/config.in\n--- a/gcc/config.in\n+++ b/gcc/config.in\n@@ -1616,12 +1616,6 @@\n #endif\n \n \n-/* Define to 1 if using GNU ld. */\n-#ifndef USED_FOR_TARGET\n-#undef HAVE_GNU_LD\n-#endif\n-\n-\n /* Define if the gold linker supports split stack and is available as a\n    non-default */\n #ifndef USED_FOR_TARGET\n@@ -1703,6 +1697,12 @@\n #endif\n \n \n+/* Define if your linker supports GNU style response files. */\n+#ifndef USED_FOR_TARGET\n+#undef HAVE_LD_AT_FILE\n+#endif\n+\n+\n /* Define if your linker supports emulation avrxmega2_flmap. */\n #ifndef USED_FOR_TARGET\n #undef HAVE_LD_AVR_AVRXMEGA2_FLMAP\ndiff --git a/gcc/configure b/gcc/configure\n--- a/gcc/configure\n+++ b/gcc/configure\n@@ -13100,13 +13100,6 @@ $as_echo \"#define USE_LONG_LONG_FOR_WIDE\n \n fi\n \n-gnu_ld_bool=`if test x\"$gnu_ld\" = x\"yes\"; then echo 1; else echo 0; fi`\n-\n-cat >>confdefs.h <<_ACEOF\n-#define HAVE_GNU_LD $gnu_ld_bool\n-_ACEOF\n-\n-\n count=a\n for f in $host_xm_file; do\n \tcount=${count}x\n@@ -21949,7 +21942,7 @@ else\n   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n   lt_status=$lt_dlunknown\n   cat > conftest.$ac_ext <<_LT_EOF\n-#line 21952 \"configure\"\n+#line 21945 \"configure\"\n #include \"confdefs.h\"\n \n #if HAVE_DLFCN_H\n@@ -22055,7 +22048,7 @@ else\n   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n   lt_status=$lt_dlunknown\n   cat > conftest.$ac_ext <<_LT_EOF\n-#line 22058 \"configure\"\n+#line 22051 \"configure\"\n #include \"confdefs.h\"\n \n #if HAVE_DLFCN_H\n@@ -26782,6 +26775,28 @@ $as_echo \"#define HAVE_GAS_HIDDEN 1\" >>c\n \n fi\n \n+{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking linker supports GNU style respones files\" >&5\n+$as_echo_n \"checking linker supports GNU style respones files... \" >&6; }\n+gcc_cv_ld_at_file=no\n+if test $in_tree_ld = yes ; then\n+  gcc_cv_ld_at_file=yes\n+elif test x\"$gcc_cv_as\" != x -a x\"$gcc_cv_ld\" != x; then\n+  echo '.byte 0' > conftest.s\n+  echo conftest.o > conftest.at\n+  if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \\\n+     && $gcc_cv_ld -r -o conftest2.o @conftest.at > /dev/null 2>&1; then\n+    gcc_cv_ld_at_file=yes\n+  fi\n+  rm -f conftest.* conftest2.*\n+fi\n+\n+cat >>confdefs.h <<_ACEOF\n+#define HAVE_LD_AT_FILE `if test $gcc_cv_ld_at_file = yes; then echo 1; else echo 0; fi`\n+_ACEOF\n+\n+{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_ro_rw_mix\" >&5\n+$as_echo \"$gcc_cv_ld_ro_rw_mix\" >&6; }\n+\n { $as_echo \"$as_me:${as_lineno-$LINENO}: checking linker read-only and read-write section mixing\" >&5\n $as_echo_n \"checking linker read-only and read-write section mixing... \" >&6; }\n gcc_cv_ld_ro_rw_mix=unknown\ndiff --git a/gcc/configure.ac b/gcc/configure.ac\n--- a/gcc/configure.ac\n+++ b/gcc/configure.ac\n@@ -2020,9 +2020,6 @@ if test x$use_long_long_for_widest_fast_\n efficiently supported by the host hardware.])\n fi\n \n-gnu_ld_bool=`if test x\"$gnu_ld\" = x\"yes\"; then echo 1; else echo 0; fi`\n-AC_DEFINE_UNQUOTED(HAVE_GNU_LD, $gnu_ld_bool, [Define to 1 if using GNU ld.])\n-\n count=a\n for f in $host_xm_file; do\n \tcount=${count}x\n@@ -3379,6 +3376,24 @@ if test $gcc_cv_as_hidden = yes && test \n   [Define if your assembler and linker support .hidden.])\n fi\n \n+AC_MSG_CHECKING(linker supports GNU style respones files)\n+gcc_cv_ld_at_file=no\n+if test $in_tree_ld = yes ; then\n+  gcc_cv_ld_at_file=yes\n+elif test x\"$gcc_cv_as\" != x -a x\"$gcc_cv_ld\" != x; then\n+  echo '.byte 0' > conftest.s\n+  echo conftest.o > conftest.at\n+  if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1 \\\n+     && $gcc_cv_ld -r -o conftest2.o @conftest.at > /dev/null 2>&1; then\n+    gcc_cv_ld_at_file=yes\n+  fi\n+  rm -f conftest.* conftest2.*\n+fi\n+AC_DEFINE_UNQUOTED(HAVE_LD_AT_FILE,\n+  [`if test $gcc_cv_ld_at_file = yes; then echo 1; else echo 0; fi`],\n+  [Define if your linker supports GNU style response files.])\n+AC_MSG_RESULT($gcc_cv_ld_ro_rw_mix)\n+\n AC_MSG_CHECKING(linker read-only and read-write section mixing)\n gcc_cv_ld_ro_rw_mix=unknown\n if test $in_tree_ld = yes ; then\ndiff --git a/gcc/testsuite/gcc.misc-tests/outputs.exp b/gcc/testsuite/gcc.misc-tests/outputs.exp\n--- a/gcc/testsuite/gcc.misc-tests/outputs.exp\n+++ b/gcc/testsuite/gcc.misc-tests/outputs.exp\n@@ -50,15 +50,8 @@ if !$skip_lto {\n     set ltop [check_linker_plugin_available]\n }\n \n-# Check for GNU LD.  Some files like .ld1_args depend on this.  This\n-# should really be testing whether HAVE_GNU_LD was set by configure.\n-# If we find GNU ld here, but the compiler wasn't configured\n-# --with-gnu-ld or with DEFAULT_LINKER pointing at GNU ld, on a target\n-# that doesn't set gnu_ld=yes unconditionally, configure and thus\n-# collect2 will conservatively assume there's no support for @file in\n-# the linker, but our atfile tests will expect ld1_args files to be\n-# created, and thus fail.  Configuring the compiler --with-gnu-ld\n-# fixes this.\n+# Check for GNU ld.  Some files like .ld1_args depend on this.  This\n+# should really be testing whether the linker supports GNU style response files.\n set gld [check_effective_target_gld]\n \n # Prepare additional options to be used for linking.\n","prefixes":["v2","4/6"]}