diff options
-rw-r--r-- | src/wasm-binary.h | 1 | ||||
-rw-r--r-- | src/wasm/wasm-binary.cpp | 27 | ||||
-rw-r--r-- | src/wasm/wasm.cpp | 1 | ||||
-rw-r--r-- | test/lit/binary/custom-section-build-id.test | 7 | ||||
-rw-r--r-- | test/lit/binary/custom-section-build-id.test.wasm | bin | 0 -> 29 bytes |
5 files changed, 35 insertions, 1 deletions
diff --git a/src/wasm-binary.h b/src/wasm-binary.h index d568abd6c..989ce891a 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -414,6 +414,7 @@ extern const char* Dylink; extern const char* Dylink0; extern const char* Linking; extern const char* Producers; +extern const char* BuildId; extern const char* TargetFeatures; extern const char* AtomicsFeature; diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index d9985212f..4082fbf5f 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -16,6 +16,7 @@ #include <algorithm> #include <fstream> +#include <iomanip> #include "ir/eh-utils.h" #include "ir/module-utils.h" @@ -1212,7 +1213,31 @@ void WasmBinaryWriter::initializeDebugInfo() { } void WasmBinaryWriter::writeSourceMapProlog() { - *sourceMap << "{\"version\":3,\"sources\":["; + *sourceMap << "{\"version\":3,"; + + for (const auto& section : wasm->customSections) { + if (section.name == BinaryConsts::CustomSections::BuildId) { + U32LEB ret; + size_t pos = 0; + ret.read([&]() { return section.data[pos++]; }); + + if (section.data.size() != pos + ret.value) { + std::cerr + << "warning: build id section with an incorrect size detected!\n"; + break; + } + + *sourceMap << "\"debugId\":\""; + for (size_t i = pos; i < section.data.size(); i++) { + *sourceMap << std::setfill('0') << std::setw(2) << std::hex + << static_cast<int>(static_cast<uint8_t>(section.data[i])); + } + *sourceMap << "\","; + break; + } + } + + *sourceMap << "\"sources\":["; for (size_t i = 0; i < wasm->debugInfoFileNames.size(); i++) { if (i > 0) { *sourceMap << ","; diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp index ae70e4a22..d138e4226 100644 --- a/src/wasm/wasm.cpp +++ b/src/wasm/wasm.cpp @@ -36,6 +36,7 @@ const char* Dylink = "dylink"; const char* Dylink0 = "dylink.0"; const char* Linking = "linking"; const char* Producers = "producers"; +const char* BuildId = "build_id"; const char* TargetFeatures = "target_features"; const char* AtomicsFeature = "atomics"; const char* BulkMemoryFeature = "bulk-memory"; diff --git a/test/lit/binary/custom-section-build-id.test b/test/lit/binary/custom-section-build-id.test new file mode 100644 index 000000000..65d886752 --- /dev/null +++ b/test/lit/binary/custom-section-build-id.test @@ -0,0 +1,7 @@ +# Verify that the build id is included in the source map. + +;; RUN: wasm-opt %s.wasm -o %t.wasm -osm %t.map +;; RUN: cat %t.map | filecheck %s + +;; CHECK: {"version":3,"debugId":"01ab23cd45ef67ab89","sources":[],"names":[],"mappings":""} + diff --git a/test/lit/binary/custom-section-build-id.test.wasm b/test/lit/binary/custom-section-build-id.test.wasm Binary files differnew file mode 100644 index 000000000..caa70f821 --- /dev/null +++ b/test/lit/binary/custom-section-build-id.test.wasm |