mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 03:03:31 +08:00
Modified Files:
ChangeLog stabsread.c * stabsread.c (patch_block_stabs, define_symbol, read_type): in g++ template instantiation, nested class can be part of the params, and '::' can gets into symbol or type names. This is to fix the problem. (fix pr3837)
This commit is contained in:
parent
624456be75
commit
2fb58b984c
@ -1,5 +1,10 @@
|
||||
Fri Nov 12 11:18:02 1993 Kung Hsu (kung@cirdan.cygnus.com)
|
||||
|
||||
* stabsread.c (patch_block_stabs, define_symbol, read_type): in
|
||||
g++ template instantiation, nested class can be part of the
|
||||
params, and '::' can gets into symbol or type names. This is
|
||||
to fix the problem.
|
||||
|
||||
* gdbtypes.c (lookup_struct_elt_type): Handle type ref or pointer
|
||||
to struct/union case.
|
||||
|
||||
|
@ -367,6 +367,11 @@ patch_block_stabs (symbols, stabs, objfile)
|
||||
{
|
||||
name = stabs->stab[ii];
|
||||
pp = (char*) strchr (name, ':');
|
||||
while (pp[1] == ':')
|
||||
{
|
||||
pp += 2;
|
||||
pp = (char *)strchr(pp, ':');
|
||||
}
|
||||
sym = find_symbol_in_list (symbols, name, pp-name);
|
||||
if (!sym)
|
||||
{
|
||||
@ -485,6 +490,12 @@ define_symbol (valu, string, desc, type, objfile)
|
||||
if (p == 0)
|
||||
return 0;
|
||||
|
||||
while (p[1] == ':')
|
||||
{
|
||||
p += 2;
|
||||
p = strchr(p, ':');
|
||||
}
|
||||
|
||||
/* If a nameless stab entry, all we need is the type, not the symbol.
|
||||
e.g. ":t10=*2" or a nameless enum like " :T16=ered:0,green:1,blue:2,;" */
|
||||
nameless = (p == string || ((string[0] == ' ') && (string[1] == ':')));
|
||||
@ -1295,7 +1306,7 @@ read_type (pp, objfile)
|
||||
char *type_name;
|
||||
|
||||
{
|
||||
char *from, *to;
|
||||
char *from, *to, *p;
|
||||
|
||||
/* Set the type code according to the following letter. */
|
||||
switch ((*pp)[0])
|
||||
@ -1312,16 +1323,21 @@ read_type (pp, objfile)
|
||||
default:
|
||||
return error_type (pp);
|
||||
}
|
||||
|
||||
to = type_name = (char *)
|
||||
obstack_alloc (&objfile -> type_obstack,
|
||||
(((char *) strchr (*pp, ':') - (*pp)) + 1));
|
||||
|
||||
p = strchr(*pp, ':');
|
||||
while (p[1] == ':')
|
||||
{
|
||||
p += 2;
|
||||
p = strchr(p, ':');
|
||||
}
|
||||
to = type_name =
|
||||
(char *)obstack_alloc (&objfile->type_obstack, p - *pp + 1);
|
||||
|
||||
/* Copy the name. */
|
||||
from = *pp + 1;
|
||||
while ((*to++ = *from++) != ':')
|
||||
;
|
||||
*--to = '\0';
|
||||
while (from < p)
|
||||
*to++ = *from++;
|
||||
*to = '\0';
|
||||
|
||||
/* Set the pointer ahead of the name which we just read. */
|
||||
*pp = from;
|
||||
|
Loading…
Reference in New Issue
Block a user