diff options
Diffstat (limited to 'src/passes/Strip.cpp')
-rw-r--r-- | src/passes/Strip.cpp | 34 |
1 files changed, 24 insertions, 10 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 |