diff options
author | Thomas Lively <tlively@google.com> | 2023-04-04 11:33:15 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-04 11:33:15 -0700 |
commit | a802fbe07c270f510c87dfa93577bd4731c075f3 (patch) | |
tree | 4c67b39ced46258593f6904bba4a5ac20292886c /src/tools/fuzzing/fuzzing.cpp | |
parent | 05e1183954e49f8b3a1669cc7973af590afe9fc3 (diff) | |
download | binaryen-a802fbe07c270f510c87dfa93577bd4731c075f3.tar.gz binaryen-a802fbe07c270f510c87dfa93577bd4731c075f3.tar.bz2 binaryen-a802fbe07c270f510c87dfa93577bd4731c075f3.zip |
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.
Diffstat (limited to 'src/tools/fuzzing/fuzzing.cpp')
-rw-r--r-- | src/tools/fuzzing/fuzzing.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
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() { |