public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
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

  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).