aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2025-07-25 09:49:13 +0200
committerRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>2025-07-25 09:49:13 +0200
commit96ad2fd3c0c0414110fe58ed4ee511f49768fa3d (patch)
tree6eb3f4e6341855931ea0b04e022e350fb9987645
parent626987854890e7a0b7479e5b33f1c24459b219cd (diff)
downloadbinutils-96ad2fd3c0c0414110fe58ed4ee511f49768fa3d.zip
binutils-96ad2fd3c0c0414110fe58ed4ee511f49768fa3d.tar.gz
binutils-96ad2fd3c0c0414110fe58ed4ee511f49768fa3d.tar.bz2
ld: Force SHELL=/bin/bash in ld for Solaris [PR32580]
As described in PR ld/32580, when using SHELL=/bin/sh or /bin/ksh on Solaris, the generated linker scripts get corrupted. So far, the only workaround is to enforce /bin/bash instead. This is a major nuisance for developers and users alike, so this patch automates this by overriding SHELL in ld/configure.ac. Tested on amd64-pc-solaris2.11 in three configurations: * CONFIG_SHELL unset * CONFIG_SHELL=/bin/ksh * CONFIG_SHELL='/bin/bash --norc' In the first two cases, SHELL was set to /bin/bash as desired, while in the third it was left unchanged. 2025-07-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> ld: PR ld/32580 * configure.ac <*-*-solaris2*>: Enforce SHELL=/bin/bash. * configure: Regenerate.
-rw-r--r--ld/ChangeLog6
-rwxr-xr-xld/configure17
-rw-r--r--ld/configure.ac13
3 files changed, 34 insertions, 2 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 52bbeda..96960ab 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2025-07-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR ld/32580
+ * configure.ac <*-*-solaris2*>: Enforce SHELL=/bin/bash.
+ * configure: Regenerate.
+
2025-07-13 Nick Clifton <nickc@redhat.com>
* 2.45 Branch point.
diff --git a/ld/configure b/ld/configure
index 015666d..124b441 100755
--- a/ld/configure
+++ b/ld/configure
@@ -3362,6 +3362,19 @@ fi
+case $target in
+ *-*-solaris2*)
+ case "$SHELL" in
+ *bash*)
+ ;;
+ *)
+ # PR 32580: Force use of bash to avoid corrupt linker scripts.
+ SHELL=/bin/bash
+ ;;
+ esac
+ ;;
+esac
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -11501,7 +11514,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11504 "configure"
+#line 11517 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11607,7 +11620,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11610 "configure"
+#line 11623 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/ld/configure.ac b/ld/configure.ac
index af065fe..e306c1d 100644
--- a/ld/configure.ac
+++ b/ld/configure.ac
@@ -28,6 +28,19 @@ AM_INIT_AUTOMAKE
AM_SILENT_RULES([yes])
AM_MAINTAINER_MODE
+case $target in
+ *-*-solaris2*)
+ case "$SHELL" in
+ *bash*)
+ ;;
+ *)
+ # PR 32580: Force use of bash to avoid corrupt linker scripts.
+ SHELL=/bin/bash
+ ;;
+ esac
+ ;;
+esac
+
AC_PROG_CC
AC_PROG_CXX
AC_PROG_GREP