1
0
mirror of https://github.com/golang/go synced 2024-11-23 19:30:05 -07:00
Commit Graph

20655 Commits

Author SHA1 Message Date
Russ Cox
527ae57e65 cmd/5g, cmd/8g: registerize small structs and arrays
cmd/6g has been doing this for a long time.

Arrays are still problematic on 5g because the addressing
for t[0] where local var t has type [3]uintptr takes the address of t.
That's issue 8125.

Fixes #8123.

LGTM=josharian
R=josharian, dave
CC=golang-codereviews
https://golang.org/cl/102890046
2014-08-24 21:16:24 -04:00
Russ Cox
75b72b1b27 cmd/gc: re-enable IfacePointerOnly
CL 130240043 did this but broke ARM, because
it made newErrorCString start allocating, so we rolled
it back in CL 133810043.

CL 133820043 removed that allocation.

Try again.

Fixes #8405.

LGTM=bradfitz, dave
R=golang-codereviews, bradfitz
CC=dave, golang-codereviews, r
https://golang.org/cl/133830043
2014-08-24 20:31:45 -04:00
Matthew Dempsky
2a679f8e3a cmd/link: fix testdata generation
Fixes #8494.

LGTM=rsc
R=golang-codereviews, gobot, rsc, evankroske
CC=golang-codereviews
https://golang.org/cl/123040043
2014-08-24 20:31:16 -04:00
Russ Cox
6c67dd90f7 runtime: remove some overuse of uintptr/unsafe.Pointer
Now 'go vet runtime' only shows:

        malloc.go:200: possible misuse of unsafe.Pointer
        malloc.go:214: possible misuse of unsafe.Pointer
        malloc.go:250: possible misuse of unsafe.Pointer
        stubs.go:167: possible misuse of unsafe.Pointer

Those are all unavoidable.

LGTM=josharian
R=golang-codereviews, dvyukov, josharian
CC=dave, golang-codereviews
https://golang.org/cl/135730043
2014-08-24 20:28:29 -04:00
Rob Pike
7dc25960b4 cmd/yacc: remove Makefile and build expr using go generate
It now serves as an example for go generate as well as for yacc.

NOTE: Depends on go generate, which is not yet checked in.
This is a proof of concept of the approach.
That is https://golang.org/cl/125580044.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/125620044
2014-08-24 11:34:45 -07:00
Rob Pike
41fc05d023 cmd/go: add go generate
First cut.

Works well enough to support yacc via
        https://golang.org/cl/125620044.

LGTM=alex.brainman, rsc
R=rsc, alex.brainman
CC=golang-codereviews
https://golang.org/cl/125580044
2014-08-24 11:34:12 -07:00
Rob Pike
cbf351a0f2 doc/go1.4.txt: go generate
CC=golang-codereviews
https://golang.org/cl/132890043
2014-08-24 11:33:32 -07:00
Russ Cox
22af2b8ee0 runtime: fix arm build
TBR=dvyukov
CC=golang-codereviews
https://golang.org/cl/131150043
2014-08-24 14:04:10 -04:00
Dmitriy Vyukov
a6950fe0f9 runtime: convert synchronous semaphores to Go
LGTM=rsc
R=golang-codereviews, khr, rsc
CC=golang-codereviews, rlh
https://golang.org/cl/130340043
2014-08-24 12:41:23 +04:00
Keith Randall
9a1e142bbc runtime: convert channel operations to Go, part 1 (chansend1).
LGTM=dvyukov
R=dvyukov, khr
CC=golang-codereviews
https://golang.org/cl/127460044
2014-08-24 12:31:03 +04:00
Dmitriy Vyukov
7f223e3b3b runtime: fix races on mheap.allspans
This is based on the crash dump provided by Alan
and on mental experiments:

sweep 0 74
fatal error: gc: unswept span
runtime stack:
runtime.throw(0x9df60d)
markroot(0xc208002000, 0x3)
runtime.parfordo(0xc208002000)
runtime.gchelper()

I think that when we moved all stacks into heap,
we introduced a bunch of bad data races. This was later
worsened by parallel stack shrinking.

Observation 1: exitsyscall can allocate a stack from heap at any time (including during STW).
Observation 2: parallel stack shrinking can (surprisingly) grow heap during marking.
Consider that we steadily grow stacks of a number of goroutines from 8K to 16K.
And during GC they all can be shrunk back to 8K. Shrinking will allocate lots of 8K
stacks, and we do not necessary have that many in heap at this moment. So shrinking
can grow heap as well.

Consequence: any access to mheap.allspans in GC (and otherwise) must take heap lock.
This is not true in several places.

