- Document where the stabs information can be found, so that someone

can help upgrade this code.
- A couple of minor enhancements towards handling C++.
- Don't bother trying to load libstdc++, rather than generating an
  enormous number of "errors".
This commit is contained in:
Bill Medland 2002-07-22 20:38:10 +00:00 committed by Alexandre Julliard
parent 1932045ec0
commit e105023871
1 changed files with 23 additions and 3 deletions

View File

@ -19,6 +19,16 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* Maintenance Information
* -----------------------
*
* For documentation on the stabs format see for example
* The "stabs" debug format
* by Julia Menapace, Jim Kingdon, David Mackenzie
* of Cygnus Support
* available (hopefully) from http:\\sources.redhat.com\gdb\onlinedocs
*/
#include "config.h"
@ -357,6 +367,10 @@ static inline int DEBUG_PTS_ReadAggregate(struct ParseTypedefData* ptd, struct d
/* agg_name : type ',' <int:offset> ',' <int:size> */
idx = ptd->idx;
if (DEBUG_PTS_ReadID(ptd) == -1) return -1;
/* Ref. TSDF R2.130 Section 7.4. When the field name is a method name
* it is followed by two colons rather than one.
*/
if (*ptd->ptr == ':') ptd->ptr++;
if (DEBUG_PTS_ReadTypedef(ptd, NULL, &adt) == -1) return -1;
if (!adt) return -1;
@ -648,6 +662,9 @@ DEBUG_ParseStabType(const char * stab)
* Look through the stab definition, and figure out what datatype
* this represents. If we have something we know about, assign the
* type.
* According to "The \"stabs\" debug format" (Rev 2.130) the name may be
* a C++ name and contain double colons e.g. foo::bar::baz:t5=*6. Not
* yet implemented.
*/
c = strchr(stab, ':');
if( c == NULL )
@ -655,10 +672,12 @@ DEBUG_ParseStabType(const char * stab)
c++;
/*
* The next character says more about the type (i.e. data, function, etc)
* of symbol. Skip it.
* The next characters say more about the type (i.e. data, function, etc)
* of symbol. Skip them. (C++ for example may have Tt).
* Actually this is a very weak description; I think Tt is the only
* multiple combination we should see.
*/
if (*c != '(')
while (*c && *c != '(' && !isdigit(*c))
c++;
/*
* The next is either an integer or a (integer,integer).
@ -1326,6 +1345,7 @@ static enum DbgInfoLoad DEBUG_ProcessElfObject(const char* filename,
if (filename == NULL) return DIL_ERROR;
if (DEBUG_FindModuleByName(filename, DMT_ELF)) return DIL_LOADED;
if (strstr (filename, "libstdc++")) return DIL_ERROR; /* We know we can't do it */
dil = DEBUG_ProcessElfFile(filename, load_offset, dyn_addr);
/* if relative pathname, try some absolute base dirs */