1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00

Fixed 'reduced definition' issue

This commit is contained in:
Brian Fiete 2019-12-21 09:35:58 -08:00
parent 9aebffa954
commit 01aea25d7e
4 changed files with 37 additions and 11 deletions

View file

@ -521,6 +521,16 @@ int COFF::CvGetTagStart(int tagIdx, bool ipi)
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)
{
if (tagIdx == 0)
@ -1538,6 +1548,14 @@ DbgType* COFF::CvParseType(int tagIdx, bool ipi)
}
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);
}
break;
@ -1791,6 +1809,9 @@ void COFF::ParseTypeData(CvStreamReader& reader, int dataOffset)
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)
@ -5058,7 +5079,7 @@ void COFF::CvParseIPI()
//mCvIPIData = sectionData;
int recordCount = mCvIPIMaxTag - mCvIPIMinTag;
mCvIPITagStartMap.Resize(recordCount);
mCvIPITagStartMap.Resize(recordCount + 1);
//uint8* data = sectionData + dataOffset;
int offset = dataOffset;
@ -5130,6 +5151,8 @@ void COFF::CvParseIPI()
mCvIPITagStartMap[idx] = offsetStart;
}
mCvIPITagStartMap[recordCount] = offset;
}
const char* COFF::CvParseSymbol(int offset, CvSymStreamType symStreamType, addr_target& outAddr)

View file

@ -358,6 +358,7 @@ public:
DbgType* CvGetType(int typeId);
DbgType* CvGetType(int typeId, CvCompileUnit* compileUnit);
int CvGetTagStart(int tagIdx, bool ipi);
int CvGetTagSize(int tagIdx, bool ipi);
uint8* CvGetTagData(int tagIdx, bool ipi, int* outDataSize = NULL);
void CvParseArgList(DbgSubprogram* subprogram, int tagIdx, bool ipi);
DbgSubprogram* CvParseMethod(DbgType* parentType, const char* methodName, int tagIdx, bool ipi, DbgSubprogram* subprogram = NULL);

View file

@ -1453,7 +1453,8 @@ DbgType* DbgType::GetPrimaryType()
if (mPriority <= DbgTypePriority_Normal)
{
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->PopulateType();
@ -2761,7 +2762,7 @@ void DbgModule::MapTypes(int startingTypeIdx)
{
for (auto member : dbgType->mMemberList)
if ((member->mIsStatic) && (member->mLocationData != NULL))
dbgType->mDefinedMembersCount++;
dbgType->mDefinedMembersSize++;
}
if ((dbgType->mTypeName != NULL) && (strcmp(dbgType->mTypeName, "@") == 0))
@ -2855,11 +2856,12 @@ void DbgModule::MapTypes(int startingTypeIdx)
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
if (prevType->mHasStaticMembers)
prevType->mAlternates.PushFront(dbgType, &mAlloc);
}
continue;

View file

@ -564,7 +564,7 @@ public:
int mDeclFileIdx;
int mDeclLine;
int mTypeIdx;
uint16 mDefinedMembersCount; // For static members
uint16 mDefinedMembersSize;
uint16 mMethodsWithParamsCount;
bool mIsIncomplete; // Not fully loaded
bool mIsPacked;