Fix this by protecting accesses to mheap.allspans and introducing allspans cache for marking,
similar to what we use for sweeping.

LGTM=rsc
R=golang-codereviews, rsc
CC=adonovan, golang-codereviews, khr, rlh
https://golang.org/cl/126510043
2014-08-24 12:05:07 +04:00
Dmitriy Vyukov
b91223edd1 runtime: cache unrolled GC bitmask
Cache unrolled GC bitmask for types up to 64/32K on 64/32-bit systems,
this corresponds to up to 4K cached bitmask.
Perf builders say that 2% of time is spent in unrollgcproginplace_m/unrollgcprog1
on http benchmark:
http://goperfd.appspot.com/log/f42045f45bf61a0da53b724a7c8567824a0ad6c9

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews, khr, rlh
https://golang.org/cl/122680043
2014-08-24 12:04:51 +04:00
Dmitriy Vyukov
651d0cf204 runtime: convert sigqueue to Go
LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews, khr
https://golang.org/cl/132090043
2014-08-24 11:50:37 +04:00
Dmitriy Vyukov
98bebcc90a runtime: convert parfor to Go
LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews, khr
https://golang.org/cl/132100043
2014-08-24 11:47:06 +04:00
Russ Cox
48452a276d runtime: adjust errorCString definition to avoid allocation
The low-level implementation of divide on ARM assumes that
it can panic with an error created by newErrorCString without
allocating. If we make interface data words require pointer values,
the current definition would require an allocation when stored
in an interface. Changing the definition to use unsafe.Pointer
instead of uintptr avoids the allocation. This change is okay
because the field really is a pointer (to a C string in rodata).

Update #8405.

This should make CL 133830043 safe to try again.

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=dave, golang-codereviews, r
https://golang.org/cl/133820043
2014-08-23 23:01:59 -04:00
Dave Cheney
5b70b71219 undo CL 130240043 / b09f70c301a5
This change broke divmod.go on all arm platforms.

««« original CL description
cmd/gc: change interface representation: only pointers in data word

Note that there are various cleanups that can be made if we keep
this change, but I do not want to start making changes that
depend on this one until the 1.4 cycle closes.

Fixes #8405.

LGTM=r
R=golang-codereviews, adg, r, bradfitz
CC=golang-codereviews, iant
https://golang.org/cl/130240043
»»»

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/133810043
2014-08-23 21:52:17 -04:00
Dave Cheney
32b3a48ea8 runtime: convert float64toint64, float64touint64 to Go
This is a very dumb translation to keep the code as close to the original C as possible.

LGTM=rsc
R=khr, minux, rsc, josharian
CC=golang-codereviews
https://golang.org/cl/126490043
2014-08-23 23:38:31 +00:00
Russ Cox
950ad4fa2b cmd/gc: change interface representation: only pointers in data word
Note that there are various cleanups that can be made if we keep
this change, but I do not want to start making changes that
depend on this one until the 1.4 cycle closes.

Fixes #8405.

LGTM=r
R=golang-codereviews, adg, r, bradfitz
CC=golang-codereviews, iant
https://golang.org/cl/130240043
2014-08-23 19:24:44 -04:00
Dmitriy Vyukov
71ecd16bf5 runtime: remove unused var
LGTM=bradfitz
R=daniel.morsing, bradfitz
CC=golang-codereviews
https://golang.org/cl/130500044
2014-08-23 21:11:57 +04:00
Daniel Morsing
6ed58c2962 runtime: run newproc1 on M stack.
This makes newproc invisible to the GC. This is a pretty simple change since parts of newproc already depends on being run on the M stack.

LGTM=dvyukov
R=golang-codereviews, dvyukov
CC=golang-codereviews, khr
https://golang.org/cl/129520043
2014-08-23 15:42:30 +01:00
Dmitriy Vyukov
d2165672ca runtime: fix futex notes
LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/126540043
2014-08-22 22:22:16 +04:00
Dmitriy Vyukov
afb2260491 runtime: convert note to Go
Note is required for timers and heap scavenger.

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews, khr, rlh
https://golang.org/cl/128620043
2014-08-22 22:13:01 +04:00
Dmitriy Vyukov
f4485784f0 runtime: please vet
The current code is correct, but vet does not understand it:
asm_amd64.s:963: [amd64] invalid MOVL of ret+0(FP); int64 is 8-byte value
asm_amd64.s:964: [amd64] invalid offset ret+4(FP); expected ret+0(FP)

