1
0
mirror of https://github.com/golang/go synced 2024-10-01 01:28:32 -06:00
Commit Graph

20297 Commits

Author SHA1 Message Date
Russ Cox
503bcd464e runtime: use C for readgstatus, goroutine status values
When this code was written, there was no way for Go to
reuse the C function and enum values. Now there is.

LGTM=bradfitz
R=rlh, bradfitz
CC=dvyukov, golang-codereviews, iant, khr, r
https://golang.org/cl/139150045
2014-09-04 14:19:50 -04:00
Russ Cox
81ed684a71 runtime: reconvert sigqueue.goc from C to Go
The original conversion in CL 132090043 cut up
the function in an attempt to avoid converting most
of the code to Go. This contorts the control flow.

While debugging the onM signal stack bug,
I reconverted sigqueue.goc in its entirety.
This restores the original control flow, which is
much easier to understand.

The current conversion is correct, it's just complex
and will be hard to maintain. The new one is as
readable as the original code.

I uploaded sigqueue.goc as the initial copy of
sigqueue.go in the CL, so if you view the diffs
of sigqueue.go comparing against patch set 2 [sic]
it will show the actual starting point.

For example:
https://golang.org/cl/136160043/diff2/20001:60001/src/pkg/runtime/sigqueue.go

LGTM=dvyukov, iant
R=golang-codereviews, dvyukov, iant
CC=golang-codereviews, khr, r
https://golang.org/cl/136160043
2014-09-04 13:51:12 -04:00
Robert Griesemer
43345a118b go/parser: initialize file set even in only some tests are run
Without this fix, some tests crashed (e.g. go test -run Invalid).

LGTM=adonovan
R=adonovan
CC=golang-codereviews
https://golang.org/cl/133580043
2014-09-04 10:43:03 -07:00
David Crawshaw
fa9f3058e0 androidtest.bash: drop noisy adb sync output
LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/138070043
2014-09-04 13:39:51 -04:00
Dmitriy Vyukov
97fdfdb52c runtime: fix solaris netpoll
TBR=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/141030043
2014-09-04 11:34:01 +04:00
Dmitriy Vyukov
29225211e1 runtime: fix netbsd build
TBR=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/140220043
2014-09-04 11:31:39 +04:00
Mikio Hara
d3a2021f71 runtime: fix typos
LGTM=dvyukov
R=dvyukov
CC=golang-codereviews
https://golang.org/cl/141000043
2014-09-04 16:23:37 +09:00
David du Colombier
b1d0152997 runtime: fix Plan 9 build
LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/138050043
2014-09-04 08:36:18 +02:00
Dmitriy Vyukov
1b47af2199 runtime: fix arm build
TBR=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/140990043
2014-09-04 10:16:57 +04:00
Dmitriy Vyukov
91a670d179 runtime: convert netpoll to Go
The common code is converted, epoll and kqueue are converted.
Windows and solaris are still C.

LGTM=rsc
R=golang-codereviews, rsc, dave
CC=golang-codereviews, iant, khr, rsc
https://golang.org/cl/132910043
2014-09-04 10:04:04 +04:00
Russ Cox
dae8038639 runtime: fix nacl/amd64p32 build
BP is not a legal register on nacl.

TBR=iant
CC=golang-codereviews
https://golang.org/cl/140980043
2014-09-04 01:58:31 -04:00
Russ Cox
b143feb143 runtime: fix int64 reconstruction in semasleep
I had this right in one of my clients, but apparently not the one I submitted from.

Fixes 386 builds.

TBR=dfc
CC=golang-codereviews
https://golang.org/cl/138000045
2014-09-04 01:38:49 -04:00
Russ Cox
a915cb47ee runtime: fix onM test for curg on arm
TBR=iant
CC=golang-codereviews
https://golang.org/cl/137130043
2014-09-04 01:05:32 -04:00
Russ Cox
996835887c runtime: fix sigtrampPC on Windows
The arm5 build breakage at CL 139110043 was caused by
calling funcPC on a lessstack defined as a struct{}.
That symbol ended up with a non-4-aligned address,
which caused the memory fault that broke the builders.
The definition of lessstack was fixed in CL 140880043.

