glibc: Enable separate debug symbols

The importance of glibc makes it worthwhile to provide debug
symbols. However, this revealed an issue with separateDebugInfo: it
was indiscriminately adding --build-id to all ld invocations, while in
fact it should only do that for final links. Glibc also uses non-final
("relocatable") links, leading to subsequent failure to apply a build
ID ("Cannot create .note.gnu.build-id section, --build-id
ignored"). So now ld-wrapper.sh only passes --build-id for final
links.
This commit is contained in:
Eelco Dolstra 2016-02-28 02:57:37 +01:00
parent 69a337edae
commit d5bb6a1f9c
4 changed files with 25 additions and 18 deletions

View File

@ -146,11 +146,26 @@ if [ "$NIX_DONT_SET_RPATH" != 1 ]; then
# Finally, add `-rpath' switches.
for i in $rpath; do
extra=(${extra[@]} -rpath $i)
extra+=(-rpath $i)
done
fi
# Only add --build-id if this is a final link. FIXME: should build gcc
# with --enable-linker-build-id instead?
if [ "$NIX_SET_BUILD_ID" = 1 ]; then
for p in "${params[@]}"; do
if [ "$p" = "-r" -o "$p" = "--relocatable" -o "$p" = "-i" ]; then
relocatable=1
break
fi
done
if [ -z "$relocatable" ]; then
extra+=(--build-id)
fi
fi
# Optionally print debug info.
if [ -n "$NIX_DEBUG" ]; then
echo "original flags to @prog@:" >&2

View File

@ -1,4 +1,5 @@
export NIX_LDFLAGS+=" --build-id --compress-debug-sections"
export NIX_SET_BUILD_ID=1
export NIX_LDFLAGS+=" --compress-debug-sections=zlib"
export NIX_CFLAGS_COMPILE+=" -ggdb -Wa,--compress-debug-sections"
dontStrip=1

View File

@ -37,6 +37,10 @@ postInstall() {
# Get rid of more unnecessary stuff.
rm -rf $out/var $out/sbin/sln
for i in $out/lib/*.a; do
strip -S "$i"
done
}
genericBuild

View File

@ -2,7 +2,6 @@
, installLocales ? true
, profilingLibraries ? false
, gccCross ? null
, debugSymbols ? false
, withGd ? false, gd ? null, libpng ? null
}:
@ -13,9 +12,7 @@ let
cross = if gccCross != null then gccCross.target else null;
in
build cross ({
name = "glibc"
+ lib.optionalString debugSymbols "-debug"
+ lib.optionalString withGd "-gd";
name = "glibc" + lib.optionalString withGd "-gd";
inherit lib stdenv fetchurl linuxHeaders installLocales
profilingLibraries gccCross withGd gd libpng;
@ -38,23 +35,13 @@ in
fi
'';
separateDebugInfo = true;
meta.description = "The GNU C Library";
}
//
(if debugSymbols
then {
# Build with debugging symbols, but leave optimizations on and don't
# attempt to keep the build tree.
dontStrip = true;
dontCrossStrip = true;
NIX_STRIP_DEBUG = 0;
}
else {})
//
(if cross != null
then {
preConfigure = ''