Summary: | [readelf] Handle absolute DW_AT_dwo_name | ||
---|---|---|---|
Product: | binutils | Reporter: | Tom de Vries <vries> |
Component: | binutils | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED FIXED | ||
Severity: | normal | ||
Priority: | P2 | ||
Version: | 2.37 | ||
Target Milestone: | 2.37 | ||
Host: | Target: | ||
Build: | Last reconfirmed: |
Description
Tom de Vries
2021-02-10 11:38:13 UTC
Tentative patch: ... diff --git a/binutils/dwarf.c b/binutils/dwarf.c index 84d63f63366..3cbd19710d7 100644 --- a/binutils/dwarf.c +++ b/binutils/dwarf.c @@ -11092,8 +11092,11 @@ load_dwo_file (const char * main_filename, const char * name, const char * dir, char * separate_filename; void * separate_handle; - /* FIXME: Skip adding / if dwo_dir ends in /. */ - separate_filename = concat (dir, "/", name, NULL); + if (IS_ABSOLUTE_PATH (name)) + separate_filename = strdup (name); + else + /* FIXME: Skip adding / if dwo_dir ends in /. */ + separate_filename = concat (dir, "/", name, NULL); if (separate_filename == NULL) { warn (_("Out of memory allocating dwo filename\n")); ... The master branch has been updated by Tom de Vries <vries@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d9d9d8ef8ce984dee45f35a5f00f4cf74bcab1e6 commit d9d9d8ef8ce984dee45f35a5f00f4cf74bcab1e6 Author: Tom de Vries <tdevries@suse.de> Date: Wed Feb 10 17:26:50 2021 +0100 [binutils] Handle absolute DW_AT_dwo_name With an exec: ... $ pwd /home/vries/tmp $ gcc /home/vries/tmp/src/hello.c -gsplit-dwarf -c \ -o /home/vries/tmp/obj/hello.o ... I get: ... $ readelf -w obj/hello.o > READELF readelf: Warning: Unable to load dwo file: \ /home/vries/tmp//home/vries/tmp/obj/hello.dwo ... The dwo file name is listed here: ... <20> DW_AT_GNU_dwo_name: /home/vries/tmp/obj/hello.dwo <24> DW_AT_comp_dir : /home/vries/tmp ... The standard states about the DW_AT_dwo_name attribute: ... value is a null-terminated string containing the full or relative path name (relative to the value of the DW_AT_comp_dir attribute, see below) of the object file that contains the full compilation unit. ... So, readelf shouldn't try to prefix an absolute path with DW_AT_comp_dir. Fix this in load_dwo_file by handling the absolute path case. binutils/ChangeLog: 2021-02-10 Tom de Vries <tdevries@suse.de> PR binutils/27391 * dwarf.c (load_dwo_file): Handle case that name is absolute path. Patch committed, marking resolved-fixed. |