Tracking that down suggested that it would be worth
looking for the same bug elsewhere in the directory.
This is the only one I found.

LGTM=bradfitz
R=golang-codereviews, dave, bradfitz
CC=dvyukov, golang-codereviews, iant, khr, r
https://golang.org/cl/134410043
2014-09-04 00:54:37 -04:00
Russ Cox
e3edfea07f runtime: correct various Go -> C function calls
Some things get converted.
Other things (too complex or too many C deps) get onM calls.
Other things (too simple) get #pragma textflag NOSPLIT.

After this CL, the offending function list is basically:
        - panic.c
        - netpoll.goc
        - mem*.c
        - race stuff
        - readgstatus
        - entersyscall/exitsyscall

LGTM=r, iant
R=golang-codereviews, r, iant
CC=dvyukov, golang-codereviews, khr
https://golang.org/cl/140930043
2014-09-04 00:54:06 -04:00
Russ Cox
32ecf57d22 runtime: reject onM calls from gsignal stack
The implementation and use patterns of onM assume
that they run on either the m->curg or m->g0 stack.

Calling onM from m->gsignal has two problems:

(1) When not on g0, onM switches to g0 and then "back" to curg.
If we didn't start at curg, bad things happen.

(2) The use of scalararg/ptrarg to pass C arguments and results
assumes that there is only one onM call at a time.
If a gsignal starts running, it may have interrupted the
setup/teardown of the args for an onM on the curg or g0 stack.
Using scalararg/ptrarg itself would smash those.

We can fix (1) by remembering what g was running before the switch.

We can fix (2) by requiring that uses of onM that might happen
on a signal handling stack must save the old scalararg/ptrarg
and restore them after the call, instead of zeroing them.
The only sane way to do this is to introduce a separate
onM_signalsafe that omits the signal check, and then if you
see a call to onM_signalsafe you know the surrounding code
must preserve the old scalararg/ptrarg values.
(The implementation would be that onM_signalsafe just calls
fn if on the signal stack or else jumps to onM. It's not necessary
to have two whole copies of the function.)

(2) is not a problem if the caller and callee are both Go and
a closure is used instead of the scalararg/ptrarg slots.

For now, I think we can avoid calling onM from code executing
on gsignal stacks, so just reject it.

In the long term, (2) goes away (as do the scalararg/ptrarg slots)
once everything is in Go, and at that point fixing (1) would be
trivial and maybe worth doing just for regularity.

LGTM=iant
R=golang-codereviews, iant
CC=dvyukov, golang-codereviews, khr, r
https://golang.org/cl/135400043
2014-09-04 00:10:10 -04:00
Russ Cox
cb767247ca runtime: refactor/fix asmcgocall/asmcgocall_errno
Instead of making asmcgocall call asmcgocall_errno,
make both load args into registers and call a shared
assembly function.

On amd64, this costs 1 word in the asmcgocall_errno path
but saves 3 words in the asmcgocall path, and the latter
is what happens on critical nosplit paths on Windows.

On arm, this fixes build failures: asmcgocall was writing
the arguments for asmcgocall_errno into the wrong
place on the stack. Passing them in registers avoids the
decision entirely.

On 386, this isn't really needed, since the nosplit paths
have twice as many words to work with, but do it for consistency.

Update #8635
Fixes arm build (except GOARM=5).

TBR=iant
CC=golang-codereviews
https://golang.org/cl/134390043
2014-09-04 00:01:55 -04:00
Mikio Hara
f40341643c net: fix parsing literal IPv6 address with zone identifier in builtin dns stub resolver
Fixes #8619.

LGTM=iant
R=golang-codereviews, iant
CC=golang-codereviews
https://golang.org/cl/132560043
2014-09-04 12:53:51 +09:00
Russ Cox
93805d711c runtime: give 2 words back in notetsleep_internal
I really hoped we could avoid this nonsense, but it appears not.

Should fix windows/amd64 build breakage.

