libgo: fix ptrace syscall hooks into glibc
authorPaul E. Murphy <murp@ibm.com>
Tue, 15 Sep 2020 19:18:28 +0000 (14:18 -0500)
committerIan Lance Taylor <iant@golang.org>
Thu, 17 Sep 2020 19:14:09 +0000 (12:14 -0700)
commitc560591408440f441b8b327f5b41f9328d20b67b
treeac39d36225e7d451ca671154c9f424259b3c8702
parent4839de55e2c98619f4919254abb87e2f393aaead
libgo: fix ptrace syscall hooks into glibc

ptrace is actually declared as a variadic function.  On ppc64le
the ABI requires to the caller to allocate space for the parameters
and allows the caller to modify them.

On ppc64le, depending on how and what version of GCC is used,
it will save to parameter save area.  This happened to clobber
a saved LR, and caused syscall.TestExecPtrace to fail with a timeout
when the tracee segfaults, and waits for the parent process to inspect.

Wrap this function to avoid directly calling glibc's ptrace from go.

Fixes golang/go#36698
Fixes go/92567

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/254755
gcc/go/gofrontend/MERGE
libgo/go/syscall/libcall_glibc.go
libgo/go/syscall/libcall_linux.go
libgo/runtime/go-varargs.c