[PATCH] D151793: [COFF] Use COFFSection.MCSection when writeSection
Haohai, Wen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 31 02:57:56 PDT 2023
HaohaiWen created this revision.
Herald added a subscriber: hiraditya.
Herald added a project: All.
HaohaiWen requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Each COFFSection bind MCSection when created. No need to iterate
throught MCAssembler when writeSection.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D151793
Files:
llvm/lib/MC/WinCOFFObjectWriter.cpp
Index: llvm/lib/MC/WinCOFFObjectWriter.cpp
===================================================================
--- llvm/lib/MC/WinCOFFObjectWriter.cpp
+++ llvm/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!");
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D151793.526976.patch
Type: text/x-patch
Size: 2327 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230531/51b976d9/attachment.bin>
More information about the llvm-commits
mailing list