aboutsummaryrefslogtreecommitdiff
path: root/binutils/dwarf.c
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2021-02-10 17:26:50 +0100
committerTom de Vries <tdevries@suse.de>2021-02-10 17:26:50 +0100
commitd9d9d8ef8ce984dee45f35a5f00f4cf74bcab1e6 (patch)
tree223510b0377a24eff8375dc9ec5d6f3b735da424 /binutils/dwarf.c
parente92c8eb86dcef673652644694c832c504cf9a9a9 (diff)
downloadgdb-d9d9d8ef8ce984dee45f35a5f00f4cf74bcab1e6.zip
gdb-d9d9d8ef8ce984dee45f35a5f00f4cf74bcab1e6.tar.gz
gdb-d9d9d8ef8ce984dee45f35a5f00f4cf74bcab1e6.tar.bz2
[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.
Diffstat (limited to 'binutils/dwarf.c')
-rw-r--r--binutils/dwarf.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index 84d63f6..3cbd197 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"));