diff options
Diffstat (limited to 'gdb/sparc-linux-tdep.c')
-rw-r--r-- | gdb/sparc-linux-tdep.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/gdb/sparc-linux-tdep.c b/gdb/sparc-linux-tdep.c index 3ba72f68908..e3643f82a91 100644 --- a/gdb/sparc-linux-tdep.c +++ b/gdb/sparc-linux-tdep.c @@ -22,9 +22,40 @@ #include "defs.h" #include "gdbarch.h" #include "osabi.h" +#include "solib-svr4.h" #include "sparc-tdep.h" +static struct link_map_offsets * +sparc32_linux_svr4_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; +} + static void sparc32_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { @@ -33,6 +64,9 @@ sparc32_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) /* ... but doesn't have kernel-assisted single-stepping support. */ set_gdbarch_software_single_step (gdbarch, sparc_software_single_step); + + set_solib_svr4_fetch_link_map_offsets + (gdbarch, sparc32_linux_svr4_fetch_link_map_offsets); } /* Provide a prototype to silence -Wmissing-prototypes. */ |