[PATCH 3/5] configure: use TEST_CC to check for -Ttext-segment
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Mon Dec 8 12:54:05 GMT 2025
On 06/12/25 10:31, Sam James wrote:
> Adhemerval Zanella <adhemerval.zanella@linaro.org> writes:
>
>> The ld.lld does not support this option; however, it does support a
>> similar option (--image-base=). If the -Ttext-segment check fails, it
>> also checks for support for --image-base=.
>
> How similar are they? Identical functionality or not? If identical,
> let's just use it for bfd, as it seems to support it. If not, we need to
> know why it's OK to use it.
They are not strictly identical, the -Ttext-segment does not take in consideration
the ELF header to set the base virtual address; but both are suffice the trigger
the issue from which the test came from [1] (a non-zero load address).
I forgot to check if bfd has support for --image-base, I will change to only
use it instead.
[1] https://sourceware.org/bugzilla/show_bug.cgi?id=31799
>
>> ---
>> configure | 41 +++++++++++++++++++++++++++++++++++++++++
>> configure.ac | 15 +++++++++++----
>> 2 files changed, 52 insertions(+), 4 deletions(-)
>>
>> diff --git a/configure b/configure
>> index 4cfc3daf83..7bf92aab37 100755
>> --- a/configure
>> +++ b/configure
>> @@ -9125,6 +9125,8 @@ libc_linker_feature=no
>> cat > conftest.c <<EOF
>> int _start (void) { return 42; }
>> EOF
>> +saved_CC="$CC"
>> +CC="$TEST_CC"
>> if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
>> -Wl,-Ttext-segment=$libc_cv_pde_load_address -nostdlib -nostartfiles
>> -fPIC -shared -o conftest.so conftest.c
>> @@ -9149,8 +9151,47 @@ if test $libc_linker_feature = yes; then
>> else
>> libc_cv_load_address_ldflag=
>> fi
>> +CC="$saved_CC"
>> { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_linker_feature" >&5
>> printf "%s\n" "$libc_linker_feature" >&6; }
>> +if test -z $libc_cv_load_address_ldflag; then
>> + # ld.lld does not support -Ttext-segment, but supports a similar option
>> + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for linker that supports --image-base=$libc_cv_pde_load_address" >&5
>> +printf %s "checking for linker that supports --image-base=$libc_cv_pde_load_address... " >&6; }
>> +libc_linker_feature=no
>> +cat > conftest.c <<EOF
>> +int _start (void) { return 42; }
>> +EOF
>> +saved_CC="$CC"
>> +CC="$TEST_CC"
>> +if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
>> + -Wl,--image-base=$libc_cv_pde_load_address -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=$?
>> + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
>> + test $ac_status = 0; }; }
>> +then
>> + if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp -Wl,--image-base=$libc_cv_pde_load_address -nostdlib \
>> + -nostartfiles -fPIC -shared -o conftest.so conftest.c 2>&1 \
>> + | grep "warning: --image-base=$libc_cv_pde_load_address 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_load_address_ldflag=-Wl,--image-base
>> +else
>> + libc_cv_load_address_ldflag=
>> +fi
>> +CC="$saved_CC"
>> +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_linker_feature" >&5
>> +printf "%s\n" "$libc_linker_feature" >&6; }
>> +fi
>> config_vars="$config_vars
>> load-address-ldflag = $libc_cv_load_address_ldflag"
>>
>> diff --git a/configure.ac b/configure.ac
>> index c7907f48f8..92ad33f37a 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -2043,10 +2043,17 @@ LIBC_CONFIG_VAR([pde-load-address], [$libc_cv_pde_load_address])
>> # Get the linker command-line option to load executable at a non-zero
>> # load address. This is only used by glibc tests to verify that PIE and
>> # static PIE with non-zero load address work correctly.
>> -LIBC_LINKER_FEATURE([-Ttext-segment=$libc_cv_pde_load_address],
>> - [-Wl,-Ttext-segment=$libc_cv_pde_load_address],
>> - [libc_cv_load_address_ldflag=-Wl,-Ttext-segment],
>> - [libc_cv_load_address_ldflag=])
>> +LIBC_TEST_LINKER_FEATURE([-Ttext-segment=$libc_cv_pde_load_address],
>> + [-Wl,-Ttext-segment=$libc_cv_pde_load_address],
>> + [libc_cv_load_address_ldflag=-Wl,-Ttext-segment],
>> + [libc_cv_load_address_ldflag=])
>
> I'd really prefer AS_IF for the below test wherever possible but I won't
> insist on it. At some point I'll convert everything where appropriate..
>
>> +if test -z $libc_cv_load_address_ldflag; then
>> + # ld.lld does not support -Ttext-segment, but supports a similar option
>> + LIBC_TEST_LINKER_FEATURE([--image-base=$libc_cv_pde_load_address],
>> + [-Wl,--image-base=$libc_cv_pde_load_address],
>> + [libc_cv_load_address_ldflag=-Wl,--image-base],
>> + [libc_cv_load_address_ldflag=])
>> +fi
>> LIBC_CONFIG_VAR([load-address-ldflag], [$libc_cv_load_address_ldflag])
>>
>> # Check if compiler supports -fno-fp-int-builtin-inexact
More information about the Libc-alpha
mailing list