1. 13 Feb, 2020 1 commit
    • Georgia Kouveli's avatar
      Reland "[arm64] Protect return addresses stored on stack" · 73f88b5f
      Georgia Kouveli authored
      This is a reland of 137bfe47
      
      Original change's description:
      > [arm64] Protect return addresses stored on stack
      > 
      > This change uses the Arm v8.3 pointer authentication instructions in
      > order to protect return addresses stored on the stack.  The generated
      > code signs the return address before storing on the stack and
      > authenticates it after loading it. This also changes the stack frame
      > iterator in order to authenticate stored return addresses and re-sign
      > them when needed, as well as the deoptimizer in order to sign saved
      > return addresses when creating new frames. This offers a level of
      > protection against ROP attacks.
      > 
      > This functionality is enabled with the v8_control_flow_integrity flag
      > that this CL introduces.
      > 
      > The code size effect of this change is small for Octane (up to 2% in
      > some cases but mostly much lower) and negligible for larger benchmarks,
      > however code size measurements are rather noisy. The performance impact
      > on current cores (where the instructions are NOPs) is single digit,
      > around 1-2% for ARES-6 and Octane, and tends to be smaller for big
      > cores than for little cores.
      > 
      > Bug: v8:10026
      > Change-Id: I0081f3938c56e2f24d8227e4640032749f4f8368
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1373782
      > Commit-Queue: Georgia Kouveli <georgia.kouveli@arm.com>
      > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > Reviewed-by: Georg Neis <neis@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#66239}
      
      Bug: v8:10026
      Change-Id: Id1adfa2e6c713f6977d69aa467986e48fe67b3c2
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2051958Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Commit-Queue: Georgia Kouveli <georgia.kouveli@arm.com>
      Cr-Commit-Position: refs/heads/master@{#66254}
      73f88b5f
  2. 12 Feb, 2020 2 commits
    • Nico Hartmann's avatar
      Revert "[arm64] Protect return addresses stored on stack" · 6a9a67d9
      Nico Hartmann authored
      This reverts commit 137bfe47.
      
      Reason for revert: https://ci.chromium.org/p/v8/builders/ci/V8%20Arm%20-%20debug/13072
      
      Original change's description:
      > [arm64] Protect return addresses stored on stack
      > 
      > This change uses the Arm v8.3 pointer authentication instructions in
      > order to protect return addresses stored on the stack.  The generated
      > code signs the return address before storing on the stack and
      > authenticates it after loading it. This also changes the stack frame
      > iterator in order to authenticate stored return addresses and re-sign
      > them when needed, as well as the deoptimizer in order to sign saved
      > return addresses when creating new frames. This offers a level of
      > protection against ROP attacks.
      > 
      > This functionality is enabled with the v8_control_flow_integrity flag
      > that this CL introduces.
      > 
      > The code size effect of this change is small for Octane (up to 2% in
      > some cases but mostly much lower) and negligible for larger benchmarks,
      > however code size measurements are rather noisy. The performance impact
      > on current cores (where the instructions are NOPs) is single digit,
      > around 1-2% for ARES-6 and Octane, and tends to be smaller for big
      > cores than for little cores.
      > 
      > Bug: v8:10026
      > Change-Id: I0081f3938c56e2f24d8227e4640032749f4f8368
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1373782
      > Commit-Queue: Georgia Kouveli <georgia.kouveli@arm.com>
      > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org>
      > Reviewed-by: Georg Neis <neis@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#66239}
      
      TBR=rmcilroy@chromium.org,mstarzinger@chromium.org,neis@chromium.org,georgia.kouveli@arm.com
      
      Change-Id: I57d5928949b0d403774550b9bf7dc0b08ce4e703
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:10026
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2051952Reviewed-by: 's avatarNico Hartmann <nicohartmann@chromium.org>
      Commit-Queue: Nico Hartmann <nicohartmann@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#66242}
      6a9a67d9
    • Georgia Kouveli's avatar
      [arm64] Protect return addresses stored on stack · 137bfe47
      Georgia Kouveli authored
      This change uses the Arm v8.3 pointer authentication instructions in
      order to protect return addresses stored on the stack.  The generated
      code signs the return address before storing on the stack and
      authenticates it after loading it. This also changes the stack frame
      iterator in order to authenticate stored return addresses and re-sign
      them when needed, as well as the deoptimizer in order to sign saved
      return addresses when creating new frames. This offers a level of
      protection against ROP attacks.
      
      This functionality is enabled with the v8_control_flow_integrity flag
      that this CL introduces.
      
      The code size effect of this change is small for Octane (up to 2% in
      some cases but mostly much lower) and negligible for larger benchmarks,
      however code size measurements are rather noisy. The performance impact
      on current cores (where the instructions are NOPs) is single digit,
      around 1-2% for ARES-6 and Octane, and tends to be smaller for big
      cores than for little cores.
      
      Bug: v8:10026
      Change-Id: I0081f3938c56e2f24d8227e4640032749f4f8368
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1373782
      Commit-Queue: Georgia Kouveli <georgia.kouveli@arm.com>
      Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
      Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#66239}
      137bfe47
  3. 29 Oct, 2019 1 commit
  4. 25 Oct, 2019 1 commit
  5. 28 May, 2019 1 commit
  6. 23 May, 2019 1 commit
  7. 22 May, 2019 1 commit
  8. 11 Feb, 2019 1 commit
  9. 23 Aug, 2018 1 commit
  10. 30 May, 2018 1 commit
    • Leszek Swirski's avatar
      [sfi] Compress function arg counts to 16 bit · 53d4dfc3
      Leszek Swirski authored
      Compress the parameter count (and function length) stored in
      SharedFunctionInfo to a uint16_t. This limits us to 2^16 - 1 parameters
      per function, minus one for the "don't adapt arguments" sentinel value,
      which is one fewer than Code::kMaxArguments was already. Anyway, 65534
      arguments should be enough for anyone!
      
      This drops SFI size by 4 bytes.
      
      Bug: chromium:818642
      Change-Id: I126bfb24453dcdc5087a104d3a12cf195a56fa9f
      Reviewed-on: https://chromium-review.googlesource.com/1076627
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#53447}
      53d4dfc3
  11. 11 Apr, 2018 1 commit
  12. 18 Jan, 2018 1 commit
  13. 09 Nov, 2017 1 commit
  14. 20 Oct, 2017 1 commit
  15. 16 Aug, 2017 1 commit
  16. 03 Aug, 2017 2 commits
  17. 19 Jul, 2017 1 commit
  18. 17 Mar, 2017 1 commit
    • neis's avatar
      Disentangle assembler from isolate. · 94b088ca
      neis authored
      This is a first step towards moving Turbofan code generation off the main thread.
      
      Summary of the changes:
      - AssemblerBase no longer has a pointer to the isolate. Instead, its
        constructor receives the few things that it needs from the isolate (on most
        architectures this is just the serializer_enabled flag).
      - RelocInfo no longer has a pointer to the isolate. Instead, the functions
        that need it take it as an argument.  (There are currently still a few that
        implicitly access the isolate through a HeapObject.)
      - The MacroAssembler now explicitly holds a pointer to the isolate (before, it
        used to get it from the Assembler).
      - The jit_cookie also moved from AssemblerBase to the MacroAssemblers, since
        it's not used at all in the Assemblers.
      - A few architectures implemented parts of the Assembler with the help
        of a Codepatcher that is based on MacroAssembler.  Since the Assembler no
        longer has the isolate, but the MacroAssembler still needs it, this doesn't
        work anymore.  Instead, these Assemblers now use a new PatchingAssembler.
      
      BUG=v8:6048
      
      Review-Url: https://codereview.chromium.org/2732273003
      Cr-Commit-Position: refs/heads/master@{#43890}
      94b088ca
  19. 15 Mar, 2017 1 commit
  20. 09 Mar, 2017 1 commit
  21. 27 Jan, 2017 1 commit
    • yangguo's avatar
      [liveedit] reimplement frame restarting. · 3f47c63d
      yangguo authored
      Previously, when restarting a frame, we would rewrite all frames
      between the debugger activation and the frame to restart to squash
      them, and replace the return address with that of a builtin to
      leave that rewritten frame, and restart the function by calling it.
      
      We now simply remember the frame to drop to, and upon returning
      from the debugger, we check whether to drop the frame, load the
      new FP, and restart the function.
      
      R=jgruber@chromium.org, mstarzinger@chromium.org
      BUG=v8:5587
      
      Review-Url: https://codereview.chromium.org/2636913002
      Cr-Commit-Position: refs/heads/master@{#42725}
      3f47c63d
  22. 12 Jan, 2017 1 commit
  23. 06 Sep, 2016 1 commit
    • marja's avatar
      Include only stuff you need, part 8: Fix debug.h -> liveedit.h. · 51a3ffd9
      marja authored
      Rebuilding (after touching certain files) is crazy slow because
      includes are out of control.
      
      The (last remaining) offending include path is: ast.h <- liveedit.h <-
      debug.h <- src/x64/assembler-whatever-port-inl.h <-
      src/macro-assembler.h <- everything possible
      
      With this CL, the rebuild steps needed when touching ast-value-factory.h
      drops from 365 to 181.
      
      BUG=v8:5294
      TBR=bmeurer@chromium.org
      
      Review-Url: https://codereview.chromium.org/2316443002
      Cr-Commit-Position: refs/heads/master@{#39195}
      51a3ffd9
  24. 09 Jun, 2016 1 commit
    • ishell's avatar
      [ic] [stubs] Remove InlineCacheState field from the code flags. · 9dc62d27
      ishell authored
      There are no ICs left that store their state in this field: vector based
      ICs use feedback vector and the rest three (BinaryOpIC, CompareIC and
      ToBooleanIC) reconstruct their state from the ExtraICState field.
      
      This CL also removes unused InlineCacheState::DEBUG_STUB which was used
      mostly in Code::is_debug_stub(). The latter now checks if the code is one
      of the debug builtins instead.
      
      BUG=chromium:618701
      LOG=Y
      
      Review-Url: https://codereview.chromium.org/2052763003
      Cr-Commit-Position: refs/heads/master@{#36871}
      9dc62d27
  25. 30 Mar, 2016 1 commit
    • mythria's avatar
      [Interpreter] Adds support to fetch return value on break at return. · b82720df
      mythria authored
      Debugger fetches the return value of a function when we break at return.
      Interpreter holds the return value in accumulator. This is not stored in a
      specified location on stack and hence it is not possible to look it up from
      stack similar to full-codegen or optimized frames. This cl adds support to
      store the value of accumulator on debug breaks. The value of accumulator is
      passed to the runtime function and is then stored in thread local data.
      
      Also changes full-codegen implementation to match that of ignition.
      The return value from full-codegen is also stored in thread local data.
      The return value is fetched directly thread local data instead of
      finding it by iterating over frames.
      
      BUG=v8:4280, v8:4690
      LOG=N
      
      Review URL: https://codereview.chromium.org/1842683002
      
      Cr-Commit-Position: refs/heads/master@{#35127}
      b82720df
  26. 24 Mar, 2016 2 commits
    • machenbach's avatar
      Revert of [Interpreter] Adds support to fetch return value on break at return.... · 25d2b247
      machenbach authored
      Revert of [Interpreter] Adds support to fetch return value on break at return. (patchset #9 id:160001 of https://codereview.chromium.org/1818873003/ )
      
      Reason for revert:
      [Sheriff] Seems to break nosnap debug:
      https://build.chromium.org/p/client.v8/builders/V8%20Linux%20-%20nosnap%20-%20debug/builds/6019
      
      Original issue's description:
      > [Interpreter] Adds support to fetch return value on break at return.
      >
      > Debugger fetches the return value of a function when we break at return.
      > Interpreter holds the return value in accumulator. This is not stored in a
      > specified location on stack and hence it is not possible to look it up from
      > stack similar to full-codegen or optimized frames. This cl adds support to
      > store the value of accumulator on debug breaks. The value of accumulator is
      > passed to the runtime function and is then stored in thread local data.
      >
      > Also changes full-codegen implementation to match that of ignition.
      > The return value from full-codegen is also stored in thread local data.
      > The return value is fetched directly thread local data instead of
      > finding it by iterating over frames.
      >
      > BUG=v8:4280, v8:4690
      > LOG=N
      >
      > Committed: https://crrev.com/fb65527b75754bcf3b173f16f5d0b04a1c6d9b99
      > Cr-Commit-Position: refs/heads/master@{#35060}
      
      TBR=rmcilroy@chromium.org,yangguo@chromium.org,weiliang.lin@intel.com,balazs.kilvady@imgtec.com,jyan@ca.ibm.com,mythria@chromium.org
      # Skipping CQ checks because original CL landed less than 1 days ago.
      NOPRESUBMIT=true
      NOTREECHECKS=true
      NOTRY=true
      BUG=v8:4280, v8:4690
      
      Review URL: https://codereview.chromium.org/1834733002
      
      Cr-Commit-Position: refs/heads/master@{#35065}
      25d2b247
    • mythria's avatar
      [Interpreter] Adds support to fetch return value on break at return. · fb65527b
      mythria authored
      Debugger fetches the return value of a function when we break at return.
      Interpreter holds the return value in accumulator. This is not stored in a
      specified location on stack and hence it is not possible to look it up from
      stack similar to full-codegen or optimized frames. This cl adds support to
      store the value of accumulator on debug breaks. The value of accumulator is
      passed to the runtime function and is then stored in thread local data.
      
      Also changes full-codegen implementation to match that of ignition.
      The return value from full-codegen is also stored in thread local data.
      The return value is fetched directly thread local data instead of
      finding it by iterating over frames.
      
      BUG=v8:4280, v8:4690
      LOG=N
      
      Review URL: https://codereview.chromium.org/1818873003
      
      Cr-Commit-Position: refs/heads/master@{#35060}
      fb65527b
  27. 08 Mar, 2016 1 commit
    • danno's avatar
      [runtime] Unify and simplify how frames are marked · 9dcd0857
      danno authored
      Before this CL, various code stubs used different techniques
      for marking their frames to enable stack-crawling and other
      access to data in the frame. All of them were based on a abuse
      of the "standard" frame representation, e.g. storing the a
      context pointer immediately below the frame's fp, and a
      function pointer after that. Although functional, this approach
      tends to make stubs and builtins do an awkward, unnecessary
      dance to appear like standard frames, even if they have
      nothing to do with JavaScript execution.
      
      This CL attempts to improve this by:
      
      * Ensuring that there are only two fundamentally different
        types of frames, a "standard" frame and a "typed" frame.
        Standard frames, as before, contain both a context and
        function pointer. Typed frames contain only a minimum
        of a smi marker in the position immediately below the fp
        where the context is in standard frames.
      * Only interpreted, full codegen, and optimized Crankshaft and
        TurboFan JavaScript frames use the "standard" format. All
        other frames use the type frame format with an explicit
        marker.
      * Typed frames can contain one or more values below the
        type marker. There is new magic macro machinery in
        frames.h that simplifies defining the offsets of these fields
        in typed frames.
      * A new flag in the CallDescriptor enables specifying whether
        a frame is a standard frame or a typed frame. Secondary
        register location spilling is now only enabled for standard
        frames.
      * A zillion places in the code have been updated to deal with
        the fact that most code stubs and internal frames use the
        typed frame format. This includes changes in the
        deoptimizer, debugger, and liveedit.
      * StandardFrameConstants::kMarkerOffset is deprecated,
        (CommonFrameConstants::kContextOrFrameTypeOffset
        and StandardFrameConstants::kFrameOffset are now used
        in its stead).
      
      LOG=N
      
      Review URL: https://codereview.chromium.org/1696043002
      
      Cr-Commit-Position: refs/heads/master@{#34571}
      9dcd0857
  28. 10 Feb, 2016 1 commit
  29. 04 Dec, 2015 3 commits
  30. 03 Dec, 2015 5 commits
  31. 02 Dec, 2015 1 commit