diff options
author | Ondřej Surý <ondrej@sury.org> | 2011-08-03 16:54:30 +0200 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2011-08-03 16:54:30 +0200 |
commit | 28592ee1ea1f5cdffcf85472f9de0285d928cf12 (patch) | |
tree | 32944e18b23f7fe4a0818a694aa2a6dfb1835463 /src/pkg/runtime/cgo/windows_amd64.c | |
parent | e836bee4716dc0d4d913537ad3ad1925a7ac32d0 (diff) | |
download | golang-upstream/59.tar.gz |
Imported Upstream version 59upstream/59
Diffstat (limited to 'src/pkg/runtime/cgo/windows_amd64.c')
-rwxr-xr-x | src/pkg/runtime/cgo/windows_amd64.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/pkg/runtime/cgo/windows_amd64.c b/src/pkg/runtime/cgo/windows_amd64.c index dafe8cd9d..fd5b397ab 100755 --- a/src/pkg/runtime/cgo/windows_amd64.c +++ b/src/pkg/runtime/cgo/windows_amd64.c @@ -37,11 +37,21 @@ threadentry(void *v) ts.g->stackbase = (uintptr)&ts; /* - * libcgo_sys_thread_start set stackguard to stack size; - * change to actual guard pointer. - */ + * libcgo_sys_thread_start set stackguard to stack size; + * change to actual guard pointer. + */ ts.g->stackguard = (uintptr)&ts - ts.g->stackguard + 4096; - crosscall_386(ts.fn); + /* + * Set specific keys in thread local storage. + */ + asm volatile ( + "movq %%gs:0x58, %%rax\n" // MOVQ 0x58(GS), tmp + "movq %0, 0(%%rax)\n" // MOVQ g, 0(GS) + "movq %1, 8(%%rax)\n" // MOVQ m, 8(GS) + :: "r"(ts.g), "r"(ts.m) : "%rax" + ); + + crosscall_amd64(ts.fn); return nil; } |