From 1bae87b9e6b3c222e123b8f03fc7074e1036ef70 Mon Sep 17 00:00:00 2001 From: Adam Fedor Date: Tue, 29 Apr 2003 02:34:24 +0000 Subject: [PATCH] * symtab.c (symbol_find_demangled_name): Check for and demangle ObjC symbols. (symbol_init_demangled_name): Init for language_objc as well. --- gdb/ChangeLog | 6 ++++++ gdb/Makefile.in | 2 +- gdb/symtab.c | 24 +++++++++++++++++++----- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8753b2f6a9b..d7b46202395 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2003-04-28 Adam Fedor + + * symtab.c (symbol_find_demangled_name): Check for and demangle + ObjC symbols. + (symbol_init_demangled_name): Init for language_objc as well. + 2003-04-28 Andrew Cagney * gdbarch.sh (DEPRECATED_TARGET_READ_FP): Replace TARGET_READ_FP. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 7c582ff06de..3707de27f96 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -2275,7 +2275,7 @@ symtab.o: symtab.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(gdbcore_h) \ $(gdbcmd_h) $(call_cmds_h) $(gdb_regex_h) $(expression_h) \ $(language_h) $(demangle_h) $(inferior_h) $(linespec_h) \ $(filenames_h) $(gdb_obstack_h) $(gdb_string_h) $(gdb_stat_h) \ - $(cp_abi_h) $(source_h) $(block_h) + $(cp_abi_h) $(source_h) $(block_h) $(objc_lang_h) target.o: target.c $(defs_h) $(gdb_string_h) $(target_h) $(gdbcmd_h) \ $(symtab_h) $(inferior_h) $(bfd_h) $(symfile_h) $(objfiles_h) \ $(gdb_wait_h) $(dcache_h) $(regcache_h) diff --git a/gdb/symtab.c b/gdb/symtab.c index e144197d606..2c46f9d6751 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -40,6 +40,7 @@ #include "linespec.h" #include "source.h" #include "filenames.h" /* for FILENAME_CMP */ +#include "objc-lang.h" #include "hashtab.h" @@ -459,6 +460,18 @@ symbol_find_demangled_name (struct general_symbol_info *gsymbol, if (gsymbol->language == language_unknown) gsymbol->language = language_auto; + + if (gsymbol->language == language_objc + || gsymbol->language == language_auto) + { + demangled = + objc_demangle (mangled, 0); + if (demangled != NULL) + { + gsymbol->language = language_objc; + return demangled; + } + } if (gsymbol->language == language_cplus || gsymbol->language == language_auto) { @@ -607,7 +620,8 @@ symbol_init_demangled_name (struct general_symbol_info *gsymbol, demangled = symbol_find_demangled_name (gsymbol, mangled); if (gsymbol->language == language_cplus - || gsymbol->language == language_java) + || gsymbol->language == language_java + || gsymbol->language == language_objc) { if (demangled) { @@ -993,7 +1007,7 @@ lookup_symbol_aux (const char *name, const char *mangled_name, } #endif /* 0 */ - /* C++: If requested to do so by the caller, + /* C++/Java/Objective-C: If requested to do so by the caller, check to see if NAME is a field of `this'. */ if (is_a_field_of_this) { @@ -1653,9 +1667,9 @@ find_main_psymtab (void) for now we don't worry about the slight inefficiency of looking for a match we'll never find, since it will go pretty quick. Once the binary search terminates, we drop through and do a straight linear - search on the symbols. Each symbol which is marked as being a C++ - symbol (language_cplus set) has both the encoded and non-encoded names - tested for a match. + search on the symbols. Each symbol which is marked as being a ObjC/C++ + symbol (language_cplus or language_objc set) has both the encoded and + non-encoded names tested for a match. If MANGLED_NAME is non-NULL, verify that any symbol we find has this particular mangled name. -- 2.30.2