1. 28 Aug, 2014 21 commits
    • Robert Griesemer's avatar
      spec: move Method expr/value section near selectors · f852034e
      Robert Griesemer authored
      Preparation for fixing issue 5769 (method selectors
      do not auto-dereference): The actual fix may require
      some cleanups in all these sections, and syntactically,
      method expressions and method values are selector
      expressions. Moving them next to each other so that
      it's easy to see the actual changes (next CL).
      
      No content changes besides the section moves.
      
      LGTM=iant, rsc
      R=r, rsc, iant, ken
      CC=golang-codereviews
      https://golang.org/cl/132300043
      f852034e
    • Russ Cox's avatar
      cmd/api: more runtime fixes · 1e47854d
      Russ Cox authored
      This is getting a little annoying, but once the runtime structs are
      being defined in Go, these will go away. So it's only a temporary cost.
      
      TBR=bradfitz
      CC=golang-codereviews
      https://golang.org/cl/135940043
      1e47854d
    • Alberto García Hierro's avatar
      database/sql: use slices rather than container/list · 6fb6f4e7
      Alberto García Hierro authored
      Significantly reduces the number of allocations, while also
      simplifying the code and increasing performance by a 1-2%.
      
      benchmark                          old ns/op     new ns/op     delta
      BenchmarkConcurrentDBExec          13290567      13026236      -1.99%
      BenchmarkConcurrentStmtQuery       13249399      13008879      -1.82%
      BenchmarkConcurrentStmtExec        8806237       8680182       -1.43%
      BenchmarkConcurrentTxQuery         13628379      12756293      -6.40%
      BenchmarkConcurrentTxExec          4794800       4722440       -1.51%
      BenchmarkConcurrentTxStmtQuery     5040804       5200721       +3.17%
      BenchmarkConcurrentTxStmtExec      1366574       1336626       -2.19%
      BenchmarkConcurrentRandom          11119120      10926113      -1.74%
      
      benchmark                          old allocs     new allocs     delta
      BenchmarkConcurrentDBExec          14191          13684          -3.57%
      BenchmarkConcurrentStmtQuery       16020          15514          -3.16%
      BenchmarkConcurrentStmtExec        4179           3672           -12.13%
      BenchmarkConcurrentTxQuery         16025          15518          -3.16%
      BenchmarkConcurrentTxExec          12717          12709          -0.06%
      BenchmarkConcurrentTxStmtQuery     15532          15525          -0.05%
      BenchmarkConcurrentTxStmtExec      2175           2168           -0.32%
      BenchmarkConcurrentRandom          12320          11997          -2.62%
      
      benchmark                          old bytes     new bytes     delta
      BenchmarkConcurrentDBExec          2164827       2139760       -1.16%
      BenchmarkConcurrentStmtQuery       2418070       2394030       -0.99%
      BenchmarkConcurrentStmtExec        1728782       1704371       -1.41%
      BenchmarkConcurrentTxQuery         2477144       2452620       -0.99%
      BenchmarkConcurrentTxExec          588920        588343        -0.10%
      BenchmarkConcurrentTxStmtQuery     790866        796578        +0.72%
      BenchmarkConcurrentTxStmtExec      98502         98143         -0.36%
      BenchmarkConcurrentRandom          1725906       1710220       -0.91%
      
      LGTM=ruiu, dave, bradfitz
      R=golang-codereviews, ruiu, gobot, bradfitz, dave, minux
      CC=bradfitz, golang-codereviews
      https://golang.org/cl/107020044
      6fb6f4e7
    • David Crawshaw's avatar
      runtime: fix arm build · 2c1fde07
      David Crawshaw authored
      LGTM=rsc
      R=rsc
      CC=golang-codereviews
      https://golang.org/cl/134030043
      2c1fde07
    • Russ Cox's avatar
      runtime: fix build · f0223207
      Russ Cox authored
      'range hash' makes a copy of the hash array in the stack, creating
      a very large stack frame. It's just the right amount that it
      uses most but not all of the total stack size. If you have a lot
      of environment variables, like the builders, then this is too
      much and the g0 stack runs out of space.
      
      TBR=bradfitz
      CC=golang-codereviews
      https://golang.org/cl/132350043
      f0223207
    • Jeff R. Allen's avatar
      mime: Make filename extensions case-insensitive · af12dc5c
      Jeff R. Allen authored
      Fixes #8350.
      
      LGTM=bradfitz
      R=golang-codereviews, bradfitz, dave
      CC=golang-codereviews
      https://golang.org/cl/127380043
      af12dc5c
    • Russ Cox's avatar
      runtime: convert runtime1.goc, noasm_arm.goc to Go · 6179aca5
      Russ Cox authored
      LGTM=dvyukov
      R=golang-codereviews, bradfitz, dvyukov
      CC=golang-codereviews, iant, khr
      https://golang.org/cl/135070043
      6179aca5
    • Russ Cox's avatar
      runtime: finish converting iface.goc to iface.go · b53b47f5
      Russ Cox authored
      LGTM=bradfitz, dvyukov
      R=golang-codereviews, bradfitz, dvyukov
      CC=golang-codereviews, iant, khr
      https://golang.org/cl/131510043
      b53b47f5
    • Jeff R. Allen's avatar
      png: make the encoder configurable · 98e5a44a
      Jeff R. Allen authored
      In order to support different compression levels, make the
      encoder type public, and add an Encoder method to it.
      
      Fixes #8499.
      
      LGTM=nigeltao
      R=nigeltao, ruiu
      CC=golang-codereviews
      https://golang.org/cl/129190043
      98e5a44a
    • Russ Cox's avatar
      runtime: fix nacl/386 build · add7b220
      Russ Cox authored
      I changed all the NACL_SYSJMP to NACL_SYSCALL in
      an earlier CL, but I missed the fact that NACL_SYSCALL
      will push another return PC on the stack, so that the
      arguments will no longer be in the right place.
      Since we have to make our own call, we also have to
      copy the arguments. Do that.
      
      Fixes nacl/386 build.
      
      TBR=minux
      CC=golang-codereviews
      https://golang.org/cl/135050044
      add7b220
    • Russ Cox's avatar
      cmd/cc: translate C Eface type as Go interface{} · 948bb915
      Russ Cox authored
      This will allow structs containing Efaces in C to be
      manipulated as structs containing real interfaces in Go.
      The eface struct is still defined for use by Go code.
      
      LGTM=iant
      R=golang-codereviews, iant
      CC=dvyukov, golang-codereviews, khr, r
      https://golang.org/cl/133980044
      948bb915
    • Russ Cox's avatar
      cmd/api: fix for Lock⇒Mutex change · fee7c69c
      Russ Cox authored
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/133150043
      fee7c69c
    • Russ Cox's avatar
      runtime: rename Lock to Mutex · 8ecb9a76
      Russ Cox authored
      Mutex is consistent with package sync, and when in the
      unexported Go form it avoids having a conflcit between
      the type (now mutex) and the function (lock).
      
      LGTM=iant
      R=golang-codereviews, iant
      CC=dvyukov, golang-codereviews, r
      https://golang.org/cl/133140043
      8ecb9a76
    • Michael Hudson-Doyle's avatar
      debug/elf: support arm64 relocations · 299117ec
      Michael Hudson-Doyle authored
      This adds the minimal support for AArch64/arm64 relocations
      needed to get cgo to work (when an isomorphic patch is applied
      to gccgo) and a test.
      
      This change uses the "AAarch64" name for the architecture rather
      than the more widely accepted "arm64" because that's the name that
      the relevant docs from ARM such as
      
         http://infocenter.arm.com/help/topic/com.arm.doc.ihi0056b/IHI0056B_aaelf64.pdf
      
      all use.
      
      Fixes #8533.
      
      LGTM=iant
      R=golang-codereviews, aram, gobot, iant, minux
      CC=golang-codereviews
      https://golang.org/cl/132000043
      299117ec
    • Russ Cox's avatar
      cmd/5l, cmd/6l, cmd/8l: fix nacl binary corruption bug · a9b2651a
      Russ Cox authored
      NaCl requires the addition of a 32-byte "halt sled" at the end
      of the text segment. This means that segtext.len is actually
      32 bytes shorter than reality. The computation of the file offset
      of the end of the data segment did not take this 32 bytes into
      account, so if len and len+32 rounded up (by 64k) to different
      values, the symbol table overwrote the last page of the data
      segment.
      
      The last page of the data segment is usually the C .string
      symbols, which contain the strings used in error prints
      by the runtime. So when this happens, your program
      probably crashes, and then when it does, you get binary
      garbage instead of all the usual prints.
      
      The chance of hitting this with a randomly sized text segment
      is 32 in 65536, or 1 in 2048.
      
      If you add or remove ANY code while trying to debug this
      problem, you're overwhelmingly likely to bump the text
      segment one way or the other and make the bug disappear.
      
      Correct all the computations to use segdata.fileoff+segdata.filelen
      instead of trying to rederive segdata.fileoff.
      
      This fixes the failure during the nacl/amd64p32 build.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/135050043
      a9b2651a
    • Russ Cox's avatar
      runtime: fix nacl build · f9b9ecc5
      Russ Cox authored
      The NaCl "system calls" were assumed to have a compatible
      return convention with the C compiler, and we were using
      tail jumps to those functions. Don't do that anymore.
      
      Correct mistake introduced in newstackcall duringconversion
      from (SP) to (FP) notation. (Actually this fix, in asm_amd64p32.s,
      slipped into the C compiler change, but update the name to
      match what go vet wants.)
      
      Correct computation of caller stack pointer in morestack:
      on amd64p32, the saved PC is the size of a uintreg, not uintptr.
      This may not matter, since it's been like this for a while,
      but uintreg is the correct one. (And on non-NaCl they are the same.)
      
      This will allow the NaCl build to get much farther.
      It will probably still not work completely.
      There's a bug in 6l that needs fixing too.
      
      TBR=minux
      CC=golang-codereviews
      https://golang.org/cl/134990043
      f9b9ecc5
    • Dave Cheney's avatar
      runtime: fix arm5 softfloat build · 433d6437
      Dave Cheney authored
      runtime._sfloat2 now returns the lr value on the stack, not R0.
      
      Credit to Russ Cox for the fix.
      
      LGTM=rsc
      R=rsc
      CC=golang-codereviews
      https://golang.org/cl/133120045
      433d6437
    • Russ Cox's avatar
      runtime: fix arm build · 45c819b2
      Russ Cox authored
      TBR=minux
      CC=golang-codereviews
      https://golang.org/cl/137810043
      45c819b2
    • Russ Cox's avatar
      cmd/cc, runtime: preserve C runtime type names in generated Go · d21638b5
      Russ Cox authored
      uintptr or uint64 in the runtime C were turning into uint in the Go,
      bool was turning into uint8, and so on. Fix that.
      
      Also delete Go wrappers for C functions.
      The C functions can be called directly now
      (but still eventually need to be converted to Go).
      
      LGTM=bradfitz, minux, iant
      R=golang-codereviews, bradfitz, iant, minux
      CC=golang-codereviews, khr, r
      https://golang.org/cl/138740043
      d21638b5
    • Matthew Dempsky's avatar
      cmd/{addr2line,objdump}: fix finding pclntab and symtab for pe and plan9obj · 43d4f93c
      Matthew Dempsky authored
      Broken by 8b5fc7c59d05.
      
      Update #8092
      
      LGTM=iant, alex.brainman
      R=rsc, iant, alex.brainman
      CC=golang-codereviews
      https://golang.org/cl/138770043
      43d4f93c
    • Matthew Dempsky's avatar
      cmd/{ld,link,objdump}, runtime, debug/gosym: move linker-defined symbols into runtime package · 2c110a11
      Matthew Dempsky authored
      Fixes #8092.
      
      LGTM=rsc
      R=iant, rsc
      CC=golang-codereviews
      https://golang.org/cl/126790043
      2c110a11
  2. 27 Aug, 2014 9 commits
    • Russ Cox's avatar
      runtime: fix plan9 build · 9e360926
      Russ Cox authored
      sighandler now returns its value on the stack.
      
      TBR=0intro
      CC=golang-codereviews
      https://golang.org/cl/135900043
      9e360926
    • Russ Cox's avatar
      runtime: fix solaris build · 997809c8
      Russ Cox authored
      nanotime1 is not a Go function and must not store its result at 0(FP).
      That overwrites some data owned by the caller.
      
      TBR=aram
      CC=golang-codereviews
      https://golang.org/cl/138730043
      997809c8
    • Russ Cox's avatar
      runtime: fix windows signal handlers · c548cc2e
      Russ Cox authored
      Windows needs the return result in AX, but runtime.sighandler
      no longer stores it in AX. Load it back during the assembly trampoline.
      
      TBR=brainman
      CC=golang-codereviews
      https://golang.org/cl/133980043
      c548cc2e
    • Russ Cox's avatar
      runtime: give nosplit functions 32 more bytes of headroom · fe91006a
      Russ Cox authored
      The Go calling convention uses more stack space than C.
      On 64-bit systems we've been right up against the limit
      (128 bytes, so only 16 words) and doing awful things to
      our source code to work around it. Instead of continuing
      to do awful things, raise the limit to 160 bytes.
      I am prepared to raise the limit to 192 bytes if necessary,
      but I think this will be enough.
      
      Should fix current link-time stack overflow errors on
              - nacl/arm
              - netbsd/amd64
              - openbsd/amd64
              - solaris/amd64
              - windows/amd64
      
      TBR=r
      CC=golang-codereviews, iant
      https://golang.org/cl/131450043
      fe91006a
    • Brad Fitzpatrick's avatar
      runtime: restore header to first goroutine in Stack · 9a5654ab
      Brad Fitzpatrick authored
      It appears to have been accidentally lost when converting
      Stack from C to Go in https://golang.org/cl/129510043
      
      LGTM=rsc
      R=golang-codereviews
      CC=golang-codereviews, josharian, khr, remyoudompheng, rsc
      https://golang.org/cl/136870043
      9a5654ab
    • Russ Cox's avatar
      cmd/cc, runtime: convert C compilers to use Go calling convention · 25f6b02a
      Russ Cox authored
      To date, the C compilers and Go compilers differed only in how
      values were returned from functions. This made it difficult to call
      Go from C or C from Go if return values were involved. It also made
      assembly called from Go and assembly called from C different.
      
      This CL changes the C compiler to use the Go conventions, passing
      results on the stack, after the arguments.
      [Exception: this does not apply to C ... functions, because you can't
      know where on the stack the arguments end.]
      
      By doing this, the CL makes it possible to rewrite C functions into Go
      one at a time, without worrying about which languages call that
      function or which languages it calls.
      
      This CL also updates all the assembly files in package runtime to use
      the new conventions. Argument references of the form 40(SP) have
      been rewritten to the form name+10(FP) instead, and there are now
      Go func prototypes for every assembly function called from C or Go.
      This means that 'go vet runtime' checks effectively every assembly
      function, and go vet's output was used to automate the bulk of the
      conversion.
      
      Some functions, like seek and nsec on Plan 9, needed to be rewritten.
      
      Many assembly routines called from C were reading arguments
      incorrectly, using MOVL instead of MOVQ or vice versa, especially on
      the less used systems like openbsd.
      These were found by go vet and have been corrected too.
      If we're lucky, this may reduce flakiness on those systems.
      
      Tested on:
              darwin/386
              darwin/amd64
              linux/arm
              linux/386
              linux/amd64
      If this breaks another system, the bug is almost certainly in the
      sys_$GOOS_$GOARCH.s file, since the rest of the CL is tested
      by the combination of the above systems.
      
      LGTM=dvyukov, iant
      R=golang-codereviews, 0intro, dave, alex.brainman, dvyukov, iant
      CC=golang-codereviews, josharian, r
      https://golang.org/cl/135830043
      25f6b02a
    • Rick Hudson's avatar
      runtime: changes to g->atomicstatus (nee status) to support concurrent GC · 0a7c7ac8
      Rick Hudson authored
      Every change to g->atomicstatus is now done atomically so that we can
      ensure that all gs pass through a gc safepoint on demand. This allows
      the GC to move from one phase to the next safely. In some phases the
      stack will be scanned. This CL only deals with the infrastructure that
      allows g->atomicstatus to go from one state to another. Future CLs
      will deal with scanning and monitoring what phase the GC is in.
      
      The major change was to moving to using a Gscan bit to indicate that
      the status is in a scan state. The only bug fix was in oldstack where
      I wasn't moving to a Gcopystack state in order to block scanning until
      the new stack was in place. The proc.go file is waiting for an atomic
      load instruction.
      
      LGTM=rsc
      R=golang-codereviews, dvyukov, josharian, rsc
      CC=golang-codereviews, khr
      https://golang.org/cl/132960044
      0a7c7ac8
    • Russ Cox's avatar
      CONTRIBUTORS: add Rick Hudson (Google CLA) · 56f8b297
      Russ Cox authored
      TBR=rlh
      CC=golang-codereviews
      https://golang.org/cl/131410043
      56f8b297
    • Dave Cheney's avatar
      cmd/gc: fix undefined behaviour warnings in mparith3.c · 9c504696
      Dave Cheney authored
      Update #8527
      
      Fixes two warnings:
      
      src/cmd/gc/mparith3.c:255:10: runtime error: shift exponent 52 is too large for 32-bit type 'int'
      src/cmd/gc/mparith3.c:254:14: runtime error: shift exponent 52 is too large for 32-bit type 'int'
      
      LGTM=rsc
      R=r, dvyukov, rsc
      CC=golang-codereviews
      https://golang.org/cl/134940044
      9c504696
  3. 26 Aug, 2014 10 commits