[v4,RESEND,1/2] Move NO_PIE_CFLAGS logic from gcc to libgcc

Message ID 20251207050435.339616-1-git@JohnEricson.me
State New
Headers
Series [v4,RESEND,1/2] Move NO_PIE_CFLAGS logic from gcc to libgcc |

Commit Message

John Ericson Dec. 7, 2025, 5:04 a.m. UTC
  My goal is to be able to build libgcc cleanly in isolation --- today one
needs to figure `make ...` misc things in the gcc subdir.

Following Andrew Pinski's suggestions in
https://gcc.gnu.org/pipermail/gcc-patches/2025-July/689683.html, this
commit moves the NO_PIE_CFLAGS logic.

gcc/ChangeLog:

	* Makefile.in:: Remove NO_PIE_CFLAGS logic, since it is now in
	libgcc.
	* configure: Regenerate.
	* configure.ac: Remove the enable_default_pie substitution, since
	libgcc now has its own logic.

libgcc/ChangeLog:

	* Makefile.in: Define NO_PIE_CFLAGS make variable via autoconf
	substitution.
	* configure: Regenerate.
	* configure.ac: New configure check to define NO_PIE_CFLAGS
	using the algorithm Andrew asked for in the linked mail.

Suggested-by: Andrew Pinski <quic_apinski@quicinc.com>
Signed-off-by: John Ericson <git@JohnEricson.me>
---
 gcc/Makefile.in     |  6 ------
 gcc/configure       |  6 ++----
 gcc/configure.ac    |  1 -
 libgcc/Makefile.in  |  2 ++
 libgcc/configure    | 35 +++++++++++++++++++++++++++++++++++
 libgcc/configure.ac | 14 ++++++++++++++
 6 files changed, 53 insertions(+), 11 deletions(-)
  

Comments

Joseph Myers Dec. 8, 2025, 11:41 p.m. UTC | #1
On Sun, 7 Dec 2025, John Ericson wrote:

> My goal is to be able to build libgcc cleanly in isolation --- today one
> needs to figure `make ...` misc things in the gcc subdir.
> 
> Following Andrew Pinski's suggestions in
> https://gcc.gnu.org/pipermail/gcc-patches/2025-July/689683.html, this
> commit moves the NO_PIE_CFLAGS logic.
> 
> gcc/ChangeLog:
> 
> 	* Makefile.in:: Remove NO_PIE_CFLAGS logic, since it is now in
> 	libgcc.
> 	* configure: Regenerate.
> 	* configure.ac: Remove the enable_default_pie substitution, since
> 	libgcc now has its own logic.
> 
> libgcc/ChangeLog:
> 
> 	* Makefile.in: Define NO_PIE_CFLAGS make variable via autoconf
> 	substitution.
> 	* configure: Regenerate.
> 	* configure.ac: New configure check to define NO_PIE_CFLAGS
> 	using the algorithm Andrew asked for in the linked mail.

This is another patch I approved in July in the absence of more specific 
maintainer objections.
  

Patch

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 2c3194e7d1e..a9264bde9bc 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -2504,12 +2504,6 @@  libgcc.mvars: config.status Makefile specs xgcc$(exeext)
 	echo GCC_CFLAGS = '$(GCC_CFLAGS)' >> tmp-libgcc.mvars
 	echo INHIBIT_LIBC_CFLAGS = '$(INHIBIT_LIBC_CFLAGS)' >> tmp-libgcc.mvars
 	echo TARGET_SYSTEM_ROOT = '$(TARGET_SYSTEM_ROOT)' >> tmp-libgcc.mvars
-	if test @enable_default_pie@ = yes; then \
-	  NO_PIE_CFLAGS="-fno-PIE"; \
-	else \
-	  NO_PIE_CFLAGS=; \
-	fi; \
-	echo NO_PIE_CFLAGS = "$$NO_PIE_CFLAGS" >> tmp-libgcc.mvars
 
 	mv tmp-libgcc.mvars libgcc.mvars
 
diff --git a/gcc/configure b/gcc/configure
index d7074355e42..f349c1dc4c1 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -635,7 +635,6 @@  LIBOBJS
 CET_HOST_FLAGS
 LD_PICFLAG
 PICFLAG
