aboutsummaryrefslogtreecommitdiff
path: root/gdb/solib-svr4.c
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2004-02-21 18:34:45 +0000
committerMark Kettenis <kettenis@gnu.org>2004-02-21 18:34:45 +0000
commite4bbbda840451028a06dd72904663e5f9a6ad3f2 (patch)
tree3420c71014df4c4b93c2fe8b22011c58c2d3e0a9 /gdb/solib-svr4.c
parent3c9d0484ea76c668eeaa5655e46bfafe05b82133 (diff)
downloadgdb-e4bbbda840451028a06dd72904663e5f9a6ad3f2.zip
gdb-e4bbbda840451028a06dd72904663e5f9a6ad3f2.tar.gz
gdb-e4bbbda840451028a06dd72904663e5f9a6ad3f2.tar.bz2
* solib-svr4.h: Update copyright year.
(svr4_ilp32_fetch_link_map_offsets) (svr4_lp64_fetch_link_map_offsets): New prototype. * solib-svr4.c: Update copyright year. (svr4_ilp32_fetch_link_map_offsets) (svr4_lp64_fetch_link_map_offsets): New function.
Diffstat (limited to 'gdb/solib-svr4.c')
-rw-r--r--gdb/solib-svr4.c74
1 files changed, 73 insertions, 1 deletions
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index 48fb6cb..4f4664c 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -1,7 +1,8 @@
/* Handle SVR4 shared libraries for GDB, the GNU Debugger.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999,
- 2000, 2001, 2003 Free Software Foundation, Inc.
+ 2000, 2001, 2003, 2004
+ Free Software Foundation, Inc.
This file is part of GDB.
@@ -1508,6 +1509,77 @@ init_fetch_link_map_offsets (struct gdbarch *gdbarch)
return legacy_fetch_link_map_offsets;
}
+/* Most OS'es that have SVR4-style ELF dynamic libraries define a
+ `struct r_debug' and a `struct link_map' that are binary compatible
+ with the origional SVR4 implementation. */
+
+/* Fetch (and possibly build) an appropriate `struct link_map_offsets'
+ for an ILP32 SVR4 system. */
+
+struct link_map_offsets *
+svr4_ilp32_fetch_link_map_offsets (void)
+{
+ static struct link_map_offsets lmo;
+ static struct link_map_offsets *lmp = NULL;
+
+ if (lmp == NULL)
+ {
+ lmp = &lmo;
+
+ /* Everything we need is in the first 8 bytes. */
+ lmo.r_debug_size = 8;
+ lmo.r_map_offset = 4;
+ lmo.r_map_size = 4;
+
+ /* Everything we need is in the first 20 bytes. */
+ lmo.link_map_size = 20;
+ lmo.l_addr_offset = 0;
+ lmo.l_addr_size = 4;
+ lmo.l_name_offset = 4;
+ lmo.l_name_size = 4;
+ lmo.l_next_offset = 12;
+ lmo.l_next_size = 4;
+ lmo.l_prev_offset = 16;
+ lmo.l_prev_size = 4;
+ }
+
+ return lmp;
+}
+
+/* Fetch (and possibly build) an appropriate `struct link_map_offsets'
+ for an LP64 SVR4 system. */
+
+struct link_map_offsets *
+svr4_lp64_fetch_link_map_offsets (void)
+{
+ static struct link_map_offsets lmo;
+ static struct link_map_offsets *lmp = NULL;
+
+ if (lmp == NULL)
+ {
+ lmp = &lmo;
+
+ /* Everything we need is in the first 16 bytes. */
+ lmo.r_debug_size = 16;
+ lmo.r_map_offset = 8;
+ lmo.r_map_size = 8;
+
+ /* Everything we need is in the first 40 bytes. */
+ lmo.link_map_size = 40;
+ lmo.l_addr_offset = 0;
+ lmo.l_addr_size = 8;
+ lmo.l_name_offset = 8;
+ lmo.l_name_size = 8;
+ lmo.l_next_offset = 24;
+ lmo.l_next_size = 8;
+ lmo.l_prev_offset = 32;
+ lmo.l_prev_size = 8;
+ }
+
+ return lmp;
+}
+
+
static struct target_so_ops svr4_so_ops;
extern initialize_file_ftype _initialize_svr4_solib; /* -Wmissing-prototypes */