TBR=iant
CC=golang-codereviews
https://golang.org/cl/137120043
2014-09-03 23:10:15 -04:00
Mikio Hara
ced0ba5628 net: fix parsing literal IP address in builtin dns stub resolver
This CL fixes a bug introduced by CL 128820043 which is that
builtin dns stub resolver doesn't work well with literal IPv6
address namesever entries in /etc/resolv.conf.

Also simplifies resolv.conf parser and adds more test cases.

LGTM=iant
R=golang-codereviews, bradfitz, iant
CC=golang-codereviews
https://golang.org/cl/140040043
2014-09-04 10:00:30 +09:00
Rob Pike
55fa7659c9 text/template: 0xef is an integer, not a floating-point value.
The discriminator in the execution engine was stupid.
Add a test to the parse package too. The problem wasn't there
but the particular case ('e' in a hex integer) was not covered.

Fixes #8622.

LGTM=ruiu
R=golang-codereviews, ruiu
CC=golang-codereviews
https://golang.org/cl/133530043
2014-09-03 15:57:03 -07:00
Russ Cox
5ea69978fd runtime: make entersyscall/exitsyscall safe for stack splits
It is fundamentally unsafe to grow the stack once someone
has made a call to syscall.Syscall. That function takes 6 uintptr
arguments, but depending on the call some are pointers.
In fact, some might be pointers to stack values, and we don't know which.
That makes it impossible to copy the stack somewhere else.
Since we want to delete all the stack splitting code, relying only
on stack copying, make sure that Syscall never needs to split the stack.

The only thing Syscall does is:
        call entersyscall
        make the system call
        call exitsyscall

As long as we make sure that entersyscall and exitsyscall
can live in the nosplit region, they won't ask for more stack.

Do this by making entersyscall and exitsyscall set up the
stack guard so that any call to a function with a split check
will cause a crash. Then move non-essential slow-path
work onto the m stack using onM and mark the rest of the
work nosplit. The linker will verify that the chain of nosplits
fits in the total nosplit budget.

LGTM=iant
R=golang-codereviews, iant
CC=dvyukov, golang-codereviews, khr, r
https://golang.org/cl/140950043
2014-09-03 17:42:35 -04:00
Robin Eklind
f82097f5cf spec: Add link to rune literals from string literals when talking about escape sequences.
LGTM=gri
R=golang-codereviews, gobot, gri
CC=golang-codereviews
https://golang.org/cl/140750043
2014-09-03 10:44:33 -07:00
Russ Cox
97f8386af7 runtime: convert symtab.c into symtab.go
Because symtab.c was partially converted before,
the diffs are not terribly useful.

The earlier conversion was trying to refactor or
clean up the code in addition to doing the translation.
It also made a mistake by redefining Func to be something
users could overwrite.

I undid those changes, making symtab.go a more
literal line-for-line translation of symtab.c instead.

LGTM=josharian
R=golang-codereviews, dave, bradfitz, josharian
CC=golang-codereviews, iant, khr, r
https://golang.org/cl/140880043
2014-09-03 13:02:48 -04:00
Brad Fitzpatrick
4930a8d058 runtime: relax flaky GC pause test
We often saw GC pauses of 0 ns, not just on Windows.
Google Compute Engine timer granularity might suck
too.

LGTM=rsc
R=rsc, dvyukov
CC=golang-codereviews
https://golang.org/cl/140910043
2014-09-03 09:54:53 -07:00
Russ Cox
176c44699b runtime: remove guard against uninitialized forcegc.g
The race was in the old C code.
The new Go code does not have the race
and does not need the check.

LGTM=bradfitz, dvyukov
R=golang-codereviews, bradfitz, dvyukov
CC=golang-codereviews, rlh
https://golang.org/cl/140180043
2014-09-03 12:48:32 -04:00
Dmitriy Vyukov
467a6d28be runtime: adopt race detector for runtime written in Go
Ignore memory access on g0/gsignal.
See the issue for context and explanation.
Fixes #8627.