-enable_default_pie
 libgccjit_version
 enable_host_bind_now
 LIBGDIAGNOSTICS
@@ -21877,7 +21876,7 @@  else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 21880 "configure"
+#line 21879 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -21983,7 +21982,7 @@  else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 21986 "configure"
+#line 21985 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -34939,7 +34938,6 @@  $as_echo "#define ENABLE_DEFAULT_PIE 1" >>confdefs.h
 
 fi
 
-
 # Check if -fno-PIE works.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fno-PIE option" >&5
 $as_echo_n "checking for -fno-PIE option... " >&6; }
diff --git a/gcc/configure.ac b/gcc/configure.ac
index b6d9608d599..c652257f29e 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -7765,7 +7765,6 @@  if test x$enable_default_pie = xyes ; then
   AC_DEFINE(ENABLE_DEFAULT_PIE, 1,
       [Define if your target supports default PIE and it is enabled.])
 fi
-AC_SUBST([enable_default_pie])
 
 # Check if -fno-PIE works.
 AC_CACHE_CHECK([for -fno-PIE option],
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
index 32a5a15813f..f0cbcb8004b 100644
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -298,6 +298,8 @@  override CFLAGS := $(filter-out -fprofile-generate -fprofile-use,$(CFLAGS))
 INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
 		  $(INCLUDES) @set_have_cc_tls@ @set_use_emutls@
 
+NO_PIE_CFLAGS = @NO_PIE_CFLAGS@
+
 # Options to use when compiling crtbegin/end.
 CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
   $(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \
diff --git a/libgcc/configure b/libgcc/configure
index d5e80d227ff..02f489276fc 100755
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -610,6 +610,7 @@  accel_dir_suffix
 use_tm_clone_registry
 force_explicit_eh_registry
 CET_FLAGS
+NO_PIE_CFLAGS
 fixed_point
 enable_decimal_float
 decimal_float
@@ -4836,6 +4837,40 @@  $as_echo "$libgcc_cv_fixed_point" >&6; }
 fixed_point=$libgcc_cv_fixed_point
 
 
+# Check whether the compiler defines __PIE__ by default, so -fno-PIE is needed.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler defines __PIE__" >&5
+$as_echo_n "checking whether the compiler defines __PIE__... " >&6; }
+if ${libgcc_cv_no_pie_cflags+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __PIE__
+#error __PIE__ defined
+#endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  libgcc_cv_no_pie_cflags=''
+else
+  libgcc_cv_no_pie_cflags='-fno-PIE'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgcc_cv_no_pie_cflags" >&5
+$as_echo "$libgcc_cv_no_pie_cflags" >&6; }
+
+NO_PIE_CFLAGS=$libgcc_cv_no_pie_cflags
+
+
 # For platforms with the unwind ABI which includes an unwind library,
 # libunwind, we can choose to use the system libunwind.
 # config.gcc also contains tests of with_system_libunwind.
diff --git a/libgcc/configure.ac b/libgcc/configure.ac
index 65cd3c6aa1a..7cab489b3aa 100644
--- a/libgcc/configure.ac
+++ b/libgcc/configure.ac
@@ -258,6 +258,20 @@  AC_CACHE_CHECK([whether fixed-point is supported], [libgcc_cv_fixed_point],
 fixed_point=$libgcc_cv_fixed_point
 AC_SUBST(fixed_point)
 
+# Check whether the compiler defines __PIE__ by default, so -fno-PIE is needed.
+AC_CACHE_CHECK([whether the compiler defines __PIE__], [libgcc_cv_no_pie_cflags],
+  [AC_COMPILE_IFELSE(
+     [AC_LANG_PROGRAM([[
+#ifdef __PIE__
+#error __PIE__ defined
+#endif
+     ]], [[]])],
+     [libgcc_cv_no_pie_cflags=''],
+     [libgcc_cv_no_pie_cflags='-fno-PIE'])])
+
+NO_PIE_CFLAGS=$libgcc_cv_no_pie_cflags
+AC_SUBST([NO_PIE_CFLAGS])
+
 # For platforms with the unwind ABI which includes an unwind library,
 # libunwind, we can choose to use the system libunwind.
 # config.gcc also contains tests of with_system_libunwind.