mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-22 06:53:01 +00:00
cc-wrapper: Account for NIX_LDFLAGS and NIX_CFLAGS_LINK in linkType
Without this, pkgsStatic.pkgsLLVM.hello fails with segfaulting binaries because of the issue described at [0]. In summary, llvm's linker has a different behaviour to GCC's when supplied with both -static and -Wl,-dynamic-linker=...; GCC copes with it, but LLVM produces a binary which segfaults on startup. It appears to be necessary to omit the dynamic linker in this case. nixpkgs' static adaptor passes -static via NIX_CFLAGS_LINK which was not accounted for prior to this commit in the checkLinkType logic. For good measure I put the other NIX_ flags affecting link in the same logic. Additionally, $NIX_CFLAGS_LINK_@suffixSalt@ is not available until later than it was originally set, so set $linkType close to its point of use. I checked for earlier uses by studying the shell trace output and couldn't find any. [0] https://github.com/NixOS/nixpkgs/issues/111010#issuecomment-1536424163 Signed-off-by: Peter Waller <p@pwaller.net>
This commit is contained in:
parent
c2b0edbf1f
commit
e08ce498f0
@ -31,7 +31,6 @@ cxxLibrary=1
|
||||
cInclude=1
|
||||
|
||||
expandResponseParams "$@"
|
||||
linkType=$(checkLinkType "${params[@]}")
|
||||
|
||||
declare -ag positionalArgs=()
|
||||
declare -i n=0
|
||||
@ -175,6 +174,7 @@ extraAfter=(${hardeningCFlagsAfter[@]+"${hardeningCFlagsAfter[@]}"} $NIX_CFLAGS_
|
||||
extraBefore=(${hardeningCFlagsBefore[@]+"${hardeningCFlagsBefore[@]}"} $NIX_CFLAGS_COMPILE_BEFORE_@suffixSalt@)
|
||||
|
||||
if [ "$dontLink" != 1 ]; then
|
||||
linkType=$(checkLinkType $NIX_LDFLAGS_BEFORE_@suffixSalt@ "${params[@]}" ${NIX_CFLAGS_LINK_@suffixSalt@:-} $NIX_LDFLAGS_@suffixSalt@)
|
||||
|
||||
# Add the flags that should only be passed to the compiler when
|
||||
# linking.
|
||||
|
Loading…
Reference in New Issue
Block a user