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 | 7e1d63ec945b750ec26d9493b9851f036f97df6c (patch) | |
tree | 35d858b58d355aa015ddb7510d7c2805ee24e542 | |
parent | 6e8d29a92c4a8953865ec0b007e4eb1b149cdffa (diff) | |
download | gdb-7e1d63ec945b750ec26d9493b9851f036f97df6c.zip gdb-7e1d63ec945b750ec26d9493b9851f036f97df6c.tar.gz gdb-7e1d63ec945b750ec26d9493b9851f036f97df6c.tar.bz2 |
stabsread.c (find_name_end): New function.
(define_symbol): Use it.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/stabsread.c | 33 |
2 files changed, 36 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e2503e5..230c0bb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2002-10-18 Adam Fedor <fedor@gnu.org> + + * stabsread.c (find_name_end): New function. + (define_symbol): Use it. + 2002-10-18 Daniel Jacobowitz <drow@mvista.com> * config/alpha/nm-fbsd.h (CANNOT_STEP_BREAKPOINT): Define to 1. diff --git a/gdb/stabsread.c b/gdb/stabsread.c index ea2045e..f96eef7 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 |