mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-07-06 17:13:24 -05:00
124 lines
4.1 KiB
Diff
124 lines
4.1 KiB
Diff
From f69f2a995d0c5c6bc44fd485a7f5d3b390f26fc4 Mon Sep 17 00:00:00 2001
|
||
From: Jan Tojnar <jtojnar@gmail.com>
|
||
Date: Sat, 25 Apr 2026 23:01:23 +0200
|
||
Subject: [PATCH] libbacktrace: Allow configuring debug dir
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
On platforms that do not use FHS like NixOS or GNU Guix,
|
||
the build-id directories are not under `/usr/lib/debug`.
|
||
|
||
Let’s add `--with-separate-debug-dir` configure flag so that
|
||
the path can be changed. The same flag is supported by gdb:
|
||
|
||
https://github.com/bminor/binutils-gdb/blob/095f84c7e3cf85cd68c657c46b80be078f336bc9/gdb/configure.ac#L113-L115
|
||
---
|
||
Makefile.am | 15 ++++++++-------
|
||
configure.ac | 8 ++++++++
|
||
elf.c | 4 ++--
|
||
3 files changed, 18 insertions(+), 9 deletions(-)
|
||
|
||
diff --git a/Makefile.am b/Makefile.am
|
||
index 7b32e23..51431b9 100644
|
||
--- a/Makefile.am
|
||
+++ b/Makefile.am
|
||
@@ -33,7 +33,8 @@ ACLOCAL_AMFLAGS = -I config
|
||
|
||
AM_CPPFLAGS =
|
||
|
||
-AM_CFLAGS = $(EXTRA_FLAGS) $(WARN_FLAGS) $(PIC_FLAG)
|
||
+AM_CFLAGS = $(EXTRA_FLAGS) $(WARN_FLAGS) $(PIC_FLAG) \
|
||
+ -DSYSTEM_DEBUG_DIR=\"$(SEPARATE_DEBUG_DIR)\"
|
||
|
||
include_HEADERS = backtrace.h backtrace-supported.h
|
||
|
||
@@ -136,7 +137,7 @@ libbacktrace_noformat_la_DEPENDENCIES = $(libbacktrace_noformat_la_LIBADD)
|
||
if HAVE_ELF
|
||
if HAVE_OBJCOPY_DEBUGLINK
|
||
|
||
-TEST_BUILD_ID_DIR=$(abs_builddir)/usr/lib/debug/.build-id/
|
||
+TEST_DEBUG_DIR=$(abs_builddir)/usr/lib/debug
|
||
|
||
check_LTLIBRARIES += libbacktrace_elf_for_test.la
|
||
|
||
@@ -145,8 +146,8 @@ libbacktrace_elf_for_test_la_LIBADD = $(BACKTRACE_FILE) elf_for_test.lo \
|
||
$(VIEW_FILE) $(ALLOC_FILE)
|
||
|
||
elf_for_test.c: elf.c
|
||
- SEARCH='^#define SYSTEM_BUILD_ID_DIR.*$$'; \
|
||
- REPLACE="#define SYSTEM_BUILD_ID_DIR \"$(TEST_BUILD_ID_DIR)\""; \
|
||
+ SEARCH='^#define BUILD_ID_DIR.*$$'; \
|
||
+ REPLACE='\0\n#undef SYSTEM_DEBUG_DIR\n#define SYSTEM_DEBUG_DIR "$(TEST_DEBUG_DIR)"'; \
|
||
$(SED) "s%$$SEARCH%$$REPLACE%" \
|
||
$< \
|
||
> $@.tmp
|
||
@@ -484,13 +485,13 @@ endif HAVE_OBJCOPY_DEBUGLINK
|
||
|
||
%_buildid: %
|
||
./install-debuginfo-for-buildid.sh \
|
||
- "$(TEST_BUILD_ID_DIR)" \
|
||
+ "$(TEST_DEBUG_DIR)/.build-id" \
|
||
$<
|
||
$(OBJCOPY) --strip-debug $< $@
|
||
|
||
%_buildidfull: %
|
||
./install-debuginfo-for-buildid.sh \
|
||
- "$(TEST_BUILD_ID_DIR)" \
|
||
+ "$(TEST_DEBUG_DIR)/.build-id" \
|
||
$<
|
||
$(OBJCOPY) --strip-all $< $@
|
||
|
||
@@ -621,7 +622,7 @@ MAKETESTS += m2test_minidebug2
|
||
$(XZ) $<.mdbg2
|
||
$(OBJCOPY) --add-section .gnu_debugdata=$<.mdbg2.xz $<.dbg2
|
||
$(OBJCOPY) --add-section .gnu_debugdata=$<.mdbg2.xz $<.strip2
|
||
- $(SHELL) ./install-debuginfo-for-buildid.sh $(TEST_BUILD_ID_DIR) $<.dbg2
|
||
+ $(SHELL) ./install-debuginfo-for-buildid.sh "$(TEST_DEBUG_DIR)/.build-id" $<.dbg2
|
||
mv $<.strip2 $@
|
||
|
||
endif HAVE_OBJCOPY_DEBUGLINK
|
||
diff --git a/configure.ac b/configure.ac
|
||
index 2267cc5..15cdc6e 100644
|
||
--- a/configure.ac
|
||
+++ b/configure.ac
|
||
@@ -67,6 +67,14 @@ AM_MAINTAINER_MODE
|
||
AC_ARG_WITH(target-subdir,
|
||
[ --with-target-subdir=SUBDIR Configuring in a subdirectory for target])
|
||
|
||
+AC_ARG_WITH(separate-debug-dir,
|
||
+[ --with-separate-debug-dir=DEBUGDIR Look for global separate debug info in this path @<:@LIBDIR/debug@:>@],
|
||
+[separate_debug_dir=$withval],
|
||
+[separate_debug_dir=$libdir/debug])
|
||
+
|
||
+SEPARATE_DEBUG_DIR=$separate_debug_dir
|
||
+AC_SUBST(SEPARATE_DEBUG_DIR)
|
||
+
|
||
# We must force CC to /not/ be precious variables; otherwise
|
||
# the wrong, non-multilib-adjusted value will be used in multilibs.
|
||
# As a side effect, we have to subst CFLAGS ourselves.
|
||
diff --git a/elf.c b/elf.c
|
||
index e93729d..4765fae 100644
|
||
--- a/elf.c
|
||
+++ b/elf.c
|
||
@@ -857,7 +857,7 @@ elf_readlink (struct backtrace_state *state, const char *filename,
|
||
}
|
||
}
|
||
|
||
-#define SYSTEM_BUILD_ID_DIR "/usr/lib/debug/.build-id/"
|
||
+#define BUILD_ID_DIR "/.build-id/"
|
||
|
||
/* Open a separate debug info file, using the build ID to find it.
|
||
Returns an open file descriptor, or -1.
|
||
@@ -871,7 +871,7 @@ elf_open_debugfile_by_buildid (struct backtrace_state *state,
|
||
backtrace_error_callback error_callback,
|
||
void *data)
|
||
{
|
||
- const char * const prefix = SYSTEM_BUILD_ID_DIR;
|
||
+ const char * const prefix = SYSTEM_DEBUG_DIR BUILD_ID_DIR;
|
||
const size_t prefix_len = strlen (prefix);
|
||
const char * const suffix = ".debug";
|
||
const size_t suffix_len = strlen (suffix);
|
||
--
|
||
2.51.2
|
||
|