| Age | Commit message (Collapse) | Author |
|
thread_GOOS.c becomes os_GOOS.c.
signal_GOOS_GOARCH.c becomes os_GOOS_GOARCH.c,
but with non-GOARCH-specific code moved into os_GOOS.c.
The actual arch-specific signal handler moves into signal_GOARCH.c
to avoid per-GOOS duplication.
New files signal_GOOS_GOARCH.h provide macros for
accessing fields of the very system-specific signal info structs.
Lots moving, but nothing changing.
This is a preliminarly cleanup so I can work on the signal
handling code to fix some open issues without having to
make each change 13 times.
Tested on Linux and OS X, 386 and amd64.
Will fix Plan 9, Windows, and ARM after the fact if necessary.
(Plan 9 and Windows should be fine; ARM will probably have some typos.)
Net effect: -1081 lines of code.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/7565048
|
|
vs tip:
BenchmarkTCP4OneShot 172994 40485 -76.60%
BenchmarkTCP4OneShot-2 96581 30028 -68.91%
BenchmarkTCP4OneShot-4 52615 18454 -64.93%
BenchmarkTCP4OneShot-8 26351 12289 -53.36%
BenchmarkTCP4OneShot-16 12258 16093 +31.29%
BenchmarkTCP4OneShot-32 13200 17045 +29.13%
BenchmarkTCP4OneShotTimeout 124814 42932 -65.60%
BenchmarkTCP4OneShotTimeout-2 99090 29040 -70.69%
BenchmarkTCP4OneShotTimeout-4 51860 18455 -64.41%
BenchmarkTCP4OneShotTimeout-8 26100 12073 -53.74%
BenchmarkTCP4OneShotTimeout-16 12198 16654 +36.53%
BenchmarkTCP4OneShotTimeout-32 13438 17143 +27.57%
BenchmarkTCP4Persistent 115647 7782 -93.27%
BenchmarkTCP4Persistent-2 58024 4808 -91.71%
BenchmarkTCP4Persistent-4 24715 3674 -85.13%
BenchmarkTCP4Persistent-8 16431 2407 -85.35%
BenchmarkTCP4Persistent-16 2336 1875 -19.73%
BenchmarkTCP4Persistent-32 1689 1637 -3.08%
BenchmarkTCP4PersistentTimeout 79754 7859 -90.15%
BenchmarkTCP4PersistentTimeout-2 57708 5952 -89.69%
BenchmarkTCP4PersistentTimeout-4 26907 3823 -85.79%
BenchmarkTCP4PersistentTimeout-8 15036 2567 -82.93%
BenchmarkTCP4PersistentTimeout-16 2507 1903 -24.09%
BenchmarkTCP4PersistentTimeout-32 1717 1627 -5.24%
vs old scheduler:
benchmark old ns/op new ns/op delta
BenchmarkTCPOneShot 192244 40485 -78.94%
BenchmarkTCPOneShot-2 63835 30028 -52.96%
BenchmarkTCPOneShot-4 35443 18454 -47.93%
BenchmarkTCPOneShot-8 22140 12289 -44.49%
BenchmarkTCPOneShot-16 16930 16093 -4.94%
BenchmarkTCPOneShot-32 16719 17045 +1.95%
BenchmarkTCPOneShotTimeout 190495 42932 -77.46%
BenchmarkTCPOneShotTimeout-2 64828 29040 -55.20%
BenchmarkTCPOneShotTimeout-4 34591 18455 -46.65%
BenchmarkTCPOneShotTimeout-8 21989 12073 -45.10%
BenchmarkTCPOneShotTimeout-16 16848 16654 -1.15%
BenchmarkTCPOneShotTimeout-32 16796 17143 +2.07%
BenchmarkTCPPersistent 81670 7782 -90.47%
BenchmarkTCPPersistent-2 26598 4808 -81.92%
BenchmarkTCPPersistent-4 15633 3674 -76.50%
BenchmarkTCPPersistent-8 18093 2407 -86.70%
BenchmarkTCPPersistent-16 17472 1875 -89.27%
BenchmarkTCPPersistent-32 7679 1637 -78.68%
BenchmarkTCPPersistentTimeout 83186 7859 -90.55%
BenchmarkTCPPersistentTimeout-2 26883 5952 -77.86%
BenchmarkTCPPersistentTimeout-4 15776 3823 -75.77%
BenchmarkTCPPersistentTimeout-8 18180 2567 -85.88%
BenchmarkTCPPersistentTimeout-16 17454 1903 -89.10%
BenchmarkTCPPersistentTimeout-32 7798 1627 -79.14%
R=golang-dev, iant, bradfitz, dave, rsc
CC=golang-dev
https://golang.org/cl/7579044
|
|
Uses AES hardware instructions on 386/amd64 to implement
a fast hash function. Incorporates a random key to
thwart hash collision DOS attacks.
Depends on CL#7548043 for new assembly instructions.
Update #3885
Helps some by making hashing faster. Go time drops from
0.65s to 0.51s.
R=rsc, r, bradfitz, remyoudompheng, khr, dsymonds, minux.ma, elias.naur
CC=golang-dev
https://golang.org/cl/7543043
|
|
Putting the M initialization in multiple places will not scale.
Various code assumes mstart is the start already. Make it so.
R=golang-dev, devon.odell
CC=golang-dev
https://golang.org/cl/7420048
|
|
R=devon.odell
CC=golang-dev
https://golang.org/cl/7443046
|
|
mpreinit() is called on the parent thread and with mcache (can allocate memory),
minit() is called on the child thread and can not allocate memory.
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/7389043
|
|
Fixes #4435.
R=golang-dev, iant, alex.brainman, minux.ma, dvyukov
CC=golang-dev
https://golang.org/cl/7304104
|
|
* Handle p==nil in signalstack by setting SS_DISABLE flag.
* Make minit only allocate a signal g if there's not one already.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/7323072
|
|
In addition to the compile failure fixed in signal*.c,
preserving the signal mask led to very strange crashes.
Testing shows that looking for SIG_IGN is all that
matters to get along with nohup, so reintroduce
sigset_zero instead of trying to preserve the signal mask.
TBR=iant
CC=golang-dev
https://golang.org/cl/7323067
|
|
There are two ways nohup(1) might be implemented:
it might mask away the signal, or it might set the handler
to SIG_IGN, both of which are inherited across fork+exec.
So two fixes:
* Make sure to preserve the inherited signal mask at
minit instead of clearing it.
* If the SIGHUP handler is SIG_IGN, leave it that way.
Fixes #4491.
R=golang-dev, mikioh.mikioh, iant
CC=golang-dev
https://golang.org/cl/7308102
|
|
We call runtime.findnull dynamically to avoid exceeding the
static nosplit stack limit check. (Thanks minux!)
Fixes #4048.
R=rsc, minux.ma, ality
CC=golang-dev
https://golang.org/cl/7232066
|
|
avoid confusion with the global "m" and "g".
R=golang-dev, minux.ma, rsc
CC=bradfitz, golang-dev
https://golang.org/cl/6939064
|
|
Signal handlers are global resources but many language
environments (Go, C++ at Google, etc) assume they have sole
ownership of a particular handler. Signal handlers in
mixed-language applications must therefore be robust against
unexpected delivery of certain signals, such as SIGPROF.
The default Go signal handler runtimeĀ·sigtramp assumes that it
will never be called on a non-Go thread, but this assumption
is violated by when linking in C++ code that spawns threads.
Specifically, the handler asserts the thread has an associated
"m" (Go scheduler).
This CL is a very simple workaround: discard SIGPROF delivered to non-Go threads. runtime.badsignal(int32) now receives the signal number; if it returns without panicking (e.g. sig==SIGPROF) the signal is discarded.
I don't think there is any really satisfactory solution to the
problem of signal-based profiling in a mixed-language
application. It's not only the issue of handler clobbering,
but also that a C++ SIGPROF handler called in a Go thread
can't unwind the Go stack (and vice versa). The best we can
hope for is not crashing.
Note:
- I've ported this to all POSIX platforms, except ARM-linux which already ignores unexpected signals on m-less threads.
- I've avoided tail-calling runtime.badsignal because AFAICT the 6a/6l don't support it.
- I've avoided hoisting 'push sig' (common to both function calls) because it makes the code harder to read.
- Fixed an (apparently incorrect?) docstring.
R=iant, rsc, minux.ma
CC=golang-dev
https://golang.org/cl/6498057
|
|
Fixes #3921.
R=iant
CC=golang-dev
https://golang.org/cl/6448132
|
|
R=rsc, remyoudompheng, minux.ma, ality
CC=golang-dev
https://golang.org/cl/6242061
|
|
It's the best we can do before Go 1.
For issue 3250; not a fix but at least less mysterious.
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5797068
|
|
Before:
$ go run x.go
signal 11 (core dumped)
$
After:
$ go run x.go
runtime: cgo callback on thread not created by Go.
signal 11 (core dumped)
$
For issue 3068.
Not a fix, but as much of a fix as we can do before Go 1.
R=golang-dev, rogpeppe, gri
CC=golang-dev
https://golang.org/cl/5781047
|
|
Work around profiling kernel bug with signal masks.
Still broken on 64-bit Snow Leopard kernel,
but I think we can ignore that one and let people
upgrade to Lion.
Add new trivial tools addr2line and objdump to take
the place of the GNU tools of the same name, since
those are not installed on OS X.
Adapt pprof to invoke 'go tool addr2line' and
'go tool objdump' if the system tools do not exist.
Clean up disassembly of base register on amd64.
Fixes #2008.
R=golang-dev, bradfitz, mikioh.mikioh, r, iant
CC=golang-dev
https://golang.org/cl/5697066
|
|
For Brad.
Now FreeBSD/386 binaries run on nearlyfreespeech.net.
Fixes #2302.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5700060
|
|
Fixes #3101 (Linux).
R=golang-dev, bradfitz, minux.ma
CC=golang-dev
https://golang.org/cl/5696043
|
|
R=golang-dev, gri
CC=golang-dev
https://golang.org/cl/5531062
|
|
Collapse the arch,os-specific directories into the main directory
by renaming xxx/foo.c to foo_xxx.c, and so on.
There are no substantial edits here, except to the Makefile.
The assumption is that the Go tool will #define GOOS_darwin
and GOARCH_amd64 and will make any file named something
like signals_darwin.h available as signals_GOOS.h during the
build. This replaces what used to be done with -I$(GOOS).
There is still work to be done to make runtime build with
standard tools, but this is a big step. After this we will have
to write a script to generate all the generated files so they
can be checked in (instead of generated during the build).
R=r, iant, r, lucio.dere
CC=golang-dev
https://golang.org/cl/5490053
|