diff options
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/solib-aix.c | 11 | ||||
-rw-r--r-- | gdb/solib-darwin.c | 10 | ||||
-rw-r--r-- | gdb/solib.c | 10 |
4 files changed, 43 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2af71e3..b9b37b0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2013-12-15 Joel Brobecker <brobecker@adacore.com> + + 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. + 2013-12-13 Joel Brobecker <brobecker@adacore.com> * ada-lang.c (ada_array_bound_from_type): Move the declaration diff --git a/gdb/solib-aix.c b/gdb/solib-aix.c index 8fc516a..7bcb8ee 100644 --- a/gdb/solib-aix.c +++ b/gdb/solib-aix.c @@ -724,6 +724,17 @@ solib_aix_bfd_open (char *pathname) return NULL; } + /* Override the returned bfd's name with our synthetic name in order + to allow commands listing all shared libraries to display that + synthetic name. Otherwise, we would only be displaying the name + of the archive member object. */ + { + char *data = bfd_alloc (object_bfd, path_len + 1); + + strcpy (data, pathname); + object_bfd->filename = data; + } + gdb_bfd_unref (archive_bfd); do_cleanups (cleanup); return object_bfd; diff --git a/gdb/solib-darwin.c b/gdb/solib-darwin.c index c37049a..4de8cb4 100644 --- a/gdb/solib-darwin.c +++ b/gdb/solib-darwin.c @@ -618,6 +618,16 @@ darwin_bfd_open (char *pathname) bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ())); } + /* The current filename for fat-binary BFDs is a name generated + by BFD, usually a string containing the name of the architecture. + Reset its value to the actual filename. */ + { + char *data = bfd_alloc (res, strlen (pathname) + 1); + + strcpy (data, pathname); + res->filename = data; + } + gdb_bfd_unref (abfd); return res; } 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"), |