diff options
author | Kung Hsu <kung@cygnus> | 1995-09-12 23:05:22 +0000 |
---|---|---|
committer | Kung Hsu <kung@cygnus> | 1995-09-12 23:05:22 +0000 |
commit | aeca85c13afa016c2168009cef4d71263d02fe36 (patch) | |
tree | 8faecb15a5cab09307cda790d8ab2a13d0118c1c /gdb/stabsread.c | |
parent | f434284a2ce1f8ddcfe81143705f76922505f416 (diff) | |
download | gdb-aeca85c13afa016c2168009cef4d71263d02fe36.zip gdb-aeca85c13afa016c2168009cef4d71263d02fe36.tar.gz gdb-aeca85c13afa016c2168009cef4d71263d02fe36.tar.bz2 |
* stabsread.c (read_one_struct_field): Add a patch to handle cfront
generated stabs that each field is in full mangled name.
Diffstat (limited to 'gdb/stabsread.c')
-rw-r--r-- | gdb/stabsread.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/gdb/stabsread.c b/gdb/stabsread.c index 5221c44..f9c619b 100644 --- a/gdb/stabsread.c +++ b/gdb/stabsread.c @@ -2344,7 +2344,36 @@ read_one_struct_field (fip, pp, p, type, objfile) struct type *type; struct objfile *objfile; { - fip -> list -> field.name = + /* The following is code to work around cfront generated stabs. + The stabs contains full mangled name for each field. + We try to demangle the name and extract the field name out of it. + */ + if (current_language->la_language == language_cplus) + { + char save_p; + char *dem, *dem_p; + save_p = *p; + *p = '\0'; + dem = cplus_demangle (*pp, DMGL_ANSI | DMGL_PARAMS); + if (dem != NULL) + { + dem_p = strrchr (dem, ':'); + if (dem_p != 0 && *(dem_p-1)==':') + dem_p++; + fip->list->field.name = + obsavestring (dem_p, strlen(dem_p), &objfile -> type_obstack); + } + else + { + fip->list->field.name = + obsavestring (*pp, p - *pp, &objfile -> type_obstack); + } + *p = save_p; + } + /* end of code for cfront work around */ + + else + fip -> list -> field.name = obsavestring (*pp, p - *pp, &objfile -> type_obstack); *pp = p + 1; |