• clemensh's avatar
    [wasm] Fix location for error in asm.js ToNumber conversion · 890d28f3
    clemensh authored
    In the asm.js code translated to wasm, we call imported functions via a
    WASM_TO_JS stub, which first calls the function and then calls ToNumber
    on the return value. Exceptions can happen in both calls.
    We were only ever reporting the location of the function call, whereas
    asm.js code executed via turbofan reported the location of the type
    coercion operator ("+" on "+foo()" or "|" on "foo()|0").
    
    This CL implements the same behaviour for asm.js code translated to
    wasm. The following is changed:
    - the AsmWasmBuilder records the parent node when descending on a binary
      operator (also "+foo()" is represented by a binary operation).
    - it stores not one location per call in the source position side
      table, but two (one for the call, one for the parent which does the
      type coercion).
    - the wasm compiler annotates the source positions "0" and "1" to the
      two calls in the WASM_TO_JS wrapper (only if the module origin is
      asm.js).
    - the StackFrame::State struct now also holds the callee_pc_address,
      which is set in ComputeCallerState. The WASM frame uses this
      information to determine whether the callee frame is WASM_TO_JS, and
      whether that frame is at the ToNumber conversion call.
    - the same information is also stored in the FrameArray which is used
      to reconstruct the stack trace later.
    
    R=titzer@chromium.org, bradnelson@chromium.org
    CC=jgruber@chromium.org
    BUG=v8:4203,v8:5724
    
    Committed: https://crrev.com/94cd46b55e24fa2bb7b06b3da4d5ba7f029bc262
    Review-Url: https://codereview.chromium.org/2555243002
    Cr-Original-Commit-Position: refs/heads/master@{#41599}
    Cr-Commit-Position: refs/heads/master@{#41613}
    890d28f3
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
docs Loading commit data...
gni Loading commit data...
gypfiles Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
Makefile Loading commit data...
Makefile.android Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...