aboutsummaryrefslogtreecommitdiff
path: root/gdb/stabsread.c
diff options
context:
space:
mode:
authorPeter Schauer <Peter.Schauer@mytum.de>2002-03-08 17:19:39 +0000
committerPeter Schauer <Peter.Schauer@mytum.de>2002-03-08 17:19:39 +0000
commit4ea09c106de258952e9adc452e2c1d3e7a49c14d (patch)
tree7dd027e6b74a196b2e86a7f14decaa0962610346 /gdb/stabsread.c
parenteffb06016a39cd7476eac77bdc94a09384acbdd3 (diff)
downloadgdb-4ea09c106de258952e9adc452e2c1d3e7a49c14d.zip
gdb-4ea09c106de258952e9adc452e2c1d3e7a49c14d.tar.gz
gdb-4ea09c106de258952e9adc452e2c1d3e7a49c14d.tar.bz2
* stabsread.c (read_member_functions): Fix is_stub test for
static member functions, improve comment.
Diffstat (limited to 'gdb/stabsread.c')
-rw-r--r--gdb/stabsread.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/gdb/stabsread.c b/gdb/stabsread.c
index 5b11546..bb969db 100644
--- a/gdb/stabsread.c
+++ b/gdb/stabsread.c
@@ -3287,13 +3287,30 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
}
case '?':
/* static member function. */
- new_sublist->fn_field.voffset = VOFFSET_STATIC;
- if (strncmp (new_sublist->fn_field.physname,
- main_fn_name, strlen (main_fn_name)))
- {
- new_sublist->fn_field.is_stub = 1;
- }
- break;
+ {
+ int slen = strlen (main_fn_name);
+
+ new_sublist->fn_field.voffset = VOFFSET_STATIC;
+
+ /* For static member functions, we can't tell if they
+ are stubbed, as they are put out as functions, and not as
+ methods.
+ GCC v2 emits the fully mangled name if
+ dbxout.c:flag_minimal_debug is not set, so we have to
+ detect a fully mangled physname here and set is_stub
+ accordingly. Fully mangled physnames in v2 start with
+ the member function name, followed by two underscores.
+ GCC v3 currently always emits stubbed member functions,
+ but with fully mangled physnames, which start with _Z. */
+ if (!(strncmp (new_sublist->fn_field.physname,
+ main_fn_name, slen) == 0
+ && new_sublist->fn_field.physname[slen] == '_'
+ && new_sublist->fn_field.physname[slen + 1] == '_'))
+ {
+ new_sublist->fn_field.is_stub = 1;
+ }
+ break;
+ }
default:
/* error */