diff options
| author | John Ericson <git@JohnEricson.me> | 2025-12-09 22:06:51 +0000 |
|---|---|---|
| committer | Joseph Myers <josmyers@redhat.com> | 2025-12-09 22:06:51 +0000 |
| commit | 77144dd3b6736e0166156bb509590d924375a4f1 (patch) | |
| tree | 4820db33fce8ebf34aaf45ca53113129ecdd5992 | |
| parent | e5d853bbe9b05d6a00d98ad236f01937303e40c4 (diff) | |
| download | gcc-77144dd3b6736e0166156bb509590d924375a4f1.zip gcc-77144dd3b6736e0166156bb509590d924375a4f1.tar.gz gcc-77144dd3b6736e0166156bb509590d924375a4f1.tar.bz2 | |
Move NO_PIE_CFLAGS logic from gcc to libgcc
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>
| -rw-r--r-- | gcc/Makefile.in | 6 | ||||
| -rwxr-xr-x | gcc/configure | 6 | ||||
| -rw-r--r-- | gcc/configure.ac | 1 | ||||
| -rw-r--r-- | libgcc/Makefile.in | 2 | ||||
| -rwxr-xr-x | libgcc/configure | 35 | ||||
| -rw-r--r-- | libgcc/configure.ac | 14 |
6 files changed, 53 insertions, 11 deletions
diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 2c3194e..a9264bd 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 d707435..f349c1d 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 b6d9608..c652257 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 32a5a15..f0cbcb8 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 be5b5a9..fe7a21c2 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 97fd17c..5945243 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. |
