OSDN Git Service

2001-02-12 Michael Chastain <chastain@redhat.com>
authorchastain <chastain>
Fri, 16 Feb 2001 18:03:22 +0000 (18:03 +0000)
committerchastain <chastain>
Fri, 16 Feb 2001 18:03:22 +0000 (18:03 +0000)
* 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
gdb/somsolib.c

index e225017..627e250 100644 (file)
@@ -1,3 +1,10 @@
+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.
+
 2001-02-16  Andrew Cagney  <ac131313@redhat.com>
 
        * TODO (5.1): Move ``Hardware watchpint problems'' out of 5.1.
index dc38145..8bb3e79 100644 (file)
@@ -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 (&section_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, &section_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;