LGTM=minux
R=golang-codereviews, minux
CC=golang-codereviews
https://golang.org/cl/125200044
2014-08-22 21:27:25 +04:00
Dmitri Shuralyov
9368d6ccbf cmd/gofmt: fix error on partial Go code ending with line comment.
Fix issue by always appending newline after user input, before
the closing curly bracket. The adjust func is modified to remove
this new newline.

Add test case (it fails before CL, passes after).

Fixes #8411.

LGTM=gri
R=golang-codereviews, bradfitz, josharian, gri
CC=golang-codereviews
https://golang.org/cl/124700043
2014-08-22 10:18:00 -07:00
Josh Bleecher Snyder
0be59730fd runtime: add Go symtab implementation
LGTM=khr
R=khr, dvyukov, dave
CC=golang-codereviews, rsc
https://golang.org/cl/124300044
2014-08-22 08:41:32 -07:00
Dave Cheney
3d3d539083 path, path/filepath: remove dead code
Fixes #8503.

Thanks to no.smile.face for the original report.

LGTM=bradfitz, r, ruiu
R=bradfitz, ruiu, r
CC=golang-codereviews
https://golang.org/cl/132730043
2014-08-22 22:21:41 +10:00
Dave Cheney
84b70df44c misc/nacl: fix build
Add gofmt.go and gofmt_test.go as they are part of the test data set.

See CL 130440043.

LGTM=dvyukov
R=golang-codereviews, dvyukov
CC=golang-codereviews
https://golang.org/cl/132820044
2014-08-22 18:36:01 +10:00
Dmitriy Vyukov
0065cbe5d0 syscall: fix nacl build
Timer callback does not accept now as first arg anymore.

LGTM=dave
R=golang-codereviews, dave
CC=golang-codereviews
https://golang.org/cl/126530043
2014-08-22 11:46:10 +04:00
Alex Brainman
e6f0b74667 path/filepath: make Abs handle paths like c:a.txt properly
Fixes #8145.

LGTM=r
R=golang-codereviews, r
CC=golang-codereviews
https://golang.org/cl/126440043
2014-08-22 17:14:42 +10:00
Robert Griesemer
67812a7cd9 cmd/gofmt: make test files self-describing
1) Interpret a comment of the form

//gofmt <flags>

in test files to drive the respective
gofmt command. Eliminates the need to
enumerate all test files in the test
harness.

2) Added -update flag to make it easier
to update test cases.

LGTM=josharian
R=golang-codereviews, josharian
CC=golang-codereviews
https://golang.org/cl/130440043
2014-08-21 17:25:13 -07:00
Andrew Gerrand
bc64c07825 sync: be more explicit in WaitGroup docs
Fixes #8543.

LGTM=dvyukov, r
R=rsc, r
CC=dvyukov, golang-codereviews
https://golang.org/cl/123580043
2014-08-22 09:53:44 +10:00
Dave Cheney
f129370b3e cmd/ld: fix undefined behaviour in pcln.c
Update #8527

Fixes, src/cmd/6l/../ld/pcln.c:93:18: runtime error: left shift of negative value -2

LGTM=r
R=golang-codereviews, r
CC=golang-codereviews
https://golang.org/cl/127440043
2014-08-22 09:10:33 +10:00
Rob Pike
ca2db2067f A+C: Fatih Arslan (individual CLA)
Generated by a+c.

