mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 03:28:20 +02:00
Fixed 'reduced definition' issue
This commit is contained in:
parent
9aebffa954
commit
01aea25d7e
4 changed files with 37 additions and 11 deletions
|
@ -518,7 +518,17 @@ int COFF::CvGetTagStart(int tagIdx, bool ipi)
|
||||||
if (ipi)
|
if (ipi)
|
||||||
return mCvIPITagStartMap[tagIdx - mCvMinTag];
|
return mCvIPITagStartMap[tagIdx - mCvMinTag];
|
||||||
else
|
else
|
||||||
return mCvTagStartMap[tagIdx - mCvMinTag];
|
return mCvTagStartMap[tagIdx - mCvMinTag];
|
||||||
|
}
|
||||||
|
|
||||||
|
int COFF::CvGetTagSize(int tagIdx, bool ipi)
|
||||||
|
{
|
||||||
|
if (tagIdx == 0)
|
||||||
|
return 0;
|
||||||
|
if (ipi)
|
||||||
|
return mCvIPITagStartMap[tagIdx - mCvMinTag + 1] - mCvIPITagStartMap[tagIdx - mCvMinTag];
|
||||||
|
else
|
||||||
|
return mCvTagStartMap[tagIdx - mCvMinTag + 1] - mCvTagStartMap[tagIdx - mCvMinTag];
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8* COFF::CvGetTagData(int tagIdx, bool ipi, int* outDataSize)
|
uint8* COFF::CvGetTagData(int tagIdx, bool ipi, int* outDataSize)
|
||||||
|
@ -1402,7 +1412,7 @@ DbgType* COFF::CvParseType(int tagIdx, bool ipi)
|
||||||
dbgType->mIsDeclaration = true;
|
dbgType->mIsDeclaration = true;
|
||||||
|
|
||||||
dbgType->mSize = dbgType->mTypeParam->mSize;
|
dbgType->mSize = dbgType->mTypeParam->mSize;
|
||||||
dbgType->mAlign = dbgType->mTypeParam->mAlign;
|
dbgType->mAlign = dbgType->mTypeParam->mAlign;
|
||||||
|
|
||||||
/*if (dbgType->mTypeParam->GetByteCount() == 0)
|
/*if (dbgType->mTypeParam->GetByteCount() == 0)
|
||||||
{
|
{
|
||||||
|
@ -1538,6 +1548,14 @@ DbgType* COFF::CvParseType(int tagIdx, bool ipi)
|
||||||
}
|
}
|
||||||
|
|
||||||
dbgType->mIsIncomplete = true;
|
dbgType->mIsIncomplete = true;
|
||||||
|
|
||||||
|
if (classInfo.field != 0)
|
||||||
|
dbgType->mDefinedMembersSize = CvGetTagSize(classInfo.field, ipi);
|
||||||
|
|
||||||
|
// This helps differentiate '
|
||||||
|
// if (classInfo.field != 0)
|
||||||
|
// dbgType->mDefinedMembersCount++;
|
||||||
|
|
||||||
//CvParseMembers(dbgType, classInfo.field, sectionData);
|
//CvParseMembers(dbgType, classInfo.field, sectionData);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1791,6 +1809,9 @@ void COFF::ParseTypeData(CvStreamReader& reader, int dataOffset)
|
||||||
CvParseType(tagIdx);
|
CvParseType(tagIdx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isTagMapEmpty)
|
||||||
|
mCvTagStartMap.Add(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
void COFF::ParseTypeData(int sectionNum, CvStreamReader& reader, int& sectionSize, int& dataOfs, int& hashStream, int& hashAdjOffset, int& hashAdjSize, int& minVal, int& maxVal)
|
void COFF::ParseTypeData(int sectionNum, CvStreamReader& reader, int& sectionSize, int& dataOfs, int& hashStream, int& hashAdjOffset, int& hashAdjSize, int& minVal, int& maxVal)
|
||||||
|
@ -5058,7 +5079,7 @@ void COFF::CvParseIPI()
|
||||||
//mCvIPIData = sectionData;
|
//mCvIPIData = sectionData;
|
||||||
|
|
||||||
int recordCount = mCvIPIMaxTag - mCvIPIMinTag;
|
int recordCount = mCvIPIMaxTag - mCvIPIMinTag;
|
||||||
mCvIPITagStartMap.Resize(recordCount);
|
mCvIPITagStartMap.Resize(recordCount + 1);
|
||||||
|
|
||||||
//uint8* data = sectionData + dataOffset;
|
//uint8* data = sectionData + dataOffset;
|
||||||
int offset = dataOffset;
|
int offset = dataOffset;
|
||||||
|
@ -5130,6 +5151,8 @@ void COFF::CvParseIPI()
|
||||||
|
|
||||||
mCvIPITagStartMap[idx] = offsetStart;
|
mCvIPITagStartMap[idx] = offsetStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mCvIPITagStartMap[recordCount] = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* COFF::CvParseSymbol(int offset, CvSymStreamType symStreamType, addr_target& outAddr)
|
const char* COFF::CvParseSymbol(int offset, CvSymStreamType symStreamType, addr_target& outAddr)
|
||||||
|
|
|
@ -358,6 +358,7 @@ public:
|
||||||
DbgType* CvGetType(int typeId);
|
DbgType* CvGetType(int typeId);
|
||||||
DbgType* CvGetType(int typeId, CvCompileUnit* compileUnit);
|
DbgType* CvGetType(int typeId, CvCompileUnit* compileUnit);
|
||||||
int CvGetTagStart(int tagIdx, bool ipi);
|
int CvGetTagStart(int tagIdx, bool ipi);
|
||||||
|
int CvGetTagSize(int tagIdx, bool ipi);
|
||||||
uint8* CvGetTagData(int tagIdx, bool ipi, int* outDataSize = NULL);
|
uint8* CvGetTagData(int tagIdx, bool ipi, int* outDataSize = NULL);
|
||||||
void CvParseArgList(DbgSubprogram* subprogram, int tagIdx, bool ipi);
|
void CvParseArgList(DbgSubprogram* subprogram, int tagIdx, bool ipi);
|
||||||
DbgSubprogram* CvParseMethod(DbgType* parentType, const char* methodName, int tagIdx, bool ipi, DbgSubprogram* subprogram = NULL);
|
DbgSubprogram* CvParseMethod(DbgType* parentType, const char* methodName, int tagIdx, bool ipi, DbgSubprogram* subprogram = NULL);
|
||||||
|
|
|
@ -1186,7 +1186,7 @@ DbgExtType DbgType::CalcExtType()
|
||||||
}
|
}
|
||||||
|
|
||||||
DbgLanguage DbgType::GetLanguage()
|
DbgLanguage DbgType::GetLanguage()
|
||||||
{
|
{
|
||||||
return mLanguage;
|
return mLanguage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1451,9 +1451,10 @@ DbgType* DbgType::GetPrimaryType()
|
||||||
|
|
||||||
mPrimaryType = this;
|
mPrimaryType = this;
|
||||||
if (mPriority <= DbgTypePriority_Normal)
|
if (mPriority <= DbgTypePriority_Normal)
|
||||||
{
|
{
|
||||||
if ((mCompileUnit != NULL) &&
|
if ((mCompileUnit != NULL) &&
|
||||||
((mCompileUnit->mLanguage == DbgLanguage_Beef) || (mTypeCode == DbgType_Namespace) || (mIsDeclaration)))
|
((mCompileUnit->mLanguage == DbgLanguage_Beef)|| (mLanguage == DbgLanguage_Beef) ||
|
||||||
|
(mTypeCode == DbgType_Namespace) || (mIsDeclaration)))
|
||||||
{
|
{
|
||||||
mPrimaryType = mCompileUnit->mDbgModule->GetPrimaryType(this);
|
mPrimaryType = mCompileUnit->mDbgModule->GetPrimaryType(this);
|
||||||
mPrimaryType->PopulateType();
|
mPrimaryType->PopulateType();
|
||||||
|
@ -2761,7 +2762,7 @@ void DbgModule::MapTypes(int startingTypeIdx)
|
||||||
{
|
{
|
||||||
for (auto member : dbgType->mMemberList)
|
for (auto member : dbgType->mMemberList)
|
||||||
if ((member->mIsStatic) && (member->mLocationData != NULL))
|
if ((member->mIsStatic) && (member->mLocationData != NULL))
|
||||||
dbgType->mDefinedMembersCount++;
|
dbgType->mDefinedMembersSize++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((dbgType->mTypeName != NULL) && (strcmp(dbgType->mTypeName, "@") == 0))
|
if ((dbgType->mTypeName != NULL) && (strcmp(dbgType->mTypeName, "@") == 0))
|
||||||
|
@ -2855,12 +2856,13 @@ void DbgModule::MapTypes(int startingTypeIdx)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prevType->mDefinedMembersCount > 0)
|
if (prevType->mDefinedMembersSize > 0)
|
||||||
{
|
{
|
||||||
if (dbgType->mDefinedMembersCount > 0)
|
if (dbgType->mDefinedMembersSize > 0)
|
||||||
{
|
{
|
||||||
// We create an 'alternates' list for all types that define at least one static field
|
// We create an 'alternates' list for all types that define at least one static field
|
||||||
prevType->mAlternates.PushFront(dbgType, &mAlloc);
|
if (prevType->mHasStaticMembers)
|
||||||
|
prevType->mAlternates.PushFront(dbgType, &mAlloc);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -564,7 +564,7 @@ public:
|
||||||
int mDeclFileIdx;
|
int mDeclFileIdx;
|
||||||
int mDeclLine;
|
int mDeclLine;
|
||||||
int mTypeIdx;
|
int mTypeIdx;
|
||||||
uint16 mDefinedMembersCount; // For static members
|
uint16 mDefinedMembersSize;
|
||||||
uint16 mMethodsWithParamsCount;
|
uint16 mMethodsWithParamsCount;
|
||||||
bool mIsIncomplete; // Not fully loaded
|
bool mIsIncomplete; // Not fully loaded
|
||||||
bool mIsPacked;
|
bool mIsPacked;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue