• jgruber's avatar
    Fix LookupCode for the DatePrototype_GetField builtin · 4f781d72
    jgruber authored
    This was exposed on win64 and manifested as a negative offset during
    stack frame collection, i.e. pc < Code::instruction_start() for a
    BUILTIN frame.
    
    This happened because StackFrame::LookupCode returns the wrong code
    object when call is the last instruction in a code object:
    * pc is actually the return address for all but the topmost frame.
    * pc points at the next instruction after the call.
    * This is beyond the current code object if call is the last
      instruction.
    * Lookup itself is naive in that it just returns the first code object
      for which (next_code_obj_addr > pc). It does not check that pc is
      actually within [instruction_start, instruction_end[.
    * In this specific case, the pc (== return address) actually pointed
      at the beginning of the header of the next code object.
    * We finally calculated offset as (code->instruction_start() - pc),
      but with the wrong code object.
    
    This should be followed up by a proper fix at some point. For instance,
    this could be setting pc to (return address - 1) for all but the topmost
    frame.
    
    BUG=v8:5311
    
    Review-Url: https://codereview.chromium.org/2284673002
    Cr-Commit-Position: refs/heads/master@{#38996}
    4f781d72
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/binutils 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...