1. 24 Sep, 2014 3 commits
    • Hector Martin Cantero's avatar
      runtime: keep g->syscallsp consistent after cgo->Go callbacks · 7283e08c
      Hector Martin Cantero authored
      Normally, the caller to runtime.entersyscall() must not return before
      calling runtime.exitsyscall(), lest g->syscallsp become a dangling
      pointer. runtime.cgocallbackg() violates this constraint. To work around
      this, save g->syscallsp and g->syscallpc around cgo->Go callbacks, then
      restore them after calling runtime.entersyscall(), which restores the
      syscall stack frame pointer saved by cgocall. This allows the GC to
      correctly trace a goroutine that is currently returning from a
      Go->cgo->Go chain.
      
      This also adds a check to proc.c that panics if g->syscallsp is clearly
      invalid. It is not 100% foolproof, as it will not catch a case where the
      stack was popped then pushed back beyond g->syscallsp, but it does catch
      the present cgo issue and makes existing tests fail without the bugfix.
      
      Fixes #7978.
      
      LGTM=dvyukov, rsc
      R=golang-codereviews, dvyukov, minux, bradfitz, iant, gobot, rsc
      CC=golang-codereviews, rsc
      https://golang.org/cl/131910043
      7283e08c
    • Russ Cox's avatar
      A+C: Hector Martin Cantero (individual CLA) · a69e504a
      Russ Cox authored
      Generated by a+c.
      
      R=gobot
      CC=golang-codereviews
      https://golang.org/cl/147080043
      a69e504a
    • Rob Pike's avatar
      cmd/pack: fix c command for existing file · 1193993c
      Rob Pike authored
      There were at least two bugs:
      1) It would overwrite a non-archive.
      2) It would truncate a non-archive and then fail.
      In general the file handling was too clever to be correct.
      Make it more straightforward, doing the creation
      separately from archive management.
      
      Fixes #8369.
      
      LGTM=adg, iant
      R=golang-codereviews, adg, iant
      CC=golang-codereviews
      https://golang.org/cl/147010046
      1193993c
  2. 23 Sep, 2014 5 commits
  3. 22 Sep, 2014 7 commits
  4. 21 Sep, 2014 1 commit
    • Keith Randall's avatar
      runtime: be very careful with bad pointer tests · 3b2577ce
      Keith Randall authored
      Saw this on a test:
      
      runtime: bad pointer in frame runtime_test.testSetPanicOnFault at 0xc20801c6b0: 0xfff
      fatal error: bad pointer!
      
      runtime stack:
      ...
      copystack(0xc2081bf7a0, 0x1000)
              /root/work/solaris-amd64-smartos-2dde8b453d26/go/src/runtime/stack.c:621 +0x173 fp=0xfffffd7ffd5ffee0 sp=0xfffffd7ffd5ffe20
      runtime.newstack()
              /root/work/solaris-amd64-smartos-2dde8b453d26/go/src/runtime/stack.c:774 +0x552 fp=0xfffffd7ffd5fff90 sp=0xfffffd7ffd5ffee0
      runtime.morestack()
              /root/work/solaris-amd64-smartos-2dde8b453d26/go/src/runtime/asm_amd64.s:324 +0x90 fp=0xfffffd7ffd5fff98 sp=0xfffffd7ffd5fff90
      
      goroutine 163354 [stack growth]:
      ...
      runtime.convT2E(0x587000, 0xc20807bea8, 0x0, 0x0)
              /root/work/solaris-amd64-smartos-2dde8b453d26/go/src/runtime/iface.go:141 +0xd2 fp=0xc20801c678 sp=0xc20801c640
      runtime_test.testSetPanicOnFault(0xc20822c510, 0xfff, 0xc20801c748)
              /root/work/solaris-amd64-smartos-2dde8b453d26/go/src/runtime/runtime_test.go:211 +0xc6 fp=0xc20801c718 sp=0xc20801c678
      ...
      
      This test is testing bad pointers.  It loads the bad pointer into a pointer variable,
      but before it gets a chance to dereference it, calls convT2E.  That call causes a stack copy,
      which exposes that live but bad pointer variable.
      
      LGTM=dvyukov
      R=golang-codereviews, dvyukov
      CC=golang-codereviews
      https://golang.org/cl/146880043
      3b2577ce
  5. 19 Sep, 2014 22 commits
  6. 18 Sep, 2014 2 commits