]> Cypherpunks repositories - gostls13.git/log
gostls13.git
10 years agocmd/dist: avoid trailing space in instruction name strings
Russ Cox [Thu, 12 Feb 2015 03:39:21 +0000 (22:39 -0500)]
cmd/dist: avoid trailing space in instruction name strings

Change-Id: I2db4db852492eaddaf09dd7bae2fbd49f916e78a
Reviewed-on: https://go-review.googlesource.com/4648
Reviewed-by: Rob Pike <r@golang.org>
10 years agocmd/gc: minor adjustments for C to Go translation
Russ Cox [Thu, 5 Feb 2015 16:53:33 +0000 (11:53 -0500)]
cmd/gc: minor adjustments for C to Go translation

- remove a few uses of ? :
- rename variables named len
- rewrite a few gotos as nested switches
- move goto targets to scope allowed by Go
- use consistent return type of anyregalloc
  (was int or int32 in different places)
- remove unused nr variable in agen
- include proper headers in generated builtin1.c
- avoid strange sized %E formats (%-6E, %2E)
- change gengcmask argument from uint8[16] to uint8*
  (diagnosed by c2go; not an array in any real sense).
- replace #ifdef XXX with comment block in 5g/peep.c
- expand and remove FAIL macro from 5g
- expand and remove noimpl macro from 9g
- print regalloc errors to stdout in 8g
  (only use of fprint(2, ...) in all compilers)

Still producing bit-for-bit identical output.

Change-Id: Id46efcd2a89241082b234f63f375b66f2754d695
Reviewed-on: https://go-review.googlesource.com/4646
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: eliminate some pointer arithmetic
Russ Cox [Thu, 5 Feb 2015 15:47:44 +0000 (10:47 -0500)]
cmd/gc: eliminate some pointer arithmetic

In mparith, all the a1-- are problematic. Rewrite it all without pointers.
It's clearer anyway.

In popt, v is problematic because it is used both as a fixed pointer
(v = byvar[i]) and as a moving pointer (v = var; v++) aka slice.
Eliminate pointer movement.

Tested that this still produces bit-for-bit output for 'go build -a std'
compared to d260756 (current master).

Change-Id: I1a1bed0f98b594c3864fe95075dd95f9b52113e0
Reviewed-on: https://go-review.googlesource.com/4645
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: rename arch to thearch
Russ Cox [Thu, 5 Feb 2015 16:55:51 +0000 (11:55 -0500)]
cmd/gc: rename arch to thearch

Otherwise the exported variable collides with the type Arch.

While we're here, remove arch.dumpit (now in portable code)
and add arch.defframe (forgotten originally, somehow).

Change-Id: I1b3a7dd7e96c5f632dba7cd6c1217b42a2004d72
Reviewed-on: https://go-review.googlesource.com/4644
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: add .y to error about missing x in x.y
Russ Cox [Thu, 5 Feb 2015 17:31:13 +0000 (12:31 -0500)]
cmd/gc: add .y to error about missing x in x.y

If the Go source says x.y, and x is undefined, today we get

undefined: x

Change to:

undefined: x in x.y

Change-Id: I8ea95503bd469ea933c6bcbd675b7122a5d454f3
Reviewed-on: https://go-review.googlesource.com/4643
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: add debugging to liveness analysis
Russ Cox [Wed, 11 Feb 2015 00:27:49 +0000 (19:27 -0500)]
cmd/gc: add debugging to liveness analysis

Even with debugmerge = 1, the debugging output only happens
with the -v command-line flag. This is useful because it gets added
in automatically when debugging things like registerization with -R -v.

Change-Id: I9a5c7f562507b72e8e2fe2686fd07d069721345a
Reviewed-on: https://go-review.googlesource.com/4641
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: correct errors in constant parsing
Russ Cox [Wed, 11 Feb 2015 04:49:26 +0000 (23:49 -0500)]
cmd/gc: correct errors in constant parsing

Change-Id: I36f77e7ac7f727d8f3b51133f4b3ef93c35b09f6
Reviewed-on: https://go-review.googlesource.com/4640
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: avoid writing past end of region array
Russ Cox [Fri, 13 Feb 2015 16:54:15 +0000 (11:54 -0500)]
cmd/gc: avoid writing past end of region array

Noticed last week.
Just saw a strange build failure in the revised rcmp (called by qsort on region)
and this fixed it.

Submitting first to avoid finding out which of my pending CLs tickled the
problem.

Change-Id: I4cafd611e2bf8e813e57ad0025e48bde5ae54359
Reviewed-on: https://go-review.googlesource.com/4830
Reviewed-by: Russ Cox <rsc@golang.org>
10 years agocmd/yacc: adjust expansion of $n to be more useful in errors
Russ Cox [Fri, 6 Feb 2015 18:48:42 +0000 (13:48 -0500)]
cmd/yacc: adjust expansion of $n to be more useful in errors

When the compiler echoes back an expression, it shows the
generated yacc expression. Change the generated code to
use a slice so that $3 shows up as yyDollar[3] in such messages.

Consider changing testdata/expr/expr.y to say:

$$.Sub(float64($1), $3)

(The float64 conversion is incorrect.)

Before:
expr.y:70[expr.go:486]: cannot convert exprS[exprpt - 2].num (type *big.Rat) to type float64

After:
expr.y:70[expr.go:492]: cannot convert exprDollar[1].num (type *big.Rat) to type float64

Change-Id: I74e494069df588e62299d1fccb282f3658d8f8f4
Reviewed-on: https://go-review.googlesource.com/4630
Reviewed-by: Rob Pike <r@golang.org>
10 years agoencoding/xml: encoding name spaces correctly
Roger Peppe [Sat, 10 Jan 2015 14:00:21 +0000 (14:00 +0000)]
encoding/xml: encoding name spaces correctly

The current XML printer does not understand the xmlns
attribute. This change changes it so that it interprets the
xmlns attributes in the tokens being printed, and uses
appropriate prefixes.

Fixes #7535.

Change-Id: I20fae291d20602d37deb41ed42fab4c9a50ec85d
Reviewed-on: https://go-review.googlesource.com/2660
Reviewed-by: Nigel Tao <nigeltao@golang.org>
10 years agoruntime: fix stack corruption in race mode
Dmitry Vyukov [Fri, 13 Feb 2015 14:14:48 +0000 (17:14 +0300)]
runtime: fix stack corruption in race mode

MOVQ RARG0, 0(SP) smashes exactly what was saved by PUSHQ R15.
This code managed to work somehow with the current race runtime,
but corrupts caller arguments with new race runtime that I am testing.

Change-Id: I9ffe8b5eee86451db36e99dbf4d11f320192e576
Reviewed-on: https://go-review.googlesource.com/4810
Reviewed-by: Keith Randall <khr@golang.org>
10 years agoruntime/race: fix test in preparation for new race runtime
Dmitry Vyukov [Fri, 13 Feb 2015 14:19:33 +0000 (17:19 +0300)]
runtime/race: fix test in preparation for new race runtime

New race runtime is more scrupulous about env flags format.

Change-Id: I2828bc737a8be3feae5288ccf034c52883f224d8
Reviewed-on: https://go-review.googlesource.com/4811
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agoruntime: rename drainworkbuf and drainobjects
Austin Clements [Thu, 12 Feb 2015 20:39:29 +0000 (15:39 -0500)]
runtime: rename drainworkbuf and drainobjects

drainworkbuf is now gcDrain, since it drains until there's
nothing left to drain.  drainobjects is now gcDrainN because it's
the bounded equivalent to gcDrain.

The new names use the Go camel case convention because we have to
start somewhere.  The "gc" prefix is because we don't have runtime
packages yet and just "drain" is too ambiguous.

Change-Id: I88dbdf32e8ce4ce6c3b7e1f234664be9b76cb8fd
Reviewed-on: https://go-review.googlesource.com/4785
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
10 years agoruntime: remove drainallwbufs argument to drainworkbuf
Austin Clements [Thu, 12 Feb 2015 20:30:08 +0000 (15:30 -0500)]
runtime: remove drainallwbufs argument to drainworkbuf

