1
0
mirror of https://github.com/golang/go synced 2024-11-19 06:14:39 -07:00
go/misc/cgo
Lynn Boger 30a63ecee3 runtime: restore r2 when restoring state from gobuf in gogo on ppc64x
When using plugins with goroutines calling cgo, we hit a case where
an intermittent SIGSEGV occurs when referencing an address that is based
on r2 (TOC address). When the failure can be generated in gdb, the
contents of r2 is wrong even though the value in the current stack's
slot for r2 is correct. So that means it somehow switched to start
running the code in this function without passing through the beginning
of the function which had the correct value of r2 and stored it there.

It was noted that in runtime.gogo when the state is restored from
gobuf, r2 is not restored from its slot on the stack. Adding the
instruction to restore r2 prevents the SIGSEGV.

This adds a testcase under testplugin which reproduces the problem if
the program is run multiple times. The team who reported this problem
has verified it fixes the issue on their larger, more complex
application.

Fixes #25756

Change-Id: I6028b6f1f8775d5c23f4ebb57ae273330a28eb8f
Reviewed-on: https://go-review.googlesource.com/117515
Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-06-11 12:13:11 +00:00
..
errors cmd/go: accept only limited compiler and linker flags in #cgo directives 2018-02-07 15:35:57 +00:00
fortran *.bash: always use the same string equality operator 2017-03-14 21:46:31 +00:00
gmp all: make copyright headers consistent with one space after period 2016-05-02 13:43:18 +00:00
life test: remove rundircmpout and cmpout actions 2018-05-31 17:36:45 +00:00
nocgo cmd/ld: really import runtime/cgo for external link 2014-05-20 21:36:50 -07:00
stdio test: remove rundircmpout and cmpout actions 2018-05-31 17:36:45 +00:00
test cmd/cgo: visit cgo type inside ellipsis node 2018-05-01 00:44:48 +00:00
testasan runtime: more flexible heap memory mapping on 64-bits 2013-06-12 18:47:16 +04:00
testcarchive cmd/cgo: don't use absolute paths in the export header file 2018-04-25 00:36:09 +00:00
testcshared misc/cgo/testcshared: use file descriptor 30 for TestUnexportedSymbols 2018-04-21 04:18:51 +00:00
testgodefs cmd/cgo: add -srcdir option 2016-10-30 19:14:08 +00:00
testplugin runtime: restore r2 when restoring state from gobuf in gogo on ppc64x 2018-06-11 12:13:11 +00:00
testsanitizers all: use Fatalf instead of Fatal if format is given 2018-01-10 01:35:45 +00:00
testshared cmd/go: fix go list .Stale computation 2018-04-25 20:19:19 +00:00
testsigfwd misc/cgo/testsigfwd: add missing return statement 2016-08-30 21:44:14 +00:00
testso cmd/dist: convert testso test into Go 2015-06-12 04:33:50 +00:00
testsovar misc/cgo/testsovar: needs the extern keyword to export variables on non-windows platforms 2015-07-21 18:10:57 +00:00
testtls all: make copyright headers consistent with one space after period 2016-05-02 13:43:18 +00:00