[NFC][COFF] Use COFFSection.MCSection when writeSection
Each COFFSection bind MCSection when created. No need to iterate
throught MCAssembler when writeSection.
Reviewed By: skan
Differential Revision: https://reviews.llvm.org/D151793
GitOrigin-RevId: 01cc38843d7629a50a8962573116766ad9f9eeaf
diff --git a/lib/MC/WinCOFFObjectWriter.cpp b/lib/MC/WinCOFFObjectWriter.cpp
index 07de8cd..11a98aa 100644
--- a/lib/MC/WinCOFFObjectWriter.cpp
+++ b/lib/MC/WinCOFFObjectWriter.cpp
@@ -198,7 +198,7 @@
uint32_t writeSectionContents(MCAssembler &Asm, const MCAsmLayout &Layout,
const MCSection &MCSec);
void writeSection(MCAssembler &Asm, const MCAsmLayout &Layout,
- const COFFSection &Sec, const MCSection &MCSec);
+ const COFFSection &Sec);
// MCObjectWriter interface implementation.
@@ -603,8 +603,7 @@
void WinCOFFObjectWriter::writeSection(MCAssembler &Asm,
const MCAsmLayout &Layout,
- const COFFSection &Sec,
- const MCSection &MCSec) {
+ const COFFSection &Sec) {
if (Sec.Number == -1)
return;
@@ -613,11 +612,10 @@
assert(W.OS.tell() == Sec.Header.PointerToRawData &&
"Section::PointerToRawData is insane!");
- uint32_t CRC = writeSectionContents(Asm, Layout, MCSec);
+ uint32_t CRC = writeSectionContents(Asm, Layout, *Sec.MCSection);
// Update the section definition auxiliary symbol to record the CRC.
- COFFSection *Sec = SectionMap[&MCSec];
- COFFSymbol::AuxiliarySymbols &AuxSyms = Sec->Symbol->Aux;
+ COFFSymbol::AuxiliarySymbols &AuxSyms = Sec.Symbol->Aux;
assert(AuxSyms.size() == 1 && AuxSyms[0].AuxType == ATSectionDefinition);
AuxSymbol &SecDef = AuxSyms[0];
SecDef.Aux.SectionDefinition.CheckSum = CRC;
@@ -1142,13 +1140,18 @@
WriteFileHeader(Header);
writeSectionHeaders();
- // Write section contents.
+#ifndef NDEBUG
sections::iterator I = Sections.begin();
sections::iterator IE = Sections.end();
MCAssembler::iterator J = Asm.begin();
MCAssembler::iterator JE = Asm.end();
for (; I != IE && J != JE; ++I, ++J)
- writeSection(Asm, Layout, **I, *J);
+ assert((**I).MCSection == &*J && "Wrong bound MCSection");
+#endif
+
+ // Write section contents.
+ for (std::unique_ptr<COFFSection> &Sec : Sections)
+ writeSection(Asm, Layout, *Sec);
assert(W.OS.tell() == Header.PointerToSymbolTable &&
"Header::PointerToSymbolTable is insane!");