From a8079a9b4cb31cbff90e4c6aba803dc7e9a1c2d0 Mon Sep 17 00:00:00 2001 From: Peter Schauer Date: Sat, 10 Feb 2001 12:01:11 +0000 Subject: [PATCH] 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. --- gdb/ChangeLog | 14 +++++++++++++ gdb/config/rs6000/nm-rs6000.h | 9 +++++---- gdb/stack.c | 18 ----------------- gdb/xcoffsolib.c | 37 +++++++++++++++++++---------------- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d9ddef1a8fc..ae38ff09ae7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2000-02-10 Peter Schauer + + 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 * mipsread.c (read_alphacoff_dynamic_symtab): Replace alloca calls diff --git a/gdb/config/rs6000/nm-rs6000.h b/gdb/config/rs6000/nm-rs6000.h index d405aecbffb..573723a8d57 100644 --- a/gdb/config/rs6000/nm-rs6000.h +++ b/gdb/config/rs6000/nm-rs6000.h @@ -1,5 +1,6 @@ /* 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. @@ -57,10 +58,10 @@ extern void xcoff_relocate_symtab (unsigned int); 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 */ diff --git a/gdb/stack.c b/gdb/stack.c index 5bc044f2625..af415e2c2f7 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -626,24 +626,6 @@ print_frame (struct frame_info *fi, 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)) { diff --git a/gdb/xcoffsolib.c b/gdb/xcoffsolib.c index 3876a426239..f2bc60e576d 100644 --- a/gdb/xcoffsolib.c +++ b/gdb/xcoffsolib.c @@ -1,5 +1,5 @@ /* 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. @@ -29,29 +29,32 @@ #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); @@ -84,10 +87,10 @@ Text Range Data Range Syms Shared Object Library\n"); 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 ? ")" : ""); } } -- 2.30.2