[RFC PATCH v2] ld: Optionally nullify default PIE in all linker tests

Sam James sam@gentoo.org
Sat Mar 29 13:34:53 GMT 2025


Hans-Peter Nilsson <hp@bitrange.com> writes:

> On Fri, 28 Mar 2025, Jens Remus wrote:
>
>> Some distributions configure GCC with --enable-default-pie [1]. LLVM
>> defaults Clang to CLANG_DEFAULT_PIE_ON_LINUX=ON [2].  This causes
>> compiles to default to -fPIE and links to default to -pie, unless other
>> options are explicitly given.  As a consequence several linker tests
>> are compiled and linked in unexpected ways and may even unexpectedly
>> fail or pass.
>> 
>> Add the configuration variable "NULLIFY_DEFAULT_PIE" to the linker test
>> suite to optionally nullify default PIE, by prepending $NOPIE_CFLAGS to
>> the compile flags and $NOPIE_LDFLAGS to the link flags for all linker
>> tests.  These are then overridden by any deviating compiler flags
>> (e.g. -fPIC or -fPIE) and linker flags (e.g -pie or -shared) explicitly
>> specified by the tests.  Possible values of NULLIFY_DEFAULT_PIE are:
>> 
>>   0: Do not nullify default PIE. (default)
>>   1: Unconditionally prefix $NOPIE_CLFAGS and $NOPIE_LDFLAGS.
>>   auto: Prefix $NOPIE_CLFAGS and $NOPIE_LDFLAGS if compiler configured
>>     to default to PIE.
>> 
>> NULLIFY_DEFAULT_PIE can for instance be specified via RUNTESTFLAGS:
>> 
>>   $ make check RUNTESTFLAGS="NULLIFY_DEFAULT_PIE=1"
>> 
>> or in ~/.dejagnurc:
>> 
>>   # Prefix $NOPIE_CLFAGS and $NOPIE_LDFLAGS if compiler defaults to PIE.
>>   set nullify_default_pie "auto"
>
> I can't help but thinking this is overthinking or 
> overengineering, sorry.
>
> Why not keep it simple: for each test creating an executable and 
> that lacks an option mentioning specifying -pie -no-pie or 
> -static, add "-no-pie"?  No $NOPIE_*.  (And subsequently make 
> sure new tests mention such an option.)  IIRC, that's the way 
> this (systems-having-different-pie-defaults) had been handled in 
> the past.
>
> For extra credit, for those tests with the new specified option, 
> add an extra test with the inverted option, but as a separate 
> patch.

I agree. Though if one really wants, we could do it GCC torture
test-style.



More information about the Binutils mailing list