All calls to drainworkbuf now pass true for this argument, so remove
the argument and update the documentation to reflect the simplified
interface.

At a higher level, there are no longer any situations where we drain
"one wbuf" (though drainworkbuf didn't guarantee this anyway).  We
either drain everything, or we drain a specific number of objects.

Change-Id: Ib7ee0fde56577eff64232ee1e711ec57c4361335
Reviewed-on: https://go-review.googlesource.com/4784
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
10 years agoruntime: eliminate drainworkbufs from scanblock
Austin Clements [Thu, 12 Feb 2015 20:22:49 +0000 (15:22 -0500)]
runtime: eliminate drainworkbufs from scanblock

scanblock is only called during _GCscan and _GCmarktermination.
During _GCscan, scanblock didn't call drainworkbufs anyway.  During
_GCmarktermination, there's really no point in draining some (largely
arbitrary) amount of work during the scanblock, since the GC is about
to drain everything anyway, so simply eliminate this case.

Change-Id: I7f3c59ce9186a83037c6f9e9b143181acd04c597
Reviewed-on: https://go-review.googlesource.com/4783
Reviewed-by: Russ Cox <rsc@golang.org>
10 years agoruntime: eliminate b == 0 special case from scanblock
Austin Clements [Thu, 12 Feb 2015 20:20:13 +0000 (15:20 -0500)]
runtime: eliminate b == 0 special case from scanblock

We no longer ever call scanblock with b == 0.

Change-Id: I9b01da39595e0cc251668c24d58748d88f5f0792
Reviewed-on: https://go-review.googlesource.com/4782
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
10 years agoruntime: replace scanblock(0, 0, nil, nil) with drainworkbuf
Austin Clements [Thu, 12 Feb 2015 20:05:55 +0000 (15:05 -0500)]
runtime: replace scanblock(0, 0, nil, nil) with drainworkbuf

scanblock(0, 0, nil, nil) was just a confusing way of saying

  wbuf = getpartialorempty()
  drainworkbuf(wbuf, true)

Make drainworkbuf accept a nil workbuf and perform the
getpartialorempty itself and replace all uses of scanblock(0, 0, nil,
nil) with direct calls to drainworkbuf(nil, true).

Change-Id: I7002a2f8f3eaf6aa85bbf17ccc81d7288acfef1c
Reviewed-on: https://go-review.googlesource.com/4781
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
10 years agoruntime: move checknocurrentwbuf() from scanblock to drainworkbuf
Austin Clements [Thu, 12 Feb 2015 20:00:54 +0000 (15:00 -0500)]
runtime: move checknocurrentwbuf() from scanblock to drainworkbuf

Previously, scanblock called checknocurrentwbuf() after
drainworkbuf().  Move this call into drainworkbuf so that every return
path from drainworkbuf calls checknocurrentwbuf().  This is equivalent
to the previous code because scanblock was the only caller of
drainworkbuf.

Change-Id: I96ef2168c8aa169bfc4d368f296342fa0fbeafb4
Reviewed-on: https://go-review.googlesource.com/4780
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
10 years agocmd/gc: transform closure calls to function calls
Dmitry Vyukov [Fri, 6 Feb 2015 12:09:46 +0000 (15:09 +0300)]
cmd/gc: transform closure calls to function calls

Currently we always create context objects for closures that capture variables.
However, it is completely unnecessary for direct calls of closures
(whether it is func()(), defer func()() or go func()()).
This change transforms any OCALLFUNC(OCLOSURE) to normal function call.
Closed variables become function arguments.
This transformation is especially beneficial for go func(),
because we do not need to allocate context object on heap.
But it makes direct closure calls a bit faster as well (see BenchmarkClosureCall).

On implementation level it required to introduce yet another compiler pass.
However, the pass iterates only over xtop, so it should not be an issue.
Transformation consists of two parts: closure transformation and call site
transformation. We can't run these parts on different sides of escape analysis,
because tree state is inconsistent. We can do both parts during typecheck,
we don't know how to capture variables and don't have call site.
We can't do both parts during walk of OCALLFUNC, because we can walk
OCLOSURE body earlier.
So now capturevars pass only decides how to capture variables
(this info is required for escape analysis). New transformclosure
pass, that runs just before order/walk, does all transformations
of a closure. And later walk of OCALLFUNC(OCLOSURE) transforms call site.

benchmark                            old ns/op     new ns/op     delta
BenchmarkClosureCall                 4.89          3.09          -36.81%
BenchmarkCreateGoroutinesCapture     1634          1294          -20.81%

benchmark                            old allocs     new allocs     delta
BenchmarkCreateGoroutinesCapture     6              2              -66.67%

benchmark                            old bytes     new bytes     delta
BenchmarkCreateGoroutinesCapture     176           48            -72.73%

Change-Id: Ic85e1706e18c3235cc45b3c0c031a9c1cdb7a40e
Reviewed-on: https://go-review.googlesource.com/4050
Reviewed-by: Russ Cox <rsc@golang.org>
10 years agocmd/go: make consistent use of leading Tabs
Shenghou Ma [Sun, 8 Feb 2015 23:09:23 +0000 (18:09 -0500)]
cmd/go: make consistent use of leading Tabs

The only remaining uses of four spaces instead of a tab is
when the line is too long (e.g. type Package).

Fixes #9809

Change-Id: Ifffd3639aa9264e795686ef1879a7686f182d2e5
Reviewed-on: https://go-review.googlesource.com/4182
Reviewed-by: Andrew Gerrand <adg@golang.org>
10 years agocmd/gc: restore amd64p32 hack for bucket size
Dmitry Vyukov [Thu, 12 Feb 2015 19:31:27 +0000 (22:31 +0300)]
cmd/gc: restore amd64p32 hack for bucket size

This was accidentially removed in:
https://go-review.googlesource.com/#/c/3508/8/src/cmd/gc/reflect.c

Change-Id: I06dd5bb0cb3e2811bd4ef605d7a5225cfa033fe0
Reviewed-on: https://go-review.googlesource.com/4731
Reviewed-by: Keith Randall <khr@golang.org>
10 years agoruntime: cleanup after conversion to Go
Dmitry Vyukov [Thu, 12 Feb 2015 07:18:31 +0000 (10:18 +0300)]
runtime: cleanup after conversion to Go

Change-Id: I7c41cc6a5ab9fb3b0cc3812cf7e9776884658778
Reviewed-on: https://go-review.googlesource.com/4671
Reviewed-by: Ian Lance Taylor <iant@golang.org>
10 years agocmd/5g, cmd/6g, cmd/8g, cmd/9g: use a register to zero in componentgen
Josh Bleecher Snyder [Fri, 9 Jan 2015 20:26:48 +0000 (12:26 -0800)]
cmd/5g, cmd/6g, cmd/8g, cmd/9g: use a register to zero in componentgen

Using a zero register results in shorter, faster code.
5g already did this. Bring 6g, 8g, and 9g up to speed.
Reduces godoc binary size by 0.29% using 6g.

This CL includes cosmetic changes to 5g and 8g.
With those cosmetic changes included, componentgen is now
character-for-character equivalent across the four architectures.

Change-Id: I0e13dd48374bad830c725b117a1c86d4197d390c
Reviewed-on: https://go-review.googlesource.com/2606
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>

10 years agocmd/5g, cmd/6g, cmd/8g, cmd/9g: zero more in componentgen
Josh Bleecher Snyder [Fri, 9 Jan 2015 19:57:51 +0000 (11:57 -0800)]
cmd/5g, cmd/6g, cmd/8g, cmd/9g: zero more in componentgen

Fix a flipped nil check.
The flipped check prevented componentgen
from zeroing a non-cadable nl.
This fix reduces the number of non-SB LEAQs
in godoc from 35323 to 34920 (-1.1%).

Update #1914

Change-Id: I15ea303068835f606f883ddf4a2bb4cb2287e9ae
Reviewed-on: https://go-review.googlesource.com/2605
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>

