git: 3b2cf9381ef8 - main - amd64: do not pass -z rodynamic to ld.bfd when building vdso

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Fri, 18 Oct 2024 18:49:10 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=3b2cf9381ef86847603c3c94811f638660c417ae

commit 3b2cf9381ef86847603c3c94811f638660c417ae
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2024-10-18 14:09:26 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2024-10-18 18:48:56 +0000

    amd64: do not pass -z rodynamic to ld.bfd when building vdso
    
    Apparently newer versions of binutils complain instead of silently
    ignoring the unknown -z option.
    
    Reported by:    bz
    Reviewed by:    emaste
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D47176
---
 sys/tools/amd64_ia32_vdso.sh | 7 ++++++-
 sys/tools/amd64_vdso.sh      | 9 +++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/sys/tools/amd64_ia32_vdso.sh b/sys/tools/amd64_ia32_vdso.sh
index 59923749042f..85d2299b45d0 100644
--- a/sys/tools/amd64_ia32_vdso.sh
+++ b/sys/tools/amd64_ia32_vdso.sh
@@ -34,9 +34,14 @@ ${CC} -x assembler-with-cpp -DLOCORE -fPIC -nostdinc -c -m32 \
    -o ia32_sigtramp.pico -I. -I"${S}" -include opt_global.h \
    "${S}"/amd64/ia32/ia32_sigtramp.S
 
+if ${LD} --version | ${AWK} '/^GNU ld/{exit 1}' ; then
+    RODYNAMIC="-z rodynamic"
+else
+    RODYNAMIC=""
+fi
 ${LD} --shared -Bsymbolic -soname="elf-vdso32.so.1" \
    -T "${S}"/conf/vdso_amd64_ia32.ldscript \
-   --eh-frame-hdr --no-undefined -z rodynamic -z norelro -nmagic \
+   --eh-frame-hdr --no-undefined ${RODYNAMIC} -z norelro -nmagic \
    --hash-style=sysv --fatal-warnings --strip-all \
    -o elf-vdso32.so.1 ia32_sigtramp.pico
 
diff --git a/sys/tools/amd64_vdso.sh b/sys/tools/amd64_vdso.sh
index aec0694ebdb1..2a83ae874ab7 100644
--- a/sys/tools/amd64_vdso.sh
+++ b/sys/tools/amd64_vdso.sh
@@ -40,12 +40,17 @@ ${CC} -x assembler-with-cpp -DLOCORE -fPIC -nostdinc -c \
 #
 # -z rodynamic is undocumented lld-specific option, seemingly required
 # for lld to avoid putting dynamic into dedicated writeable segment,
-# despite ldscript placement.  It is ignored by ld.bfd but ldscript
+# despite ldscript placement.  It is omitted for ld.bfd, but ldscript
 # alone is enough there.
 #
+if ${LD} --version | ${AWK} '/^GNU ld/{exit 1}' ; then
+    RODYNAMIC="-z rodynamic"
+else
+    RODYNAMIC=""
+fi
 ${LD} --shared -Bsymbolic -soname="elf-vdso.so.1" \
    -T "${S}"/conf/vdso_amd64.ldscript \
-   --eh-frame-hdr --no-undefined -z rodynamic -z norelro -nmagic \
+   --eh-frame-hdr --no-undefined ${RODYNAMIC} -z norelro -nmagic \
    --hash-style=sysv --fatal-warnings --strip-all \
    -o elf-vdso.so.1 sigtramp.pico