1. 07 Sep, 2014 10 commits
    • Russ Cox's avatar
      runtime: save g to TLS more aggressively · b4bfa6c9
      Russ Cox authored
      This is one of those "how did this ever work?" bugs.
      The current build failures are happening because
      a fault comes up while executing on m->curg on a
      system-created thread using an m obtained from needm,
      but TLS is set to m->g0, not m->curg. On fault,
      sigtramp starts executing, assumes r10 (g) might be
      incorrect, reloads it from TLS, and gets m->g0, not
      m->curg. Then sighandler dutifully pushes a call to
      sigpanic onto the stack and returns to it.
      We're now executing on the m->curg stack but with
      g=m->g0. Sigpanic does a stack split check, sees that
      the SP is not in range (50% chance depending on relative
      ordering of m->g0's and m->curg's stacks), and then
      calls morestack. Morestack sees that g=m->g0 and
      crashes the program.
      
      The fix is to replace every change of g in asm_arm.s
      with a call to a function that both updates g and
      saves the updated g to TLS.
      
      Why did it start happening? That's unclear.
      Unfortunately there were other bugs in the initial
      checkin that mask exactly which of a sequence of
      CLs started the behavior where sigpanic would end
      up tripping the stack split.
      
      Fixes arm build.
      Fixes #8675.
      
      LGTM=iant
      R=golang-codereviews, iant
      CC=dave, golang-codereviews, khr, minux, r
      https://golang.org/cl/135570043
      b4bfa6c9
    • Russ Cox's avatar
      crypto/tls: print unexpected error in test · 2c14dbe4
      Russ Cox authored
      Maybe will help us understand Solaris build failure.
      
      TBR=aram
      CC=golang-codereviews
      https://golang.org/cl/139290043
      2c14dbe4
    • Russ Cox's avatar
      liblink: fix arm wrapper prologue · fb818eab
      Russ Cox authored
      Fixes arm build.
      
      TBR=khr
      CC=golang-codereviews
      https://golang.org/cl/132700043
      fb818eab
    • Russ Cox's avatar
      build: fix windows make.bat · 2034dae9
      Russ Cox authored
      The Unix make.bash builds cmd/dist from *.c.
      make.bat apparently does not.
      
      TBR=r
      CC=golang-codereviews
      https://golang.org/cl/137280043
      2034dae9
    • Russ Cox's avatar
      cmd/dist: remove goc2c · c0951701
      Russ Cox authored
      After the three pending CLs listed below, there will be no more .goc files.
      
      134580043	runtime: move stubs.goc code into runtime.c
      133670043	runtime: fix windows syscalls for copying stacks
      141180043	runtime: eliminate Go -> C -> block paths for Solaris
      
      LGTM=bradfitz
      R=golang-codereviews, bradfitz, dave
      CC=golang-codereviews, iant, r
      https://golang.org/cl/132680043
      c0951701
    • Russ Cox's avatar
      runtime: fix nacl/amd64p32 build · 8a7597fd
      Russ Cox authored
      Update #8675
      Fixes nacl/amd64p32 build.
      
      TBR=khr
      CC=golang-codereviews
      https://golang.org/cl/141140045
      8a7597fd
    • Russ Cox's avatar
      runtime: fix windows syscalls for copying stacks · 59dd20f4
      Russ Cox authored
      Syscall and everything it calls must be nosplit:
      we cannot split a stack once Syscall has been invoked,
      because we don't know which of its arguments are
      pointers.
      
      LGTM=khr, r, alex.brainman
      R=dvyukov, iant, khr, r, bradfitz, alex.brainman
      CC=golang-codereviews
      https://golang.org/cl/133670043
      59dd20f4
    • Russ Cox's avatar
      runtime: eliminate Go -> C -> block paths for Solaris · c01c2c88
      Russ Cox authored
      LGTM=aram, r
      R=golang-codereviews, aram, r
      CC=golang-codereviews, iant, khr
      https://golang.org/cl/141180043
      c01c2c88
    • Russ Cox's avatar
      runtime: increase stack split limit again · b6951bcc
      Russ Cox authored
      Increase NOSPLIT reservation from 192 to 384 bytes.
      The problem is that the non-Unix systems (Solaris and Windows)
      just can't make system calls in a small amount of space,
      and then worse they do things that are complex enough
      to warrant calling runtime.throw on failure.
      We don't have time to rewrite the code to use less stack.
      
      I'm not happy about this, but it's still a small amount.
      
      The good news is that we're doing this to get to only
      using copying stacks for stack growth. Once that is true,
      we can drop the default stack size from 8k to 4k, which
      should more than make up for the bytes we're losing here.
      
      LGTM=r
      R=iant, r, bradfitz, aram.h
      CC=golang-codereviews
      https://golang.org/cl/140350043
      b6951bcc
    • Russ Cox's avatar
      misc/makerelease: make goimports-safe · 7230db9e
      Russ Cox authored
      LGTM=bradfitz
      R=adg, bradfitz, minux
      CC=golang-codereviews
      https://golang.org/cl/140310045
      7230db9e
  2. 06 Sep, 2014 8 commits
  3. 05 Sep, 2014 18 commits
    • Keith Randall's avatar
      runtime: move gostringw and gogobytes test stubs to Go. · 0e19a3d6
      Keith Randall authored
      LGTM=bradfitz
      R=golang-codereviews, bradfitz
      CC=golang-codereviews
      https://golang.org/cl/141150043
      0e19a3d6
    • Keith Randall's avatar
      runtime: run getgcmask on the M stack. · 005806ca
      Keith Randall authored
      LGTM=rsc
      R=rsc, khr
      CC=golang-codereviews
      https://golang.org/cl/132660043
      005806ca
    • Russ Cox's avatar
      runtime: disable StackCopyAlways · 277ef8fa
      Russ Cox authored
      I forgot to clear this before submitting.
      
      TBR=khr
      CC=golang-codereviews
      https://golang.org/cl/132640044
      277ef8fa
    • Russ Cox's avatar
      runtime: use reflect.call during panic instead of newstackcall · f8f630f5
      Russ Cox authored
      newstackcall creates a new stack segment, and we want to
      be able to throw away all that code.
      
      LGTM=khr
      R=khr, iant
      CC=dvyukov, golang-codereviews, r
      https://golang.org/cl/139270043
      f8f630f5
    • Russ Cox's avatar
      misc/cgo/test: make issue5548 test pickier · fcbe51c9
      Russ Cox authored
      If there is doubt about passing arguments correctly
      (as there is in this test), there should be doubt about
      getting the results back intact too. Using 0 and 1
      (especially 0 for success) makes it easy to get a PASS
      accidentally when the return value is not actually
      being propagated. Use less common values.
      
      LGTM=iant
      R=golang-codereviews, iant
      CC=golang-codereviews, r
      https://golang.org/cl/141110043
      fcbe51c9
    • Russ Cox's avatar
      runtime: handle nil ptr load/store in arm software floating point · 4b3906fe
      Russ Cox authored
      We cannot let a real panic start there, because there is C code
      on the stack, and worse, there is an assembly frame with a
      saved copy of the registers and we have no idea which ones
      are pointers.
      
      Instead, detect the nil ptr load/store and return out of the C
      and assembly into a stub that will start the call to sigpanic.
      
      Fixes GOARM=5 build.
      
      LGTM=iant
      R=golang-codereviews, iant
      CC=dave, golang-codereviews, minux, r
      https://golang.org/cl/138130043
      4b3906fe
    • Russ Cox's avatar
      runtime: clean up sigqueue.go · f93e21ac
      Russ Cox authored
      Minor changes to make logic clearer.
      Observed while working on the conversion.
      
      LGTM=iant, dvyukov
      R=dvyukov, iant
      CC=golang-codereviews
      https://golang.org/cl/140250043
      f93e21ac
    • Alex Brainman's avatar
      net: temporarily skip TestAcceptIgnoreSomeErrors · 0f9b6aff
      Alex Brainman authored
      Update #8662
      
      LGTM=bradfitz
      R=golang-codereviews, bradfitz
      CC=golang-codereviews
      https://golang.org/cl/138120043
      0f9b6aff
    • Keith Randall's avatar
      runtime: convert panic/recover to Go · 8217b4a2
      Keith Randall authored
      created panic1.go just so diffs were available.
      After this CL is in, I'd like to move panic.go -> defer.go
      and panic1.go -> panic.go.
      
      LGTM=rsc
      R=rsc, khr
      CC=golang-codereviews
      https://golang.org/cl/133530045
      8217b4a2
    • Russ Cox's avatar
      runtime: use cas loop to coordinate with sigprof · e0f08b93
      Russ Cox authored
      sigprof and setcpuprofilerate coordinate the enabling/disabling
      of the handler using a Mutex. This has always been a bit dodgy:
      setcpuprofilerate must be careful to turn off signals before acquiring
      the lock to avoid a deadlock.
      
      Now the lock implementations use onM, and onM isn't okay on the
      signal stack. We know how to make it okay, but it's more work than
      is probably worth doing.
      
      Since this is super-dodgy anyway, replace the lock with a simple
      cas loop. It is only contended if setcpuprofilerate is being called,
      and that doesn't happen frequently enough to care about the
      raw speed or about using futexes/semaphores.
      
      TBR to fix freebsd/amd64 and dragonfly/amd64 builds.
      Happy to make changes in a follow-up CL.
      
      TBR=dvyukov
      CC=golang-codereviews
      https://golang.org/cl/141080044
      e0f08b93
    • Russ Cox's avatar
      syscall: in linux/arm Syscall, zero R3, R4, R5 · 83824639
      Russ Cox authored
      The general kernel system call interface
      takes 6 arguments: R0, R1, R2, R3, R4, R5.
      
      Syscall is for calls that only need 3.
      The amd64 and 386 versions zero the extra arg registers,
      but the arm version does not.
      
      func utimensat calls Syscall with 3 arguments.
      The kernel expects a 4th argument.
      That turns out to be whatever is in R3 at the time of the call.
      CL 137160043 changed various pieces of code and apparently
      changed the value left in R3 at the time of utimensat's Syscall.
      This causes the kernel to return EINVAL.
      
      Change linux/arm Syscall to zero R3, R4, R5, so that calls will
      behave deterministically, even if they pass too few arguments.
      
      Arguably, utimensat could be fixed too, but the predictable
      zeroing is certainly worth doing, and once done utimensat's
      use of Syscall is fine.
      
      Fixes arm build.
      
      TBR=bradfitz
      CC=golang-codereviews
      https://golang.org/cl/141080043
      83824639
    • Russ Cox's avatar
      runtime: use new #include "textflag.h" · cb040d59
      Russ Cox authored
      I did this just to clean things up, but it will be important
      when we drop the pkg directory later.
      
      LGTM=bradfitz
      R=r, bradfitz
      CC=golang-codereviews
      https://golang.org/cl/132600043
      cb040d59
    • Russ Cox's avatar
      runtime: do not stop traceback at onM · d16a2ad0
      Russ Cox authored
      Behavior before this CL:
      
      1. If onM is called on a g0 stack, it just calls the given function.
      
      2. If onM is called on a gsignal stack, it calls badonm.
      
      3. If onM is called on a curg stack, it switches to the g0 stack
      and then calls the function.
      
      In cases 1 and 2, if the program then crashes (and badonm always does),
      we want to see what called onM, but the traceback stops at onM.
      In case 3, the traceback must stop at onM, because the g0
      stack we are renting really does stop at onM.
      
      The current code stops the traceback at onM to handle 3,
      at the cost of making 1 and 2 crash with incomplete traces.
      
      Change traceback to scan past onM but in case 3 make it look
      like on the rented g0 stack, onM was called from mstart.
      The traceback already knows that mstart is a top-of-stack function.
      
      Alternate fix at CL 132610043 but I think this one is cleaner.
      This CL makes 3 the exception, while that CL makes 1 and 2 the exception.
      
      Submitting TBR to try to get better stack traces out of the
      freebsd/amd64 builder, but happy to make changes in a
      followup CL.
      
      TBR=khr
      R=khr
      CC=golang-codereviews
      https://golang.org/cl/133620043
      d16a2ad0
    • Russ Cox's avatar
      cmd/dist: another attempt at textflag.h · cf3fd0a5
      Russ Cox authored
      The old change worked fine in my client, but my client
      must not have been in a completely clean state.
      
      TBR=r
      CC=golang-codereviews
      https://golang.org/cl/138100043
      cf3fd0a5
    • Russ Cox's avatar
      cmd/dist: make textflag.h available in runtime, avoid android/linux conflicts · 73a6d36d
      Russ Cox authored
      1) cmd/dist was copying textflag.h to the build include directory,
      but only after compiling package runtime. So other packages could
      use it, just not runtime. Copy earlier, so that runtime can use it too.
      
      2) We decided for android that anything marked linux is also included
      in the build. The generated linux-specific files in cmd/dist must therefore
      have explicit +build !android tags, or else you can't have simultaneous
      linux/arm and android/arm builds in a single client. The tag was already
      there for at least one file, but it was missing from many others.
      
      LGTM=r
      R=r
      CC=golang-codereviews
      https://golang.org/cl/134500043
      73a6d36d
    • Russ Cox's avatar
      runtime: mark sysAlloc nosplit · 99a08262
      Russ Cox authored
      sysAlloc is the only mem function called from Go.
      
      LGTM=iant, khr
      R=golang-codereviews, khr, 0intro, iant
      CC=dvyukov, golang-codereviews, r
      https://golang.org/cl/139210043
      99a08262
    • Russ Cox's avatar
      runtime: more C to Go conversion adjustments · db58ab96
      Russ Cox authored
      Mostly NOSPLIT additions.
      Had to rewrite atomic_arm.c in Go because it calls lock,
      and lock is too complex.
      
      With this CL, I find no Go -> C calls that can split the stack
      on any system except Solaris and Windows.
      
      Solaris and Windows need more work and will be done separately.
      
      LGTM=iant, dave
      R=golang-codereviews, bradfitz, iant, dave
      CC=dvyukov, golang-codereviews, khr, r
      https://golang.org/cl/137160043
      db58ab96
    • Brad Fitzpatrick's avatar
      cmd/api: don't depend on os/user or USER to check api · 1a14b5ba
      Brad Fitzpatrick authored
      The -nocgo builder failed because it has cgo disabled
      as well as no USER environment variable:
      http://build.golang.org/log/2250abb82f5022b72a12997b8ff89fcdeff094c9
      
      # Checking API compatibility.
      Error getting current user: user: Current not implemented on linux/amd64
      exit status 1
      
      Don't require the environment variable here.
      
      LGTM=minux
      R=dave, adg, minux
      CC=golang-codereviews
      https://golang.org/cl/140290043
      1a14b5ba
  4. 04 Sep, 2014 4 commits