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)
|
||||
return mCvIPITagStartMap[tagIdx - mCvMinTag];
|
||||
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)
|
||||
|
@ -1402,7 +1412,7 @@ DbgType* COFF::CvParseType(int tagIdx, bool ipi)
|
|||
dbgType->mIsDeclaration = true;
|
||||
|
||||
dbgType->mSize = dbgType->mTypeParam->mSize;
|
||||
dbgType->mAlign = dbgType->mTypeParam->mAlign;
|
||||
dbgType->mAlign = dbgType->mTypeParam->mAlign;
|
||||
|
||||
/*if (dbgType->mTypeParam->GetByteCount() == 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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -1186,7 +1186,7 @@ DbgExtType DbgType::CalcExtType()
|
|||
}
|
||||
|
||||
DbgLanguage DbgType::GetLanguage()
|
||||
{
|
||||
{
|
||||
return mLanguage;
|
||||
}
|
||||
|
||||
|
@ -1451,9 +1451,10 @@ DbgType* DbgType::GetPrimaryType()
|
|||
|
||||
mPrimaryType = this;
|
||||
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,12 +2856,13 @@ 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
|
||||
prevType->mAlternates.PushFront(dbgType, &mAlloc);
|
||||
if (prevType->mHasStaticMembers)
|
||||
prevType->mAlternates.PushFront(dbgType, &mAlloc);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue