From a802fbe07c270f510c87dfa93577bd4731c075f3 Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Tue, 4 Apr 2023 11:33:15 -0700 Subject: Use Names instead of indices to identify segments (#5618) All top-level Module elements are identified and referred to by Name, but for historical reasons element and data segments were referred to by index instead. Fix this inconsistency by using Names to refer to segments from expressions that use them. Also parse and print segment names like we do for other elements. The C API is partially converted to use names instead of indices, but there are still many functions that refer to data segments by index. Finishing the conversion can be done in the future once it becomes necessary. --- src/tools/fuzzing/fuzzing.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/tools/fuzzing/fuzzing.cpp') diff --git a/src/tools/fuzzing/fuzzing.cpp b/src/tools/fuzzing/fuzzing.cpp index 0a4f8e581..4a611345d 100644 --- a/src/tools/fuzzing/fuzzing.cpp +++ b/src/tools/fuzzing/fuzzing.cpp @@ -202,7 +202,8 @@ void TranslateToFuzzReader::setupMemory() { size_t numSegments = upTo(8) + 1; for (size_t i = 0; i < numSegments; i++) { auto segment = builder.makeDataSegment(); - segment->setName(Name::fromInt(i), false); + segment->setName(Names::getValidDataSegmentName(wasm, Name::fromInt(i)), + false); segment->isPassive = bool(upTo(2)); size_t segSize = upTo(USABLE_MEMORY * 2); segment->data.resize(segSize); @@ -214,7 +215,7 @@ void TranslateToFuzzReader::setupMemory() { memCovered += segSize; segment->memory = wasm.memories[0]->name; } - wasm.dataSegments.push_back(std::move(segment)); + wasm.addDataSegment(std::move(segment)); } } else { // init some data @@ -3196,8 +3197,9 @@ Expression* TranslateToFuzzReader::makeMemoryInit() { if (!allowMemory) { return makeTrivial(Type::none); } - uint32_t segment = upTo(wasm.dataSegments.size()); - size_t totalSize = wasm.dataSegments[segment]->data.size(); + Index segIdx = upTo(wasm.dataSegments.size()); + Name segment = wasm.dataSegments[segIdx]->name; + size_t totalSize = wasm.dataSegments[segIdx]->data.size(); size_t offsetVal = upTo(totalSize); size_t sizeVal = upTo(totalSize - offsetVal); Expression* dest = makePointer(); @@ -3211,7 +3213,9 @@ Expression* TranslateToFuzzReader::makeDataDrop() { if (!allowMemory) { return makeTrivial(Type::none); } - return builder.makeDataDrop(upTo(wasm.dataSegments.size())); + Index segIdx = upTo(wasm.dataSegments.size()); + Name segment = wasm.dataSegments[segIdx]->name; + return builder.makeDataDrop(segment); } Expression* TranslateToFuzzReader::makeMemoryCopy() { -- cgit v1.2.3