summaryrefslogtreecommitdiff
path: root/src/tools/wasm-split.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/wasm-split.cpp')
-rw-r--r--src/tools/wasm-split.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/tools/wasm-split.cpp b/src/tools/wasm-split.cpp
index 4ac295d0e..261c62a68 100644
--- a/src/tools/wasm-split.cpp
+++ b/src/tools/wasm-split.cpp
@@ -61,6 +61,7 @@ struct WasmSplitOptions : ToolOptions {
bool verbose = false;
bool emitBinary = true;
bool symbolMap = false;
+ bool placeholderMap = false;
// TODO: Remove this. See the comment in wasm-binary.h.
bool emitModuleNames = false;
@@ -180,6 +181,13 @@ WasmSplitOptions::WasmSplitOptions()
{Mode::Split},
Options::Arguments::Zero,
[&](Options* o, const std::string& argument) { symbolMap = true; })
+ .add(
+ "--placeholdermap",
+ "",
+ "Write a file mapping placeholder indices to the function names.",
+ {Mode::Split},
+ Options::Arguments::Zero,
+ [&](Options* o, const std::string& argument) { placeholderMap = true; })
.add("--import-namespace",
"",
"The namespace from which to import objects from the primary "
@@ -690,6 +698,15 @@ void writeSymbolMap(Module& wasm, std::string filename) {
runner.run();
}
+void writePlaceholderMap(const std::map<size_t, Name> placeholderMap,
+ std::string filename) {
+ Output output(filename, Flags::Text);
+ auto& o = output.getStream();
+ for (auto pair : placeholderMap) {
+ o << pair.first << ':' << pair.second << '\n';
+ }
+}
+
void splitModule(const WasmSplitOptions& options) {
Module wasm;
parseInput(wasm, options);
@@ -795,8 +812,8 @@ void splitModule(const WasmSplitOptions& options) {
config.newExportPrefix = options.exportPrefix;
}
config.minimizeNewExportNames = !options.passOptions.debugInfo;
- std::unique_ptr<Module> secondary =
- ModuleSplitting::splitFunctions(wasm, config);
+ auto splitResults = ModuleSplitting::splitFunctions(wasm, config);
+ auto& secondary = splitResults.secondary;
adjustTableSize(wasm, options.initialTableSize);
adjustTableSize(*secondary, options.initialTableSize);
@@ -806,6 +823,11 @@ void splitModule(const WasmSplitOptions& options) {
writeSymbolMap(*secondary, options.secondaryOutput + ".symbols");
}
+ if (options.placeholderMap) {
+ writePlaceholderMap(splitResults.placeholderMap,
+ options.primaryOutput + ".placeholders");
+ }
+
// Set the names of the split modules. This can help differentiate them in
// stack traces.
if (options.emitModuleNames) {