1. 16 Sep, 2014 6 commits
    • Russ Cox's avatar
      runtime: use traceback to traverse defer structures · f95beae6
      Russ Cox authored
      This makes the GC and the stack copying agree about how
      to interpret the defer structures. Previously, only the stack
      copying treated them precisely.
      This removes an untyped memory allocation and fixes
      at least three copystack bugs.
      
      To make sure the GC can find the deferred argument
      frame until it has been copied, keep a Defer on the defer list
      during its execution.
      
      In addition to making it possible to remove the untyped
      memory allocation, keeping the Defer on the list fixes
      two races between copystack and execution of defers
      (in both gopanic and Goexit). The problem is that once
      the defer has been taken off the list, a stack copy that
      happens before the deferred arguments have been copied
      back to the stack will not update the arguments correctly.
      The new tests TestDeferPtrsPanic and TestDeferPtrsGoexit
      (variations on the existing TestDeferPtrs) pass now but
      failed before this CL.
      
      In addition to those fixes, keeping the Defer on the list
      helps correct a dangling pointer error during copystack.
      The traceback routines walk the Defer chain to provide
      information about where a panic may resume execution.
      When the executing Defer was not on the Defer chain
      but instead linked from the Panic chain, the traceback
      had to walk the Panic chain too. But Panic structs are
      on the stack and being updated by copystack.
      Traceback's use of the Panic chain while copystack is
      updating those structs means that it can follow an
      updated pointer and find itself reading from the new stack.
      The new stack is usually all zeros, so it sees an incorrect
      early end to the chain. The new TestPanicUseStack makes
      this happen at tip and dies when adjustdefers finds an
      unexpected argp. The new StackCopyPoison mode
      causes an earlier bad dereference instead.
      By keeping the Defer on the list, traceback can avoid
      walking the Panic chain at all,  making it okay for copystack
      to update the Panics.
      
      We'd have the same problem for any Defers on the stack.
      There was only one: gopanic's dabort. Since we are not
      taking the executing Defer off the chain, we can use it
      to do what dabort was doing, and then there are no
      Defers on the stack ever, so it is okay for traceback to use
      the Defer chain even while copystack is executing:
      copystack cannot modify the Defer chain.
      
      LGTM=khr
      R=khr
      CC=dvyukov, golang-codereviews, iant, rlh
      https://golang.org/cl/141490043
      f95beae6
    • Russ Cox's avatar
      runtime: remove duplicated Go constants · d2574e2a
      Russ Cox authored
      The C header files are the single point of truth:
      every C enum constant Foo is available to Go as _Foo.
      Remove or redirect duplicate Go declarations so they
      cannot be out of sync.
      
      Eventually we will need to put constants in Go, but for now having
      them be out of sync with C is too risky. These predate the build
      support for auto-generating Go constants from the C definitions.
      
      LGTM=iant
      R=iant
      CC=golang-codereviews
      https://golang.org/cl/141510043
      d2574e2a
    • Russ Cox's avatar
      cmd/gc: say 'non-constant array bound' instead of 'invalid array bound' · 8d61334d
      Russ Cox authored
      Fixes #8196.
      
      LGTM=adonovan
      R=adonovan
      CC=golang-codereviews
      https://golang.org/cl/141510044
      8d61334d
    • Russ Cox's avatar
      io: clarify Reader returning 0, nil · 3d2321f6
      Russ Cox authored
      Fixes #8317.
      
      LGTM=bradfitz
      R=bradfitz, iant, r
      CC=golang-codereviews
      https://golang.org/cl/143100043
      3d2321f6
    • Russ Cox's avatar
      cmd/gc: make runtime escape an error, not a fatal error · 337fe413
      Russ Cox authored
      It is more useful to report all the errors instead of just the first.
      
      LGTM=dave, khr
      R=khr, dave
      CC=golang-codereviews
      https://golang.org/cl/143940043
      337fe413
    • Josh Bleecher Snyder's avatar
      cmd/ld: document that -X overwrites initialized variables · c3dbf56a
      Josh Bleecher Snyder authored
      Fixes #7626.
      
      LGTM=iant
      R=rsc, iant
      CC=golang-codereviews
      https://golang.org/cl/144870045
      c3dbf56a
  2. 15 Sep, 2014 12 commits
  3. 14 Sep, 2014 3 commits
  4. 12 Sep, 2014 17 commits
  5. 11 Sep, 2014 2 commits