bytecodealliance / bytecodealliance/wasmtime
Shrink the size of a compiled artifact's .wasmtime.addrmap section
- Dominant language
- Rust
- Stars
- 18.6k
- Forks
- 1.8k
- Avg merge
- 1d 18h
- Merged PRs (30d)
- 126
Description
Upon thinking about this recently I believe we can shrink the `.addrmap` section of compiled artifacts a significant amount. Currently this section is used to translate from machine code addresses to addresses of instructions within the original wasm file itself. This information is used primarily backtraces to go from machine address to wasm address and then via the wasm dwarf from wasm address to filename and line number.
At this time, though, we have a mapping from machine code address to wasm address *for every single wasm instruction in the entire module*. I don't actually think that this is necessary. Instead I think we only need mappings for trapping instructions and instructions which call a function (not a wasm function but instead a Cranelift-level call to include things like `memory.grow` and such). At this time we're not collecting "asynchronous backtraces" or anything like that so there's no need to actually have an address map for every single wasm instruction in the module.
I suspect that this would lead to huge savings on the `.addrmap` section which is currently sometimes even larger than the `.text` section. I don't think this will necessarily be trivially implemented, though, and will involve some trickery on the cranelift side of things to correlating the source of all machine instructions, whether they're calling, and whether they can trap.
Contributor guide
Assessment
This issue has not been assessed yet.