diff options
author | Alon Zakai <alonzakai@gmail.com> | 2017-02-07 11:24:57 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-07 11:24:57 -0800 |
commit | 76c8f82d5cf98171ff46ed4bf36791d3b891357f (patch) | |
tree | ab251df55b1274b053896b10b14faf2ac8e526cd /src/tools/asm2wasm.cpp | |
parent | 985bcba6239792ebcb3808f1066ca6ea20ac5688 (diff) | |
download | binaryen-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.cpp | 12 |
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 |