]> Cypherpunks repositories - gostls13.git/commit
runtime/cgo: use frame address to set g0 stack bound
authorCherry Mui <cherryyz@google.com>
Mon, 25 Jul 2022 15:02:56 +0000 (11:02 -0400)
committerCherry Mui <cherryyz@google.com>
Tue, 26 Jul 2022 01:49:02 +0000 (01:49 +0000)
commit3e97294663d978bf8abb7acec7cc615ef2f1ea75
tree17f2bbd5dc9635f8034cef901765f0f6dfc4bcba
parent24dc27a3c084b901ee456637541ea818495888b0
runtime/cgo: use frame address to set g0 stack bound

For a cgo binary, at startup we set g0's stack bounds using the
address of a local variable (&size) in a C function x_cgo_init and
the stack size from pthread_attr_getstacksize. Normally, &size is
an address within the current stack frame. However, when  it is
compiled with ASAN, it may be instrumented to __asan_stack_malloc_0
and the address may not live in the current stack frame, causing
the stack bound to be set incorrectly, e.g. lo > hi.

Using __builtin_frame_address(0) to get the stack address instead.

Change-Id: I41df929e5ed24d8bbf3e15027af6dcdfc3736e37
Reviewed-on: https://go-review.googlesource.com/c/go/+/419434
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
src/runtime/cgo/gcc_linux_amd64.c