1. 10 Jul, 2018 15 commits
  2. 09 Jul, 2018 20 commits
  3. 08 Jul, 2018 3 commits
  4. 07 Jul, 2018 2 commits
    • Austin Clements's avatar
      runtime: handle g0 stack overflows gracefully · 78561c4a
      Austin Clements authored
      Currently, if the runtime overflows the g0 stack on Windows, it leads
      to an infinite recursion:
      
      1. Something overflows the g0 stack bounds and calls morestack.
      
      2. morestack determines it's on the g0 stack and hence cannot grow the
      stack, so it calls badmorestackg0 (which prints "fatal: morestack on
      g0") followed by abort.
      
      3. abort performs an INT $3, which turns into a Windows
      _EXCEPTION_BREAKPOINT exception.
      
      4. This enters the Windows sigtramp, which ensures we're on the g0
      stack and calls exceptionhandler.
      
      5. exceptionhandler has a stack check prologue, so it determines that
      it's out of stack and calls morestack.
      
      6. goto 2
      
      Fix this by making the exception handler avoid stack checks until it
      has ruled out an abort and by blowing away the stack bounds in
      lastcontinuehandler before we print the final fatal traceback (which
      itself involves a lot of stack bounds checks).
      
      Fixes #21382.
      
      Change-Id: Ie66e91f708e18d131d97f22b43f9ac26f3aece5a
      Reviewed-on: https://go-review.googlesource.com/120857
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Reviewed-by: default avatarAlex Brainman <alex.brainman@gmail.com>
      78561c4a
    • Austin Clements's avatar
      runtime: account for guard zone in Windows stack size · d6b56bb3
      Austin Clements authored
      Windows includes an 8K guard in system-allocated thread stacks, which
      we currently don't account for when setting the g0 stack bounds. As a
      result, if we do overflow the g0 stack bounds, we'll get a
      STATUS_GUARD_PAGE_VIOLATION exception, which we're not expecting.
      
      Fix the g0 stack bounds to include a total of 16K of slop to account
      for this 8K guard.
      
      Updates #21382.
      
      Change-Id: Ia89b741b1413328e4681a237f5a7ee645531fe16
      Reviewed-on: https://go-review.googlesource.com/122516
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Reviewed-by: default avatarAlex Brainman <alex.brainman@gmail.com>
      d6b56bb3