diff options
author | Jérôme Vouillon <jerome.vouillon@gmail.com> | 2024-05-02 14:09:15 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-02 11:09:15 -0700 |
commit | d58c54643eb97e5c35f8c14a38f3bf549aee92f4 (patch) | |
tree | a5a2888446708bc6a4da1ef53f13b15bbe2a291d /test | |
parent | 58753f40d9ee51bbe5c3acb7656e0d4ab73d0f36 (diff) | |
download | binaryen-d58c54643eb97e5c35f8c14a38f3bf549aee92f4.tar.gz binaryen-d58c54643eb97e5c35f8c14a38f3bf549aee92f4.tar.bz2 binaryen-d58c54643eb97e5c35f8c14a38f3bf549aee92f4.zip |
Source map fixes (#6550)
* Keep debug locations at function start
The `fn_prolog_epilog.debugInfo` test is failing otherwise, since there
was debug information associated to the nop instruction at the beginning
of the function.
* Do not clear the debug information when reaching the end of the source map
The last segment should extend to the end of the function.
* Propagate debug location from the function prolog to its first instruction
* Fix printing of epilogue location
The text parser no longer propagates locations to the epilogue, so we
should always print the location if there is one.
* Fix debug location smearing
The debug location of the last instruction should not smear into the
function epilogue, and a debug location from a previous function should
not smear into the prologue of the current function.
Diffstat (limited to 'test')
-rw-r--r-- | test/binaryen.js/sourcemap.js.txt | 2 | ||||
-rw-r--r-- | test/fib-dbg.wasm.fromBinary | 3 | ||||
-rw-r--r-- | test/lit/debug/source-map-smearing.wast | 22 | ||||
-rw-r--r-- | test/lit/debug/source-map-stop.wast | 5 |
4 files changed, 30 insertions, 2 deletions
diff --git a/test/binaryen.js/sourcemap.js.txt b/test/binaryen.js/sourcemap.js.txt index edb2d86a7..046ad029c 100644 --- a/test/binaryen.js/sourcemap.js.txt +++ b/test/binaryen.js/sourcemap.js.txt @@ -5,4 +5,4 @@ module.c 020: u r c e M a p p i n g U R L 0f m 030: o d u l e . w a s m . m a p -{"version":3,"sources":["module.c"],"names":[],"mappings":"wBAAE"} +{"version":3,"sources":["module.c"],"names":[],"mappings":"wBAAE,E"} diff --git a/test/fib-dbg.wasm.fromBinary b/test/fib-dbg.wasm.fromBinary index bc90702d3..f1b263234 100644 --- a/test/fib-dbg.wasm.fromBinary +++ b/test/fib-dbg.wasm.fromBinary @@ -209,11 +209,12 @@ (br $label$4) ) ) + ;;@ fib.c:8:0 (return - ;;@ fib.c:8:0 (local.get $4) ) ) + ;;@ fib.c:8:0 ) (func $runPostSets (local $0 i32) diff --git a/test/lit/debug/source-map-smearing.wast b/test/lit/debug/source-map-smearing.wast new file mode 100644 index 000000000..875bec9d3 --- /dev/null +++ b/test/lit/debug/source-map-smearing.wast @@ -0,0 +1,22 @@ +;; RUN: wasm-opt %s -g -o %t.wasm -osm %t.wasm.map +;; RUN: echo >> %t.wasm.map +;; RUN: cat %t.wasm.map | filecheck %s + +;; Also test with StackIR, which should have identical results. +;; +;; RUN: wasm-opt %s --generate-stack-ir -o %t.wasm -osm %t.map -g -q +;; RUN: echo >> %t.wasm.map +;; RUN: cat %t.wasm.map | filecheck %s + +;; Check that the debug locations do not smear beyond a function +;; epilogue to the next function. The encoded segment 'C' means that +;; the previous segment is indeed one-byte long. +;; CHECK: {"version":3,"sources":["foo"],"names":[],"mappings":"yBAAC,C,GACC"} +(module + (func $0 + ;;@ foo:1:1 + ) + (func $1 + ;;@ foo:2:2 + ) +) diff --git a/test/lit/debug/source-map-stop.wast b/test/lit/debug/source-map-stop.wast index d075d5686..cdc06505e 100644 --- a/test/lit/debug/source-map-stop.wast +++ b/test/lit/debug/source-map-stop.wast @@ -3,6 +3,11 @@ ;; RUN: wasm-opt %s -g -o %t.wasm -osm %t.wasm.map ;; RUN: wasm-opt %t.wasm -ism %t.wasm.map -S -o - | filecheck %s +;; Also test with StackIR, which should have identical results. +;; +;; RUN: wasm-opt %s --generate-stack-ir -o %t.wasm -osm %t.map -g -q +;; RUN: wasm-opt %t.wasm -ism %t.map -q -o - -S | filecheck %s + ;; Verify that writing to a source map and reading it back does not "smear" ;; debug info across adjacent instructions. The debug info in the output should ;; be identical to the input. |