1. 20 Nov, 2014 5 commits
  2. 19 Nov, 2014 6 commits
    • Russ Cox's avatar
      runtime: remove assumption that noptrdata data bss noptrbss are ordered and contiguous · 378c2515
      Russ Cox authored
      The assumption can be violated by external linkers reordering them or
      inserting non-Go sections in between them. I looked briefly at trying
      to write out the _go_.o in external linking mode in a way that forced
      the ordering, but no matter what there's no way to force Go's data
      and Go's bss to be next to each other. If there is any data or bss from
      non-Go objects, it's very likely to get stuck in between them.
      
      Instead, rewrite the two places we know about that make the assumption.
      I grepped for noptrdata to look for more and didn't find any.
      
      The added race test (os/exec in external linking mode) fails without
      the changes in the runtime. It crashes with an invalid pointer dereference.
      
      Fixes #9133.
      
      LGTM=dneil
      R=dneil
      CC=dvyukov, golang-codereviews, iant
      https://golang.org/cl/179980043
      378c2515
    • Austin Clements's avatar
      [dev.cc] runtime: add explicit siginfo.si_addr field · f4a52545
      Austin Clements authored
      struct siginfo_t's si_addr field is part of a union.
      Previously, we represented this union in Go using an opaque
      byte array and accessed the si_addr field using unsafe (and
      wrong on 386 and arm!) pointer arithmetic.  Since si_addr is
      the only field we use from this union, this replaces the
      opaque byte array with an explicit declaration of the si_addr
      field and accesses it directly.
      
      LGTM=minux, rsc
      R=rsc, minux
      CC=golang-codereviews
      https://golang.org/cl/179970044
      f4a52545
    • Austin Clements's avatar
      [dev.cc] runtime: decode power64 branch instructions the way the CPU does · d11a4259
      Austin Clements authored
      Previously, this used the top 8 bits of an instruction as a
      sort-of opcode and ignored the top two bits of the relative
      PC.  This worked because these jumps are always negative and
      never big enough for the top two bits of the relative PC (also
      the bottom 2 bits of the sort-of opcode) to be anything other
      than 0b11, but the code is confusing because it doesn't match
      the actual structure of the instruction.
      
      Instead, use the real 6 bit opcode and use all 24 bits of
      relative PC.
      
      LGTM=rsc
      R=rsc, dave
      CC=golang-codereviews
      https://golang.org/cl/179960043
      d11a4259
    • Russ Cox's avatar
      undo CL 131750044 / 2d6d44ceb80e · 2d53d6b5
      Russ Cox authored
      Breaks reading from stdin in parent after exec with SysProcAttr{Setpgid: true}.
      
      package main
      
      import (
              "fmt"
              "os"
              "os/exec"
              "syscall"
      )
      
      func main() {
              cmd := exec.Command("true")
              cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
              cmd.Run()
      
              fmt.Printf("Hit enter:")
              os.Stdin.Read(make([]byte, 100))
              fmt.Printf("Bye\n")
      }
      
      In go1.3, I type enter at the prompt and the program exits.
      With the CL being rolled back, the program wedges at the
      prompt.
      
      ««« original CL description
      syscall: SysProcAttr job control changes
      
      Making the child's process group the foreground process group and
      placing the child in a specific process group involves co-ordination
      between the parent and child that must be done post-fork but pre-exec.
      
      LGTM=iant
      R=golang-codereviews, gobot, iant, mikioh.mikioh
      CC=golang-codereviews
      https://golang.org/cl/131750044
      
      »»»
      
      LGTM=minux, dneil
      R=dneil, minux
      CC=golang-codereviews, iant, michael.p.macinnis
      https://golang.org/cl/174450043
      2d53d6b5
    • Austin Clements's avatar
      [dev.cc] runtime: allow more address bits in lfstack on Power64 · b76e8360
      Austin Clements authored
      Previously, lfstack assumed Linux limited user space addresses
      to 43 bits on Power64 based on a paper from 2001.  It turns
      out the limit is now 46 bits, so lfstack was truncating
      pointers.
      
      Raise the limit to 48 bits (for some future proofing and to
      make it match amd64) and add a self-test that will fail in a
      useful way if ever unpack(pack(x)) != x.
      
      With this change, dev.cc passes all.bash on power64le.
      
      LGTM=rsc
      R=rsc
      CC=golang-codereviews
      https://golang.org/cl/174430043
      b76e8360
    • Alex Brainman's avatar
  3. 18 Nov, 2014 11 commits
  4. 17 Nov, 2014 10 commits
  5. 16 Nov, 2014 3 commits
    • David du Colombier's avatar
      [dev.cc] cmd/8g: work around "out of fixed registers" on Plan 9 · 7aa89ea7
      David du Colombier authored
      This change works around the "out of fixed registers"
      issue with the Plan 9 C compiler on 386, introduced by
      the Bits change to uint64 in CL 169060043.
      
      The purpose of this CL is to be able to properly
      follow the conversion of the Plan 9 runtime to Go
      on the Plan 9 builders.
      
      This CL could be reverted once the Go compilers will
      be converted to Go.
      
      Thanks to Nick Owens for investigating this issue.
      
      LGTM=rsc
      R=rsc
      CC=austin, golang-codereviews, mischief
      https://golang.org/cl/177860043
      7aa89ea7
    • Russ Cox's avatar
      runtime: fix sudog leak · b3932bab
      Russ Cox authored
      The SudoG used to sit on the stack, so it was cheap to allocated
      and didn't need to be cleaned up when finished.
      
      For the conversion to Go, we had to move sudog off the stack
      for a few reasons, so we added a cache of recently used sudogs
      to keep allocation cheap. But we didn't add any of the necessary
      cleanup before adding a SudoG to the new cache, and so the cached
      SudoGs had stale pointers inside them that have caused all sorts
      of awful, hard to debug problems.
      
      CL 155760043 made sure SudoG.elem is cleaned up.
      CL 150520043 made sure SudoG.selectdone is cleaned up.
      
      This CL makes sure SudoG.next, SudoG.prev, and SudoG.waitlink
      are cleaned up. I should have done this when I did the other two
      fields; instead I wasted a week tracking down a leak they caused.
      
      A dangling SudoG.waitlink can point into a sudogcache list that
      has been "forgotten" in order to let the GC collect it, but that
      dangling .waitlink keeps the list from being collected.
      And then the list holding the SudoG with the dangling waitlink
      can find itself in the same situation, and so on. We end up
      with lists of lists of unusable SudoGs that are still linked into
      the object graph and never collected (given the right mix of
      non-trivial selects and non-channel synchronization).
      
      More details in golang.org/issue/9110.
      
      Fixes #9110.
      
      LGTM=r
      R=r
      CC=dvyukov, golang-codereviews, iant, khr
      https://golang.org/cl/177870043
      b3932bab
    • Russ Cox's avatar
      runtime: update URL for heap dump format · 6150414c
      Russ Cox authored
      I just created that redirect, so we can change
      it once the wiki moves.
      
      LGTM=bradfitz, khr
      R=khr, bradfitz
      CC=golang-codereviews
      https://golang.org/cl/177780043
      6150414c
  6. 15 Nov, 2014 1 commit
  7. 14 Nov, 2014 4 commits