R=gobot
CC=golang-codereviews
https://golang.org/cl/130430043
2014-08-21 15:44:03 -07:00
Robert Griesemer
32a092a885 cmd/gofmt: remove testdata/*.gofmt files
This files were added accidentally and are
not required for running the tests (they
are produced by failing tests for easier
debugging).

LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/131030044
2014-08-21 14:54:27 -07:00
Rémy Oudompheng
a9cef4952f runtime: give an explicit name to profiling Bucket sub-structs.
Fixes compilation of runtime on Solaris where the inner struct
was not called "_4_".

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/129460043
2014-08-21 22:34:00 +02:00
Alberto Donizetti
5e70140521 time: removed from tests now obsolete assumption about Australian tz abbreviations
Australian timezones abbreviation for standard and daylight saving time were recently
changed from EST for both to AEST and AEDT in the icann tz database (see changelog
on www.iana.org/time-zones).

A test in the time package was written to check that the ParseInLocation function
understand that Feb EST and Aug EST are different time zones, even though they are
both called EST. This is no longer the case, and the Date function now returns
AEST or AEDT for australian tz on every Linux system with an up to date tz database
(and this makes the test fail).

Since I wasn't able to find another country that 1) uses daylight saving and 2) has
the same abbreviation for both on tzdata, I changed the test to make sure that
ParseInLocation does not get confused when it parses, in different locations, two
dates with the same abbreviation (this was suggested in the mailing list).

Fixes #8547.

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/130920043
2014-08-21 10:35:43 -07:00
Brad Fitzpatrick
b9cd8f08c7 A+C: Alberto Donizetti (individual CLA)
Generated by a+c.

R=gobot
CC=golang-codereviews
https://golang.org/cl/125660043
2014-08-21 10:34:02 -07:00
Josh Bleecher Snyder
d27dfd2152 cmd/api: reduce stutter in runtime type stubs
LGTM=khr
R=khr
CC=dvyukov, golang-codereviews
https://golang.org/cl/132770044
2014-08-21 10:16:49 -07:00
Mark Theunissen
1a1d43239e net/http/httputil: Pass a Logger to ReverseProxy, allowing the user to control logging.
Fixes #8553.

LGTM=bradfitz
R=golang-codereviews, dave, bradfitz
CC=golang-codereviews
https://golang.org/cl/132750043
2014-08-21 10:16:34 -07:00
Brad Fitzpatrick
b2cc08b18d A+C: Mark Theunissen (individual CLA)
Generated by a+c.

R=gobot
CC=golang-codereviews
https://golang.org/cl/126500044
2014-08-21 10:15:19 -07:00
Dmitriy Vyukov
ae875e040c runtime: convert lfstack to Go
It is called from Go only in tests.

LGTM=khr
R=golang-codereviews, khr
CC=golang-codereviews, rlh, rsc
https://golang.org/cl/125610043
2014-08-21 21:10:45 +04:00
Dmitriy Vyukov
31e4ad5846 runtime: remove now arg from timer callback
Cleanup before converting to Go.
Fortunately nobody using it, because it is incorrect:
monotonic runtime time instead of claimed real time.

LGTM=khr
R=golang-codereviews, khr
CC=golang-codereviews, rsc
https://golang.org/cl/129480043
2014-08-21 21:10:30 +04:00
Dmitriy Vyukov
684de04118 runtime: convert common scheduler functions to Go
These are required for chans, semaphores, timers, etc.

LGTM=khr
R=golang-codereviews, khr
CC=golang-codereviews, rlh, rsc
https://golang.org/cl/123640043
2014-08-21 20:41:09 +04:00
Mikio Hara
6b112c24db net: fix typo
LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/128500043
2014-08-21 17:53:45 +09:00
Dmitriy Vyukov
1f5800673b cmd/gc: fix undefined behavior
UndefinedBehaviorSanitizer claims it is UB in C:
src/cmd/gc/racewalk.c:422:37: runtime error: member access within null pointer of type 'Node' (aka 'struct Node')
src/cmd/gc/racewalk.c:423:37: runtime error: member access within null pointer of type 'Node' (aka 'struct Node')

LGTM=rsc
R=dave, rsc
CC=golang-codereviews
https://golang.org/cl/125570043
2014-08-21 12:34:26 +04:00
Dmitriy Vyukov
99e9bac8c4 runtime: init GC later
Init GC later as it needs to read GOGC env var.
Fixes #8562.

LGTM=daniel.morsing, rsc
R=golang-codereviews, daniel.morsing, rsc
CC=golang-codereviews, khr, rlh
https://golang.org/cl/130990043
2014-08-21 11:55:05 +04:00
Dmitriy Vyukov
a0dbbeae67 runtime: fix deadlock when gctrace
Calling ReadMemStats which does stoptheworld on m0 holding locks
was not a good idea.
Stoptheworld holding locks is a recipe for deadlocks (added check for this).
Stoptheworld on g0 may or may not work (added check for this as well).
As far as I understand scavenger will print incorrect numbers now,
as stack usage is not subtracted from heap. But it's better than deadlocking.

LGTM=khr
R=golang-codereviews, rsc, khr
CC=golang-codereviews, rlh
https://golang.org/cl/124670043
2014-08-21 11:46:53 +04:00
Dmitriy Vyukov
e249b0ffee cmd/api: add missing runtime struct
Fixes build.

TBR=khr
R=golang-codereviews
CC=golang-codereviews, khr
https://golang.org/cl/130390044
2014-08-21 11:43:58 +04:00
Rémy Oudompheng
04487d5612 runtime: convert MemProfile, BlockProfile, ThreadCreateProfile to Go.
LGTM=khr
R=golang-codereviews, bradfitz, khr
CC=golang-codereviews
https://golang.org/cl/123680043
2014-08-21 08:07:42 +02:00
Josh Bleecher Snyder
cccd66c6c4 runtime: remove unused variable
LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/128230047
2014-08-20 14:36:28 -07:00