+2000-02-10 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
+
+ Get rid of AIX specific PC_LOAD_SEGMENT, replace with PC_SOLIB.
+ * xcoffsolib.c (xcoff_solib_address): Renamed from
+ pc_load_segment_name. Return NULL if address is not in a shared
+ library. Cleanup shared library name construction, using xasprintf.
+ Format shared library member names consistent with format in exec.c.
+ (solib_info): Format shared library member names consistent with
+ format in exec.c.
+ * config/rs6000/nm-rs6000.h: Replace PC_LOAD_SEGMENT with PC_SOLIB,
+ using xcoff_solib_address for PC_SOLIB definition.
+ * stack.c (print_frame): Remove PC_LOAD_SEGMENT code, no longer
+ needed.
+
2000-02-10 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
* mipsread.c (read_alphacoff_dynamic_symtab): Replace alloca calls
/* IBM RS/6000 native-dependent macros for GDB, the GNU debugger.
- Copyright 1986, 1987, 1989, 1991, 1992, 1994 Free Software Foundation, Inc.
+ Copyright 1986, 1987, 1989, 1991, 1992, 1994, 2001
+ Free Software Foundation, Inc.
This file is part of GDB.
struct target_ops;
extern void xcoff_relocate_core (struct target_ops *);
-/* Load segment of a given pc value. */
+/* If ADDR lies in a shared library, return its name. */
-#define PC_LOAD_SEGMENT(PC) pc_load_segment_name(PC)
-extern char *pc_load_segment_name (CORE_ADDR);
+#define PC_SOLIB(PC) xcoff_solib_address(PC)
+extern char *xcoff_solib_address (CORE_ADDR);
/* Return sizeof user struct to callers in less machine dependent routines */
annotate_frame_source_end ();
}
-#ifdef PC_LOAD_SEGMENT
- /* If we couldn't print out function name but if can figure out what
- load segment this pc value is from, at least print out some info
- about its load segment. */
- if (!funname)
- {
- annotate_frame_where ();
-#ifdef UI_OUT
- ui_out_wrap_hint (uiout, " ");
- ui_out_text (uiout, " from ");
- ui_out_field_string (uiout, "from", PC_LOAD_SEGMENT (fi->pc));
-#else
- wrap_here (" ");
- printf_filtered (" from %s", PC_LOAD_SEGMENT (fi->pc));
-#endif
- }
-#endif /* PC_LOAD_SEGMENT */
-
#ifdef PC_SOLIB
if (!funname || (!sal.symtab || !sal.symtab->filename))
{
/* Shared library support for RS/6000 (xcoff) object files, for GDB.
- Copyright 1991, 1992 Free Software Foundation.
+ Copyright 1991, 1992, 2001 Free Software Foundation.
Contributed by IBM Corporation.
This file is part of GDB.
#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);
+ xasprintf (&buffer, "%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);
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 ? ")" : "");
}
}