summaryrefslogtreecommitdiff
path: root/gdb/sparc-sol2-tdep.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2007-10-19 12:23:21 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2007-10-19 12:23:21 +0000
commit149ad273c520ca22c19edc35f054fd05fe6cc6e7 (patch)
tree29f56f16dd0bf1929f57b55e92925c497366e5dd /gdb/sparc-sol2-tdep.c
parent603b72571dd17826efe9843dab8fbb0d5012a1f3 (diff)
downloadbinutils-gdb-149ad273c520ca22c19edc35f054fd05fe6cc6e7.tar.gz
* 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.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/gdb/sparc-sol2-tdep.c b/gdb/sparc-sol2-tdep.c
index fcfb5553c5c..bb04fd5f63b 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);