-/* Handle SOM shared libraries for GDB, the GNU Debugger.
+/* Handle SOM shared libraries.
- Copyright 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005 Free Software Foundation, Inc.
This file is part of GDB.
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. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
#include "defs.h"
#include "som.h"
msymbol = lookup_minimal_symbol ("__d_trap", NULL, symfile_objfile);
if (msymbol == NULL)
{
- warning (_(\
+ warning (_("\
Unable to find __dld_d_trap symbol in object file.\n\
Suggest linking with /opt/langtools/lib/end.o.\n\
GDB will be unable to track shl_load/shl_unload calls"));
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)
{
new->lm_info = xmalloc (sizeof (struct lm_info));
make_cleanup (xfree, new->lm_info);
- read_memory (lm, (char *)&dbuf, sizeof (struct dld_list));
+ read_memory (lm, (gdb_byte *)&dbuf, sizeof (struct dld_list));
- addr = extract_unsigned_integer (&dbuf.name, sizeof (dbuf.name));
+ addr = extract_unsigned_integer ((gdb_byte *)&dbuf.name,
+ sizeof (dbuf.name));
target_read_string (addr, &namebuf, SO_NAME_MAX_PATH_SIZE - 1, &errcode);
if (errcode != 0)
warning (_("Can't read pathname for load map: %s."),
lmi->lm_addr = lm;
#define EXTRACT(_fld) \
- extract_unsigned_integer (&dbuf._fld, sizeof (dbuf._fld));
+ extract_unsigned_integer ((gdb_byte *)&dbuf._fld, sizeof (dbuf._fld));
lmi->text_addr = EXTRACT (text_addr);
tmp = EXTRACT (info);