This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [RFA] Demangle ObjC symbols in symtab.c [4/5]
- From: Adam Fedor <fedor at doc dot com>
- To: GDB Patches <gdb-patches at sources dot redhat dot com>
- Cc: Michael Snyder <msnyder at redhat dot com>, Elena Zannoni <ezannoni at redhat dot com>
- Date: Fri, 10 Jan 2003 21:01:34 -0700
- Subject: Re: [RFA] Demangle ObjC symbols in symtab.c [4/5]
- References: <3E1616B7.1010001@doc.com> <3E1637DA.BFD960F9@redhat.com>
Michael Snyder wrote:
Adam Fedor wrote:
2003-01-03 Adam Fedor <fedor@gnu.org>
* symtab.c (symbol_init_demangled_name): Check for and demangle
ObjC symbols.
(make_symbol_completion_list): Look for ObjC symbols
Not to be too fussy, but these two changes seem unrelated.
It might be better to submit them separately. Easier to
review and approve.
Here's the first half of the patch again with a small change.
2003-01-10 Adam Fedor <fedor@gnu.org>
* 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.