LGTM=khr
R=golang-codereviews, mdempsky, khr
CC=golang-codereviews, rsc
https://golang.org/cl/137070043
2014-09-03 20:47:30 +04:00
Rick Hudson
56bd176e1d runtime: Start and stop individual goroutines at gc safepoints
Code to bring goroutines to a gc safepoint one at a time,
do some work such as scanning, and restart the
goroutine, and then move on to the next goroutine.
Currently this code does not do much useful work
but this infrastructure will be critical to future
concurrent GC work.

Fixed comments reviewers.

LGTM=rsc
R=golang-codereviews, rsc, dvyukov
CC=golang-codereviews
https://golang.org/cl/131580043
2014-09-03 12:06:36 -04:00
Keith Randall
f44073785a runtime: deferproc/deferreturn in Go
LGTM=rsc
R=golang-codereviews, rsc, khr
CC=golang-codereviews
https://golang.org/cl/139900043
2014-09-03 08:49:43 -07:00
Russ Cox
54138e1ac3 cmd/cgo, runtime: write cgo stub wrappers in Go, not C
LGTM=alex.brainman, iant
R=golang-codereviews, alex.brainman, iant
CC=dvyukov, golang-codereviews, khr, r
https://golang.org/cl/139070043
2014-09-03 11:36:14 -04:00
Russ Cox
012ceed914 runtime: make onM and mcall take Go func values
This gives them correct types in Go and also makes it
possible to use them to run Go code on an m stack.

LGTM=iant
R=golang-codereviews, dave, iant
CC=dvyukov, golang-codereviews, khr, r
https://golang.org/cl/137970044
2014-09-03 11:35:22 -04:00
Russ Cox
7ba41e9972 runtime: convert a few traceback-related functions from proc.c to traceback.go
They were in proc.c mainly because there was no portable
traceback source file. As part of converting them to Go,
move to traceback.go.

In order to get access to the PC of _rt0_go,
rename to runtime.rt0_go.

LGTM=r
R=golang-codereviews, r
CC=dvyukov, golang-codereviews, iant, khr
https://golang.org/cl/139110043
2014-09-03 11:11:16 -04:00
Russ Cox
0e07f1c99f runtime: introduce, use funcPC to convert Go func to PC
This removes the ** unsafe hack.

Real bug fixed at chan.go:101.

LGTM=dave, r, iant
R=golang-codereviews, dave, r, iant
CC=dvyukov, golang-codereviews, khr
https://golang.org/cl/140870044
2014-09-03 11:10:38 -04:00
Alex Brainman
2c780a35b9 runtime: increase windows prof thread priority sooner
If system is busy burning cpu, it takes long time (about 300ms on
windows builders) to adjust prof thread priority. Once adjusted, prof
thread runs ahead of everyone else, but due to initial slowness, it
does not capture prof snapshots until start-up period is completed.

Change prof thread priority sooner, so it can start captures straight
away.

LGTM=dvyukov
R=golang-codereviews, dvyukov
CC=golang-codereviews
https://golang.org/cl/134360043
2014-09-03 14:17:04 +10:00
Russ Cox
9aa7d136f5 runtime: avoid race with forcegc helper
While we are here, give the gc helper a real function name
that will appear in stack traces.

LGTM=rlh
R=rlh
CC=dvyukov, golang-codereviews
https://golang.org/cl/133470043
2014-09-02 19:18:46 -04:00
David du Colombier
d8cbbe6802 runtime: don't allocate a new string in snprintf
This fixes the Plan 9 build.

Fix issue 8621.

LGTM=iant
R=rsc, mattn.jp, iant
CC=golang-codereviews
https://golang.org/cl/135280043
2014-09-03 00:56:50 +02:00
David du Colombier
b3f224b280 runtime: handle empty environment variables on Plan 9
LGTM=bradfitz, rsc
R=rsc, bradfitz
CC=golang-codereviews
https://golang.org/cl/137920044
2014-09-03 00:56:31 +02:00
Keith Randall
3306d119b0 runtime: unify fastrand1 and fastrand2
C and Go calling conventions are now compatible, so we
don't need two versions of this function.

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/139080043
2014-09-02 14:33:33 -07:00
Keith Randall
1d8fa7fa5d runtime: convert select implementation to Go.
LGTM=rsc
R=golang-codereviews, bradfitz, iant, khr, rsc
CC=golang-codereviews
https://golang.org/cl/139020043
2014-09-02 14:13:29 -07:00
David Leon Gil
86040a091f crypto: Add SHA3 functions in go.crypto/sha3 to the Hash enum.
Reverse dependency of https://golang.org/cl/130950043/

