/* Shared library support for IRIX.
Copyright (C) 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2004,
- 2007 Free Software Foundation, Inc.
+ 2007, 2008, 2009 Free Software Foundation, Inc.
This file was created using portions of irix5-nat.c originally
contributed to GDB by Ian Lance Taylor.
#include "gdbcore.h"
#include "target.h"
#include "inferior.h"
+#include "gdbthread.h"
#include "solist.h"
+#include "solib.h"
+#include "solib-irix.h"
+
/* Link map info to include in an allocate so_list entry. Unlike some
of the other solib backends, this (Irix) backend chooses to decode
this routine automatically determines which (of three) link map
formats is in use by the target. */
-struct lm_info
+static struct lm_info
fetch_lm_info (CORE_ADDR addr)
{
struct lm_info li;
static void
irix_solib_create_inferior_hook (void)
{
+ struct inferior *inf;
+ struct thread_info *tp;
+
if (!enable_break ())
{
warning (_("shared library handler failed to enable breakpoint"));
can go groveling around in the dynamic linker structures to find
out what we need to know about them. */
+ inf = current_inferior ();
+ tp = inferior_thread ();
+
clear_proceed_status ();
- stop_soon = STOP_QUIETLY;
- stop_signal = TARGET_SIGNAL_0;
+
+ inf->stop_soon = STOP_QUIETLY;
+ tp->stop_signal = TARGET_SIGNAL_0;
+
do
{
- target_resume (pid_to_ptid (-1), 0, stop_signal);
- wait_for_inferior ();
+ target_resume (pid_to_ptid (-1), 0, tp->stop_signal);
+ wait_for_inferior (0);
}
- while (stop_signal != TARGET_SIGNAL_TRAP);
+ while (tp->stop_signal != TARGET_SIGNAL_TRAP);
/* We are now either at the "mapping complete" breakpoint (or somewhere
else, a condition we aren't prepared to deal with anyway), so adjust
Delaying the resetting of stop_soon until after symbol loading
suppresses the warning. */
solib_add ((char *) 0, 0, (struct target_ops *) 0, auto_solib_add);
- stop_soon = NO_STOP_QUIETLY;
+ inf->stop_soon = NO_STOP_QUIETLY;
}
/* LOCAL FUNCTION
read_memory (debug_base,
addr_buf,
- gdbarch_addr_bit (current_gdbarch) / TARGET_CHAR_BIT);
+ gdbarch_addr_bit (target_gdbarch) / TARGET_CHAR_BIT);
lma = extract_mips_address (addr_buf,
- gdbarch_addr_bit (current_gdbarch)
+ gdbarch_addr_bit (target_gdbarch)
/ TARGET_CHAR_BIT);
while (lma)
char *filename;
if (symfile_objfile)
- if (!query ("Attempt to reload symbols from process? "))
+ if (!query (_("Attempt to reload symbols from process? ")))
return 0;
if ((debug_base = locate_base ()) == 0)
/* First link map member should be the executable. */
read_memory (debug_base,
addr_buf,
- gdbarch_addr_bit (current_gdbarch) / TARGET_CHAR_BIT);
+ gdbarch_addr_bit (target_gdbarch) / TARGET_CHAR_BIT);
lma = extract_mips_address (addr_buf,
- gdbarch_addr_bit (current_gdbarch)
+ gdbarch_addr_bit (target_gdbarch)
/ TARGET_CHAR_BIT);
if (lma == 0)
return 0; /* failed somehow... */
static void
irix_relocate_section_addresses (struct so_list *so,
- struct section_table *sec)
+ struct target_section *sec)
{
sec->addr += so->lm_info->reloc_offset;
sec->endaddr += so->lm_info->reloc_offset;
return 0;
}
-static struct target_so_ops irix_so_ops;
+struct target_so_ops irix_so_ops;
+
+/* Provide a prototype to silence -Wmissing-prototypes. */
+extern initialize_file_ftype _initialize_irix_solib;
void
_initialize_irix_solib (void)
irix_so_ops.current_sos = irix_current_sos;
irix_so_ops.open_symbol_file_object = irix_open_symbol_file_object;
irix_so_ops.in_dynsym_resolve_code = irix_in_dynsym_resolve_code;
-
- /* FIXME: Don't do this here. *_gdbarch_init() should set so_ops. */
- current_target_so_ops = &irix_so_ops;
}