[llvm-branch-commits] [lld] 831a143 - [WebAssembly] Change prefix on data segment flags to WASM_DATA_SEGMENT
Andy Wingo via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Jan 19 00:46:21 PST 2021
Author: Andy Wingo
Date: 2021-01-19T09:40:42+01:00
New Revision: 831a143e50cac873ec095fc7139a485173ba8c35
URL: https://github.com/llvm/llvm-project/commit/831a143e50cac873ec095fc7139a485173ba8c35
DIFF: https://github.com/llvm/llvm-project/commit/831a143e50cac873ec095fc7139a485173ba8c35.diff
LOG: [WebAssembly] Change prefix on data segment flags to WASM_DATA_SEGMENT
Element sections will also need flags, so we shouldn't squat the
WASM_SEGMENT namespace.
Depends on D90948.
Differential Revision: https://reviews.llvm.org/D92315
Added:
Modified:
lld/wasm/OutputSections.cpp
lld/wasm/Writer.cpp
llvm/include/llvm/BinaryFormat/Wasm.h
llvm/lib/MC/WasmObjectWriter.cpp
llvm/lib/Object/WasmObjectFile.cpp
llvm/lib/ObjectYAML/WasmEmitter.cpp
llvm/lib/ObjectYAML/WasmYAML.cpp
Removed:
################################################################################
diff --git a/lld/wasm/OutputSections.cpp b/lld/wasm/OutputSections.cpp
index 1af448dcea74..47ad1891efa0 100644
--- a/lld/wasm/OutputSections.cpp
+++ b/lld/wasm/OutputSections.cpp
@@ -138,7 +138,7 @@ void DataSection::finalizeContents() {
#ifndef NDEBUG
unsigned activeCount = std::count_if(
segments.begin(), segments.end(), [](OutputSegment *segment) {
- return (segment->initFlags & WASM_SEGMENT_IS_PASSIVE) == 0;
+ return (segment->initFlags & WASM_DATA_SEGMENT_IS_PASSIVE) == 0;
});
#endif
@@ -154,9 +154,9 @@ void DataSection::finalizeContents() {
continue;
raw_string_ostream os(segment->header);
writeUleb128(os, segment->initFlags, "init flags");
- if (segment->initFlags & WASM_SEGMENT_HAS_MEMINDEX)
+ if (segment->initFlags & WASM_DATA_SEGMENT_HAS_MEMINDEX)
writeUleb128(os, 0, "memory index");
- if ((segment->initFlags & WASM_SEGMENT_IS_PASSIVE) == 0) {
+ if ((segment->initFlags & WASM_DATA_SEGMENT_IS_PASSIVE) == 0) {
WasmInitExpr initExpr;
if (config->isPic) {
initExpr.Opcode = WASM_OPCODE_GLOBAL_GET;
diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp
index c4f4b6c8e571..3cf773fc4826 100644
--- a/lld/wasm/Writer.cpp
+++ b/lld/wasm/Writer.cpp
@@ -841,7 +841,7 @@ void Writer::createOutputSegments() {
LLVM_DEBUG(dbgs() << "new segment: " << name << "\n");
s = make<OutputSegment>(name);
if (config->sharedMemory)
- s->initFlags = WASM_SEGMENT_IS_PASSIVE;
+ s->initFlags = WASM_DATA_SEGMENT_IS_PASSIVE;
// Exported memories are guaranteed to be zero-initialized, so no need
// to emit data segments for bss sections.
// TODO: consider initializing bss sections with memory.fill
@@ -886,7 +886,7 @@ static void createFunction(DefinedFunction *func, StringRef bodyContent) {
}
bool Writer::needsPassiveInitialization(const OutputSegment *segment) {
- return segment->initFlags & WASM_SEGMENT_IS_PASSIVE &&
+ return segment->initFlags & WASM_DATA_SEGMENT_IS_PASSIVE &&
segment->name != ".tdata" && !segment->isBss;
}
diff --git a/llvm/include/llvm/BinaryFormat/Wasm.h b/llvm/include/llvm/BinaryFormat/Wasm.h
index bdef959fafdc..063c6a3f9449 100644
--- a/llvm/include/llvm/BinaryFormat/Wasm.h
+++ b/llvm/include/llvm/BinaryFormat/Wasm.h
@@ -146,8 +146,11 @@ struct WasmFunction {
struct WasmDataSegment {
uint32_t InitFlags;
- uint32_t MemoryIndex; // present if InitFlags & WASM_SEGMENT_HAS_MEMINDEX
- WasmInitExpr Offset; // present if InitFlags & WASM_SEGMENT_IS_PASSIVE == 0
+ // Present if InitFlags & WASM_DATA_SEGMENT_HAS_MEMINDEX.
+ uint32_t MemoryIndex;
+ // Present if InitFlags & WASM_DATA_SEGMENT_IS_PASSIVE == 0.
+ WasmInitExpr Offset;
+
ArrayRef<uint8_t> Content;
StringRef Name; // from the "segment info" section
uint32_t Alignment;
@@ -300,8 +303,8 @@ enum : unsigned {
};
enum : unsigned {
- WASM_SEGMENT_IS_PASSIVE = 0x01,
- WASM_SEGMENT_HAS_MEMINDEX = 0x02,
+ WASM_DATA_SEGMENT_IS_PASSIVE = 0x01,
+ WASM_DATA_SEGMENT_HAS_MEMINDEX = 0x02,
};
// Feature policy prefixes used in the custom "target_features" section
diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp
index 70a5e503c5a1..0a6aee65b7bb 100644
--- a/llvm/lib/MC/WasmObjectWriter.cpp
+++ b/llvm/lib/MC/WasmObjectWriter.cpp
@@ -972,9 +972,9 @@ uint32_t WasmObjectWriter::writeDataSection(const MCAsmLayout &Layout) {
for (const WasmDataSegment &Segment : DataSegments) {
encodeULEB128(Segment.InitFlags, W->OS); // flags
- if (Segment.InitFlags & wasm::WASM_SEGMENT_HAS_MEMINDEX)
+ if (Segment.InitFlags & wasm::WASM_DATA_SEGMENT_HAS_MEMINDEX)
encodeULEB128(0, W->OS); // memory index
- if ((Segment.InitFlags & wasm::WASM_SEGMENT_IS_PASSIVE) == 0) {
+ if ((Segment.InitFlags & wasm::WASM_DATA_SEGMENT_IS_PASSIVE) == 0) {
W->OS << char(Segment.Offset > INT32_MAX ? wasm::WASM_OPCODE_I64_CONST
: wasm::WASM_OPCODE_I32_CONST);
encodeSLEB128(Segment.Offset, W->OS); // offset
@@ -1393,8 +1393,9 @@ uint64_t WasmObjectWriter::writeOneObject(MCAssembler &Asm,
DataSegments.emplace_back();
WasmDataSegment &Segment = DataSegments.back();
Segment.Name = SectionName;
- Segment.InitFlags =
- Section.getPassive() ? (uint32_t)wasm::WASM_SEGMENT_IS_PASSIVE : 0;
+ Segment.InitFlags = Section.getPassive()
+ ? (uint32_t)wasm::WASM_DATA_SEGMENT_IS_PASSIVE
+ : 0;
Segment.Offset = DataSize;
Segment.Section = &Section;
addData(Segment.Data, Section);
diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp
index dac16d225bf5..a349dde303e5 100644
--- a/llvm/lib/Object/WasmObjectFile.cpp
+++ b/llvm/lib/Object/WasmObjectFile.cpp
@@ -1366,9 +1366,11 @@ Error WasmObjectFile::parseDataSection(ReadContext &Ctx) {
while (Count--) {
WasmSegment Segment;
Segment.Data.InitFlags = readVaruint32(Ctx);
- Segment.Data.MemoryIndex = (Segment.Data.InitFlags & wasm::WASM_SEGMENT_HAS_MEMINDEX)
- ? readVaruint32(Ctx) : 0;
- if ((Segment.Data.InitFlags & wasm::WASM_SEGMENT_IS_PASSIVE) == 0) {
+ Segment.Data.MemoryIndex =
+ (Segment.Data.InitFlags & wasm::WASM_DATA_SEGMENT_HAS_MEMINDEX)
+ ? readVaruint32(Ctx)
+ : 0;
+ if ((Segment.Data.InitFlags & wasm::WASM_DATA_SEGMENT_IS_PASSIVE) == 0) {
if (Error Err = readInitExpr(Segment.Data.Offset, Ctx))
return Err;
} else {
diff --git a/llvm/lib/ObjectYAML/WasmEmitter.cpp b/llvm/lib/ObjectYAML/WasmEmitter.cpp
index d9f820baaaa3..c09d7f1bc95a 100644
--- a/llvm/lib/ObjectYAML/WasmEmitter.cpp
+++ b/llvm/lib/ObjectYAML/WasmEmitter.cpp
@@ -526,9 +526,9 @@ void WasmWriter::writeSectionContent(raw_ostream &OS,
encodeULEB128(Section.Segments.size(), OS);
for (auto &Segment : Section.Segments) {
encodeULEB128(Segment.InitFlags, OS);
- if (Segment.InitFlags & wasm::WASM_SEGMENT_HAS_MEMINDEX)
+ if (Segment.InitFlags & wasm::WASM_DATA_SEGMENT_HAS_MEMINDEX)
encodeULEB128(Segment.MemoryIndex, OS);
- if ((Segment.InitFlags & wasm::WASM_SEGMENT_IS_PASSIVE) == 0)
+ if ((Segment.InitFlags & wasm::WASM_DATA_SEGMENT_IS_PASSIVE) == 0)
writeInitExpr(OS, Segment.Offset);
encodeULEB128(Segment.Content.binary_size(), OS);
Segment.Content.writeAsBinary(OS);
diff --git a/llvm/lib/ObjectYAML/WasmYAML.cpp b/llvm/lib/ObjectYAML/WasmYAML.cpp
index 8e15b83b8b3b..b4d2d113fb5a 100644
--- a/llvm/lib/ObjectYAML/WasmYAML.cpp
+++ b/llvm/lib/ObjectYAML/WasmYAML.cpp
@@ -448,12 +448,12 @@ void MappingTraits<WasmYAML::DataSegment>::mapping(
IO &IO, WasmYAML::DataSegment &Segment) {
IO.mapOptional("SectionOffset", Segment.SectionOffset);
IO.mapRequired("InitFlags", Segment.InitFlags);
- if (Segment.InitFlags & wasm::WASM_SEGMENT_HAS_MEMINDEX) {
+ if (Segment.InitFlags & wasm::WASM_DATA_SEGMENT_HAS_MEMINDEX) {
IO.mapRequired("MemoryIndex", Segment.MemoryIndex);
} else {
Segment.MemoryIndex = 0;
}
- if ((Segment.InitFlags & wasm::WASM_SEGMENT_IS_PASSIVE) == 0) {
+ if ((Segment.InitFlags & wasm::WASM_DATA_SEGMENT_IS_PASSIVE) == 0) {
IO.mapRequired("Offset", Segment.Offset);
} else {
Segment.Offset.Opcode = wasm::WASM_OPCODE_I32_CONST;
More information about the llvm-branch-commits
mailing list