diff options
author | Thomas Lively <tlively@google.com> | 2024-09-19 17:08:17 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-19 17:08:17 -0700 |
commit | 480f5ba352a9f89afe72779c81f8a16fd3c8ba4a (patch) | |
tree | 55eae60ae748233aa244a7afda693ca6b1927455 /src/passes | |
parent | 2711d4fe4b4514ea146e8810959a8f170c932591 (diff) | |
download | binaryen-480f5ba352a9f89afe72779c81f8a16fd3c8ba4a.tar.gz binaryen-480f5ba352a9f89afe72779c81f8a16fd3c8ba4a.tar.bz2 binaryen-480f5ba352a9f89afe72779c81f8a16fd3c8ba4a.zip |
[NFC] Eagerly create segments when parsing datacount (#6958)
The purpose of the datacount section is to pre-declare how many data
segments there will be so that engines can allocate space for them
and not have to back patch subsequent instructions in the code section
that refer to them. Once we use IRBuilder in the binary parser, we will
have to have the data segments available by the time we parse
instructions that use them, so eagerly construct the data segments when
parsing the datacount section.
Diffstat (limited to 'src/passes')
-rw-r--r-- | src/passes/Print.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp index d49bc2974..427bff329 100644 --- a/src/passes/Print.cpp +++ b/src/passes/Print.cpp @@ -3238,6 +3238,11 @@ void PrintSExpression::visitMemory(Memory* curr) { } void PrintSExpression::visitDataSegment(DataSegment* curr) { + if (!curr->isPassive && !curr->offset) { + // This data segment must have been created from the datacount section but + // not parsed yet. Skip it. + return; + } doIndent(o, indent); o << '('; printMajor(o, "data "); |