diff options
author | Joel Brobecker <brobecker@adacore.com> | 2013-12-13 18:21:37 +0100 |
---|---|---|
committer | Joel Brobecker <brobecker@adacore.com> | 2013-12-15 10:59:18 +0100 |
commit | b030cf11d6572eea467acf0ead3dad9474431033 (patch) | |
tree | e46d1c3d3a69857d9810d59c3699eaffff475136 /gdb/solib.c | |
parent | 07d100d43e70e856c802fec9b584f94c8efbd79d (diff) | |
download | gdb-b030cf11d6572eea467acf0ead3dad9474431033.zip gdb-b030cf11d6572eea467acf0ead3dad9474431033.tar.gz gdb-b030cf11d6572eea467acf0ead3dad9474431033.tar.bz2 |
Revert "Do not overwrite so_list's so_name in solib_map_sections"
This reverts commit 07293be44859c607a36c313e51bec2dcdcd3c243, as it
causes an unintended change of behavior with GDB/MI's =library-loaded
events: The host-name="<path>" part of the event is now showing the
target-side path instead of the host-side path.
This revert affects Darwin and AIX systems, however, where the BFD
is either artificial or icomplete, leading to the outputt of
"info shared" not containing the information we'd like. For instance,
on Darwin, we would see:
(top-gdb) info shared
From To Syms Read Shared Object Library
0x00007fff8d060de4 0x00007fff8d09ce1f Yes (*) i386:x86-64
0x00007fff8af08b10 0x00007fff8b1c6f73 Yes (*) i386:x86-64
To compensate for that, we overwrite the filename of the associated bfd.
gdb/ChangeLog:
Revert the following commit:
* solib.c (solib_map_sections): Remove code overwriting
SO->SO_NAME with the bfd's filename.
Make the following changes required after the revert above:
* solib-aix.c (solib_aix_bfd_open): Set the filename of the
returned bfd to a copy of the synthetic pathname.
* solib-darwin.c (darwin_bfd_open): Set the filename of the
returned bfd to a copy of PATHNAME.
Diffstat (limited to 'gdb/solib.c')
-rw-r--r-- | gdb/solib.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gdb/solib.c b/gdb/solib.c index 1a9215a..7956455 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -486,6 +486,16 @@ solib_map_sections (struct so_list *so) /* Leave bfd open, core_xfer_memory and "info files" need it. */ so->abfd = abfd; + /* Copy the full path name into so_name, allowing symbol_file_add + to find it later. This also affects the =library-loaded GDB/MI + event, and in particular the part of that notification providing + the library's host-side path. If we let the target dictate + that objfile's path, and the target is different from the host, + GDB/MI will not provide the correct host-side path. */ + if (strlen (bfd_get_filename (abfd)) >= SO_NAME_MAX_PATH_SIZE) + error (_("Shared library file name is too long.")); + strcpy (so->so_name, bfd_get_filename (abfd)); + if (build_section_table (abfd, &so->sections, &so->sections_end)) { error (_("Can't find the file sections in `%s': %s"), |