summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/StripTargetFeatures.cpp7
-rw-r--r--src/passes/pass.cpp3
-rw-r--r--src/passes/passes.h1
-rw-r--r--src/wasm-binary.h1
-rw-r--r--src/wasm/wasm-binary.cpp16
-rw-r--r--src/wasm/wasm.cpp1
6 files changed, 20 insertions, 9 deletions
diff --git a/src/passes/StripTargetFeatures.cpp b/src/passes/StripTargetFeatures.cpp
index 542b4a6c1..cb5e51f08 100644
--- a/src/passes/StripTargetFeatures.cpp
+++ b/src/passes/StripTargetFeatures.cpp
@@ -19,11 +19,14 @@
namespace wasm {
struct StripTargetFeatures : public Pass {
+ bool isStripped = false;
+ StripTargetFeatures(bool isStripped) : isStripped(isStripped) {}
void run(PassRunner* runner, Module* module) override {
- module->hasFeaturesSection = false;
+ module->hasFeaturesSection = !isStripped;
}
};
-Pass* createStripTargetFeaturesPass() { return new StripTargetFeatures(); }
+Pass* createStripTargetFeaturesPass() { return new StripTargetFeatures(true); }
+Pass* createEmitTargetFeaturesPass() { return new StripTargetFeatures(false); }
} // namespace wasm
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp
index b46a03b5e..d1dd2fe69 100644
--- a/src/passes/pass.cpp
+++ b/src/passes/pass.cpp
@@ -109,6 +109,9 @@ void PassRegistry::registerPasses() {
registerPass("duplicate-function-elimination",
"removes duplicate functions",
createDuplicateFunctionEliminationPass);
+ registerPass("emit-target-features",
+ "emit the target features section in the output",
+ createEmitTargetFeaturesPass);
registerPass("extract-function",
"leaves just one function (useful for debugging)",
createExtractFunctionPass);
diff --git a/src/passes/passes.h b/src/passes/passes.h
index 84aabf0e8..15daf268e 100644
--- a/src/passes/passes.h
+++ b/src/passes/passes.h
@@ -36,6 +36,7 @@ Pass* createDataFlowOptsPass();
Pass* createDeadCodeEliminationPass();
Pass* createDirectizePass();
Pass* createDuplicateFunctionEliminationPass();
+Pass* createEmitTargetFeaturesPass();
Pass* createExtractFunctionPass();
Pass* createFlattenPass();
Pass* createFuncCastEmulationPass();
diff --git a/src/wasm-binary.h b/src/wasm-binary.h
index ea1a8ad82..8f1cbb7de 100644
--- a/src/wasm-binary.h
+++ b/src/wasm-binary.h
@@ -400,6 +400,7 @@ extern const char* TargetFeatures;
extern const char* AtomicsFeature;
extern const char* BulkMemoryFeature;
extern const char* ExceptionHandlingFeature;
+extern const char* MutableGlobalsFeature;
extern const char* TruncSatFeature;
extern const char* SignExtFeature;
extern const char* SIMD128Feature;
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index 5fb3a8550..f1c6eeb7c 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -666,19 +666,19 @@ void WasmBinaryWriter::writeFeaturesSection() {
auto toString = [](FeatureSet::Feature f) {
switch (f) {
case FeatureSet::Atomics:
- return "atomics";
+ return BinaryConsts::UserSections::AtomicsFeature;
case FeatureSet::MutableGlobals:
- return "mutable-globals";
+ return BinaryConsts::UserSections::MutableGlobalsFeature;
case FeatureSet::TruncSat:
- return "nontrapping-fptoint";
+ return BinaryConsts::UserSections::TruncSatFeature;
case FeatureSet::SIMD:
- return "simd128";
+ return BinaryConsts::UserSections::SIMD128Feature;
case FeatureSet::BulkMemory:
- return "bulk-memory";
+ return BinaryConsts::UserSections::BulkMemoryFeature;
case FeatureSet::SignExt:
- return "sign-ext";
+ return BinaryConsts::UserSections::SignExtFeature;
case FeatureSet::ExceptionHandling:
- return "exception-handling";
+ return BinaryConsts::UserSections::ExceptionHandlingFeature;
default:
WASM_UNREACHABLE();
}
@@ -2154,6 +2154,8 @@ void WasmBinaryBuilder::readFeatures(size_t payloadLen) {
wasm.features.setBulkMemory();
} else if (name == BinaryConsts::UserSections::ExceptionHandlingFeature) {
wasm.features.setExceptionHandling();
+ } else if (name == BinaryConsts::UserSections::MutableGlobalsFeature) {
+ wasm.features.setMutableGlobals();
} else if (name == BinaryConsts::UserSections::TruncSatFeature) {
wasm.features.setTruncSat();
} else if (name == BinaryConsts::UserSections::SignExtFeature) {
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp
index 56eb83fbc..a307d95f4 100644
--- a/src/wasm/wasm.cpp
+++ b/src/wasm/wasm.cpp
@@ -36,6 +36,7 @@ const char* TargetFeatures = "target_features";
const char* AtomicsFeature = "atomics";
const char* BulkMemoryFeature = "bulk-memory";
const char* ExceptionHandlingFeature = "exception-handling";
+const char* MutableGlobalsFeature = "mutable-globals";
const char* TruncSatFeature = "nontrapping-fptoint";
const char* SignExtFeature = "sign-ext";
const char* SIMD128Feature = "simd128";