From 9ca0e47c0078e485ad0d3a224014e677cf00d755 Mon Sep 17 00:00:00 2001 From: Michael Chastain Date: Fri, 16 Feb 2001 18:03:22 +0000 Subject: [PATCH] 2001-02-12 Michael Chastain * gdb/somsolib.c (som_solib_add_solib_objfile): Do not use section relocation feature of syms_from_objfile. Do my own section relocation, offsetting each section of the som by either text_addr - text_link_addr or data_start. --- gdb/ChangeLog | 7 +++++++ gdb/somsolib.c | 28 ++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e225017342c..627e250338c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2001-02-12 Michael Chastain + + * gdb/somsolib.c (som_solib_add_solib_objfile): Do not use + section relocation feature of syms_from_objfile. Do my own + section relocation, offsetting each section of the som by + either text_addr - text_link_addr or data_start. + 2001-02-16 Andrew Cagney * TODO (5.1): Move ``Hardware watchpint problems'' out of 5.1. diff --git a/gdb/somsolib.c b/gdb/somsolib.c index dc38145cce9..8bb3e79e950 100644 --- a/gdb/somsolib.c +++ b/gdb/somsolib.c @@ -1,5 +1,5 @@ /* Handle HP SOM shared libraries for GDB, the GNU Debugger. - Copyright 1993, 1996, 1999 Free Software Foundation, Inc. + Copyright 1993, 1996, 1999, 2001 Free Software Foundation, Inc. This file is part of GDB. @@ -283,14 +283,30 @@ som_solib_add_solib_objfile (struct so_list *so, char *name, int from_tty, CORE_ADDR text_addr) { obj_private_data_t *obj_private; - struct section_addr_info section_addrs; + struct obj_section *s; - memset (§ion_addrs, 0, sizeof (section_addrs)); - section_addrs.other[0].name = ".text"; - section_addrs.other[0].addr = text_addr; - so->objfile = symbol_file_add (name, from_tty, §ion_addrs, 0, OBJF_SHARED); + so->objfile = symbol_file_add (name, from_tty, NULL, 0, OBJF_SHARED); so->abfd = so->objfile->obfd; + /* syms_from_objfile has bizarre section offset code, + so I do my own right here. */ + for (s = so->objfile->sections; s < so->objfile->sections_end; s++) + { + flagword aflag = bfd_get_section_flags(so->abfd, s->the_bfd_section); + if (aflag & SEC_CODE) + { + s->addr += so->som_solib.text_addr - so->som_solib.text_link_addr; + s->endaddr += so->som_solib.text_addr - so->som_solib.text_link_addr; + } + else if (aflag & SEC_DATA) + { + s->addr += so->som_solib.data_start; + s->endaddr += so->som_solib.data_start; + } + else + ; + } + /* Mark this as a shared library and save private data. */ so->objfile->flags |= OBJF_SHARED; -- 2.30.2