diff options
author | Peter Schauer <Peter.Schauer@mytum.de> | 2002-03-08 17:19:39 +0000 |
---|---|---|
committer | Peter Schauer <Peter.Schauer@mytum.de> | 2002-03-08 17:19:39 +0000 |
commit | 4ea09c106de258952e9adc452e2c1d3e7a49c14d (patch) | |
tree | 7dd027e6b74a196b2e86a7f14decaa0962610346 /gdb/stabsread.c | |
parent | effb06016a39cd7476eac77bdc94a09384acbdd3 (diff) | |
download | gdb-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.c | 31 |
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 */ |