From bea767e5fee7cdf9ab6a3005dfeb84f1ef4b729f Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Sun, 21 Nov 2021 14:58:14 +0000 Subject: [PATCH 1/2] separateDebugInfo: skip files objcopy can't read --- .../setup-hooks/separate-debug-info.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pkgs/build-support/setup-hooks/separate-debug-info.sh b/pkgs/build-support/setup-hooks/separate-debug-info.sh index 2481d8f50470c..1a23e6b198ee0 100644 --- a/pkgs/build-support/setup-hooks/separate-debug-info.sh +++ b/pkgs/build-support/setup-hooks/separate-debug-info.sh @@ -28,10 +28,16 @@ _separateDebugInfo() { # Extract the debug info. header "separating debug info from $i (build ID $id)" mkdir -p "$dst/${id:0:2}" - $OBJCOPY --only-keep-debug "$i" "$dst/${id:0:2}/${id:2}.debug" - $STRIP --strip-debug "$i" - # Also a create a symlink .debug. - ln -sfn ".build-id/${id:0:2}/${id:2}.debug" "$dst/../$(basename "$i")" + # This may fail, e.g. if the binary is for a different + # architecture than we're building for. (This happens with + # firmware blobs in QEMU.) + ( + $OBJCOPY --only-keep-debug "$i" "$dst/${id:0:2}/${id:2}.debug" + $STRIP --strip-debug "$i" + + # Also a create a symlink .debug. + ln -sfn ".build-id/${id:0:2}/${id:2}.debug" "$dst/../$(basename "$i")" + ) || rmdir -p "$dst/${id:0:2}" done < <(find "$prefix" -type f -print0) } From a0262a08026c7e8fe7ed8acde33b729e73e43208 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Sun, 21 Nov 2021 20:26:51 +0000 Subject: [PATCH 2/2] qemu: enable debug info I dropped autoPatchelfHook because it got confused with the debug objects, and I can't reproduce the pixman linker errors that caused it to be introduced in #106988 ("qemu: 5.1.0 -> 5.2.0"). --- pkgs/applications/virtualization/qemu/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix index 9d2b227dcbb5d..4a502b2594a71 100644 --- a/pkgs/applications/virtualization/qemu/default.nix +++ b/pkgs/applications/virtualization/qemu/default.nix @@ -1,7 +1,7 @@ { lib, stdenv, fetchurl, fetchpatch, python, zlib, pkg-config, glib , perl, pixman, vde2, alsa-lib, texinfo, flex , bison, lzo, snappy, libaio, libtasn1, gnutls, nettle, curl, ninja, meson, sigtool -, makeWrapper, autoPatchelfHook +, makeWrapper , attr, libcap, libcap_ng , CoreServices, Cocoa, Hypervisor, rez, setfile , numaSupport ? stdenv.isLinux && !stdenv.isAarch32, numactl @@ -53,7 +53,6 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ makeWrapper python python.pkgs.sphinx python.pkgs.sphinx_rtd_theme pkg-config flex bison meson ninja ] ++ lib.optionals gtkSupport [ wrapGAppsHook ] - ++ lib.optionals stdenv.isLinux [ autoPatchelfHook ] ++ lib.optionals stdenv.isDarwin [ sigtool ]; buildInputs = [ zlib glib perl pixman @@ -84,6 +83,7 @@ stdenv.mkDerivation rec { dontUseMesonConfigure = true; # meson's configurePhase isn't compatible with qemu build outputs = [ "out" "ga" ]; + separateDebugInfo = true; patches = [ ./fix-qemu-ga.patch @@ -167,6 +167,7 @@ stdenv.mkDerivation rec { configureFlags = [ "--audio-drv-list=${audio}" + "--disable-strip" # We'll strip ourselves after separating debug info. "--enable-docs" "--enable-tools" "--enable-guest-agent"