1. 11 Oct, 2017 18 commits
    • Austin Clements's avatar
      runtime: replace sched.mcount int32 with sched.mnext int64 · 6c7bea63
      Austin Clements authored
      Currently, since Ms never exit, the number of Ms, the number of Ms
      ever created, and the ID of the next M are all the same and must be
      small. That's about to change, so rename sched.mcount to sched.mnext
      to make it clear it's the number of Ms ever created (and the ID of the
      next M), change its type to int64, and use mcount() for the number of
      Ms. In the next commit, mcount() will become slightly less trivial.
      
      For #20395.
      
      Change-Id: I9af34d36bd72416b5656555d16e8085076f1b196
      Reviewed-on: https://go-review.googlesource.com/68750
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      6c7bea63
    • Russ Cox's avatar
      cmd/go: hoist C++, Objective-C, and Fortran checks earlier · d7ac5ce8
      Russ Cox authored
      Today they happen during the build phase; they should happen
      during the load phase instead, along with the C check.
      
      Change-Id: I6074a995b8e29275549aafa574511b735642d85b
      Reviewed-on: https://go-review.googlesource.com/69051
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      d7ac5ce8
    • Austin Clements's avatar
      runtime: mark mstart as nowritebarrierrec · a212083e
      Austin Clements authored
      mstart is the entry point for new threads, so it certainly can't
      interact with GC enough to have write barriers. We move the one small
      piece that is allowed to have write barriers out into its own
      function.
      
      Change-Id: Id9c31d6ffac31d0051fab7db15eb428c11cadbad
      Reviewed-on: https://go-review.googlesource.com/46035
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
      a212083e
    • Russ Cox's avatar
      cmd/go: replace a.Package.Internal.Pkgfile with a.built · 8f7f46f5
      Russ Cox authored
      Logically the build needs to start treating a.Package as immutable,
      since we might want to build a.Package multiple ways.
      Record the built target in a.built instead.
      
      Right now a.built is predictable ahead of time, but we want to
      move toward satisfying some builds from a cache directory,
      in which case a.built will point into the cache directory
      and not be determined until action execution time.
      
      There is probably more to do with shared libraries, but this
      does not break what's there.
      
      Change-Id: I941988b520bee2f664fd8cabccf389e1dc29628b
      Reviewed-on: https://go-review.googlesource.com/69050
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      8f7f46f5
    • Austin Clements's avatar
      runtime: make m.nextwaitm an muintptr · 12ec5472
      Austin Clements authored
      This field is really a *m (modulo its bottom bit). Change it from
      uintptr to muintptr to document this fact.
      
      Change-Id: I2d181a955ef1d2c1a268edf20091b440d85726c9
      Reviewed-on: https://go-review.googlesource.com/46034
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
      12ec5472
    • Russ Cox's avatar
      cmd/go: clean up compile vs link vs shared library actions · 4e8be995
      Russ Cox authored
      Everything got a bit tangled together in b.action1.
      Try to tease things apart again.
      
      In general this is a refactoring of the existing code, with limited
      changes to the effect of the code.
      
      The main additional change is to complete a.Deps for link actions.
      That list now directly contains all the inputs the linker will attempt
      to read, eliminating the need for a transitive traversal of the entire
      action graph to find those. The comepleteness of a.Deps will be
      important when we eventually use it to decide whether an cached
      action output can be reused.
      
      all.bash passes, but it's possible I've broken some subtety of
      buildmode=shared again. Certainly that code took the longest
      to get working.
      
      Change-Id: I34e849eda446dca45a9cfce02b07bec6edb6d0d4
      Reviewed-on: https://go-review.googlesource.com/69831
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      4e8be995
    • Austin Clements's avatar
      runtime: don't start new threads from locked threads · 2595fe7f
      Austin Clements authored
      Applications that need to manipulate kernel thread state are currently
      on thin ice in Go: they can use LockOSThread to prevent other
      goroutines from running on the manipulated thread, but Go may clone
      this manipulated state into a new thread that's put into the runtime's
      thread pool along with other threads.
      
      Fix this by never starting a new thread from a locked thread or a
      thread that may have been started by C. Instead, the runtime starts a
      "template thread" with a known-good state. If it then needs to start a
      new thread but doesn't know that the current thread is in a good
      state, it forwards the thread creation to the template thread.
      
      Fixes #20676.
      
      Change-Id: I798137a56e04b7723d55997e9c5c085d1d910643
      Reviewed-on: https://go-review.googlesource.com/46033
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      2595fe7f
    • Russ Cox's avatar
      cmd/go: separate compile and link steps in action graph · 9a9780a2
      Russ Cox authored
      To the extent that invoking the compiler and invoking the linker
      have different dependency requirements, representing both steps
      by a single action node leads to confusion.
      
      If we move to having separate .a and .x (import metadata) files
      in the standard builds, then the .a is a link dependency but not
      a compile dependency, and vice versa for .x.
      Today, in shared library builds, the .a is a compile dependency
      and a link dependency, while the .so is only a link dependency.
      
      Also in this CL: change the gccgo link step to extract _cgo_flags
      into root.Objdir, which is private to the link step, instead of into
      b.WorkDir, which is shared by all the link steps that could possibly
      be running in parallel. And attempt to handle the -n and -x flags
      when loading _cgo_flags, instead of dying attempting to read
      an archive that wasn't written.
      
      Also in this CL: create a.Objdir before running a.Func, to avoid
      duplicating the Mkdir(a.Objdir) in every a.Func.
      
      A future CL will update the link action's Deps to be accurate.
      (Right now the link steps search out the true Deps by walking
      the entire action graph.)
      
      Change-Id: I15128ce2bd064887f98abc3a4cf204241f518631
      Reviewed-on: https://go-review.googlesource.com/69830
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
      9a9780a2
    • David Crawshaw's avatar
      debug/elf: add relocation constants · 0c6fc0d7
      David Crawshaw authored
      Compiled from various tables found around the internet.
      
      Some of these are used by cmd/link.
      
      Change-Id: I258b25e694dbe91a61d675763f2c47ccc928fd70
      Reviewed-on: https://go-review.googlesource.com/69012
      Run-TryBot: David Crawshaw <crawshaw@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      0c6fc0d7
    • Ian Lance Taylor's avatar
      cmd/go: correct directory used in checkNestedVCS test · 862b78e1
      Ian Lance Taylor authored
      This error was not used when using git because nested git is permitted.
      Add test using Mercurial, so that at least we have a test, even though
      the test is not run by default.
      
      Fixes #22157
      Fixes #22201
      
      Change-Id: If521f3c09b0754e00e56fa3cd0364764a57a43ad
      Reviewed-on: https://go-review.googlesource.com/69670
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      862b78e1
    • Ben Shi's avatar
      cmd/compile: optimize ARM code with CMN/TST/TEQ · 1ec78d1d
      Ben Shi authored
      CMN/TST/TEQ were supported since ARMv4, which can be used to
      simplify comparisons.
      
      This patch implements the optimization and here are the benchmark
      results.
      
      1. A special test case got 18.21% improvement.
      name                     old time/op    new time/op    delta
      TSTTEQ-4                    806µs ± 1%     659µs ± 0%  -18.21%  (p=0.000 n=20+18)
      (https://github.com/benshi001/ugo1/blob/master/tstteq_test.go)
      
      2. There is no regression in the compilecmp benchmark.
      name        old time/op       new time/op       delta
      Template          2.31s ± 1%        2.30s ± 1%    ~     (p=0.661 n=10+9)
      Unicode           1.32s ± 3%        1.32s ± 5%    ~     (p=0.280 n=10+10)
      GoTypes           7.69s ± 1%        7.65s ± 0%  -0.52%  (p=0.027 n=10+8)
      Compiler          36.5s ± 1%        36.4s ± 1%    ~     (p=0.546 n=9+9)
      SSA               85.1s ± 2%        84.9s ± 1%    ~     (p=0.529 n=10+10)
      Flate             1.43s ± 2%        1.43s ± 2%    ~     (p=0.661 n=10+9)
      GoParser          1.81s ± 2%        1.81s ± 1%    ~     (p=0.796 n=10+10)
      Reflect           5.10s ± 2%        5.09s ± 1%    ~     (p=0.853 n=10+10)
      Tar               2.47s ± 1%        2.48s ± 1%    ~     (p=0.123 n=10+10)
      XML               2.59s ± 1%        2.58s ± 1%    ~     (p=0.853 n=10+10)
      [Geo mean]        4.78s             4.77s       -0.17%
      
      name        old user-time/op  new user-time/op  delta
      Template          2.72s ± 3%        2.73s ± 2%    ~     (p=0.928 n=10+10)
      Unicode           1.58s ± 4%        1.60s ± 1%    ~     (p=0.087 n=10+9)
      GoTypes           9.41s ± 2%        9.36s ± 1%    ~     (p=0.060 n=10+10)
      Compiler          44.4s ± 2%        44.2s ± 2%    ~     (p=0.289 n=10+10)
      SSA                110s ± 2%         110s ± 1%    ~     (p=0.739 n=10+10)
      Flate             1.67s ± 2%        1.63s ± 3%    ~     (p=0.063 n=10+10)
      GoParser          2.12s ± 1%        2.12s ± 2%    ~     (p=0.840 n=10+10)
      Reflect           5.94s ± 1%        5.98s ± 1%    ~     (p=0.063 n=9+10)
      Tar               3.01s ± 2%        3.02s ± 2%    ~     (p=0.584 n=10+10)
      XML               3.04s ± 3%        3.02s ± 2%    ~     (p=0.696 n=10+10)
      [Geo mean]        5.73s             5.72s       -0.20%
      
      name        old text-bytes    new text-bytes    delta
      HelloSize         579kB ± 0%        579kB ± 0%    ~     (all equal)
      
      name        old data-bytes    new data-bytes    delta
      HelloSize        5.46kB ± 0%       5.46kB ± 0%    ~     (all equal)
      
      name        old bss-bytes     new bss-bytes     delta
      HelloSize        72.8kB ± 0%       72.8kB ± 0%    ~     (all equal)
      
      name        old exe-bytes     new exe-bytes     delta
      HelloSize        1.03MB ± 0%       1.03MB ± 0%    ~     (all equal)
      
      3. There is little change in the go1 benchmark (excluding the noise).
      name                     old time/op    new time/op     delta
      BinaryTree17-4              40.3s ± 1%      40.6s ± 1%  +0.80%  (p=0.000 n=30+30)
      Fannkuch11-4                24.2s ± 1%      24.1s ± 0%    ~     (p=0.093 n=30+30)
      FmtFprintfEmpty-4           834ns ± 0%      826ns ± 0%  -0.93%  (p=0.000 n=29+24)
      FmtFprintfString-4         1.39µs ± 1%     1.36µs ± 0%  -2.02%  (p=0.000 n=30+30)
      FmtFprintfInt-4            1.43µs ± 1%     1.44µs ± 1%    ~     (p=0.155 n=30+29)
      FmtFprintfIntInt-4         2.09µs ± 0%     2.11µs ± 0%  +1.16%  (p=0.000 n=28+30)
      FmtFprintfPrefixedInt-4    2.33µs ± 1%     2.36µs ± 0%  +1.25%  (p=0.000 n=30+30)
      FmtFprintfFloat-4          4.27µs ± 1%     4.32µs ± 1%  +1.27%  (p=0.000 n=30+30)
      FmtManyArgs-4              8.18µs ± 0%     8.14µs ± 0%  -0.46%  (p=0.000 n=25+27)
      GobDecode-4                 101ms ± 1%      101ms ± 1%    ~     (p=0.182 n=29+29)
      GobEncode-4                89.6ms ± 1%     87.8ms ± 2%  -2.02%  (p=0.000 n=30+29)
      Gzip-4                      4.07s ± 1%      4.08s ± 1%    ~     (p=0.173 n=30+27)
      Gunzip-4                    602ms ± 1%      600ms ± 1%  -0.29%  (p=0.000 n=29+28)
      HTTPClientServer-4          679µs ± 4%      683µs ± 3%    ~     (p=0.197 n=30+30)
      JSONEncode-4                241ms ± 1%      239ms ± 1%  -0.84%  (p=0.000 n=30+30)
      JSONDecode-4                903ms ± 1%      882ms ± 1%  -2.33%  (p=0.000 n=30+30)
      Mandelbrot200-4            41.8ms ± 0%     41.8ms ± 0%    ~     (p=0.719 n=30+30)
      GoParse-4                  45.5ms ± 1%     45.8ms ± 1%  +0.52%  (p=0.000 n=30+30)
      RegexpMatchEasy0_32-4      1.27µs ± 1%     1.27µs ± 0%  -0.60%  (p=0.000 n=30+30)
      RegexpMatchEasy0_1K-4      7.77µs ± 6%     7.69µs ± 4%  -0.96%  (p=0.040 n=30+30)
      RegexpMatchEasy1_32-4      1.29µs ± 1%     1.28µs ± 1%  -0.54%  (p=0.000 n=30+30)
      RegexpMatchEasy1_1K-4      10.3µs ± 6%     10.2µs ± 3%    ~     (p=0.453 n=30+27)
      RegexpMatchMedium_32-4     1.98µs ± 1%     2.00µs ± 1%  +0.85%  (p=0.000 n=30+29)
      RegexpMatchMedium_1K-4      503µs ± 0%      503µs ± 1%    ~     (p=0.752 n=30+30)
      RegexpMatchHard_32-4       27.1µs ± 1%     26.5µs ± 0%  -1.96%  (p=0.000 n=30+24)
      RegexpMatchHard_1K-4        809µs ± 1%      799µs ± 1%  -1.29%  (p=0.000 n=29+30)
      Revcomp-4                  67.3ms ± 2%     67.2ms ± 1%    ~     (p=0.265 n=29+29)
      Template-4                  1.08s ± 1%      1.07s ± 0%  -1.39%  (p=0.000 n=30+22)
      TimeParse-4                6.93µs ± 1%     6.96µs ± 1%  +0.40%  (p=0.005 n=30+30)
      TimeFormat-4               13.3µs ± 0%     13.3µs ± 1%    ~     (p=0.734 n=30+30)
      [Geo mean]                  709µs           707µs       -0.32%
      
      name                     old speed      new speed       delta
      GobDecode-4              7.59MB/s ± 1%   7.57MB/s ± 1%    ~     (p=0.145 n=29+29)
      GobEncode-4              8.56MB/s ± 1%   8.74MB/s ± 1%  +2.07%  (p=0.000 n=30+29)
      Gzip-4                   4.76MB/s ± 1%   4.75MB/s ± 1%  -0.25%  (p=0.037 n=30+30)
      Gunzip-4                 32.2MB/s ± 1%   32.3MB/s ± 1%  +0.29%  (p=0.000 n=29+28)
      JSONEncode-4             8.04MB/s ± 1%   8.11MB/s ± 1%  +0.85%  (p=0.000 n=30+30)
      JSONDecode-4             2.15MB/s ± 1%   2.20MB/s ± 1%  +2.29%  (p=0.000 n=30+30)
      GoParse-4                1.27MB/s ± 1%   1.26MB/s ± 1%  -0.73%  (p=0.000 n=30+30)
      RegexpMatchEasy0_32-4    25.1MB/s ± 1%   25.3MB/s ± 0%  +0.61%  (p=0.000 n=30+30)
      RegexpMatchEasy0_1K-4     131MB/s ± 6%    133MB/s ± 4%  +1.35%  (p=0.009 n=28+30)
      RegexpMatchEasy1_32-4    24.9MB/s ± 1%   25.0MB/s ± 1%  +0.54%  (p=0.000 n=30+30)
      RegexpMatchEasy1_1K-4    99.2MB/s ± 6%  100.2MB/s ± 3%    ~     (p=0.448 n=30+27)
      RegexpMatchMedium_32-4    503kB/s ± 1%    500kB/s ± 0%  -0.66%  (p=0.002 n=30+24)
      RegexpMatchMedium_1K-4   2.04MB/s ± 0%   2.04MB/s ± 1%    ~     (p=0.358 n=30+30)
      RegexpMatchHard_32-4     1.18MB/s ± 1%   1.20MB/s ± 1%  +1.75%  (p=0.000 n=30+30)
      RegexpMatchHard_1K-4     1.26MB/s ± 1%   1.28MB/s ± 1%  +1.42%  (p=0.000 n=30+30)
      Revcomp-4                37.8MB/s ± 2%   37.8MB/s ± 1%    ~     (p=0.266 n=29+29)
      Template-4               1.80MB/s ± 1%   1.82MB/s ± 1%  +1.46%  (p=0.000 n=30+30)
      [Geo mean]               6.91MB/s        6.96MB/s       +0.70%
      
      fixes #21583
      
      Change-Id: I24065a80588ccae7de3ad732a3cfb0026cf7e214
      Reviewed-on: https://go-review.googlesource.com/67490Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      1ec78d1d
    • Frank Somers's avatar
      runtime: move vdso_linux_amd64.go to vdso_linux.go · 4477107b
      Frank Somers authored
      This is a preparation step for adding vDSO support on linux/386.
      
      In a follow-on change, the vDSO ELF symbol lookup code in this
      file will be refactored so it can be used on multiple architectures.
      
      First, move the file to an architecture-neutral file name so that
      the change history is preserved. Build tags are added so that the
      build behaves as it did before.
      
      vdso_linux_amd64.go will be recreated later, just containing the
      amd64 specifics.
      
      If the move and refactor were combined in a single change, then the
      history to date would be lost because git would see the existing code
      as a new file.
      
      Change-Id: Iddb5da0d7faf141fd7cc835fe6a80c80153897e9
      Reviewed-on: https://go-review.googlesource.com/69710
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      4477107b
    • Daniel Martí's avatar
      cmd/compile: eliminate some lineno uses · 6013052e
      Daniel Martí authored
      Focused on ranges, selects and switches for this one.
      
      While at it, simplify some vars in typecheckselect.
      
      Updates #19683.
      
      Change-Id: Ib6aabe0f6826cb1930483aeb4bb2de1ff8052d9e
      Reviewed-on: https://go-review.googlesource.com/69690
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      6013052e
    • Alberto Donizetti's avatar
      cmd/compile: fix OTYPESW Op comment · 07f7db3e
      Alberto Donizetti authored
      OTYPESW Op comment says
      
        // List = Left.(type)
      
      this seems to be wrong. Adding
      
        fmt.Printf("n: %v\n", cond)
        fmt.Printf("  n.List: %v\n", cond.List)
        fmt.Printf("  n.Left: %v\n", cond.Left)
        fmt.Printf("  n.Right: %v\n", cond.Right)
      
      to (s *typeSwitch) walk(sw *Node), and compiling the following code
      snippet
      
        var y interface{}
        switch x := y.(type) {
        default:
          println(x)
        }
      
      prints
      
        n: <node TYPESW>
          n.List:
          n.Left: x
          n.Right: y
      
      The correct OTYPESW Node field positions are
      
        // Left = Right.(type)
      
      This is confirmed by the fact that, further in the code,
      typeSwitch.walk() checks that Right (and not Left) is of type
      interface:
      
        cond.Right = walkexpr(cond.Right, &sw.Ninit)
        if !cond.Right.Type.IsInterface() {
          yyerror("type switch must be on an interface")
          return
        }
      
      This patch fixes the OTYPESW comment.
      
      Change-Id: Ief1e409cfabb7640d7f7b0d4faabbcffaf605450
      Reviewed-on: https://go-review.googlesource.com/69112Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      07f7db3e
    • Ian Lance Taylor's avatar
      cmd/compile: disable TestNexting in short mode · 0c53b4ec
      Ian Lance Taylor authored
      Updates #22206
      
      Change-Id: If75feddc01f8f86f294929fa7081c70eb15e581d
      Reviewed-on: https://go-review.googlesource.com/69790
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      0c53b4ec
    • griesemer's avatar
      cmd/compile/internal/syntax: consider function nesting for error recovery · 68e39030
      griesemer authored
      This re-enables functionality that inadvertently was disabled in the
      (long) past.
      
      Also, don't perform branch checks if we had errors in a function
      to avoid spurious errors or (worst-case) crashes.
      
      Slightly modified test/fixedbugs/issue14006.go to make sure the
      test still reports invalid label errors (the surrounding function
      must be syntactically correct).
      
      Change-Id: Id5642930877d7cf3400649094ec75c753b5084b7
      Reviewed-on: https://go-review.googlesource.com/69770
      Run-TryBot: Robert Griesemer <gri@golang.org>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      68e39030
    • griesemer's avatar
      cmd/compile/internal/syntax: factor out parsing of func bodies (cleanup) · 39edffb6
      griesemer authored
      Change-Id: If6481a5401940a923fc9a104981dfb90eed0d1ac
      Reviewed-on: https://go-review.googlesource.com/69750
      Run-TryBot: Robert Griesemer <gri@golang.org>
      Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      39edffb6
    • griesemer's avatar
      cmd/compile/internal/syntax: remove some outdated comments (cleanup) · c87fb208
      griesemer authored
      Change-Id: If242bb99d501420827b764c908580f2363e01ac4
      Reviewed-on: https://go-review.googlesource.com/69730Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
      c87fb208
  2. 10 Oct, 2017 14 commits
  3. 09 Oct, 2017 8 commits