-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix aarch64 load trap info: HeapOutOfBounds, not OutOfBounds. #1571
Conversation
This halfway solves a test failure: when temporarily disabling another assert that is triggered by lack of debug info, this causes the `custom_trap_handler` test to pass.
Subscribe to Label Actioncc @bnjbvr
This issue or pull request has been labeled: "cranelift", "cranelift:area:aarch64"
Thus the following users have been cc'd because of the following labels:
To subscribe or unsubscribe from this label, edit the |
This change adds SourceLoc information per instruction in a `VCode<Inst>` container, and keeps this information up-to-date across register allocation and branch reordering. The information is initially collected during instruction lowering, eventually collected on the MachSection, and finally provided to the environment that wraps the codegen crate for wasmtime. This PR is based on top of bytecodealliance#1570 and bytecodealliance#1571 (part of a series fixing tests). This PR depends on wasmtime/regalloc.rs#50, a change to the register allocator to provide instruction-granularity info on the rewritten instruction stream (rather than block-granularity). With the prior PRs applied as well, quite a few more unit tests pass; the exclusion list in bytecodealliance#1526 should be updated if this PR lands first.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Makes sense, thanks! I was thinking that setting the trap at so low a layer was a bad use of abstractions, and it might actually make sense to pass the TrapCode
along the SourceLoc
, up above during lowering. It is a preexisting issue, though, since 1. i implemented it this way, and 2. the x86 backend does the same thing as we do here (it uses this trap code in emit functions). So either way is fine.
Agreed, we could clean up the way that traps are specified at some point -- something like "trap code to raise if this CLIF instruction fails for any one of a predetermined set of failure modes" (e.g., load/store to bad address, FP range/conversion/div-by-0, etc.) For now this fixes the test failures, though, so I'll go ahead and merge this! |
This change adds SourceLoc information per instruction in a `VCode<Inst>` container, and keeps this information up-to-date across register allocation and branch reordering. The information is initially collected during instruction lowering, eventually collected on the MachSection, and finally provided to the environment that wraps the codegen crate for wasmtime. This PR is based on top of bytecodealliance#1570 and bytecodealliance#1571 (part of a series fixing tests). This PR depends on wasmtime/regalloc.rs#50, a change to the register allocator to provide instruction-granularity info on the rewritten instruction stream (rather than block-granularity). With the prior PRs applied as well, quite a few more unit tests pass; the exclusion list in bytecodealliance#1526 should be updated if this PR lands first.
This change adds SourceLoc information per instruction in a `VCode<Inst>` container, and keeps this information up-to-date across register allocation and branch reordering. The information is initially collected during instruction lowering, eventually collected on the MachSection, and finally provided to the environment that wraps the codegen crate for wasmtime. This PR is based on top of bytecodealliance#1570 and bytecodealliance#1571 (part of a series fixing tests). This PR depends on wasmtime/regalloc.rs#50, a change to the register allocator to provide instruction-granularity info on the rewritten instruction stream (rather than block-granularity). With the prior PRs applied as well, quite a few more unit tests pass; the exclusion list in bytecodealliance#1526 should be updated if this PR lands first.
This halfway solves a test failure: when temporarily disabling another
assert that is triggered by lack of debug info, this causes the
custom_trap_handler
test to pass.Validated that the
HeapOutOfBounds
trapcode is passed to theTrapSink
by the x86 backend's lowering of memory accesses as well.