10 years agocmd/gc: evaluate concrete == interface without allocating
Josh Bleecher Snyder [Wed, 24 Dec 2014 02:28:02 +0000 (18:28 -0800)]
cmd/gc: evaluate concrete == interface without allocating

Consider an interface value i of type I and concrete value c of type C.

Prior to this CL, i==c was evaluated as
I(c) == i

Evaluating I(c) can allocate.

This CL changes the evaluation of i==c to
x, ok := i.(C); ok && x == c

The new generated code is shorter and does not allocate directly.

If C is small, as it is in every instance in the stdlib,
the new code also uses less stack space
and makes one runtime call instead of two.

If C is very large, the original implementation is used.
The cutoff for "very large" is 1<<16,
following the stack vs heap cutoff used elsewhere.

This kind of comparison occurs in 38 places in the stdlib,
mostly in the net and os packages.

benchmark                     old ns/op     new ns/op     delta
BenchmarkEqEfaceConcrete      29.5          7.92          -73.15%
BenchmarkEqIfaceConcrete      32.1          7.90          -75.39%
BenchmarkNeEfaceConcrete      29.9          7.90          -73.58%
BenchmarkNeIfaceConcrete      35.9          7.90          -77.99%

Fixes #9370.

Change-Id: I7c4555950bcd6406ee5c613be1f2128da2c9a2b7
Reviewed-on: https://go-review.googlesource.com/2096
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>

10 years agocmd/6g, cmd/8g: make 2/3 word sgen more efficient
Josh Bleecher Snyder [Fri, 9 Jan 2015 20:41:47 +0000 (12:41 -0800)]
cmd/6g, cmd/8g: make 2/3 word sgen more efficient

When compiling the stdlib most of the calls
to sgen are for exactly 2 or 3 words:
85% for 6g and 70% for 8g.
Special case them for performance.
This optimization is not relevant to 5g and 9g.

6g

benchmark                old ns/op     new ns/op     delta
BenchmarkCopyFat16       3.25          0.82          -74.77%
BenchmarkCopyFat24       5.47          0.95          -82.63%

8g

benchmark               old ns/op     new ns/op     delta
BenchmarkCopyFat8       3.84          2.42          -36.98%
BenchmarkCopyFat12      4.94          2.15          -56.48%

Change-Id: I8bc60b453f12597dfd916df2d072a7d5fc33ab85
Reviewed-on: https://go-review.googlesource.com/2607
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>

10 years agocmd/6g: allocate fewer new registers in sgen
Josh Bleecher Snyder [Fri, 9 Jan 2015 21:03:55 +0000 (13:03 -0800)]
cmd/6g: allocate fewer new registers in sgen

When possible, generate nodl/nodr directly into DI/SI
rather than going through a temporary register.

CX has already been saved; use it during trailing bytes cleanup.

Change-Id: I4ec6209bcc5d3bfdc927c5c132009bd8d791ada3
Reviewed-on: https://go-review.googlesource.com/2608
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>

10 years agomath/big: implemented Float.Int64, simplified Float.Uint64
Robert Griesemer [Wed, 11 Feb 2015 19:22:45 +0000 (11:22 -0800)]
math/big: implemented Float.Int64, simplified Float.Uint64

Change-Id: Ic270ffa7ec6f6dd4b0a951c64ad965447cce1417
Reviewed-on: https://go-review.googlesource.com/4571
Reviewed-by: Alan Donovan <adonovan@google.com>
10 years agoruntime: move wbuf-related functions to new gcwork.go
Austin Clements [Thu, 12 Feb 2015 14:58:25 +0000 (09:58 -0500)]
runtime: move wbuf-related functions to new gcwork.go

No code modifications.

This is in preparation for improving the wbuf abstraction.

Change-Id: I719543a345c34d079b7e39b251eccd5dd8a07826
Reviewed-on: https://go-review.googlesource.com/4710
Reviewed-by: Rick Hudson <rlh@golang.org>
10 years agoruntime: on Plan 9, zero memory returned to the brk by sysFree
Austin Clements [Thu, 12 Feb 2015 15:37:01 +0000 (10:37 -0500)]
runtime: on Plan 9, zero memory returned to the brk by sysFree

Plan 9's sysFree has an optimization where if the object being freed
is the last object allocated, it will roll back the brk to allow the
memory to be reused by sysAlloc.  However, it does not zero this
"returned" memory, so as a result, sysAlloc can return non-zeroed
memory after a sysFree.  This leads to corruption because the runtime
assumes sysAlloc returns zeroed memory.

Fix this by zeroing the memory returned by sysFree.

Fixes #9846.

Change-Id: Id328c58236eb7c464b31ac1da376a0b757a5dc6a
Reviewed-on: https://go-review.googlesource.com/4700
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: David du Colombier <0intro@gmail.com>
10 years agodoc: update pre-requisites for bootstrapping
Andrew Gerrand [Wed, 11 Feb 2015 01:44:50 +0000 (12:44 +1100)]
doc: update pre-requisites for bootstrapping

Change-Id: Id86994c8692e29f9d073b6322733ce9219887dc3
Reviewed-on: https://go-review.googlesource.com/4520
Run-TryBot: Andrew Gerrand <adg@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
10 years agocmd/gc: allocate non-escaping maps on stack
Dmitry Vyukov [Thu, 29 Jan 2015 16:40:02 +0000 (19:40 +0300)]
cmd/gc: allocate non-escaping maps on stack

Extend escape analysis to make(map[k]v).
If it does not escape, allocate temp buffer for hmap and one bucket on stack.

There are 75 cases of non-escaping maps in std lib.

benchmark                                    old allocs     new allocs     delta
BenchmarkConcurrentStmtQuery                 16161          15161          -6.19%
BenchmarkConcurrentTxQuery                   17658          16658          -5.66%
BenchmarkConcurrentTxStmtQuery               16157          15156          -6.20%
BenchmarkConcurrentRandom                    13637          13114          -3.84%
BenchmarkManyConcurrentQueries               22             20             -9.09%
BenchmarkDecodeComplex128Slice               250            188            -24.80%
BenchmarkDecodeFloat64Slice                  250            188            -24.80%
BenchmarkDecodeInt32Slice                    250            188            -24.80%
BenchmarkDecodeStringSlice                   2250           2188           -2.76%
BenchmarkNewEmptyMap                         1              0              -100.00%
BenchmarkNewSmallMap                         2              0              -100.00%

benchmark                old ns/op     new ns/op     delta
BenchmarkNewEmptyMap     124           55.7          -55.08%
BenchmarkNewSmallMap     317           148           -53.31%

benchmark                old allocs     new allocs     delta
BenchmarkNewEmptyMap     1              0              -100.00%
BenchmarkNewSmallMap     2              0              -100.00%

benchmark                old bytes     new bytes     delta
BenchmarkNewEmptyMap     48            0             -100.00%
BenchmarkNewSmallMap     192           0             -100.00%

Fixes #5449

Change-Id: I24fa66f949d2f138885d9e66a0d160240dc9e8fa
Reviewed-on: https://go-review.googlesource.com/3508
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Dmitry Vyukov <dvyukov@google.com>

10 years agocmd/gc: restore stack frame debugging
Dmitry Vyukov [Wed, 4 Feb 2015 08:26:22 +0000 (11:26 +0300)]
cmd/gc: restore stack frame debugging

Dump frames of functions.
Add function name and var width to output.

Change-Id: Ida06b8def96178fa550ca90836eb4a2509b9e13f
Reviewed-on: https://go-review.googlesource.com/3870
Reviewed-by: Russ Cox <rsc@golang.org>
10 years agoruntime: fix race instrumentation of append
Dmitry Vyukov [Tue, 10 Feb 2015 12:26:07 +0000 (15:26 +0300)]
runtime: fix race instrumentation of append

typedslicecopy is another write barrier that is not
understood by racewalk. It seems quite complex to handle it
in the compiler, so instead just instrument it in runtime.

Update #9796

