-/* Handle SOM shared libraries for GDB, the GNU Debugger.
+/* Handle SOM shared libraries.
- Copyright 2004 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2007 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"
status = target_write_memory (anaddr, buf, 4);
if (status != 0)
{
- warning ("Unable to write __d_pid");
- warning ("Suggest linking with /opt/langtools/lib/end.o.");
- warning ("GDB will be unable to track shl_load/shl_unload calls");
+ warning (_("\
+Unable to write __d_pid.\n\
+Suggest linking with /opt/langtools/lib/end.o.\n\
+GDB will be unable to track shl_load/shl_unload calls"));
goto keep_going;
}
msymbol = lookup_minimal_symbol ("__d_trap", NULL, symfile_objfile);
if (msymbol == NULL)
{
- warning ("Unable to find _DLD_HOOK symbol in object file.");
- warning ("Suggest linking with /opt/langtools/lib/end.o.");
- warning ("GDB will be unable to track shl_load/shl_unload calls");
+ warning (_("\
+Unable to find _DLD_HOOK 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"));
goto keep_going;
}
anaddr = SYMBOL_VALUE_ADDRESS (msymbol);
msymbol = lookup_minimal_symbol ("__dld_hook", NULL, symfile_objfile);
if (msymbol == NULL)
{
- warning ("Unable to find __dld_hook symbol in object file.");
- warning ("Suggest linking with /opt/langtools/lib/end.o.");
- warning ("GDB will be unable to track shl_load/shl_unload calls");
+ warning (_("\
+Unable to find __dld_hook 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"));
goto keep_going;
}
anaddr = SYMBOL_VALUE_ADDRESS (msymbol);
msymbol = lookup_minimal_symbol ("__d_trap", NULL, symfile_objfile);
if (msymbol == NULL)
{
- warning ("Unable to find __dld_d_trap symbol in object file.");
- warning ("Suggest linking with /opt/langtools/lib/end.o.");
- warning ("GDB will be unable to track shl_load/shl_unload calls");
+ 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"));
goto keep_going;
}
create_solib_event_breakpoint (SYMBOL_VALUE_ADDRESS (msymbol));
msymbol = lookup_minimal_symbol ("__dld_flags", NULL, NULL);
if (msymbol == NULL)
{
- error ("Unable to find __dld_flags symbol in object file.\n");
+ error (_("Unable to find __dld_flags symbol in object file."));
}
anaddr = SYMBOL_VALUE_ADDRESS (msymbol);
/* Read the current contents. */
status = target_read_memory (anaddr, buf, 4);
if (status != 0)
- {
- error ("Unable to read __dld_flags\n");
- }
+ error (_("Unable to read __dld_flags."));
dld_flags = extract_unsigned_integer (buf, 4);
/* Turn on the flags we care about. */
store_unsigned_integer (buf, 4, dld_flags);
status = target_write_memory (anaddr, buf, 4);
if (status != 0)
- {
- error ("Unable to write __dld_flags\n");
- }
+ error (_("Unable to write __dld_flags."));
/* Now find the address of _start and set a breakpoint there.
We still need this code for two reasons:
msymbol = lookup_minimal_symbol ("_start", NULL, symfile_objfile);
if (msymbol == NULL)
- {
- error ("Unable to find _start symbol in object file.\n");
- }
+ error (_("Unable to find _start symbol in object file."));
anaddr = SYMBOL_VALUE_ADDRESS (msymbol);
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)
{
sym = lookup_minimal_symbol ("__dld_flags", NULL, NULL);
if (!sym)
- {
- error ("Unable to find __dld_flags symbol in object file.\n");
- return 0;
- }
+ error (_("Unable to find __dld_flags symbol in object file."));
addr = SYMBOL_VALUE_ADDRESS (sym);
read_memory (addr, buf, 4);
dld_flags = extract_unsigned_integer (buf, 4);
if ((dld_flags & DLD_FLAGS_LISTVALID) == 0)
- {
- error ("__dld_list is not valid according to __dld_flags.\n");
- return 0;
- }
+ error (_("__dld_list is not valid according to __dld_flags."));
/* If the libraries were not mapped private, warn the user. */
if ((dld_flags & DLD_FLAGS_MAPPRIVATE) == 0)
- warning ("The shared libraries were not privately mapped; setting a\n"
+ warning (_("The shared libraries were not privately mapped; setting a\n"
"breakpoint in a shared library will not work until you rerun the "
- "program.\n");
+ "program.\n"));
sym = lookup_minimal_symbol ("__dld_list", NULL, NULL);
if (!sym)
sym = lookup_minimal_symbol ("__dld_flags", NULL, NULL);
if (!sym)
{
- error ("Unable to find dynamic library list.\n");
+ error (_("Unable to find dynamic library list."));
return 0;
}
addr = SYMBOL_VALUE_ADDRESS (sym) - 8;
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.\n");
- return 0;
- }
+ return 0;
read_memory (addr, buf, 4);
return extract_unsigned_integer (buf, 4);
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 ("current_sos: Can't read pathname for load map: %s\n",
- safe_strerror (errcode));
- }
+ warning (_("Can't read pathname for load map: %s."),
+ safe_strerror (errcode));
else
{
strncpy (new->so_name, namebuf, SO_NAME_MAX_PATH_SIZE - 1);
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);
if (errcode)
{
- warning ("failed to read exec filename from attached file: %s",
+ warning (_("failed to read exec filename from attached file: %s"),
safe_strerror (errcode));
return 0;
}
"$PRIVATE$");
if (!private_section)
{
- warning ("Unable to find $PRIVATE$ in shared library!");
+ warning (_("Unable to find $PRIVATE$ in shared library!"));
offsets->offsets[SECT_OFF_DATA (objfile)] = 0;
offsets->offsets[SECT_OFF_BSS (objfile)] = 0;
return 1;