aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Martin <ality@pbrane.org>2011-01-06 11:36:47 -0500
committerRuss Cox <rsc@golang.org>2011-01-06 11:36:47 -0500
commitdb89e19d26f4e4d4aaf7a5c1873d532e9d8f6bac (patch)
tree4462c107281647a9b6782676980b4b65ab4cf2df
parent2281ca169cb9f07755d905dec03d2fc7a168094b (diff)
downloadgo-db89e19d26f4e4d4aaf7a5c1873d532e9d8f6bac.tar.gz
go-db89e19d26f4e4d4aaf7a5c1873d532e9d8f6bac.zip
runtime/cgo: fix stackguard on FreeBSD/amd64
A cursory reading of the cgo code suggests this should be necessary, though I don't have access to a FreeBSD machine for testing. R=rsc, adg CC=golang-dev https://golang.org/cl/3746047
-rw-r--r--src/pkg/runtime/cgo/freebsd_amd64.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/pkg/runtime/cgo/freebsd_amd64.c b/src/pkg/runtime/cgo/freebsd_amd64.c
index a02fbf1519..fe6ce391f3 100644
--- a/src/pkg/runtime/cgo/freebsd_amd64.c
+++ b/src/pkg/runtime/cgo/freebsd_amd64.c
@@ -38,6 +38,12 @@ threadentry(void *v)
ts.g->stackbase = (uintptr)&ts;
/*
+ * libcgo_sys_thread_start set stackguard to stack size;
+ * change to actual guard pointer.
+ */
+ ts.g->stackguard = (uintptr)&ts - ts.g->stackguard + 4096;
+
+ /*
* Set specific keys. On FreeBSD/ELF, the thread local storage
* is just before %fs:0. Our dynamic 6.out's reserve 16 bytes
* for the two words g and m at %fs:-16 and %fs:-8.