summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-binary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r--src/wasm/wasm-binary.cpp50
1 files changed, 15 insertions, 35 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index ae0e24759..ab229f111 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -84,8 +84,6 @@ void WasmBinaryWriter::write() {
writeLateUserSections();
writeFeaturesSection();
-
- finishUp();
}
void WasmBinaryWriter::writeHeader() {
@@ -1087,6 +1085,9 @@ void WasmBinaryWriter::writeDylinkSection() {
for (auto& neededDynlib : wasm->dylinkSection->neededDynlibs) {
writeInlineString(neededDynlib.c_str());
}
+
+ writeData(wasm->dylinkSection->tail.data(), wasm->dylinkSection->tail.size());
+
finishSection(start);
}
@@ -1131,12 +1132,16 @@ void WasmBinaryWriter::writeExtraDebugLocation(Expression* curr,
}
}
+void WasmBinaryWriter::writeData(const char* data, size_t size) {
+ for (size_t i = 0; i < size; i++) {
+ o << int8_t(data[i]);
+ }
+}
+
void WasmBinaryWriter::writeInlineString(const char* name) {
int32_t size = strlen(name);
o << U32LEB(size);
- for (int32_t i = 0; i < size; i++) {
- o << int8_t(name[i]);
- }
+ writeData(name, size);
}
static bool isHexDigit(char ch) {
@@ -1173,36 +1178,7 @@ void WasmBinaryWriter::writeEscapedName(const char* name) {
void WasmBinaryWriter::writeInlineBuffer(const char* data, size_t size) {
o << U32LEB(size);
- for (size_t i = 0; i < size; i++) {
- o << int8_t(data[i]);
- }
-}
-
-void WasmBinaryWriter::emitBuffer(const char* data, size_t size) {
- assert(size > 0);
- buffersToWrite.emplace_back(data, size, o.size());
- // placeholder, we'll fill in the pointer to the buffer later when we have it
- o << uint32_t(0);
-}
-
-void WasmBinaryWriter::emitString(const char* str) {
- BYN_TRACE("emitString " << str << std::endl);
- emitBuffer(str, strlen(str) + 1);
-}
-
-void WasmBinaryWriter::finishUp() {
- BYN_TRACE("finishUp\n");
- // finish buffers
- for (const auto& buffer : buffersToWrite) {
- BYN_TRACE("writing buffer"
- << (int)buffer.data[0] << "," << (int)buffer.data[1] << " at "
- << o.size() << " and pointer is at " << buffer.pointerLocation
- << "\n");
- o.writeAt(buffer.pointerLocation, (uint32_t)o.size());
- for (size_t i = 0; i < buffer.size; i++) {
- o << (uint8_t)buffer.data[i];
- }
- }
+ writeData(data, size);
}
void WasmBinaryWriter::writeType(Type type) {
@@ -3289,6 +3265,10 @@ void WasmBinaryBuilder::readDylink(size_t payloadLen) {
wasm.dylinkSection->neededDynlibs.push_back(getInlineString());
}
+ size_t remaining = (sectionPos + payloadLen) - pos;
+ auto tail = getByteView(remaining);
+ wasm.dylinkSection->tail = {tail.first, tail.second};
+
if (pos != sectionPos + payloadLen) {
throwError("bad features section size");
}