Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Unified Diff: gdb/solib-svr4.c

Issue 10411068: Add hooks for mapping DSO library names. (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@nacl-stub
Patch Set: updated comments Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gdb/solib-svr4.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/solib-svr4.c
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index 69d3cb518e14eee51fad17885292f81a1ef5e692..93201197d232ce601843809c4bc46cc4d2db79b5 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -50,6 +50,8 @@
static struct link_map_offsets *svr4_fetch_link_map_offsets (void);
static int svr4_have_link_map_offsets (void);
static void svr4_relocate_main_executable (void);
+static const char *svr4_map_so_name(char *name);
+static int svr4_have_map_so_name (void);
/* Link map info to include in an allocated so_list entry. */
@@ -1227,7 +1229,15 @@ svr4_read_so_list (CORE_ADDR lm, struct so_list ***link_ptr_ptr,
continue;
}
- strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
+ if (svr4_have_map_so_name ())
+ {
+ strncpy (new->so_name, svr4_map_so_name (buffer),
+ SO_NAME_MAX_PATH_SIZE - 1);
+ }
+ else
+ {
+ strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
+ }
new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
strcpy (new->so_original_name, new->so_name);
xfree (buffer);
@@ -2318,6 +2328,8 @@ struct solib_svr4_ops
{
/* Return a description of the layout of `struct link_map'. */
struct link_map_offsets *(*fetch_link_map_offsets)(void);
+ /* Return real path for the solib name given by ld.so. */
+ const char *(*map_so_name)(char*);
};
/* Return a default for the architecture-specific operations. */
@@ -2329,6 +2341,7 @@ solib_svr4_init (struct obstack *obstack)
ops = OBSTACK_ZALLOC (obstack, struct solib_svr4_ops);
ops->fetch_link_map_offsets = NULL;
+ ops->map_so_name = NULL;
return ops;
}
@@ -2346,6 +2359,17 @@ set_solib_svr4_fetch_link_map_offsets (struct gdbarch *gdbarch,
set_solib_ops (gdbarch, &svr4_so_ops);
}
+/* Set function to map ld.so solib names to real paths. */
+
+void
+set_solib_svr4_map_so_name(struct gdbarch *gdbarch,
+ const char* (*map_so_name) (char*))
+{
+ struct solib_svr4_ops *ops = gdbarch_data (gdbarch, solib_svr4_data);
+
+ ops->map_so_name = map_so_name;
+}
+
/* Fetch a link_map_offsets structure using the architecture-specific
`struct link_map_offsets' fetcher. */
@@ -2367,6 +2391,25 @@ svr4_have_link_map_offsets (void)
return (ops->fetch_link_map_offsets != NULL);
}
+
+/* Return real path for the solib name given by ld.so. */
+
+static const char *
+svr4_map_so_name(char *name)
+{
+ struct solib_svr4_ops *ops = gdbarch_data (target_gdbarch, solib_svr4_data);
+ gdb_assert (ops->map_so_name);
+ return ops->map_so_name (name);
+}
+
+/* Return 1 if a solib name map function has been defined, 0 otherwise. */
+
+static int
+svr4_have_map_so_name(void)
+{
+ struct solib_svr4_ops *ops = gdbarch_data (target_gdbarch, solib_svr4_data);
+ return (ops->map_so_name != NULL);
+}
/* Most OS'es that have SVR4-style ELF dynamic libraries define a
« no previous file with comments | « gdb/solib-svr4.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698