mirror of
				https://github.com/pmmp/musl-cross-make.git
				synced 2025-10-26 16:07:24 +00:00 
			
		
		
		
	on some targets, the logic for the compiler option -static seems not to be processed when -pie is present. rather than playing whack-a-mole, just ensure LD_PIE_SPEC specs always pass -static to ld if either -static or -static-pie is present on the compiler driver command line. this may produce redundant -static arguments but it doesn't matter.
		
			
				
	
	
		
			93 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| diff --git a/gcc/common.opt b/gcc/common.opt
 | |
| index a75b44ee47e..7c564818b49 100644
 | |
| --- a/gcc/common.opt
 | |
| +++ b/gcc/common.opt
 | |
| @@ -3473,11 +3473,11 @@ Driver
 | |
|  
 | |
|  no-pie
 | |
|  Driver RejectNegative Negative(shared)
 | |
| -Don't create a dynamically linked position independent executable.
 | |
| +Don't create a position independent executable.
 | |
|  
 | |
|  pie
 | |
|  Driver RejectNegative Negative(no-pie)
 | |
| -Create a dynamically linked position independent executable.
 | |
| +Create a position independent executable.
 | |
|  
 | |
|  static-pie
 | |
|  Driver RejectNegative Negative(pie)
 | |
| diff --git a/gcc/config/gnu-user.h b/gcc/config/gnu-user.h
 | |
| index 5ebbf42a13d..bb907d8e89a 100644
 | |
| --- a/gcc/config/gnu-user.h
 | |
| +++ b/gcc/config/gnu-user.h
 | |
| @@ -51,13 +51,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 | |
|  #define GNU_USER_TARGET_STARTFILE_SPEC \
 | |
|    "%{shared:; \
 | |
|       pg|p|profile:%{static-pie:grcrt1.o%s;:gcrt1.o%s}; \
 | |
| -     static:crt1.o%s; \
 | |
| -     static-pie:rcrt1.o%s; \
 | |
| +     static|static-pie:%{" PIE_SPEC ":rcrt1.o%s;:crt1.o%s}; \
 | |
|       " PIE_SPEC ":Scrt1.o%s; \
 | |
|       :crt1.o%s} " \
 | |
|     GNU_USER_TARGET_CRTI " \
 | |
| -   %{static:crtbeginT.o%s; \
 | |
| -     shared|static-pie|" PIE_SPEC ":crtbeginS.o%s; \
 | |
| +   %{shared|" PIE_SPEC ":crtbeginS.o%s; \
 | |
| +     static:crtbeginT.o%s; \
 | |
|       :crtbegin.o%s} \
 | |
|     %{fvtable-verify=none:%s; \
 | |
|       fvtable-verify=preinit:vtv_start_preinit.o%s; \
 | |
| @@ -73,11 +72,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 | |
|     GNU userspace "finalizer" file, `crtn.o'.  */
 | |
|  
 | |
|  #define GNU_USER_TARGET_ENDFILE_SPEC \
 | |
| -  "%{!static:%{fvtable-verify=none:%s; \
 | |
| +  "%{static|static-pie:; \
 | |
| +     fvtable-verify=none:%s; \
 | |
|       fvtable-verify=preinit:vtv_end_preinit.o%s; \
 | |
| -     fvtable-verify=std:vtv_end.o%s}} \
 | |
| -   %{static:crtend.o%s; \
 | |
| -     shared|static-pie|" PIE_SPEC ":crtendS.o%s; \
 | |
| +     fvtable-verify=std:vtv_end.o%s} \
 | |
| +   %{shared|" PIE_SPEC ":crtendS.o%s; \
 | |
|       :crtend.o%s} " \
 | |
|     GNU_USER_TARGET_CRTN " " \
 | |
|     CRTOFFLOADEND
 | |
| @@ -106,7 +105,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 | |
|  #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
 | |
|  
 | |
|  #if defined(HAVE_LD_EH_FRAME_HDR)
 | |
| -#define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
 | |
| +#define LINK_EH_SPEC "%{!static|" PIE_SPEC ":--eh-frame-hdr} "
 | |
|  #endif
 | |
|  
 | |
|  #define GNU_USER_TARGET_LINK_GCC_C_SEQUENCE_SPEC \
 | |
| diff --git a/gcc/gcc.cc b/gcc/gcc.cc
 | |
| index 3c81c5798d8..cd96eac5d12 100644
 | |
| --- a/gcc/gcc.cc
 | |
| +++ b/gcc/gcc.cc
 | |
| @@ -1010,7 +1010,7 @@ proper position among the other output files.  */
 | |
|  #define NO_FPIE_AND_FPIC_SPEC	NO_FPIE_SPEC "|" NO_FPIC_SPEC
 | |
|  #define FPIE_OR_FPIC_SPEC	NO_FPIE_AND_FPIC_SPEC ":;"
 | |
|  #else
 | |
| -#define PIE_SPEC		"pie"
 | |
| +#define PIE_SPEC		"pie|static-pie"
 | |
|  #define FPIE1_SPEC		"fpie"
 | |
|  #define NO_FPIE1_SPEC		FPIE1_SPEC ":;"
 | |
|  #define FPIE2_SPEC		"fPIE"
 | |
| @@ -1034,12 +1034,12 @@ proper position among the other output files.  */
 | |
|  #ifndef LINK_PIE_SPEC
 | |
|  #ifdef HAVE_LD_PIE
 | |
|  #ifndef LD_PIE_SPEC
 | |
| -#define LD_PIE_SPEC "-pie"
 | |
| +#define LD_PIE_SPEC "-pie %{static|static-pie:--no-dynamic-linker -z text -Bsymbolic -static}"
 | |
|  #endif
 | |
|  #else
 | |
|  #define LD_PIE_SPEC ""
 | |
|  #endif
 | |
| -#define LINK_PIE_SPEC "%{static|shared|r:;" PIE_SPEC ":" LD_PIE_SPEC "} "
 | |
| +#define LINK_PIE_SPEC "%{shared|r:;" PIE_SPEC ":" LD_PIE_SPEC "} "
 | |
|  #endif
 | |
|  
 | |
|  #ifndef LINK_BUILDID_SPEC
 |