summaryrefslogtreecommitdiff
path: root/src/passes/Strip.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/Strip.cpp')
-rw-r--r--src/passes/Strip.cpp34
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