summaryrefslogtreecommitdiff
path: root/src/tools/asm2wasm.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2017-02-07 11:24:57 -0800
committerGitHub <noreply@github.com>2017-02-07 11:24:57 -0800
commit76c8f82d5cf98171ff46ed4bf36791d3b891357f (patch)
treeab251df55b1274b053896b10b14faf2ac8e526cd /src/tools/asm2wasm.cpp
parent985bcba6239792ebcb3808f1066ca6ea20ac5688 (diff)
downloadbinaryen-76c8f82d5cf98171ff46ed4bf36791d3b891357f.tar.gz
binaryen-76c8f82d5cf98171ff46ed4bf36791d3b891357f.tar.bz2
binaryen-76c8f82d5cf98171ff46ed4bf36791d3b891357f.zip
asm2wasm debuginfo (#895)
* parse file/line comments in asm.js into debug intrinsics * convert debug intrinsics into annotations, and print them * ignore --debuginfo if not emitting text, as wasm binaries don't support that yet * emit full debug info when -g and emitting text; when -g and emitting binary, all we can do is the Names section * update wasm.js
Diffstat (limited to 'src/tools/asm2wasm.cpp')
-rw-r--r--src/tools/asm2wasm.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/tools/asm2wasm.cpp b/src/tools/asm2wasm.cpp
index c880e7459..01602c8b7 100644
--- a/src/tools/asm2wasm.cpp
+++ b/src/tools/asm2wasm.cpp
@@ -84,7 +84,7 @@ int main(int argc, const char *argv[]) {
[&wasmOnly](Options *o, const std::string &) {
wasmOnly = true;
})
- .add("--debuginfo", "-g", "Emit names section and debug info",
+ .add("--debuginfo", "-g", "Emit names section and debug info (for debug info you must emit text, -S, for this to work)",
Options::Arguments::Zero,
[&](Options *o, const std::string &arguments) { debugInfo = true; })
.add("--symbolmap", "-s", "Emit a symbol map (indexes => names)",
@@ -99,6 +99,12 @@ int main(int argc, const char *argv[]) {
});
options.parse(argc, argv);
+ // finalize arguments
+ if (options.extra["output"].size() == 0) {
+ // when no output file is specified, we emit text to stdout
+ emitBinary = false;
+ }
+
const auto &tm_it = options.extra.find("total memory");
size_t totalMemory =
tm_it == options.extra.end() ? 16 * 1024 * 1024 : atoi(tm_it->second.c_str());
@@ -109,6 +115,8 @@ int main(int argc, const char *argv[]) {
}
Asm2WasmPreProcessor pre;
+ // wasm binaries can contain a names section, but not full debug info
+ pre.debugInfo = debugInfo && !emitBinary;
auto input(
read_file<std::vector<char>>(options.extra["infile"], Flags::Text, options.debug ? Flags::Debug : Flags::Release));
char *start = pre.process(input.data());
@@ -120,7 +128,7 @@ int main(int argc, const char *argv[]) {
if (options.debug) std::cerr << "wasming..." << std::endl;
Module wasm;
wasm.memory.initial = wasm.memory.max = totalMemory / Memory::kPageSize;
- Asm2WasmBuilder asm2wasm(wasm, pre.memoryGrowth, options.debug, imprecise, passOptions, runOptimizationPasses, wasmOnly);
+ Asm2WasmBuilder asm2wasm(wasm, pre, options.debug, imprecise, passOptions, runOptimizationPasses, wasmOnly);
asm2wasm.processAsm(asmjs);
// import mem init file, if provided