File Search-debuginfo-files-in-the-original-directory.patch of Package crash
From: Petr Tesarik <ptesarik@suse.cz>
Date: Tue, 26 Mar 2019 08:28:46 +0100
Subject: Search debuginfo files in the original directory
Patch-mainline: 0001-make-emacs-mode-default.patch
References: none
If debuginfo is in a separate file and the kernel image is compressed,
then it should be found in the same directory as the original (compressed)
image, not in the directory with the uncompressed image (TMPDIR).
Signed-off-by: Petr Tesarik <ptesarik@suse.cz>
---
symbols.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
--- a/symbols.c
+++ b/symbols.c
@@ -204,9 +204,9 @@ symtab_init(void)
* Pull a bait-and-switch on st->bfd if we've got a separate
* .gnu_debuglink file that matches the CRC. Not done for kerntypes.
*/
- if (!(LKCD_KERNTYPES()) &&
- !(bfd_get_file_flags(st->bfd) & HAS_SYMS)) {
- if (!check_gnu_debuglink(st->bfd))
+ if (!(LKCD_KERNTYPES())) {
+ if (!check_gnu_debuglink(st->bfd) &&
+ !(bfd_get_file_flags(st->bfd) & HAS_SYMS))
no_debugging_data(FATAL);
}
@@ -268,13 +268,16 @@ check_gnu_debuglink(bfd *bfd)
char *contents;
int crc_offset;
unsigned long crc32;
+ char *namelist;
char *dirname;
char *namelist_debug;
char **matching;
+ namelist = pc->namelist_orig ? pc->namelist_orig : pc->namelist;
+
sect = bfd_get_section_by_name(bfd, ".gnu_debuglink");
if (!sect) {
- error(INFO, "%s: no .gnu_debuglink section\n", pc->namelist);
+ error(INFO, "%s: no .gnu_debuglink section\n", namelist);
return FALSE;
}
@@ -295,14 +298,14 @@ check_gnu_debuglink(bfd *bfd)
contents, crc32);
if ((pc->debuginfo_file = (char *)
- malloc(((strlen(pc->namelist) + strlen("/.debug/") +
+ malloc(((strlen(namelist) + strlen("/.debug/") +
+ strlen(".debug") + strlen(" /usr/lib/debug/boot/ "))*10)
+ strlen(pc->namelist_debug ? pc->namelist_debug : " "))) == NULL)
error(FATAL, "debuginfo file name malloc: %s\n",
strerror(errno));
- dirname = GETBUF(strlen(pc->namelist)+1);
- strcpy(dirname, pc->namelist);
+ dirname = GETBUF(strlen(namelist)+1);
+ strcpy(dirname, namelist);
for (i = strlen(dirname)-1; i >= 0; i--)
{