2003-01-10 Adam Fedor * symtab.c (symbol_init_demangled_name): Check for and demangle ObjC symbols. Index: symtab.c =================================================================== RCS file: /cvs/src/src/gdb/symtab.c,v retrieving revision 1.84 diff -u -p -r1.84 symtab.c --- symtab.c 2 Jan 2003 14:27:26 -0000 1.84 +++ symtab.c 11 Jan 2003 03:51:34 -0000 @@ -40,6 +40,7 @@ #include "linespec.h" #include "source.h" #include "filenames.h" /* for FILENAME_CMP */ +#include "objc-lang.h" #include "gdb_obstack.h" @@ -440,15 +441,31 @@ void symbol_init_demangled_name (struct general_symbol_info *gsymbol, struct obstack *obstack) { - char *mangled = gsymbol->name; - char *demangled = NULL; - if (gsymbol->language == language_unknown) gsymbol->language = language_auto; + + if (gsymbol->language == language_objc + || gsymbol->language == language_auto) + { + char *demangled = + objc_demangle (gsymbol->name); + if (demangled != NULL) + { + gsymbol->language = language_objc; + gsymbol->language_specific.objc_specific.demangled_name = + obsavestring (demangled, strlen (demangled), (obstack)); + xfree (demangled); + } + else + { + gsymbol->language_specific.objc_specific.demangled_name = NULL; + } + } + if (gsymbol->language == language_cplus || gsymbol->language == language_auto) { - demangled = + char *demangled = cplus_demangle (gsymbol->name, DMGL_PARAMS | DMGL_ANSI); if (demangled != NULL) { @@ -462,9 +479,10 @@ symbol_init_demangled_name (struct gener gsymbol->language_specific.cplus_specific.demangled_name = NULL; } } + if (gsymbol->language == language_java) { - demangled = + char *demangled = cplus_demangle (gsymbol->name, DMGL_PARAMS | DMGL_ANSI | DMGL_JAVA); if (demangled != NULL) @@ -831,7 +849,7 @@ lookup_symbol_aux (const char *name, con } #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) { @@ -1483,9 +1501,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.