diff options
author | Michael Chastain <mec.gnu@mindspring.com> | 2001-02-16 18:03:22 +0000 |
---|---|---|
committer | Michael Chastain <mec.gnu@mindspring.com> | 2001-02-16 18:03:22 +0000 |
commit | 80543309a1855846b3014a8f5cc859d62b824b0a (patch) | |
tree | 02d72e02a9e4da39473ca2f5ebd59edcdda50f65 /gdb/somsolib.c | |
parent | f29e2d2396d670642bad62d2cf167636c0296ffe (diff) | |
download | gdb-80543309a1855846b3014a8f5cc859d62b824b0a.tar.gz |
2001-02-12 Michael Chastain <chastain@redhat.com>
* 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.
Diffstat (limited to 'gdb/somsolib.c')
-rw-r--r-- | gdb/somsolib.c | 28 |
1 files changed, 22 insertions, 6 deletions
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; |