[llvm] [yaml2obj] Apply output size limit to COFF (PR #209695)
Haohai Wen via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 15 01:07:42 PDT 2026
================
@@ -509,78 +483,82 @@ static bool writeCOFF(COFFParser &CP, raw_ostream &OS) {
} else {
SymbolTableIndex = SymbolTableIndexMap[R.SymbolName];
}
- OS << binary_le(R.VirtualAddress) << binary_le(SymbolTableIndex)
- << binary_le(R.Type);
+ CBA.write(R.VirtualAddress, LittleEndian);
+ CBA.write(SymbolTableIndex, LittleEndian);
+ CBA.write(R.Type, LittleEndian);
}
}
// Output symbol table.
-
for (std::vector<COFFYAML::Symbol>::const_iterator i = CP.Obj.Symbols.begin(),
e = CP.Obj.Symbols.end();
i != e; ++i) {
- OS.write(i->Header.Name, COFF::NameSize);
- OS << binary_le(i->Header.Value);
+ CBA.write(i->Header.Name, COFF::NameSize);
+ CBA.write(i->Header.Value, LittleEndian);
if (CP.useBigObj())
- OS << binary_le(i->Header.SectionNumber);
+ CBA.write(i->Header.SectionNumber, LittleEndian);
else
- OS << binary_le(static_cast<int16_t>(i->Header.SectionNumber));
- OS << binary_le(i->Header.Type) << binary_le(i->Header.StorageClass)
- << binary_le(i->Header.NumberOfAuxSymbols);
+ CBA.write(static_cast<int16_t>(i->Header.SectionNumber), LittleEndian);
+ CBA.write(i->Header.Type, LittleEndian);
+ CBA.write(i->Header.StorageClass, LittleEndian);
+ CBA.write(i->Header.NumberOfAuxSymbols, LittleEndian);
if (i->FunctionDefinition) {
- OS << binary_le(i->FunctionDefinition->TagIndex)
- << binary_le(i->FunctionDefinition->TotalSize)
- << binary_le(i->FunctionDefinition->PointerToLinenumber)
- << binary_le(i->FunctionDefinition->PointerToNextFunction)
- << zeros(i->FunctionDefinition->unused);
- OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
+ CBA.write(i->FunctionDefinition->TagIndex, LittleEndian);
+ CBA.write(i->FunctionDefinition->TotalSize, LittleEndian);
+ CBA.write(i->FunctionDefinition->PointerToLinenumber, LittleEndian);
+ CBA.write(i->FunctionDefinition->PointerToNextFunction, LittleEndian);
+ CBA.writeZeros(sizeof(i->FunctionDefinition->unused));
+ CBA.writeZeros(CP.getSymbolSize() - COFF::Symbol16Size);
}
if (i->bfAndefSymbol) {
- OS << zeros(i->bfAndefSymbol->unused1)
- << binary_le(i->bfAndefSymbol->Linenumber)
- << zeros(i->bfAndefSymbol->unused2)
- << binary_le(i->bfAndefSymbol->PointerToNextFunction)
- << zeros(i->bfAndefSymbol->unused3);
- OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
+ CBA.writeZeros(sizeof(i->bfAndefSymbol->unused1));
+ CBA.write(i->bfAndefSymbol->Linenumber, LittleEndian);
+ CBA.writeZeros(sizeof(i->bfAndefSymbol->unused2));
+ CBA.write(i->bfAndefSymbol->PointerToNextFunction, LittleEndian);
+ CBA.writeZeros(sizeof(i->bfAndefSymbol->unused3));
+ CBA.writeZeros(CP.getSymbolSize() - COFF::Symbol16Size);
}
if (i->WeakExternal) {
- OS << binary_le(i->WeakExternal->TagIndex)
- << binary_le(i->WeakExternal->Characteristics)
- << zeros(i->WeakExternal->unused);
- OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
+ CBA.write(i->WeakExternal->TagIndex, LittleEndian);
+ CBA.write(i->WeakExternal->Characteristics, LittleEndian);
+ CBA.writeZeros(sizeof(i->WeakExternal->unused));
+ CBA.writeZeros(CP.getSymbolSize() - COFF::Symbol16Size);
}
if (!i->File.empty()) {
unsigned SymbolSize = CP.getSymbolSize();
uint32_t NumberOfAuxRecords =
(i->File.size() + SymbolSize - 1) / SymbolSize;
uint32_t NumberOfAuxBytes = NumberOfAuxRecords * SymbolSize;
uint32_t NumZeros = NumberOfAuxBytes - i->File.size();
- OS.write(i->File.data(), i->File.size());
- OS.write_zeros(NumZeros);
+ CBA.write(i->File.data(), i->File.size());
+ CBA.writeZeros(NumZeros);
}
if (i->SectionDefinition) {
- OS << binary_le(i->SectionDefinition->Length)
- << binary_le(i->SectionDefinition->NumberOfRelocations)
- << binary_le(i->SectionDefinition->NumberOfLinenumbers)
- << binary_le(i->SectionDefinition->CheckSum)
- << binary_le(static_cast<int16_t>(i->SectionDefinition->Number))
- << binary_le(i->SectionDefinition->Selection)
- << zeros(i->SectionDefinition->unused)
- << binary_le(static_cast<int16_t>(i->SectionDefinition->Number >> 16));
- OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
+ CBA.write(i->SectionDefinition->Length, LittleEndian);
+ CBA.write(i->SectionDefinition->NumberOfRelocations, LittleEndian);
+ CBA.write(i->SectionDefinition->NumberOfLinenumbers, LittleEndian);
+ CBA.write(i->SectionDefinition->CheckSum, LittleEndian);
+ CBA.write(static_cast<int16_t>(i->SectionDefinition->Number),
+ LittleEndian);
+ CBA.write(i->SectionDefinition->Selection, LittleEndian);
+ CBA.writeZeros(sizeof(i->SectionDefinition->unused));
+ CBA.write(static_cast<int16_t>(i->SectionDefinition->Number >> 16),
+ LittleEndian);
+ CBA.writeZeros(CP.getSymbolSize() - COFF::Symbol16Size);
}
if (i->CLRToken) {
- OS << binary_le(i->CLRToken->AuxType) << zeros(i->CLRToken->unused1)
- << binary_le(i->CLRToken->SymbolTableIndex)
- << zeros(i->CLRToken->unused2);
- OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
+ CBA.write(i->CLRToken->AuxType, LittleEndian);
+ CBA.writeZeros(sizeof(i->CLRToken->unused1));
+ CBA.write(i->CLRToken->SymbolTableIndex, LittleEndian);
+ CBA.writeZeros(sizeof(i->CLRToken->unused2));
+ CBA.writeZeros(CP.getSymbolSize() - COFF::Symbol16Size);
}
}
// Output string table.
if (CP.Obj.Header.PointerToSymbolTable)
- OS.write(&CP.StringTable[0], CP.StringTable.size());
+ CBA.write(&CP.StringTable[0], CP.StringTable.size());
----------------
HaohaiWen wrote:
Fixed. 5d48ec9
https://github.com/llvm/llvm-project/pull/209695
More information about the llvm-commits
mailing list