summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Fedor <fedor@gnu.org>2002-10-18 22:49:42 +0000
committerAdam Fedor <fedor@gnu.org>2002-10-18 22:49:42 +0000
commitf8562180955b799418ff101b5d54dc44d8c4c47d (patch)
tree619215814580b009fe0d5e08100de846310089a8
parent2def8097027c827a775637ac1f4a050145c7fefc (diff)
downloadgdb-f8562180955b799418ff101b5d54dc44d8c4c47d.tar.gz
stabsread.c (find_name_end): New function.
(define_symbol): Use it.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/stabsread.c33
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 <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 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