Skip to content

Commit 52f56ed

Browse files
committed
WasmObjectWrier: Simplify fragment walk in .init_array
and reduce the reliance on the FT_Align/FT_Data layout, which will be changed by #149030
1 parent 6eef978 commit 52f56ed

File tree

1 file changed

+5
-20
lines changed

1 file changed

+5
-20
lines changed

llvm/lib/MC/WasmObjectWriter.cpp

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1858,23 +1858,9 @@ uint64_t WasmObjectWriter::writeOneObject(MCAssembler &Asm,
18581858
auto IT = WS.begin();
18591859
if (IT == WS.end())
18601860
continue;
1861-
const MCFragment &EmptyFrag = *IT;
1862-
if (EmptyFrag.getKind() != MCFragment::FT_Data)
1863-
report_fatal_error(".init_array section should be aligned");
1864-
1865-
const MCFragment *nextFrag = EmptyFrag.getNext();
1866-
while (nextFrag != nullptr) {
1867-
const MCFragment &AlignFrag = *nextFrag;
1868-
if (AlignFrag.getKind() != MCFragment::FT_Align)
1869-
report_fatal_error(".init_array section should be aligned");
1870-
if (cast<MCAlignFragment>(AlignFrag).getAlignment() !=
1871-
Align(is64Bit() ? 8 : 4))
1872-
report_fatal_error(
1873-
".init_array section should be aligned for pointers");
1874-
1875-
const MCFragment &Frag = *AlignFrag.getNext();
1876-
nextFrag = Frag.getNext();
1877-
if (Frag.hasInstructions() || Frag.getKind() != MCFragment::FT_Data)
1861+
for (auto *Frag = &*IT; Frag; Frag = Frag->getNext()) {
1862+
if (Frag->hasInstructions() || (Frag->getKind() != MCFragment::FT_Align &&
1863+
Frag->getKind() != MCFragment::FT_Data))
18781864
report_fatal_error("only data supported in .init_array section");
18791865

18801866
uint16_t Priority = UINT16_MAX;
@@ -1886,9 +1872,8 @@ uint64_t WasmObjectWriter::writeOneObject(MCAssembler &Asm,
18861872
if (WS.getName().substr(PrefixLength + 1).getAsInteger(10, Priority))
18871873
report_fatal_error("invalid .init_array section priority");
18881874
}
1889-
const auto &DataFrag = Frag;
1890-
assert(llvm::all_of(DataFrag.getContents(), [](char C) { return !C; }));
1891-
for (const MCFixup &Fixup : DataFrag.getFixups()) {
1875+
assert(llvm::all_of(Frag->getContents(), [](char C) { return !C; }));
1876+
for (const MCFixup &Fixup : Frag->getFixups()) {
18921877
assert(Fixup.getKind() ==
18931878
MCFixup::getDataKindForSize(is64Bit() ? 8 : 4));
18941879
const MCExpr *Expr = Fixup.getValue();

0 commit comments

Comments
 (0)