Support separate debug symbol files (as in GDB)#253
Support separate debug symbol files (as in GDB)#253alexezeder wants to merge 1 commit intobombela:masterfrom
Conversation
| #else | ||
| #include <dlfcn.h> | ||
| #endif | ||
| #include <libgen.h> |
There was a problem hiding this comment.
I expect libgen.h header to exist when libdwarf is available, but that can be not true.
| ELF_GET_DATA(32) | ||
| } else if (e_ident[EI_CLASS] == ELFCLASS64) { | ||
| // libelf might have been built without 64 bit support | ||
| #if __LIBELF64 |
There was a problem hiding this comment.
This is a bit unrelated, but libelf installed on my PC (it's Arch Linux, but it's true also for Ubuntu 20.04 at least) does not have this definition, so the entire branch is omitted, so no 64-bit data, so no debuglink info. Probably we can work it around in a better way, but this line really stops me from having nice source locations.
| { | ||
| char* object_filename_copy = strdup(object_filename.c_str()); | ||
| const std::string directory_path = std::string(dirname(object_filename_copy)); | ||
| free(object_filename_copy); | ||
| debuglink_file.reset( | ||
| open((directory_path + '/' + debuglink).c_str(), O_RDONLY)); | ||
| if (debuglink_file.get() < 0) { | ||
| debuglink_file.reset(open( | ||
| (directory_path + "/.debug/" + debuglink).c_str(), O_RDONLY)); | ||
| } | ||
| } |
There was a problem hiding this comment.
There are only 2 locations covered since I don't know what global debug directories contain.
| const std::string directory_path = std::string(dirname(object_filename_copy)); | ||
| free(object_filename_copy); | ||
| debuglink_file.reset( | ||
| open((directory_path + '/' + debuglink).c_str(), O_RDONLY)); |
There was a problem hiding this comment.
I expect debuglink to have only filename since, according to docs:
The executable contains a debug link that specifies the name of the separate debug info file.
Also, objcopy tool writes only the filename component in the .gnu_debuglink section even if an absolute path is provided:
https://github.com/bminor/binutils-gdb/blob/b4edb38e827974ecdbc4a6712d8b21bf876018a2/bfd/opncls.c#L1707-L1708
|
did this go anywhere? current status for separate symbols file - need to be in the working dir? thanks! |
Based on what I can see, there is still no such support in I guess you can just use this branch for now because it provides the functionality you are looking for, or create your own fork for that. Anyway, I'm open to improving this PR to let it be merged into |
backward-cpp already supports loading debug symbols from a separate file. But currently, a separate file with debug symbols has to be located in the current working directory while the GDB documentation says:
This way, we have to look for a separate debug symbols file differently to replicate GDB behavior.
There are also a few points that I explained inline.