From e4db1840dcf3c73085ad72a4ef13fbbe788f5a20 Mon Sep 17 00:00:00 2001 From: Austin Seipp Date: Thu, 13 Jul 2023 22:28:27 -0500 Subject: [PATCH] mold: patch an upstream bug in --strip-debug Mold currently has a bug where `--strip-debug` is treated the same as `--strip-all`; this causes things like Rust backtraces to stop working because the symbol tables get stripped. The fix is trivial and obvious, and comes from an upstream patch that needs to be merged and release. GitHub Issue: rui314/mold#1038 Signed-off-by: Austin Seipp --- pkgs/development/tools/mold/default.nix | 4 ++++ .../tools/mold/fix-debug-strip.patch | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 pkgs/development/tools/mold/fix-debug-strip.patch diff --git a/pkgs/development/tools/mold/default.nix b/pkgs/development/tools/mold/default.nix index 04ed7db71147..ac60a01a1ae9 100644 --- a/pkgs/development/tools/mold/default.nix +++ b/pkgs/development/tools/mold/default.nix @@ -33,6 +33,10 @@ stdenv.mkDerivation rec { mimalloc ]; + patches = [ + ./fix-debug-strip.patch # fix --debug-strip; https://github.com/rui314/mold/pull/1038 + ]; + postPatch = '' sed -i CMakeLists.txt -e '/.*set(DEST\ .*/d' ''; diff --git a/pkgs/development/tools/mold/fix-debug-strip.patch b/pkgs/development/tools/mold/fix-debug-strip.patch new file mode 100644 index 000000000000..78906efc73ac --- /dev/null +++ b/pkgs/development/tools/mold/fix-debug-strip.patch @@ -0,0 +1,23 @@ +From b699b73451c57ac01c2680c0b86e1f56ca19e51c Mon Sep 17 00:00:00 2001 +From: Jakub Konka +Date: Sat, 6 May 2023 07:55:46 +0200 +Subject: [PATCH] Fix handling of --debug-strip + +Signed-off-by: Jakub Konka +--- + elf/cmdline.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/elf/cmdline.cc b/elf/cmdline.cc +index 3ac19f237..731af63ab 100644 +--- a/elf/cmdline.cc ++++ b/elf/cmdline.cc +@@ -994,7 +994,7 @@ std::vector parse_nonpositional_args(Context &ctx) { + } else if (read_flag("strip-all") || read_flag("s")) { + ctx.arg.strip_all = true; + } else if (read_flag("strip-debug") || read_flag("S")) { +- ctx.arg.strip_all = true; ++ ctx.arg.strip_debug = true; + } else if (read_flag("warn-unresolved-symbols")) { + ctx.arg.unresolved_symbols = UNRESOLVED_WARN; + } else if (read_flag("error-unresolved-symbols")) {