From 7e1d63ec945b750ec26d9493b9851f036f97df6c Mon Sep 17 00:00:00 2001 From: Adam Fedor Date: Fri, 18 Oct 2002 22:49:42 +0000 Subject: [PATCH] stabsread.c (find_name_end): New function. (define_symbol): Use it. --- gdb/ChangeLog | 5 +++++ gdb/stabsread.c | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e2503e5a499..230c0bb2531 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2002-10-18 Adam Fedor + + * stabsread.c (find_name_end): New function. + (define_symbol): Use it. + 2002-10-18 Daniel Jacobowitz * config/alpha/nm-fbsd.h (CANNOT_STEP_BREAKPOINT): Define to 1. 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 -- 2.30.2