diff options
author | Adam Fedor <fedor@gnu.org> | 2002-10-18 22:49:42 +0000 |
---|---|---|
committer | Adam Fedor <fedor@gnu.org> | 2002-10-18 22:49:42 +0000 |
commit | f8562180955b799418ff101b5d54dc44d8c4c47d (patch) | |
tree | 619215814580b009fe0d5e08100de846310089a8 /gdb/stabsread.c | |
parent | 2def8097027c827a775637ac1f4a050145c7fefc (diff) | |
download | gdb-f8562180955b799418ff101b5d54dc44d8c4c47d.tar.gz |
stabsread.c (find_name_end): New function.
(define_symbol): Use it.
Diffstat (limited to 'gdb/stabsread.c')
-rw-r--r-- | gdb/stabsread.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/gdb/stabsread.c b/gdb/stabsread.c index ea2045ec07b..f96eef7a469 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -169,6 +169,8 @@ static int read_cfront_member_functions (struct field_info *, char **, struct type *, struct objfile *); +static char *find_name_end (char *name); + /* end new functions added for cfront support */ static void @@ -1271,7 +1273,7 @@ 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 *) find_name_end (string); int deftype; int synonym = 0; register int i; @@ -2004,7 +2006,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); @@ -5616,6 +5619,32 @@ finish_global_stabs (struct objfile *objfile) } } +/* Find the end of the name, delimited by a ':', but don't match + ObjC symbols which look like -[Foo bar::]:bla. */ +static char * +find_name_end (char *name) +{ + char *s = name; + if (s[0] == '-' || *s == '+') + { + /* Must be an ObjC method symbol. */ + 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, ':'); + } +} + /* Initializer for this module */ void |