LGTM=agl
R=golang-codereviews, agl
CC=agl, golang-codereviews
https://golang.org/cl/138800043
2014-09-02 12:23:49 -07:00
Adam Langley
592f0e10d9 A+C: David Leon Gil (individual CLA)
Generated by a+c.

R=gobot
CC=golang-codereviews
https://golang.org/cl/134330043
2014-09-02 12:22:57 -07:00
Russ Cox
fa2af441f1 runtime: convert traceback*.c to Go
The two converted files were nearly identical.
Instead of continuing that duplication, I merged them
into a single traceback.go.

Tested on arm, amd64, amd64p32, and 386.

LGTM=r
R=golang-codereviews, remyoudompheng, dave, r
CC=dvyukov, golang-codereviews, iant, khr
https://golang.org/cl/134200044
2014-09-02 15:12:53 -04:00
Russ Cox
8e89f87158 cmd/gc: fix runtime print(hex(x))
The code I wrote originally works for trivial functions
that are inlined at a call site in another package,
because that was how I wrote my local test.
Make hex(x) work for non-inlinable functions too.

LGTM=iant
R=golang-codereviews, iant
CC=golang-codereviews, r
https://golang.org/cl/140830043
2014-09-02 14:36:25 -04:00
Keith Randall
6baf173b67 runtime: move reflect trampolines into thunk file.
LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/133460043
2014-09-02 10:07:02 -07:00
Marko Tiikkaja
90e2e2b896 database/sql: Avoid re-preparing statements when all connections are busy
Previously, if all connections were busy, we would always
re-prepare the statement on the connection we were assigned from
the pool.  That meant that if all connections were busy most of the
time, the number of prepared statements for each connection would
keep increasing over time.

Instead, after getting a free connection, check to see if the
statement has already been prepared on it, and reuse the statement
handle if so.

LGTM=bradfitz
R=golang-codereviews, gobot, bradfitz
CC=golang-codereviews
https://golang.org/cl/116930043
2014-09-02 09:08:41 -07:00
Dmitriy Vyukov
60447c2d95 runtime: convert clearpools/registerPoolCleanup to Go
LGTM=bradfitz, rsc
R=golang-codereviews, bradfitz, rsc
CC=golang-codereviews, khr
https://golang.org/cl/133240043
2014-09-02 20:03:48 +04:00
Matthew Dempsky
ac49e6735b runtime: convert cpuprof from C to Go
LGTM=dvyukov, rsc
R=golang-codereviews, dvyukov, rsc
CC=golang-codereviews
https://golang.org/cl/132440043
2014-09-02 00:14:22 -04:00
Alex Brainman
a19e638db2 runtime/pprof: adjust cpuHogger so that tests pass on windows builders
LGTM=rsc
R=dvyukov, rsc
CC=golang-codereviews
https://golang.org/cl/140110043
2014-09-01 23:06:22 -04:00
David du Colombier
20d9cc4bb0 runtime: fix gogetenv on Plan 9
LGTM=rsc
R=rsc, ality
CC=golang-codereviews
https://golang.org/cl/137030043
2014-09-01 23:03:26 -04:00
Russ Cox
649c83530a runtime: fix race detector running Go code on g0 of non-main thread
It looks like this has just always been broken:
the race detector handles running Go code on g0 of the main thread
and on g0 of any extra threads created by non-Go code, but it does
not handle running Go code on g0 of non-main threads created by Go.
Handle that.

Should fix the race build failures on the dashboard.

We're running into this now because we are running more
and more Go code on g0.

TBR=dvyukov
CC=golang-codereviews
https://golang.org/cl/137910043
2014-09-01 21:55:57 -04:00