aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog12
-rw-r--r--gdb/solib-aix.c11
-rw-r--r--gdb/solib-darwin.c10
-rw-r--r--gdb/solib.c10
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"),