Change-Id: I0eb6abf3a2cd2491a338fab5f7da22f01bf7e89b
Reviewed-on: https://go-review.googlesource.com/4370
Reviewed-by: Russ Cox <rsc@golang.org>
10 years agocmd/gc: remove several copies of outervalue
Dmitry Vyukov [Tue, 3 Feb 2015 09:48:35 +0000 (12:48 +0300)]
cmd/gc: remove several copies of outervalue

Walk calls it outervalue, racewalk calls it basenod,
isstack does it manually and slightly differently.

Change-Id: Id5b5d32b8faf143fe9d34bd08457bfab6fb33daa
Reviewed-on: https://go-review.googlesource.com/3745
Reviewed-by: Russ Cox <rsc@golang.org>
10 years agocmd/gc: allocate buffers for non-escaping string conversions on stack
Dmitry Vyukov [Fri, 30 Jan 2015 06:14:13 +0000 (09:14 +0300)]
cmd/gc: allocate buffers for non-escaping string conversions on stack

Support the following conversions in escape analysis:
[]rune("foo")
[]byte("foo")
string([]rune{})

If the result does not escape, allocate temp buffer on stack
and pass it to runtime functions.

Change-Id: I1d075907eab8b0109ad7ad1878104b02b3d5c690
Reviewed-on: https://go-review.googlesource.com/3590
Reviewed-by: Russ Cox <rsc@golang.org>
10 years agoruntime: remove obsolete SELinux execmem comment
Brad Fitzpatrick [Thu, 12 Feb 2015 07:20:15 +0000 (23:20 -0800)]
runtime: remove obsolete SELinux execmem comment

We don't have executable memory anymore.

Change-Id: I9835f03a7bcd97d809841ecbed8718b3048bfb32
Reviewed-on: https://go-review.googlesource.com/4681
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Reviewed-by: Dave Cheney <dave@cheney.net>
10 years agoruntime: move all stdFunctions into os1_windows.go (no code changes)
Alex Brainman [Thu, 12 Feb 2015 03:25:59 +0000 (14:25 +1100)]
runtime: move all stdFunctions into os1_windows.go (no code changes)

Change-Id: I40291561a18bed3ca6be9dca12a664bdf28cb2f1
Reviewed-on: https://go-review.googlesource.com/4660
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agoruntime: remove unused signals_windows.h
Alex Brainman [Thu, 12 Feb 2015 01:29:37 +0000 (12:29 +1100)]
runtime: remove unused signals_windows.h

Change-Id: I35fe76661c80ca808a711acf608a23c77aeb0608
Reviewed-on: https://go-review.googlesource.com/4651
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agosyscall: Readlink doesn't handle junction on windows
mattn [Tue, 6 Jan 2015 00:47:37 +0000 (09:47 +0900)]
syscall: Readlink doesn't handle junction on windows

Fixes #9190

Change-Id: I22177687ed834feed165454019d28c11fcbf0fa2
Reviewed-on: https://go-review.googlesource.com/2307
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
10 years agocmd/gc: avoid %#016x, which really means Go's %#014x
Russ Cox [Sat, 7 Feb 2015 11:51:44 +0000 (06:51 -0500)]
cmd/gc: avoid %#016x, which really means Go's %#014x

(In non-Go print formats, the 016 includes the leading 0x prefix.
No one noticed, but we were printing hex numbers with a minimum
of 30 digits, not 32.)

Change-Id: I10ff7a51a567ad7c8440418ac034be9e4b2d6bc1
Reviewed-on: https://go-review.googlesource.com/4592
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: use go.builtin as package prefix, not go%2ebuiltin
Russ Cox [Wed, 11 Feb 2015 03:22:33 +0000 (22:22 -0500)]
cmd/gc: use go.builtin as package prefix, not go%2ebuiltin

This matches all the other pseudo-packages.
The line was simply forgotten.

Change-Id: I278f6cbcfc883ea7efad07f99fc8c853b9b5d274
Reviewed-on: https://go-review.googlesource.com/4591
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: make qsort comparisons totally ordered
Russ Cox [Wed, 11 Feb 2015 03:22:50 +0000 (22:22 -0500)]
cmd/gc: make qsort comparisons totally ordered

Otherwise different qsort implementations might result
in different sort orders and therefore different compiled
object files.

Change-Id: Ie783ba55a55af06941307e150b0c406e0a8128b0
Reviewed-on: https://go-review.googlesource.com/4590
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: remove C subclassing trick from popt.c
Russ Cox [Thu, 5 Feb 2015 10:18:08 +0000 (05:18 -0500)]
cmd/gc: remove C subclassing trick from popt.c

It does not convert to Go well.

