mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 18:44:20 +08:00
* mdebugread.c (parse_symbol): Count until the stEnd matching
the structure name.
This commit is contained in:
parent
1efcd1fdb6
commit
f0394be648
@ -1,3 +1,8 @@
|
||||
2003-01-03 J. Brobecker <brobecker@gnat.com>
|
||||
|
||||
* mdebugread.c (parse_symbol): Count until the stEnd matching
|
||||
the structure name.
|
||||
|
||||
2003-01-02 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* configure.in: Remove --with-cpu option.
|
||||
|
@ -865,7 +865,24 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
|
||||
switch (tsym.st)
|
||||
{
|
||||
case stEnd:
|
||||
goto end_of_fields;
|
||||
/* C++ encodes class types as structures where there the
|
||||
methods are encoded as stProc. The scope of stProc
|
||||
symbols also ends with stEnd, thus creating a risk of
|
||||
taking the wrong stEnd symbol record as the end of
|
||||
the current struct, which would cause GDB to undercount
|
||||
the real number of fields in this struct. To make sure
|
||||
we really reached the right stEnd symbol record, we
|
||||
check the associated name, and match it against the
|
||||
struct name. Since method names are mangled while
|
||||
the class name is not, there is no risk of having a
|
||||
method whose name is identical to the class name
|
||||
(in particular constructor method names are different
|
||||
from the class name). There is therefore no risk that
|
||||
this check stops the count on the StEnd of a method. */
|
||||
if (strcmp (debug_info->ss + cur_fdr->issBase + tsym.iss,
|
||||
name) == 0)
|
||||
goto end_of_fields;
|
||||
break;
|
||||
|
||||
case stMember:
|
||||
if (nfields == 0 && type_code == TYPE_CODE_UNDEF)
|
||||
|
Loading…
Reference in New Issue
Block a user