From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7891) id 3313C385770A; Tue, 29 Aug 2023 04:33:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3313C385770A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1693283580; bh=qcvVEF/IlSiznw1jfjqjZH6bUq1c3G2UkX8YShwmSqA=; h=From:To:Subject:Date:From; b=Ao/7NvIyCvkNu5xAm4JrIiRUWbQkpghzyZcU9uHMac/WKCNuyq06uhnryByiQerRf AGXzCraqodMTXCW9khfoGi0qLSFzSi0VDZJTnzq/rn5xIAMQuyic6CQxG9bD9T45xD okrtQiixwgOofrIi1xblQbi13YqUVmi1GS/Z2xOw= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Yinyu Cai To: glibc-cvs@sourceware.org Subject: [glibc] LoongArch: Simplify the autoconf check for static PIE X-Act-Checkin: glibc X-Git-Author: Xi Ruoyao X-Git-Refname: refs/heads/master X-Git-Oldrev: 42c960a4f1052a71d928a1c554f5d445b00e61f7 X-Git-Newrev: e757412c3e8a59cd93230414800250b38aeddf6c Message-Id: <20230829043300.3313C385770A@sourceware.org> Date: Tue, 29 Aug 2023 04:33:00 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=e757412c3e8a59cd93230414800250b38aeddf6c commit e757412c3e8a59cd93230414800250b38aeddf6c Author: Xi Ruoyao Date: Sun Aug 27 00:36:49 2023 +0800 LoongArch: Simplify the autoconf check for static PIE We are strictly requiring GAS >= 2.41 now, so we don't need to check assembler capability anymore. Signed-off-by: Xi Ruoyao Diff: --- sysdeps/loongarch/configure | 36 +++++++----------------------------- sysdeps/loongarch/configure.ac | 30 +++++++++--------------------- 2 files changed, 16 insertions(+), 50 deletions(-) diff --git a/sysdeps/loongarch/configure b/sysdeps/loongarch/configure index 395ddc92ca..30b60d1983 100644 --- a/sysdeps/loongarch/configure +++ b/sysdeps/loongarch/configure @@ -4,21 +4,19 @@ printf "%s\n" "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the toolchain is sufficient to build static PIE on LoongArch" >&5 -printf %s "checking if the toolchain is sufficient to build static PIE on LoongArch... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ${CC-cc} is sufficient to build static PIE on LoongArch" >&5 +printf %s "checking if ${CC-cc} is sufficient to build static PIE on LoongArch... " >&6; } if test ${libc_cv_static_pie_on_loongarch+y} then : printf %s "(cached) " >&6 else $as_nop - cat > conftest1.S <<\EOF + cat > conftest.S <<\EOF .global _start .type _start, @function _start: li.w $a7, 93 - /* This ensures the assembler supports explicit reloc. */ - pcalau12i $a0, %pc_hi20(x) - ld.w $a0, $a0, %pc_lo12(x) + li.w $a0, 0 syscall 0 .data @@ -27,41 +25,21 @@ x: /* This should produce an R_LARCH_RELATIVE in the static PIE. */ .dword _start EOF - cat > conftest2.S <<\EOF -.global f -.type f, @function -f: - /* The linker should be able to handle this and produce a PLT entry. */ - la.pcrel $t0, $t0, external_func - jirl $zero, $t0, 0 -EOF libc_cv_static_pie_on_loongarch=no - if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static-pie -nostdlib -fPIE -o conftest1 conftest1.S' - { { 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; }; } \ - && { ac_try='LC_ALL=C $READELF -Wr conftest1 | grep -q R_LARCH_RELATIVE' - { { 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; }; } \ - && ! { ac_try='LC_ALL=C $READELF -Wl conftest1 | grep -q INTERP' + if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static-pie -nostdlib -fPIE -o conftest conftest.S' { { 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; }; } \ - && { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -shared -nostdlib -fPIC -o conftest2.so conftest2.S' + && { ac_try='LC_ALL=C $READELF -Wr conftest | grep -q R_LARCH_RELATIVE' { { 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; }; } \ - && { ac_try='LC_ALL=C $READELF -Wr conftest2.so | grep -q 'R_LARCH_JUMP_SLOT.*external_func'' + && ! { ac_try='LC_ALL=C $READELF -Wl conftest | grep -q INTERP' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? diff --git a/sysdeps/loongarch/configure.ac b/sysdeps/loongarch/configure.ac index 989287c6d2..28a8ae5486 100644 --- a/sysdeps/loongarch/configure.ac +++ b/sysdeps/loongarch/configure.ac @@ -8,19 +8,17 @@ AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC) dnl Test if the toolchain is new enough for static PIE. dnl We need a GAS supporting explicit reloc (older GAS produces stack-based dnl reloc and triggers an internal error in the linker). And, we need GCC to -dnl pass the correct linker flags for static PIE. GCC >= 13 and GAS >= 2.40 -dnl satisfy the requirement, but a distro may backport static PIE support into -dnl earlier GCC or Binutils releases as well. -AC_CACHE_CHECK([if the toolchain is sufficient to build static PIE on LoongArch], +dnl pass the correct linker flags for static PIE. We strictly require GAS >= +dnl 2.41 so we don't need to check the assembler capability, but we need to +dnl check if GCC is doing the correct thing. +AC_CACHE_CHECK([if ${CC-cc} is sufficient to build static PIE on LoongArch], libc_cv_static_pie_on_loongarch, [ - cat > conftest1.S <<\EOF + cat > conftest.S <<\EOF .global _start .type _start, @function _start: li.w $a7, 93 - /* This ensures the assembler supports explicit reloc. */ - pcalau12i $a0, %pc_hi20(x) - ld.w $a0, $a0, %pc_lo12(x) + li.w $a0, 0 syscall 0 .data @@ -29,21 +27,11 @@ x: /* This should produce an R_LARCH_RELATIVE in the static PIE. */ .dword _start EOF - cat > conftest2.S <<\EOF -.global f -.type f, @function -f: - /* The linker should be able to handle this and produce a PLT entry. */ - la.pcrel $t0, $t0, external_func - jirl $zero, $t0, 0 -EOF libc_cv_static_pie_on_loongarch=no - if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static-pie -nostdlib -fPIE -o conftest1 conftest1.S]) \ - && AC_TRY_COMMAND([LC_ALL=C $READELF -Wr conftest1 | grep -q R_LARCH_RELATIVE]) \ - && ! AC_TRY_COMMAND([LC_ALL=C $READELF -Wl conftest1 | grep -q INTERP]) \ - && AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -shared -nostdlib -fPIC -o conftest2.so conftest2.S]) \ - && AC_TRY_COMMAND([LC_ALL=C $READELF -Wr conftest2.so | grep -q 'R_LARCH_JUMP_SLOT.*external_func']) + if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -static-pie -nostdlib -fPIE -o conftest conftest.S]) \ + && AC_TRY_COMMAND([LC_ALL=C $READELF -Wr conftest | grep -q R_LARCH_RELATIVE]) \ + && ! AC_TRY_COMMAND([LC_ALL=C $READELF -Wl conftest | grep -q INTERP]) then libc_cv_static_pie_on_loongarch=yes fi