2007-11-15 Markus Deuling <deuling@de.ibm.com>
[deliverable/binutils-gdb.git] / gdb / solib-som.c
index 3727fb811a79286fdf4070c84931dc59aa2c714d..2c9b00141b1bd7397904057e37ff66ffa3cfdbfc 100644 (file)
@@ -1,12 +1,12 @@
 /* Handle SOM shared libraries.
 
-   Copyright 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "som.h"
 #include "symtab.h"
 #include "bfd.h"
 #include "symfile.h"
@@ -31,6 +28,7 @@
 
 #include "hppa-tdep.h"
 #include "solist.h"
+#include "solib.h"
 
 #undef SOLIB_SOM_DBG 
 
@@ -113,13 +111,6 @@ som_relocate_section_addresses (struct so_list *so,
 {
   flagword aflag = bfd_get_section_flags(so->abfd, sec->the_bfd_section);
 
-  /* solib.c does something similar, but it only recognizes ".text", SOM calls
-     the text section "$CODE$".  */
-  if (strcmp (sec->the_bfd_section->name, "$CODE$") == 0)
-    {
-      so->textsection = sec;
-    }
-
   if (aflag & SEC_CODE)
     {
       sec->addr    += so->lm_info->text_addr - so->lm_info->text_link_addr; 
@@ -313,50 +304,6 @@ keep_going:
   clear_symtab_users ();
 }
 
-/* This operation removes the "hook" between GDB and the dynamic linker,
-   which causes the dld to notify GDB of shared library events.
-
-   After this operation completes, the dld will no longer notify GDB of
-   shared library events.  To resume notifications, GDB must call
-   som_solib_create_inferior_hook.
-
-   This operation does not remove any knowledge of shared libraries
-   of which GDB may already have been notified.
- */
-static void
-som_solib_remove_inferior_hook (int pid)
-{
-  CORE_ADDR addr;
-  struct minimal_symbol *msymbol;
-  int status;
-  char dld_flags_buffer[4];
-  unsigned int dld_flags_value;
-  struct cleanup *old_cleanups = save_inferior_ptid ();
-
-  /* Ensure that we're really operating on the specified process. */
-  inferior_ptid = pid_to_ptid (pid);
-
-  /* We won't bother to remove the solib breakpoints from this process.
-
-     In fact, on PA64 the breakpoint is hard-coded into the dld callback,
-     and thus we're not supposed to remove it.
-
-     Rather, we'll merely clear the dld_flags bit that enables callbacks.
-   */
-  msymbol = lookup_minimal_symbol ("__dld_flags", NULL, NULL);
-
-  addr = SYMBOL_VALUE_ADDRESS (msymbol);
-  status = target_read_memory (addr, dld_flags_buffer, 4);
-
-  dld_flags_value = extract_unsigned_integer (dld_flags_buffer, 4);
-
-  dld_flags_value &= ~DLD_FLAGS_HOOKVALID;
-  store_unsigned_integer (dld_flags_buffer, 4, dld_flags_value);
-  status = target_write_memory (addr, dld_flags_buffer, 4);
-
-  do_cleanups (old_cleanups);
-}
-
 static void
 som_special_symbol_handling (void)
 {
@@ -564,7 +511,7 @@ link_map_start (void)
   read_memory (addr, buf, 4);
   addr = extract_unsigned_integer (buf, 4);
   if (addr == 0)
-    error (_("Debugging dynamic executables loaded via the hpux8 dld.sl is not supported."));
+    return 0;
 
   read_memory (addr, buf, 4);
   return extract_unsigned_integer (buf, 4);
@@ -667,6 +614,9 @@ som_current_sos (void)
                    paddr_nz (new->lm_info->tsd_start_addr));
 #endif
 
+           new->addr_low = lmi->text_addr;
+           new->addr_high = lmi->text_end;
+
            /* Link the new object onto the list.  */
            new->next = NULL;
            *link_ptr = new;
@@ -809,9 +759,10 @@ _initialize_som_solib (void)
   som_so_ops.in_dynsym_resolve_code = som_in_dynsym_resolve_code;
 }
 
-void som_solib_select (struct gdbarch_tdep *tdep)
+void som_solib_select (struct gdbarch *gdbarch)
 {
-  current_target_so_ops = &som_so_ops;
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  set_solib_ops (gdbarch, &som_so_ops);
 
   tdep->solib_thread_start_addr = som_solib_thread_start_addr;
   tdep->solib_get_got_by_pc = som_solib_get_got_by_pc;
This page took 0.025883 seconds and 4 git commands to generate.