go/src
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
..
cmd runtime: deferproc/deferreturn in Go 2014-09-03 08:49:43 -07:00
lib9 lib9: format %#04x, 0 as 0x0000 not 000000. 2014-07-23 10:17:47 -04:00
libbio
liblink cmd/ld: diagnose Go calling C 2014-08-31 22:49:14 -04:00
pkg runtime: make entersyscall/exitsyscall safe for stack splits 2014-09-03 17:42:35 -04:00
Make.dist
all.bash
all.bat
all.rc
androidtest.bash androidtest.bash: missing ! 2014-07-09 14:54:11 -04:00
clean.bash
clean.bat
clean.rc
make.bash
make.bat make.bat: do not exit builder on successful completion of make.bat (fixes build) 2014-07-21 16:29:38 +10:00
make.rc
nacltest.bash nacltest.bash: set GOROOT before invoking cmd/go 2014-07-10 15:36:48 -04:00
race.bash
race.bat
run.bash run.bash: run misc/cgo/testgodefs/test.bash 2014-08-12 07:13:52 -07:00
run.bat
run.rc build: be verbose when running tests on Plan 9 2014-07-20 13:14:53 +03:00
sudo.bash