From: Alan Modra <amodra@gmail.com>
To: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Cc: libc-alpha@sourceware.org
Subject: [PATCH v3] powerpc64: Enable static-pie
Date: Wed, 20 Apr 2022 16:51:30 +0930 [thread overview]
Message-ID: <Yl+0ehkPwzFibcMW@squeak.grove.modra.org> (raw)
In-Reply-To: <Yld13vIqJwzILjfb@squeak.grove.modra.org>
On Thu, Apr 14, 2022 at 10:46:14AM +0930, Alan Modra wrote:
> I'll note that static-pie is enabled in glibc without any user
> --enable-static-pie, ie. it is the default if SUPPORT_STATIC_PIE is
> set. SUPPORT_STATIC_PIE is enabled unconditionally for x86 and
> aarch64 without any toolchain checks, and I foolishly followed that
> precedent.
Conditionally define SUPPORT_STATIC_PIE if binutils-2.33 or later.
The test ifunc results in .iplt relocations, and with a weak reference
to __rela_iplt_start will cause older linkers to generate that symbol.
PI_STATIC_AND_HIDDEN should be OK with the base binutils-2.25.
* sysdeps/powerpc/powerpc64/configure.ac (SUPPORT_STATIC_PIE): Define.
(PI_STATIC_AND_HIDDEN): Define.
* sysdeps/powerpc/powerpc64/configure: Regenerate.
Regression tested powerpc64le-linux.
diff --git a/sysdeps/powerpc/powerpc64/configure b/sysdeps/powerpc/powerpc64/configure
index fddea0355a..0db93080d3 100644
--- a/sysdeps/powerpc/powerpc64/configure
+++ b/sysdeps/powerpc/powerpc64/configure
@@ -1,6 +1,44 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/powerpc/powerpc64.
+$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the toolchain supports static-pie" >&5
+$as_echo_n "checking if the toolchain supports static-pie... " >&6; }
+if ${libc_cv_ppc64_static_pie+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat > conftest.c <<EOF
+static long __foo_0 (long x) { return x; }
+static long __foo_1 (long x) { return x; }
+volatile int select;
+typedef long longf (long);
+static longf *foo_ifunc (void) { return select ? __foo_1 : __foo_0; }
+static long __attribute__ ((ifunc ("foo_ifunc"))) foo (long);
+extern const char *__rela_iplt_start __attribute__ ((weak));
+int _start (void) { return foo ((long) __rela_iplt_start); };
+EOF
+ libc_cv_ppc64_static_pie=no
+ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -static-pie -nostdlib -nostartfiles -o conftest conftest.c'
+ { { 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 ! nm conftest | grep -q __rela_iplt; then
+ libc_cv_ppc64_static_pie=yes
+ fi
+ fi
+ rm -rf conftest.*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc64_static_pie" >&5
+$as_echo "$libc_cv_ppc64_static_pie" >&6; }
+if test x$libc_cv_ppc64_static_pie = xyes; then
+ $as_echo "#define SUPPORT_STATIC_PIE 1" >>confdefs.h
+
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for support for overlapping .opd entries" >&5
$as_echo_n "checking for support for overlapping .opd entries... " >&6; }
if ${libc_cv_overlapping_opd+:} false; then :
diff --git a/sysdeps/powerpc/powerpc64/configure.ac b/sysdeps/powerpc/powerpc64/configure.ac
index 1f3d54414c..7de4de871c 100644
--- a/sysdeps/powerpc/powerpc64/configure.ac
+++ b/sysdeps/powerpc/powerpc64/configure.ac
@@ -1,6 +1,37 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/powerpc/powerpc64.
+dnl It is possible to access static and hidden symbols in a position
+dnl independent way requiring no relocation on powerpc64. The linker
+dnl edits medium and large model code that uses GOT/TOC entries (which
+dnl would require relocation) to r2 relative accesses.
+AC_DEFINE(PI_STATIC_AND_HIDDEN)
+
+AC_CACHE_CHECK(if the toolchain supports static-pie,
+libc_cv_ppc64_static_pie, [dnl
+ cat > conftest.c <<EOF
+static long __foo_0 (long x) { return x; }
+static long __foo_1 (long x) { return x; }
+volatile int select;
+typedef long longf (long);
+static longf *foo_ifunc (void) { return select ? __foo_1 : __foo_0; }
+static long __attribute__ ((ifunc ("foo_ifunc"))) foo (long);
+extern const char *__rela_iplt_start[] __attribute__ ((weak));
+int _start (void) { return foo ((long) __rela_iplt_start); };
+EOF
+ libc_cv_ppc64_static_pie=no
+ if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -static-pie -nostdlib -nostartfiles -o conftest conftest.c]); then
+ dnl binutils-2.33 or newer is needed
+ if ! nm conftest | grep -q __rela_iplt; then
+ libc_cv_ppc64_static_pie=yes
+ fi
+ fi
+ rm -rf conftest.*])
+if test x$libc_cv_ppc64_static_pie = xyes; then
+ dnl Static PIE is supported.
+ AC_DEFINE(SUPPORT_STATIC_PIE)
+fi
+
AC_CACHE_CHECK(for support for overlapping .opd entries,
libc_cv_overlapping_opd, [dnl
libc_cv_overlapping_opd=no
--
Alan Modra
Australia Development Lab, IBM
next prev parent reply other threads:[~2022-04-20 7:21 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-23 12:42 [PowerPC64] Use medium model toc accesses throughout Alan Modra
2022-01-24 3:47 ` [PATCH 2/5] [PowerPC64] Set up thread register for _dl_relocate_static_pie Alan Modra
2022-02-16 23:02 ` Paul E Murphy
2022-02-19 0:49 ` Alan Modra
2022-01-24 3:50 ` [PATCH 3/5] [PowerPC] Relocate stinfo->main Alan Modra
2022-01-24 4:48 ` H.J. Lu
2022-01-24 6:51 ` Alan Modra
2022-01-24 3:52 ` [PATCH 4/5] Constify a variable in dl_vdso_vsym Alan Modra
2022-01-24 4:06 ` [PATCH 5/5] Enable static-pie on powerpc64 Alan Modra
2022-01-27 18:39 ` Florian Weimer
2022-01-28 8:45 ` Alan Modra
2022-01-28 17:48 ` [PowerPC64] Use medium model toc accesses throughout Paul E Murphy
2022-01-29 1:24 ` Alan Modra
2022-02-28 6:40 ` [PATCH v2 0/4] PowerPC64 static-pie Alan Modra
2022-02-28 6:40 ` [PATCH v2 1/4] powerpc64: Use medium model toc accesses throughout Alan Modra
2022-04-08 22:28 ` Tulio Magno Quites Machado Filho
2022-02-28 6:40 ` [PATCH v2 2/4] powerpc64: Set up thread register for _dl_relocate_static_pie Alan Modra
2022-04-08 22:28 ` Tulio Magno Quites Machado Filho
2022-02-28 6:40 ` [PATCH v2 3/4] powerpc: Relocate stinfo->main Alan Modra
2022-04-08 22:32 ` Tulio Magno Quites Machado Filho
2022-02-28 6:40 ` [PATCH v2 4/4] powerpc64: Enable static-pie Alan Modra
2022-04-08 22:49 ` Tulio Magno Quites Machado Filho
2022-04-14 1:16 ` Alan Modra
2022-04-14 3:42 ` Fangrui Song
2022-04-20 7:21 ` Alan Modra [this message]
2022-03-04 12:48 ` [PATCH v2 0/4] PowerPC64 static-pie Alan Modra
2022-04-08 8:06 ` Alan Modra
2022-04-09 0:14 ` Fangrui Song
2022-04-14 0:33 ` Alan Modra
2022-04-14 1:54 ` DT_RELR without libc.so dependency H.J. Lu
2022-04-14 3:43 ` Fangrui Song
2022-04-14 5:18 ` Alan Modra
2022-04-14 17:55 ` H.J. Lu
2022-04-08 22:27 ` [PATCH v2 0/4] PowerPC64 static-pie Tulio Magno Quites Machado Filho
2022-04-11 1:38 ` Alan Modra
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=Yl+0ehkPwzFibcMW@squeak.grove.modra.org \
--to=amodra@gmail.com \
--cc=libc-alpha@sourceware.org \
--cc=tuliom@linux.ibm.com \
/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: link
Be 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).