summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/Strip.cpp34
-rw-r--r--src/passes/pass.cpp4
-rw-r--r--src/passes/passes.h3
-rw-r--r--src/wasm-binary.h1
-rw-r--r--src/wasm/wasm-binary.cpp2
-rw-r--r--src/wasm/wasm.cpp1
-rw-r--r--test/metadatas.wasmbin0 -> 261 bytes
-rw-r--r--test/metadatas.wasm.fromBinary10
-rw-r--r--test/passes/metrics_strip-debug_metrics.bin.txt17
-rw-r--r--test/passes/metrics_strip-debug_metrics.wasmbin0 -> 261 bytes
-rw-r--r--test/passes/metrics_strip-producers_metrics.bin.txt16
-rw-r--r--test/passes/metrics_strip-producers_metrics.wasmbin0 -> 261 bytes
-rw-r--r--test/passes/strip-debug.bin.txt (renamed from test/passes/strip.bin.txt)0
-rw-r--r--test/passes/strip-debug.wasm (renamed from test/passes/strip.wasm)bin771 -> 771 bytes
-rw-r--r--test/passes/strip-producers.bin.txt22
-rw-r--r--test/passes/strip-producers.wasmbin0 -> 771 bytes
16 files changed, 97 insertions, 13 deletions
diff --git a/src/passes/Strip.cpp b/src/passes/Strip.cpp
index d2ebbe129..8ab712cb1 100644
--- a/src/passes/Strip.cpp
+++ b/src/passes/Strip.cpp
@@ -15,10 +15,12 @@
*/
//
-// Similar to strip-ing a native binary, this removes debug info
-// and related things like source map URLs, names section, etc.
+// Similar to strip-ing a native binary, this family of passes can
+// removes debug info and other things.
//
+#include <functional>
+
#include "wasm.h"
#include "wasm-binary.h"
#include "pass.h"
@@ -28,6 +30,12 @@ using namespace std;
namespace wasm {
struct Strip : public Pass {
+ // A function that returns true if the method should be removed.
+ typedef std::function<bool (UserSection&)> Decider;
+ Decider decider;
+
+ Strip(Decider decider) : decider(decider) {}
+
void run(PassRunner* runner, Module* module) override {
// Remove name and debug sections.
auto& sections = module->userSections;
@@ -35,12 +43,7 @@ struct Strip : public Pass {
std::remove_if(
sections.begin(),
sections.end(),
- [&](const UserSection& curr) {
- return curr.name == BinaryConsts::UserSections::Name ||
- curr.name == BinaryConsts::UserSections::SourceMapUrl ||
- curr.name.find(".debug") == 0 ||
- curr.name.find("reloc..debug") == 0;
- }
+ decider
),
sections.end()
);
@@ -53,8 +56,19 @@ struct Strip : public Pass {
}
};
-Pass *createStripPass() {
- return new Strip();
+Pass *createStripDebugPass() {
+ return new Strip([&](const UserSection& curr) {
+ return curr.name == BinaryConsts::UserSections::Name ||
+ curr.name == BinaryConsts::UserSections::SourceMapUrl ||
+ curr.name.find(".debug") == 0 ||
+ curr.name.find("reloc..debug") == 0;
+ });
+}
+
+Pass *createStripProducersPass() {
+ return new Strip([&](const UserSection& curr) {
+ return curr.name == BinaryConsts::UserSections::Producers;
+ });
}
} // namespace wasm
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp
index cae69860a..2872575c2 100644
--- a/src/passes/pass.cpp
+++ b/src/passes/pass.cpp
@@ -133,7 +133,9 @@ void PassRegistry::registerPasses() {
registerPass("souperify-single-use", "emit Souper IR in text form (single-use nodes only)", createSouperifySingleUsePass);
registerPass("spill-pointers", "spill pointers to the C stack (useful for Boehm-style GC)", createSpillPointersPass);
registerPass("ssa", "ssa-ify variables so that they have a single assignment", createSSAifyPass);
- registerPass("strip", "strip debug info (including the names section)", createStripPass);
+ registerPass("strip", "deprecated; same as strip-debug", createStripDebugPass);
+ registerPass("strip-debug", "strip debug info (including the names section)", createStripDebugPass);
+ registerPass("strip-producers", "strip the wasm producers section", createStripProducersPass);
registerPass("trap-mode-clamp", "replace trapping operations with clamping semantics", createTrapModeClamp);
registerPass("trap-mode-js", "replace trapping operations with js semantics", createTrapModeJS);
registerPass("untee", "removes local.tees, replacing them with sets and gets", createUnteePass);
diff --git a/src/passes/passes.h b/src/passes/passes.h
index b04303429..15493f313 100644
--- a/src/passes/passes.h
+++ b/src/passes/passes.h
@@ -84,7 +84,8 @@ Pass* createSimplifyLocalsNoNestingPass();
Pass* createSimplifyLocalsNoTeePass();
Pass* createSimplifyLocalsNoStructurePass();
Pass* createSimplifyLocalsNoTeeNoStructurePass();
-Pass* createStripPass();
+Pass* createStripDebugPass();
+Pass* createStripProducersPass();
Pass* createSouperifyPass();
Pass* createSouperifySingleUsePass();
Pass* createSpillPointersPass();
diff --git a/src/wasm-binary.h b/src/wasm-binary.h
index a5b1e10b4..2402375dc 100644
--- a/src/wasm-binary.h
+++ b/src/wasm-binary.h
@@ -344,6 +344,7 @@ extern const char* Name;
extern const char* SourceMapUrl;
extern const char* Dylink;
extern const char* Linking;
+extern const char* Producers;
enum Subsection {
NameFunction = 1,
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index 187328e58..90a588bb9 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -719,7 +719,7 @@ void WasmBinaryBuilder::readUserSection(size_t payloadLen) {
} else {
// an unfamiliar custom section
if (sectionName.equals(BinaryConsts::UserSections::Linking)) {
- std::cerr << "warning: linking section is present, which binaryen cannot handle yet - relocations will be invalidated!\n";
+ std::cerr << "warning: linking section is present, so this is not a standard wasm file - binaryen cannot handle this properly!\n";
}
wasm.userSections.resize(wasm.userSections.size() + 1);
auto& section = wasm.userSections.back();
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp
index 757bc1828..0d5f3d5b5 100644
--- a/src/wasm/wasm.cpp
+++ b/src/wasm/wasm.cpp
@@ -31,6 +31,7 @@ const char* Name = "name";
const char* SourceMapUrl = "sourceMappingURL";
const char* Dylink = "dylink";
const char* Linking = "linking";
+const char* Producers = "producers";
}
}
diff --git a/test/metadatas.wasm b/test/metadatas.wasm
new file mode 100644
index 000000000..ea797306f
--- /dev/null
+++ b/test/metadatas.wasm
Binary files differ
diff --git a/test/metadatas.wasm.fromBinary b/test/metadatas.wasm.fromBinary
new file mode 100644
index 000000000..2e6531678
--- /dev/null
+++ b/test/metadatas.wasm.fromBinary
@@ -0,0 +1,10 @@
+(module
+ (type $0 (func))
+ (export "a" (func $0))
+ (func $0 (; 0 ;) (type $0)
+ (nop)
+ )
+ ;; custom section "emscripten_metadata", size 7
+ ;; custom section "producers", size 187
+)
+
diff --git a/test/passes/metrics_strip-debug_metrics.bin.txt b/test/passes/metrics_strip-debug_metrics.bin.txt
new file mode 100644
index 000000000..dbb3dcc37
--- /dev/null
+++ b/test/passes/metrics_strip-debug_metrics.bin.txt
@@ -0,0 +1,17 @@
+total
+ [funcs] : 1
+ [total] : 1
+ nop : 1
+total
+ [funcs] : 1
+ [total] : 1
+ nop : 1
+(module
+ (type $0 (func))
+ (export "a" (func $0))
+ (func $0 (; 0 ;) (type $0)
+ (nop)
+ )
+ ;; custom section "emscripten_metadata", size 7
+ ;; custom section "producers", size 187
+)
diff --git a/test/passes/metrics_strip-debug_metrics.wasm b/test/passes/metrics_strip-debug_metrics.wasm
new file mode 100644
index 000000000..ea797306f
--- /dev/null
+++ b/test/passes/metrics_strip-debug_metrics.wasm
Binary files differ
diff --git a/test/passes/metrics_strip-producers_metrics.bin.txt b/test/passes/metrics_strip-producers_metrics.bin.txt
new file mode 100644
index 000000000..6ddfa5892
--- /dev/null
+++ b/test/passes/metrics_strip-producers_metrics.bin.txt
@@ -0,0 +1,16 @@
+total
+ [funcs] : 1
+ [total] : 1
+ nop : 1
+total
+ [funcs] : 1
+ [total] : 1
+ nop : 1
+(module
+ (type $0 (func))
+ (export "a" (func $0))
+ (func $0 (; 0 ;) (type $0)
+ (nop)
+ )
+ ;; custom section "emscripten_metadata", size 7
+)
diff --git a/test/passes/metrics_strip-producers_metrics.wasm b/test/passes/metrics_strip-producers_metrics.wasm
new file mode 100644
index 000000000..ea797306f
--- /dev/null
+++ b/test/passes/metrics_strip-producers_metrics.wasm
Binary files differ
diff --git a/test/passes/strip.bin.txt b/test/passes/strip-debug.bin.txt
index 7160e69f2..7160e69f2 100644
--- a/test/passes/strip.bin.txt
+++ b/test/passes/strip-debug.bin.txt
diff --git a/test/passes/strip.wasm b/test/passes/strip-debug.wasm
index 59065683c..59065683c 100644
--- a/test/passes/strip.wasm
+++ b/test/passes/strip-debug.wasm
Binary files differ
diff --git a/test/passes/strip-producers.bin.txt b/test/passes/strip-producers.bin.txt
new file mode 100644
index 000000000..dcc8ab9b4
--- /dev/null
+++ b/test/passes/strip-producers.bin.txt
@@ -0,0 +1,22 @@
+(module
+ (type $0 (func (result i32)))
+ (import "env" "__linear_memory" (memory $0 0))
+ (import "env" "__indirect_function_table" (table $timport$1 0 funcref))
+ (func $0 (; 0 ;) (type $0) (result i32)
+ (local $0 i32)
+ (local.set $0
+ (i32.const 1)
+ )
+ (return
+ (local.get $0)
+ )
+ )
+ ;; custom section ".debug_str", size 246
+ ;; custom section ".debug_abbrev", size 52
+ ;; custom section ".debug_info", size 69
+ ;; custom section ".debug_macinfo", size 1
+ ;; custom section ".debug_line", size 56
+ ;; custom section "zinking", size 28
+ ;; custom section "reloc..debug_info", size 47
+ ;; custom section "reloc..debug_line", size 6
+)
diff --git a/test/passes/strip-producers.wasm b/test/passes/strip-producers.wasm
new file mode 100644
index 000000000..59065683c
--- /dev/null
+++ b/test/passes/strip-producers.wasm
Binary files differ