aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/symtab.c18
2 files changed, 24 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c5380b0..9adc414 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2008-02-01 Joel Brobecker <brobecker@adacore.com>
+
+ * symtab.c (symbol_set_names): Do not add an entry in the demangling
+ hash table for Ada symbols. Just store the linkage name as is,
+ and leave the demangled_name as NULL.
+
2007-02-01 Joel Brobecker <brobecker@adacore.com>
* dwarf2read.c (add_partial_symbol): Always store all Ada subprograms
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 2e0a9b7..3912ebd 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -517,6 +517,24 @@ symbol_set_names (struct general_symbol_info *gsymbol,
if (objfile->demangled_names_hash == NULL)
create_demangled_names_hash (objfile);
+ if (gsymbol->language == language_ada)
+ {
+ /* In Ada, we do the symbol lookups using the mangled name, so
+ we can save some space by not storing the demangled name.
+
+ As a side note, we have also observed some overlap between
+ the C++ mangling and Ada mangling, similarly to what has
+ been observed with Java. Because we don't store the demangled
+ name with the symbol, we don't need to use the same trick
+ as Java. */
+ gsymbol->name = obstack_alloc (&objfile->objfile_obstack, len + 1);
+ memcpy (gsymbol->name, linkage_name, len);
+ gsymbol->name[len] = '\0';
+ gsymbol->language_specific.cplus_specific.demangled_name = NULL;
+
+ return;
+ }
+
/* The stabs reader generally provides names that are not
NUL-terminated; most of the other readers don't do this, so we
can just use the given copy, unless we're in the Java case. */