From e4bbbda840451028a06dd72904663e5f9a6ad3f2 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Sat, 21 Feb 2004 18:34:45 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 9 +++++++ gdb/solib-svr4.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- gdb/solib-svr4.h | 8 +++++- 3 files changed, 89 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 26c3432..f7f7cb0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2004-02-21 Mark Kettenis + + * 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. + 2004-02-20 Daniel Jacobowitz * dwarf2read.c (add_partial_symbol): Fix typo in adding enumerators 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 */ diff --git a/gdb/solib-svr4.h b/gdb/solib-svr4.h index d9d3217..d76c7f5 100644 --- a/gdb/solib-svr4.h +++ b/gdb/solib-svr4.h @@ -1,5 +1,6 @@ /* Handle shared libraries for GDB, the GNU Debugger. - Copyright 2000 + + Copyright 2000, 2004 Free Software Foundation, Inc. This file is part of GDB. @@ -82,3 +83,8 @@ extern CORE_ADDR svr4_fetch_objfile_link_map (struct objfile *objfile); which is used to fetch link map offsets. It will only be set by solib-legacy.c, if at all. */ extern struct link_map_offsets *(*legacy_svr4_fetch_link_map_offsets_hook)(void); + +/* Fetch (and possibly build) an appropriate `struct link_map_offsets' + for ILP32 and LP64 SVR4 systems. */ +extern struct link_map_offsets *svr4_ilp32_fetch_link_map_offsets (void); +extern struct link_map_offsets *svr4_lp64_fetch_link_map_offsets (void); -- 2.7.4