public inbox for glibc-cvs@sourceware.org help / color / mirror / Atom feed
From: Adhemerval Zanella <azanella@sourceware.org> To: glibc-cvs@sourceware.org Subject: [glibc/azanella/clang] Use -Wl, --undefined-version if linker requires it Date: Thu, 9 Feb 2023 19:54:39 +0000 (GMT) [thread overview] Message-ID: <20230209195439.A912D3858032@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=dbe213c564a4c0755f6b106c2b596ff46c7bf75e commit dbe213c564a4c0755f6b106c2b596ff46c7bf75e Author: Adhemerval Zanella <adhemerval.zanella@linaro.org> Date: Wed Jan 4 13:46:38 2023 -0300 Use -Wl,--undefined-version if linker requires it The lld might set --no-undefined-version as default, which triggers a lot of error since the Versions files may contain entries not exported by all ABI. The -Wl,--undefined-version can not be set by default, since binutils ld does not support (although gold does). So it requires to be checked at configure if linker requires and enabled it conditionally. Diff: --- Makeconfig | 8 ++++++++ configure | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 27 ++++++++++++++++++++++++ 3 files changed, 102 insertions(+) diff --git a/Makeconfig b/Makeconfig index a4a6f247d0..120385a3eb 100644 --- a/Makeconfig +++ b/Makeconfig @@ -424,6 +424,14 @@ ifndef after-link after-link = endif +# The Versions file may contain entries not exported by all ABI, which +# trigger errors if the linker defaults to --no-undefined-version. The +# configure checks whether it is the case and adds --undefined-version +# if required. +LDFLAGS-lib.so += $(config-ldflags-undefined-version) +LDFLAGS.so += $(config-ldflags-undefined-version) +link-extra-flags += $(config-ldflags-undefined-version) + # Additional libraries to link into every test. link-extra-libs-tests = $(libsupport) diff --git a/configure b/configure index 7b2c5a23af..e90610563e 100755 --- a/configure +++ b/configure @@ -5854,6 +5854,73 @@ $as_echo "$libc_linker_feature" >&6; } config_vars="$config_vars have-no-dynamic-linker = $libc_cv_no_dynamic_linker" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to suppress unused version in version script" >&5 +$as_echo_n "checking whether to suppress unused version in version script... " >&6; } +if ${libc_cv_undefined_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <<EOF +void foo (void) { } +EOF +cat > conftest.map <<EOF +VER_1.0 { + global: + bar; +}; +EOF +libc_cv_undefined_version="" +if ! { ac_try='${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared -Wl,--version-script=conftest.map conftest.c -o conftest.so' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker that supports --undefined-version" >&5 +$as_echo_n "checking for linker that supports --undefined-version... " >&6; } +libc_linker_feature=no +cat > conftest.c <<EOF +int _start (void) { return 42; } +EOF +if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp + -Wl,--undefined-version -nostdlib -nostartfiles + -fPIC -shared -o conftest.so conftest.c + 1>&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp -Wl,--undefined-version -nostdlib \ + -nostartfiles -fPIC -shared -o conftest.so conftest.c 2>&1 \ + | grep "warning: --undefined-version ignored" > /dev/null 2>&1; then + true + else + libc_linker_feature=yes + fi +fi +rm -f conftest* +if test $libc_linker_feature = yes; then + libc_cv_support_undefined_version=yes +else + libc_cv_support_undefined_version=no +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_linker_feature" >&5 +$as_echo "$libc_linker_feature" >&6; } + if test "$libc_cv_support_undefined_version" = no; then + as_fn_error $? "support for -Wl,--undefined-version required" "$LINENO" 5 + fi + libc_cv_undefined_version="-Wl,--undefined-version" +fi +rm -f conftest.*t +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_undefined_version" >&5 +$as_echo "$libc_cv_undefined_version" >&6; } +config_vars="$config_vars +config-ldflags-undefined-version = $libc_cv_undefined_version" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -static-pie" >&5 $as_echo_n "checking for -static-pie... " >&6; } if ${libc_cv_static_pie+:} false; then : diff --git a/configure.ac b/configure.ac index eed7732eb5..dd89cdb0a6 100644 --- a/configure.ac +++ b/configure.ac @@ -1332,6 +1332,33 @@ LIBC_LINKER_FEATURE([--no-dynamic-linker], [libc_cv_no_dynamic_linker=no]) LIBC_CONFIG_VAR([have-no-dynamic-linker], [$libc_cv_no_dynamic_linker]) +AC_CACHE_CHECK(whether to suppress unused version in version script, + libc_cv_undefined_version, [dnl +cat > conftest.c <<EOF +void foo (void) { } +EOF +cat > conftest.map <<EOF +VER_1.0 { + global: + bar; +}; +EOF +libc_cv_undefined_version="" +if ! AC_TRY_COMMAND([${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared -Wl,--version-script=conftest.map conftest.c -o conftest.so]); +then + LIBC_LINKER_FEATURE([--undefined-version], + [-Wl,--undefined-version], + [libc_cv_support_undefined_version=yes], + [libc_cv_support_undefined_version=no]) + if test "$libc_cv_support_undefined_version" = no; then + AC_MSG_ERROR([support for -Wl,--undefined-version required]) + fi + libc_cv_undefined_version="-Wl,--undefined-version" +fi +rm -f conftest.*t]) +LIBC_CONFIG_VAR([config-ldflags-undefined-version],[$libc_cv_undefined_version]) + + AC_CACHE_CHECK(for -static-pie, libc_cv_static_pie, [dnl LIBC_TRY_CC_OPTION([-static-pie], [libc_cv_static_pie=yes],
next reply other threads:[~2023-02-09 19:54 UTC|newest] Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-02-09 19:54 Adhemerval Zanella [this message] 2023-08-30 12:42 Adhemerval Zanella 2023-09-28 17:58 Adhemerval Zanella 2023-12-21 19:00 Adhemerval Zanella 2024-01-29 18:03 Adhemerval Zanella 2024-02-07 14:13 Adhemerval Zanella 2024-02-09 17:38 Adhemerval Zanella 2024-04-02 15:59 Adhemerval Zanella 2024-04-17 20:13 Adhemerval Zanella
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230209195439.A912D3858032@sourceware.org \ --to=azanella@sourceware.org \ --cc=glibc-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).