Przeglądaj źródła

Increase member chunk size to avoid linker crash

Brian Fiete 3 lat temu
rodzic
commit
31af480c92
1 zmienionych plików z 7 dodań i 10 usunięć
  1. 7 10
      IDEHelper/Backend/BeCOFFObject.cpp

+ 7 - 10
IDEHelper/Backend/BeCOFFObject.cpp

@@ -555,6 +555,7 @@ void BeCOFFObject::DbgTEndTag()
 	BF_ASSERT(mTTagStartPos != -1);
 	DbgTAlign();
 	int tagSize = mDebugTSect.mData.GetPos() - mTTagStartPos;	
+	BF_ASSERT(tagSize <= 0xFFFF);
 	*((int16*)&mDebugTSect.mData.mData[mTTagStartPos]) = (int16)(tagSize - 2);
 	mTTagStartPos = -1;
 }
@@ -597,11 +598,7 @@ int BeCOFFObject::DbgGetTypeId(BeDbgType* dbgType, bool doDefine)
 			DbgGetTypeId(structType->mDerivedFrom);
 			for (auto member : structType->mMembers)
 			{
-				auto type = member->mType;
-				//TODO:
-				//if (member->mName == "VersionName")
-					//continue;
-
+				auto type = member->mType;				
 				DbgGetTypeId(type);
 			}
 			for (auto func : structType->mMethods)
@@ -627,7 +624,7 @@ int BeCOFFObject::DbgGetTypeId(BeDbgType* dbgType, bool doDefine)
 			auto _CheckFieldOverflow = [&]()
 			{
 				int tagSize = mDebugTSect.mData.GetPos() - mTTagStartPos;
-				if (tagSize >= 2000)
+				if (tagSize >= 0xE000)
 				{
 					int extFieldListTag = mCurTagId++;
 
@@ -1013,8 +1010,7 @@ void BeCOFFObject::DbgGenerateTypeInfo()
 void BeCOFFObject::DbgStartSection(int sectionNum)
 {
 	auto& outS = mDebugSSect.mData;	
-	BF_ASSERT(mSectionStartPos == -1);
-	
+	BF_ASSERT(mSectionStartPos == -1);	
 	outS.Write((int32)sectionNum);
 	outS.Write(0); // Temporary - size
 	mSectionStartPos = outS.GetPos();
@@ -1024,6 +1020,7 @@ void BeCOFFObject::DbgEndSection()
 {
 	auto& outS = mDebugSSect.mData;	
 	int totalLen = outS.GetPos() - mSectionStartPos;
+	BF_ASSERT(totalLen <= 0xFFFF);
 	*((int32*)&outS.mData[mSectionStartPos - 4]) = totalLen;	
 	mSectionStartPos = -1;
 	while ((outS.GetPos() & 3) != 0)
@@ -1132,7 +1129,7 @@ void BeCOFFObject::DbgSEndTag()
 {
 	BF_ASSERT(mSTagStartPos != -1);
 	int tagSize = mDebugSSect.mData.GetPos() - mSTagStartPos;
-
+	BF_ASSERT(tagSize <= 0xFFFF);
 	*((uint16*)&mDebugSSect.mData.mData[mSTagStartPos]) = (uint16)(tagSize - 2);
 	mSTagStartPos = -1;
 }
@@ -2146,7 +2143,7 @@ bool BeCOFFObject::Generate(BeModule* module, const StringImpl& fileName)
 	if (mWriteToLib)
 	{
 		DynMemStream memStream;
-		
+
 		Generate(module);
 
 		mStream = &memStream;