/* Shared library support for RS/6000 (xcoff) object files, for GDB.
- Copyright 1991, 1992 Free Software Foundation.
+ Copyright (C) 1991, 1992, 1995, 1996, 1999, 2000, 2001
+ Free Software Foundation, Inc.
Contributed by IBM Corporation.
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 "bfd.h"
#include "gdb_regex.h"
-/* Return the module name of a given text address. Note that returned buffer
- is not persistent. */
+/* If ADDR lies in a shared library, return its name.
+ Note that returned name points to static data whose content is overwritten
+ by each call. */
char *
-pc_load_segment_name (CORE_ADDR addr)
+xcoff_solib_address (CORE_ADDR addr)
{
- static char buffer[BUFSIZ];
+ static char *buffer = NULL;
struct vmap *vp = vmap;
- buffer[0] = buffer[1] = '\0';
- for (; vp; vp = vp->nxt)
+ /* The first vmap entry is for the exec file. */
+
+ if (vp == NULL)
+ return NULL;
+ for (vp = vp->nxt; vp; vp = vp->nxt)
if (vp->tstart <= addr && addr < vp->tend)
{
- if (*vp->member)
- {
- buffer[0] = '(';
- strcat (&buffer[1], vp->member);
- strcat (buffer, ")");
- }
- strcat (buffer, vp->name);
+ xfree (buffer);
+ buffer = xstrprintf ("%s%s%s%s",
+ vp->name,
+ *vp->member ? "(" : "",
+ vp->member,
+ *vp->member ? ")" : "");
return buffer;
}
- return "(unknown load module)";
+ return NULL;
}
static void solib_info (char *, int);
struct vmap *vp = vmap;
/* Check for new shared libraries loaded with load (). */
- if (inferior_pid)
- xcoff_relocate_symtab (inferior_pid);
+ if (! ptid_equal (inferior_ptid, null_ptid))
+ xcoff_relocate_symtab (PIDGET (inferior_ptid));
if (vp == NULL || vp->nxt == NULL)
{
paddr (vp->tstart),paddr (vp->tend),
paddr (vp->dstart), paddr (vp->dend),
vp->loaded ? "Yes" : "No ",
+ vp->name,
*vp->member ? "(" : "",
vp->member,
- *vp->member ? ") " : "",
- vp->name);
+ *vp->member ? ")" : "");
}
}
dont_repeat ();
/* Check for new shared libraries loaded with load (). */
- if (inferior_pid)
- xcoff_relocate_symtab (inferior_pid);
+ if (! ptid_equal (inferior_ptid, null_ptid))
+ xcoff_relocate_symtab (PIDGET (inferior_ptid));
if (pattern)
{
char *re_err = re_comp (pattern);
if (re_err)
- error ("Invalid regexp: %s", re_err);
+ error (_("Invalid regexp: %s"), re_err);
}
/* Walk the list of currently loaded shared libraries, and read
}
void
-_initialize_solib (void)
+_initialize_xcoffsolib (void)
{
add_com ("sharedlibrary", class_files, sharedlibrary_command,
- "Load shared object library symbols for files matching REGEXP.");
+ _("Load shared object library symbols for files matching REGEXP."));
add_info ("sharedlibrary", solib_info,
- "Status of loaded shared object libraries");
-
- add_show_from_set
- (add_set_cmd ("auto-solib-add", class_support, var_zinteger,
- (char *) &auto_solib_add,
- "Set autoloading of shared library symbols.\n\
-If nonzero, symbols from all shared object libraries will be loaded\n\
-automatically when the inferior begins execution or when the dynamic linker\n\
-informs gdb that a new library has been loaded. Otherwise, symbols\n\
-must be loaded manually, using `sharedlibrary'.",
- &setlist),
- &showlist);
+ _("Status of loaded shared object libraries"));
+
+ add_setshow_boolean_cmd ("auto-solib-add", class_support,
+ &auto_solib_add, _("\
+Set autoloading of shared library symbols."), _("\
+Show autoloading of shared library symbols."), _("\
+If \"on\", symbols from all shared object libraries will be loaded\n\
+automatically when the inferior begins execution, when the dynamic linker\n\
+informs gdb that a new library has been loaded, or when attaching to the\n\
+inferior. Otherwise, symbols must be loaded manually, using `sharedlibrary'."),
+ NULL,
+ NULL, /* FIXME: i18n: */
+ &setlist, &showlist);
}