Being able to do this just once, instead of 4 times, was the primary
motivation for all the recent refactoring (not that it wasn't overdue).

Still bit-for-bit identical.

Change-Id: Ia01f17948441bf64fa78ec4226f0bb40af0bbaab
Reviewed-on: https://go-review.googlesource.com/3962
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: move reg.c into portable code
Russ Cox [Wed, 4 Feb 2015 00:23:18 +0000 (19:23 -0500)]
cmd/gc: move reg.c into portable code

Now there is only one registerizer shared among all the systems.
There are some unfortunate special cases based on arch.thechar
in reg.c, to preserve bit-for-bit compatibility during the refactoring.
Most are probably bugs one way or another and should be revisited.

Change-Id: I153b435c0eaa05bbbeaf8876822eeb6dedaae3cf
Reviewed-on: https://go-review.googlesource.com/3883
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: remove cgen_asop, no longer used
Russ Cox [Tue, 3 Feb 2015 20:27:54 +0000 (15:27 -0500)]
cmd/gc: remove cgen_asop, no longer used

gc/order.c rewrites OASOP nodes into ordinary assignments.
The back ends never see them anymore.

Change-Id: I268ac8bdc92dccd7123110a21f99ada3ceeb2baa
Reviewed-on: https://go-review.googlesource.com/3882
Reviewed-by: Austin Clements <austin@google.com>
10 years agocmd/gc: factor newly-portable code into gc directory
Russ Cox [Fri, 30 Jan 2015 04:50:10 +0000 (23:50 -0500)]
cmd/gc: factor newly-portable code into gc directory

This isn't everything, but it's a start.
Still producing bit-identical compiler output.

The semantics of the old back ends is preserved,
even when they are probably buggy.
There are some TODOs in gc/gsubr.c to
remove special cases to preserve bugs in 5g and 8g.

Change-Id: I28ae295fbfc94ef9df43e13ab96bd6fc2f194bc4
Reviewed-on: https://go-review.googlesource.com/3802
Reviewed-by: Austin Clements <austin@google.com>
10 years agostrconv: simplified logic resulting in faster float formatting
Robert Griesemer [Wed, 4 Feb 2015 23:07:04 +0000 (15:07 -0800)]
strconv: simplified logic resulting in faster float formatting

benchmark                               old ns/op     new ns/op     delta
BenchmarkFormatFloatDecimal             300           283           -5.67%
BenchmarkFormatFloat                    383           381           -0.52%
BenchmarkFormatFloatExp                 359           357           -0.56%
BenchmarkFormatFloatNegExp              357           358           +0.28%
BenchmarkFormatFloatBig                 468           430           -8.12%
BenchmarkAppendFloatDecimal             104           92.5          -11.06%
BenchmarkAppendFloat                    199           190           -4.52%
BenchmarkAppendFloatExp                 172           167           -2.91%
BenchmarkAppendFloatNegExp              172           169           -1.74%
BenchmarkAppendFloatBig                 280           235           -16.07%
BenchmarkAppendFloat32Integer           104           92.4          -11.15%
BenchmarkAppendFloat32ExactFraction     168           171           +1.79%
BenchmarkAppendFloat32Point             206           199           -3.40%
BenchmarkAppendFloat32Exp               167           167           +0.00%
BenchmarkAppendFloat32NegExp            167           166           -0.60%
BenchmarkAppendFloat64Fixed1            134           129           -3.73%
BenchmarkAppendFloat64Fixed2            144           136           -5.56%
BenchmarkAppendFloat64Fixed3            138           134           -2.90%
BenchmarkAppendFloat64Fixed4            145           138           -4.83%

Change-Id: Ia143840cb34cbd1cebd6b691dd0a45b7264b406c
Reviewed-on: https://go-review.googlesource.com/3920
Reviewed-by: Alan Donovan <adonovan@google.com>
10 years agomath/big: completed Float.Uint64
Robert Griesemer [Wed, 11 Feb 2015 00:38:51 +0000 (16:38 -0800)]
math/big: completed Float.Uint64

Change-Id: Ib3738492a2ec8fc99323e687168b17b7239db6ad
Reviewed-on: https://go-review.googlesource.com/4511
Reviewed-by: Alan Donovan <adonovan@google.com>
10 years agomath/big: add test cases for Float.Abs and Float.Neg
Robert Griesemer [Tue, 10 Feb 2015 22:51:16 +0000 (14:51 -0800)]
math/big: add test cases for Float.Abs and Float.Neg

Change-Id: Ic5f3864bc6d94d60b754e3ccf72b1d40c5c09117
Reviewed-on: https://go-review.googlesource.com/4510
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
10 years agomath/big: implemented Float.Int (truncation of Floats to Ints)
Robert Griesemer [Tue, 10 Feb 2015 22:28:25 +0000 (14:28 -0800)]
math/big: implemented Float.Int (truncation of Floats to Ints)

Change-Id: Id98f7333fe6ae1b64e0469c6d01f02360c1f8f55
Reviewed-on: https://go-review.googlesource.com/4481
Reviewed-by: Alan Donovan <adonovan@google.com>
10 years agomath/big: When result prec == 0, use at least prec == 64 for SetInt, SetRat.
Robert Griesemer [Tue, 10 Feb 2015 19:49:54 +0000 (11:49 -0800)]
math/big: When result prec == 0, use at least prec == 64 for SetInt, SetRat.

This avoids surprises.

Change-Id: Iaae67da2d12e29c4e797ad6313e0895f7ce80cb1
Reviewed-on: https://go-review.googlesource.com/4480
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
10 years agoruntime: cache workbufs on Ms and add consistency checks
Rick Hudson [Fri, 6 Feb 2015 00:58:18 +0000 (19:58 -0500)]
runtime: cache workbufs on Ms and add consistency checks

Add local workbufs to the m struct in order to reduce contention.
Add consistency checks for workbuf ownership.
Chain workbufs through call change to avoid swapping them
to and from the m struct.
Adjust the size of the workbuf so that the mutators can
more frequently pass modifications to the GC thus shifting
some work from the STW mark termination phase to the concurrent
mark phase.

Change-Id: I557b53af34ad9972265e0ed9f5996e52d548563d
Reviewed-on: https://go-review.googlesource.com/3972
Reviewed-by: Austin Clements <austin@google.com>
10 years agoruntime: never show system goroutines in traceback
Dmitry Vyukov [Sat, 7 Feb 2015 12:31:18 +0000 (15:31 +0300)]
runtime: never show system goroutines in traceback

Fixes #9791

g.issystem flag setup races with other code wherever we set it.
Even if we set both in parent goroutine and in the system goroutine,
it is still possible that some other goroutine crashes
before the flag is set. We could pass issystem flag to newproc1,
but we start all goroutines with go nowadays.

Instead look at g.startpc to distinguish system goroutines (similar to topofstack).

Change-Id: Ia3467968dee27fa07d9fecedd4c2b00928f26645
Reviewed-on: https://go-review.googlesource.com/4113
Reviewed-by: Keith Randall <khr@golang.org>
10 years agoreflect: mark map access functions as go:noescape
Dmitry Vyukov [Tue, 3 Feb 2015 08:54:11 +0000 (11:54 +0300)]
reflect: mark map access functions as go:noescape

benchmark                                  old allocs     new allocs     delta
BenchmarkSkipValue                         14914          14202          -4.77%

Change-Id: I40e1fe8843cc6a099a2abfcd814ecc2a2d6a5b1f
Reviewed-on: https://go-review.googlesource.com/3744
Reviewed-by: Keith Randall <khr@golang.org>
10 years agoruntime: fix span unusedsince setup
Dmitry Vyukov [Tue, 10 Feb 2015 15:51:13 +0000 (18:51 +0300)]
runtime: fix span unusedsince setup

Update #8832

This is probably not the root cause of the issue.
Resolve TODO about setting unusedsince on a wrong span.

Change-Id: I69c87e3d93cb025e3e6fa80a8cffba6ad6ad1395
Reviewed-on: https://go-review.googlesource.com/4390
Reviewed-by: Keith Randall <khr@golang.org>
10 years agocmd/dist: fetch version when needed, instead of at init
Austin Clements [Wed, 11 Feb 2015 04:51:25 +0000 (23:51 -0500)]
cmd/dist: fetch version when needed, instead of at init

Currently, if there is a VERSION.cache, running make.bash will set
runtime.theVersion to the revision as of the *last* make.bash run
instead of the current make.bash run.

For example,

$ git rev-parse --short HEAD
5c4a86d
$ ./make.bash
...
$ cat ../VERSION.cache
devel +5c4a86d Tue Feb 10 01:46:30 2015 +0000
$ git checkout a1dbb92
$ ./make.bash
...
$ go version
go version devel +5c4a86d Tue Feb 10 01:46:30 2015 +0000 linux/amd64
$ ./make.bash
...
$ go version
go version devel +a1dbb92 Tue Feb 10 02:31:27 2015 +0000 linux/amd64

This happens because go tool dist reads the potentially stale
VERSION.cache into goversion during early initialization; then cleans,
which deletes VERSION.cache; then builds the runtime using the stale
revision read in to goversion.  It isn't until make later in the build
process, when make.bash invokes go tool dist again, that VERSION.cache
gets updated with the current revision.

To address this, simply don't bother fetching the version until go
tool dist needs it and don't bother caching the value in memory.  This
is more robust since it interacts with cleaning in the expected ways.
Futhermore, there's no downside to eliminating the in-memory cache;
the file system cache is perfectly reasonable for the whole three
times make.bash consults it.

Change-Id: I8c480100e56bb2db0816e8a088177004d9e87973
Reviewed-on: https://go-review.googlesource.com/4540
Reviewed-by: Russ Cox <rsc@golang.org>
10 years agocrypto/x509: allow matchHostnames to work with absolute domain names
rubyist [Tue, 10 Feb 2015 15:24:01 +0000 (10:24 -0500)]
crypto/x509: allow matchHostnames to work with absolute domain names

If an absolute domain name (i.e. ends in a '.' like "example.com.") is used
with ssl/tls, the certificate will be reported as invalid. In matchHostnames,
the host and patterns are split on '.' and if the lengths of the resulting
slices do not match, the function returns false. When splitting an absolute
domain name on '.', the slice will have an extra empty string at the end. This
empty string should be discarded before comparison, if present.

Fixes #9828

Change-Id: I0e39674b44a6f93b5024497e76cf1b550832a61d
Reviewed-on: https://go-review.googlesource.com/4380
Reviewed-by: Adam Langley <agl@golang.org>
TryBot: Adam Langley <agl@golang.org>

10 years agoruntime: don't put container symbols in functab
Keith Randall [Tue, 10 Feb 2015 00:36:25 +0000 (16:36 -0800)]
runtime: don't put container symbols in functab

Container symbols shouldn't be considered as functions in the functab.
Having them present probably messes up function lookup, as you might get
the descriptor of the container instead of the descriptor of the actual
function on the stack.  It also messed up the findfunctab because these
entries caused off-by-one errors in how functab entries were counted.

Normal code is not affected - it only changes (& hopefully fixes) the
behavior for libraries linked as a unit, like:
  net
  runtime/cgo
  runtime/race

Fixes #9804

Change-Id: I81e036e897571ac96567d59e1f1d7f058ca75e85
Reviewed-on: https://go-review.googlesource.com/4290
Reviewed-by: Russ Cox <rsc@golang.org>
10 years agonet: disable WriteMsgUDP tests on nacl, windows (fix build)
Mikio Hara [Tue, 10 Feb 2015 08:21:03 +0000 (17:21 +0900)]
net: disable WriteMsgUDP tests on nacl, windows (fix build)

Change-Id: I695b89ec2b63233d94c49c4a40a57b50350ec67c
Reviewed-on: https://go-review.googlesource.com/4350
TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
10 years agonet: update documentation for WriteMsgUDP
Mikio Hara [Tue, 10 Feb 2015 10:27:29 +0000 (19:27 +0900)]
net: update documentation for WriteMsgUDP

Change-Id: I69f24887601e491d6d722bfeb2952d927df8ad80
Reviewed-on: https://go-review.googlesource.com/4351
Reviewed-by: Ian Lance Taylor <iant@golang.org>
10 years agocmd/pprof/internal/report: fix typo in recognized output unit
Ian Lance Taylor [Mon, 9 Feb 2015 16:32:08 +0000 (08:32 -0800)]
cmd/pprof/internal/report: fix typo in recognized output unit

Fixes #9814.

Change-Id: I1be49efae0648038f590eeca1262037bf1af3df5
Reviewed-on: https://go-review.googlesource.com/4240
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
10 years agomath/big: implemented Frexp, Ldexp, IsInt, Copy, bug fixes, more tests
Robert Griesemer [Tue, 10 Feb 2015 00:59:31 +0000 (16:59 -0800)]
math/big: implemented Frexp, Ldexp, IsInt, Copy, bug fixes, more tests

- Frexp, Ldexp are equivalents to the corresponding math functions.
- Set now has the same prec behavior as the other functions
- Copy is a true assignment (replaces old version of Set)
- Cmp now handles infinities
- more tests

Change-Id: I0d33980c08be3095b25d7b3d16bcad1aa7abbd0f
Reviewed-on: https://go-review.googlesource.com/4292
Reviewed-by: Alan Donovan <adonovan@google.com>
10 years agonet: permit WriteMsgUDP to connected UDP sockets
Nicolas S. Dade [Thu, 5 Feb 2015 02:05:53 +0000 (18:05 -0800)]
net: permit WriteMsgUDP to connected UDP sockets

The sanity checks at the beginning of WriteMsgUDP were too
strict, and did not allow a case sendmsg(2) suppports: sending
to a connected UDP socket.

This fixes the sanity checks. Either the socket is unconnected,
and a destination addresses is required (what all existing callers
must have been doing), or the socket is connected and an explicit
destination address must not be used.

Fixes #9807

Change-Id: I08d4ec3c2bf830335c402acfc0680c841cfcec71
Reviewed-on: https://go-review.googlesource.com/3951
Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com>
10 years agoruntime: simplify and comment some windows code
Alex Brainman [Tue, 13 Jan 2015 23:42:26 +0000 (10:42 +1100)]
runtime: simplify and comment some windows code

Change-Id: I5cedd9e53f4e020aea74d498d0db88d79a95260c
Reviewed-on: https://go-review.googlesource.com/2718
Reviewed-by: Minux Ma <minux@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agonet/http: fix test to check that requests to 'localhost' are not proxied
Rajat Goel [Tue, 10 Feb 2015 01:12:12 +0000 (17:12 -0800)]
net/http: fix test to check that requests to 'localhost' are not proxied

I think the test was meant to test requests to 'localhost:80' instead
of 'localhost:80:80'. It passes even with 'localhost:80:80' because
net.SplitHostPort fails inside useProxy. Please comment if you want to
leave old 'localhost:80' is the list too to check old code path.

Change-Id: Ic4cd21901563449e3d4e2f4c8caf723f4ca15bac
u
Reviewed-on: https://go-review.googlesource.com/4293
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agocmd/go: use current go source code when generating doc.go
Andrew Gerrand [Tue, 10 Feb 2015 02:24:47 +0000 (13:24 +1100)]
cmd/go: use current go source code when generating doc.go

Change-Id: Iad1764707d173a09467fd36e8c49a58147f12219
Reviewed-on: https://go-review.googlesource.com/4320
Reviewed-by: Minux Ma <minux@golang.org>
10 years agoruntime: introduce CPU access functions on windows
Alex Brainman [Wed, 14 Jan 2015 01:25:55 +0000 (12:25 +1100)]
runtime: introduce CPU access functions on windows

This CL introduces new methods for 'context' type, so we can
manipulate its values in an architecture independent way.

Use new methods to replace both 386 and amd64 versions of
dosigprof with single piece of code.

There is more similar code to be converted in the following CLs.

Also remove os_windows_386.go and os_windows_amd64.go. These
contain unused functions.

Change-Id: I28f76aeb97f6e4249843d30d3d0c33fb233d3f7f
Reviewed-on: https://go-review.googlesource.com/2790
Reviewed-by: Minux Ma <minux@golang.org>
10 years agocmd/go: document that -run isn't implemented
Rob Pike [Tue, 10 Feb 2015 00:54:06 +0000 (16:54 -0800)]
cmd/go: document that -run isn't implemented

I am an idiot but the failure to implement this means we can decide
exactly what its design should be for 1.5

Change-Id: Ie2b025fcd899d306ddeddd09d1d0e8f9a99ab7a8
Reviewed-on: https://go-review.googlesource.com/4291
Reviewed-by: Minux Ma <minux@golang.org>
10 years agonet: re-implement Interfaces and InterfaceAddrs for IPNet, IPv6 on Windows
mattn [Mon, 19 Jan 2015 07:56:04 +0000 (16:56 +0900)]
net: re-implement Interfaces and InterfaceAddrs for IPNet, IPv6 on Windows

Fixes #5395

Change-Id: I4322bc8a974d04d9bae6b48c71c5d32d9252973c
Reviewed-on: https://go-review.googlesource.com/3024
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
10 years agocmd/dist: reactivate vfp detection on linux/arm
Dave Cheney [Fri, 6 Feb 2015 00:44:09 +0000 (11:44 +1100)]
cmd/dist: reactivate vfp detection on linux/arm

Fixes #9732
Fixes #9819

Rather than detecting vfp support via catching SIGILL signals,
parse the contents of /proc/cpuinfo.

As the GOARM values for NaCl and freebsd are hard coded, this parsing
logic only needs to support linux/arm.

This change also fixes the nacl/arm build which is broken because the
first stage of nacltest.bash is executed with GOARM=5, embedding that
into 5g.

The second stage of nacltest.bash correctly detects GOARM=7, but this is
ignored as we pass --no-clean at that point, and thus do not replace
the compiler.

Lastyly, include a fix to error message in nacltest.bash

Change-Id: I13f306ff07a99b44b493fade72ac00d0d5097e1c
Reviewed-on: https://go-review.googlesource.com/3981
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agoliblink, runtime: move all references to runtime.tlsg to tls_arm.s
Shenghou Ma [Fri, 6 Feb 2015 07:05:30 +0000 (02:05 -0500)]
liblink, runtime: move all references to runtime.tlsg to tls_arm.s

CL 2118 makes the assumption that all references to runtime.tlsg
should be accompanied by a declaration of runtime.tlsg if its type
should be a normal variable, instead of a placeholder for TLS
relocation.

Because if runtime.tlsg is not declared by the runtime package,
the type of runtime.tlsg will be zero, so fix the check in liblink
to look for 0 instead of STLSBSS (the type will be initialized by
cmd/ld, but cmd/ld doesn't run during assembly).

Change-Id: I691ac5c3faea902f8b9a0b963e781b22e7b269a7
Reviewed-on: https://go-review.googlesource.com/4030
Reviewed-by: David Crawshaw <crawshaw@golang.org>
10 years agomath/big: correct umax
Robert Griesemer [Mon, 9 Feb 2015 19:26:56 +0000 (11:26 -0800)]
math/big: correct umax

Change-Id: I208c8ac44d1a8882d8fdeb18347dc20941e20374
Reviewed-on: https://go-review.googlesource.com/4250
Reviewed-by: Alan Donovan <adonovan@google.com>
10 years agocmd/go: stream test output if parallelism is set to 1.
Rahul Chaudhry [Sat, 7 Feb 2015 01:47:54 +0000 (17:47 -0800)]
cmd/go: stream test output if parallelism is set to 1.

"go test -v" buffers output if more than one package is
being tested to avoid mixing the outputs from multiple
tests running in parallel. It currently enables streaming
if there's only a single package under test.

It is ok to stream output from multiple tests if we know
that they're not going to be running in parallel.

To see the difference: go test -v -p=1 runtime fmt -short

Change-Id: Idc24575c899eac30d553e0bf52b86f90e189392d
Reviewed-on: https://go-review.googlesource.com/4153
Reviewed-by: Ian Lance Taylor <iant@golang.org>
10 years agomath/big: API cleanup
Robert Griesemer [Sat, 7 Feb 2015 00:51:00 +0000 (16:51 -0800)]
math/big: API cleanup

- better and more consistent documentation
- more functions implemented
- more tests

Change-Id: If4c591e7af4ec5434fbb411a48dd0f8add993720
Reviewed-on: https://go-review.googlesource.com/4140
Reviewed-by: Alan Donovan <adonovan@google.com>
10 years agoos: embed "sleep 1" within the test binary itself.
Rahul Chaudhry [Sun, 8 Feb 2015 15:42:10 +0000 (07:42 -0800)]
os: embed "sleep 1" within the test binary itself.

This is an alternative to http://golang.org/cl/4150,
and is motivated by a review comment on that CL.

testKillProcess() tries to build and run the Go equivalent
for "sleep 1". This doesn't work for testing cross compilers
since the Go compiler is not available on the targets. This
change embeds the "sleep 1" functionality within the "os.test"
binary itself.

Change-Id: I6bad513deaa6c9e2704e70319098eb4983f1bb23
Reviewed-on: https://go-review.googlesource.com/4190
Reviewed-by: Ian Lance Taylor <iant@golang.org>
10 years agonet: don't allocate dialer closure if we won't use it
Dmitry Vyukov [Sun, 8 Feb 2015 16:00:43 +0000 (19:00 +0300)]
net: don't allocate dialer closure if we won't use it

When we use dialMulti we also allocate dialSingle closure for no reason.

Change-Id: I074282a9d6e2c2a1063ab311a1b95e10fe65219f
Reviewed-on: https://go-review.googlesource.com/4119
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agocmd/gc: remove dead code
Dmitry Vyukov [Sun, 8 Feb 2015 16:07:48 +0000 (19:07 +0300)]
cmd/gc: remove dead code

Change-Id: Ib46a42fc873066b1cc00368fe43648f08dce48bd
Reviewed-on: https://go-review.googlesource.com/4200
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agoencoding/xml: add more EncodeToken tests.
Nigel Tao [Mon, 9 Feb 2015 02:42:45 +0000 (13:42 +1100)]
encoding/xml: add more EncodeToken tests.

There are no behavior changes in this CL, only specifying the status
quo. A follow-up CL, https://go-review.googlesource.com/#/c/2660/, will
change the EncodeToken behavior.

Change-Id: I6ecbcfb05ae681de71fa1099d054df2826ed4acb
Reviewed-on: https://go-review.googlesource.com/4167
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agocmd/5g, cmd/6g, cmd/8g, cmd/9g: clear Addr parameter in sudoaddable
Shenghou Ma [Thu, 5 Feb 2015 04:38:45 +0000 (23:38 -0500)]
cmd/5g, cmd/6g, cmd/8g, cmd/9g: clear Addr parameter in sudoaddable

The Addr might be a stack variable with uninitialized fields.

Fixes #9777.

Change-Id: I799786e3d8b2e17e069725bc66a076cf9ca11f93
Signed-off-by: Shenghou Ma <minux@golang.org>
Reviewed-on: https://go-review.googlesource.com/3932
Reviewed-by: Dave Cheney <dave@cheney.net>
Reviewed-by: Keith Randall <khr@golang.org>
10 years agosort: fixed small typo in comments
Florin Patan [Sun, 8 Feb 2015 23:27:38 +0000 (00:27 +0100)]
sort: fixed small typo in comments

There was a small typo in the comment before the Stable function.

Change-Id: Ia6fa5272aa7869124a637d2eeda81c4f35ef46c8
Reviewed-on: https://go-review.googlesource.com/4201
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agoBuild fix for plan9 after 8bf13838eb21.
David Symonds [Sun, 8 Feb 2015 22:26:56 +0000 (09:26 +1100)]
Build fix for plan9 after 8bf13838eb21.

Change-Id: I66d923abbef13ba35c76c6f6da5b14c6d534127c
Reviewed-on: https://go-review.googlesource.com/4165
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Reviewed-by: David du Colombier <0intro@gmail.com>
10 years agotime: return informative errors when failing to load timezone data.
David Symonds [Fri, 6 Feb 2015 05:58:07 +0000 (16:58 +1100)]
time: return informative errors when failing to load timezone data.

If we cannot load timezone information for a reason other than the
zoneinfo file not existing, return it since that will be much more
useful in debugging failures than "unknown time zone XYZ".

Fixes #9723.

Change-Id: I3aa5774859cec28e584d16bcc1fef0705d95288c
Reviewed-on: https://go-review.googlesource.com/3984
Reviewed-by: Ian Lance Taylor <iant@golang.org>
10 years agoos, syscall: revert Yosemite readdir workaround
Brad Fitzpatrick [Sun, 8 Feb 2015 20:19:20 +0000 (12:19 -0800)]
os, syscall: revert Yosemite readdir workaround

Reverts https://golang.org/cl/119530044 (OS X 10.10 Yosemite beta
14A299l workaround), since it was fixed in the final Yosemite release.

I verified that the C program http://swtch.com/~rsc/readdirbug.c
passes on Yosemite.

Adds a new test to the os package too, to verify that reading a
regular file as a directory fails.

Fixes #9789 (ReadDir: no error if dirname is a file)

Change-Id: I75286cef88fbb2ebccf045b479e33c810749dcbc
Reviewed-on: https://go-review.googlesource.com/4164
Reviewed-by: Dave Cheney <dave@cheney.net>
10 years agoRevert "cmd/api: treat a hex-y VERSION as devel and permit API changes"
David Symonds [Mon, 15 Dec 2014 00:08:37 +0000 (11:08 +1100)]
Revert "cmd/api: treat a hex-y VERSION as devel and permit API changes"

This reverts commit 11d1c05.
See #9296 for details.

Change-Id: I89a36351cb007836662f28a611af5616818b95fe
Reviewed-on: https://go-review.googlesource.com/1536
Reviewed-by: Minux Ma <minux@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agogofmt/doc: gofmt -s output may not be backward compatible
mattyw [Sat, 7 Feb 2015 02:28:20 +0000 (10:28 +0800)]
gofmt/doc: gofmt -s output may not be backward compatible

Change-Id: If697ab554e6cb5545d99c6b103ed8bc54f69ed48
Reviewed-on: https://go-review.googlesource.com/4161
Reviewed-by: Andrew Gerrand <adg@golang.org>
10 years agoinclude/u.h: fix name clash of REG_R* on solaris
Shenghou Ma [Sat, 7 Feb 2015 23:46:40 +0000 (18:46 -0500)]
include/u.h: fix name clash of REG_R* on solaris

Fixes build for solaris.

Change-Id: Ic6ffab36df9bd68fc38b258f1484a29fa2a0cd39
Reviewed-on: https://go-review.googlesource.com/4180
Reviewed-by: Aram Hăvărneanu <aram@mgk.ro>
10 years agonet/smtp: document SendMail more
Brad Fitzpatrick [Sat, 7 Feb 2015 21:32:35 +0000 (13:32 -0800)]
net/smtp: document SendMail more

Fixes #9776

Change-Id: I53741fd970244bbfa6874adcb4f1e3d0e7de386b
Reviewed-on: https://go-review.googlesource.com/4162
Reviewed-by: Andrew Gerrand <adg@golang.org>
10 years agoencoding/xml: avoid an allocation for tags without attributes
Brian Smith [Sat, 7 Feb 2015 03:51:13 +0000 (03:51 +0000)]
encoding/xml: avoid an allocation for tags without attributes

Before, an array of size 4 would always be allocated even if a tag
doesn't have any attributes. Now that array is allocated only if
needed.

benchmark              old allocs     new allocs     delta
BenchmarkUnmarshal     191            176            -8.5%

Change-Id: I4d214b228883d0a6e892c0d6eb00dfe2da84c116
Reviewed-on: https://go-review.googlesource.com/4160
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agotesting: pad benchmark names to align results
Håvard Haugen [Wed, 14 Jan 2015 21:31:59 +0000 (22:31 +0100)]
testing: pad benchmark names to align results

Fixes #8780

Change-Id: I09cf01ff9722eed49086992a12774f2de81d16f2
Reviewed-on: https://go-review.googlesource.com/2840
Reviewed-by: Andrew Gerrand <adg@golang.org>
10 years agoliblink: fix warnings on Plan 9
David du Colombier [Sat, 7 Feb 2015 12:26:28 +0000 (13:26 +0100)]
liblink: fix warnings on Plan 9

warning: src/liblink/list5.c:171 format mismatch lld INT, arg 4
warning: src/liblink/list9.c:175 format mismatch lld INT, arg 4
warning: src/liblink/list6.c:211 format mismatch lld INT, arg 4
warning: src/liblink/list8.c:205 format mismatch lld INT, arg 4

Change-Id: I745ea852d8b58ecbbd32723e2a67aa784a729ff8
Reviewed-on: https://go-review.googlesource.com/4112
Reviewed-by: Minux Ma <minux@golang.org>
10 years agobuild: fix race.bat flags
Brad Fitzpatrick [Sat, 7 Feb 2015 01:52:24 +0000 (17:52 -0800)]
build: fix race.bat flags

The old C-based dist accepted merged flags (-wp) but the Go-based dist
requires -w -p

This should get the Windows race builder running properly, along with
https://go-review.googlesource.com/#/c/4132/

Update #8640

Change-Id: Ic17bbe9ea6c8b3d3e9b29f94e234d014f2926439
Reviewed-on: https://go-review.googlesource.com/4133
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
10 years agoos/signal, runtime: implement notes on Plan 9
David du Colombier [Thu, 22 Jan 2015 22:38:29 +0000 (23:38 +0100)]
os/signal, runtime: implement notes on Plan 9

This change is an implementation of the signal
runtime and os/signal package on Plan 9.

Contrary to Unix, on Plan 9 a signal is called
a note and is represented by a string.

For this reason, the sigsend and signal_recv
functions had to be reimplemented specifically
for Plan 9.

In order to reuse most of the code and internal
interface of the os/signal package, the note
strings are mapped to integers.

Thanks to Russ Cox for the early review.

Change-Id: I95836645efe21942bb1939f43f87fb3c0eaaef1a
Reviewed-on: https://go-review.googlesource.com/2164
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
10 years agoruntime: skip the gdb test if -iex is not supported
Shenghou Ma [Fri, 6 Feb 2015 19:33:44 +0000 (14:33 -0500)]
runtime: skip the gdb test if -iex is not supported

It turns out -iex argument is not supported by all gdb versions,
but as we need to add the auto-load safe path before loading the
inferior, test -iex support first and skip the test if it's not
available.

We should still update our builders though.

Change-Id: I355697de51baf12162ba6cb82f389dad93f93dc5
Reviewed-on: https://go-review.googlesource.com/4070
Reviewed-by: Ian Lance Taylor <iant@golang.org>
10 years agocmd/ld: restore .debug_gdb_script section after runtime reorganization
Shenghou Ma [Fri, 16 Jan 2015 06:23:56 +0000 (01:23 -0500)]
cmd/ld: restore .debug_gdb_script section after runtime reorganization

On some systems, gdb refuses to load Python plugin from arbitrary
paths, so we have to add $GOROOT/src/runtime to auto-load-safe-path
in the gdb script test.

Change-Id: Icc44baab8d04a65bd21ceac2ab8ddb13c8d083e8
Reviewed-on: https://go-review.googlesource.com/2905
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
10 years agonet: document that user shouldn't modify returned Addr
Shenghou Ma [Tue, 3 Feb 2015 17:59:40 +0000 (12:59 -0500)]
net: document that user shouldn't modify returned Addr

Ideally, those methods should return a copy of the Addr, but
due to the Go 1 API guarantee, we cannot make that change now:
there might exist client code that uses the returned Addr as
map index and thus relies on the fact that different invocation
of the method returns the same pointer. Changing this behavior
will lead to hidden behaviour change in those programs.

Update #9654.

Change-Id: Iad4235f2ed7789b3a3c8e0993b9718cf0534ea2b
Reviewed-on: https://go-review.googlesource.com/3851
Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
10 years agocmd/gc: eliminate dead code in switch statements
Josh Bleecher Snyder [Thu, 5 Feb 2015 23:38:53 +0000 (15:38 -0800)]
cmd/gc: eliminate dead code in switch statements

Ordinary switch statements are rewritten
into a sequence of if statements.
Staticly dead cases were not being eliminated
because the rewrite introduced a temporary,
which hid the fact that the case was a constant.
Stop doing that.

This eliminates dead code in the standard library at:

runtime/cgocall.go:219
runtime/cgocall.go:269
debug/gosym/pclntab.go:175
debug/macho/file.go:208
math/big/nat.go:635
math/big/nat.go:850
math/big/nat.go:1058
cmd/pprof/internal/commands/commands.go:86
net/sock_bsd.go:19
cmd/go/build.go:2657
cmd/go/env.go:90

Fixes #9608.

Change-Id: Ic23a05dfbb1ad91d5f62a6506b35a13e51b33e38
Reviewed-on: https://go-review.googlesource.com/3980
Reviewed-by: Keith Randall <khr@golang.org>
10 years agoruntime: speed up eqstring
Josh Bleecher Snyder [Thu, 5 Feb 2015 16:23:14 +0000 (08:23 -0800)]
runtime: speed up eqstring

eqstring does not need to check the length of the strings.
Other architectures were done in a separate commit.

While we're here, add a pointer equality check.

Change-Id: Id2c8616a03a7da7037c1e9ccd56a549fc952bd98
Reviewed-on: https://go-review.googlesource.com/3956
Reviewed-by: Keith Randall <khr@golang.org>
10 years agoruntime: speed up eqstring
Josh Bleecher Snyder [Thu, 5 Feb 2015 01:31:37 +0000 (17:31 -0800)]
runtime: speed up eqstring

eqstring does not need to check the length of the strings.

6g

benchmark                              old ns/op     new ns/op     delta
BenchmarkCompareStringEqual            7.03          6.14          -12.66%
BenchmarkCompareStringIdentical        3.36          3.04          -9.52%

5g

benchmark                                 old ns/op     new ns/op     delta
BenchmarkCompareStringEqual               238           232           -2.52%
BenchmarkCompareStringIdentical           90.8          80.7          -11.12%

The equivalent PPC changes are in a separate commit
because I don't have the hardware to test them.

Change-Id: I292874324b9bbd9d24f57a390cfff8b550cdd53c
Reviewed-on: https://go-review.googlesource.com/3955
Reviewed-by: Keith Randall <khr@golang.org>
10 years agomath/big: handling of +/-Inf and zero precision, enable zero values
Robert Griesemer [Fri, 6 Feb 2015 01:21:48 +0000 (17:21 -0800)]
math/big: handling of +/-Inf and zero precision, enable zero values

- clarified representation of +/-Inf
- only 0 and Inf values can have 0 precision
- a zero precision value used as result value takes the max precision
  of the arguments (to be fine-tuned for setters)
- the zero precision approach makes Float zero values possible
  (they represent +0)
- more tests

Missing: Filling in the blanks. More tests.

Change-Id: Ibb4f97e12e1f356c3085ce80f3464e97b82ac130
Reviewed-on: https://go-review.googlesource.com/4000
Reviewed-by: Alan Donovan <adonovan@google.com>