diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2007-10-19 12:23:21 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2007-10-19 12:23:21 +0000 |
commit | 149ad273c520ca22c19edc35f054fd05fe6cc6e7 (patch) | |
tree | 29f56f16dd0bf1929f57b55e92925c497366e5dd /gdb/sparc-sol2-tdep.c | |
parent | 603b72571dd17826efe9843dab8fbb0d5012a1f3 (diff) | |
download | gdb-149ad273c520ca22c19edc35f054fd05fe6cc6e7.zip gdb-149ad273c520ca22c19edc35f054fd05fe6cc6e7.tar.gz gdb-149ad273c520ca22c19edc35f054fd05fe6cc6e7.tar.bz2 |
* gdbarch.sh (static_transform_name): New gdbarch callback.
* gdbarch.c, gdbarch.h: Regenerate.
* dbxread.c (read_dbx_symtab): Use gdbarch_static_transform_name
instead of STATIC_TRANSFORM_NAME.
* mdebugread.c (parse_partial_symbols): Likewise.
* stabsread.c (define_symbol): Likewise.
* xcoffread.c (scan_xcoff_symtab): Likewise.
* config/i368/tm-i386sol2.h (STATIC_TRANSFORM_NAME): Remove.
(IS_STATIC_TRANSFORM_NAME): Remove.
* i386-tdep.c (sunpro_static_transform_name): Remove, move to ...
* i386-sol2-tdep.c (i386_sol2_static_transform_name): ... here.
(i386_sol2_init_abi): Install it.
* config/sparc/tm-sol2.h (STATIC_TRANSFORM_NAME): Remove.
(IS_STATIC_TRANSFORM_NAME): Remove.
* sparc-tdep.c (sparc_stabs_unglobalize_name): Remove, move to ...
* sparc-sol2-tdep.c (sparc_sol2_static_transform_name): ... here.
(sparc32_sol2_init_abi): Install it.
* sparc64-sol2-tdep.c (sparc64_sol2_init_abi): Likewise.
* sparc-tdep.h (sparc_sol2_static_transform_name): Add prototype.
Diffstat (limited to 'gdb/sparc-sol2-tdep.c')
-rw-r--r-- | gdb/sparc-sol2-tdep.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/gdb/sparc-sol2-tdep.c b/gdb/sparc-sol2-tdep.c index fcfb555..bb04fd5 100644 --- a/gdb/sparc-sol2-tdep.c +++ b/gdb/sparc-sol2-tdep.c @@ -168,6 +168,37 @@ sparc32_sol2_sigtramp_frame_sniffer (struct frame_info *next_frame) return NULL; } + +/* Unglobalize NAME. */ + +char * +sparc_sol2_static_transform_name (char *name) +{ + /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, + SunPRO) convert file static variables into global values, a + process known as globalization. In order to do this, the + compiler will create a unique prefix and prepend it to each file + static variable. For static variables within a function, this + globalization prefix is followed by the function name (nested + static variables within a function are supposed to generate a + warning message, and are left alone). The procedure is + documented in the Stabs Interface Manual, which is distrubuted + with the compilers, although version 4.0 of the manual seems to + be incorrect in some places, at least for SPARC. The + globalization prefix is encoded into an N_OPT stab, with the form + "G=<prefix>". The globalization prefix always seems to start + with a dollar sign '$'; a dot '.' is used as a seperator. So we + simply strip everything up until the last dot. */ + + if (name[0] == '$') + { + char *p = strrchr (name, '.'); + if (p) + return p + 1; + } + + return name; +} void @@ -175,6 +206,11 @@ sparc32_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + /* The Sun compilers also do "globalization"; see the comment in + sparc_sol2_static_transform_name for more information. */ + set_gdbarch_static_transform_name + (gdbarch, sparc_sol2_static_transform_name); + /* Solaris has SVR4-style shared libraries... */ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); set_gdbarch_skip_solib_resolver (gdbarch, sol2_skip_solib_resolver); |