diff options
Diffstat (limited to 'gdb/stabsread.c')
-rw-r--r-- | gdb/stabsread.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/gdb/stabsread.c b/gdb/stabsread.c index 4697b4067e7..0263e9e4c7b 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -1267,13 +1267,37 @@ symbol_reference_defined (char **string) } } +static char * +objc_find_colon (name) + char *name; +{ + char *s = name; + if (s[0] == '-' || *s == '+') + { + if (s[1] != '[') + { + error ("invalid symbol name \"%s\"", name); + } + s = strchr (s, ']'); + if (s == NULL) + { + error ("invalid symbol name \"%s\"", name); + } + return strchr (s, ':'); + } + else + { + return strchr (s, ':'); + } +} + /* ARGSUSED */ struct symbol * define_symbol (CORE_ADDR valu, char *string, int desc, int type, struct objfile *objfile) { register struct symbol *sym; - char *p = (char *) strchr (string, ':'); + char *p = (char *) objc_find_colon (string); int deftype; int synonym = 0; register int i; @@ -2006,7 +2030,8 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type, a typedef for "foo". Unfortunately, cfront never makes the typedef when translating C++ into C. We make the typedef here so that "ptype foo" works as expected for cfront translated code. */ - else if (current_subfile->language == language_cplus) + else if ((current_subfile->language == language_cplus) + || (current_subfile->language == language_objc)) synonym = 1; SYMBOL_TYPE (sym) = read_type (&p, objfile); |