Commit 66b264d2 authored by Clément Chigot's avatar Clément Chigot Committed by Ian Lance Taylor

runtime: fix TestSigStackSwapping on aix/ppc64

This commit fixes TestSigStackSwapping by increasing the signal stack
size. This is needed because SIGSTKSZ is too small when VMX is used on
AIX.

Change-Id: Ic2b5faa65745228d0768383b3d6ebd4b6f9f532c
Reviewed-on: https://go-review.googlesource.com/c/go/+/164012
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent b3cfb0b3
......@@ -17,11 +17,18 @@ package main
#include <stdlib.h>
#include <sys/mman.h>
#ifdef _AIX
// On AIX, SIGSTKSZ is too small to handle Go sighandler.
#define CSIGSTKSZ 0x4000
#else
#define CSIGSTKSZ SIGSTKSZ
#endif
extern void SigStackCallback();
static void* WithSigStack(void* arg __attribute__((unused))) {
// Set up an alternate system stack.
void* base = mmap(0, SIGSTKSZ, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0);
void* base = mmap(0, CSIGSTKSZ, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0);
if (base == MAP_FAILED) {
perror("mmap failed");
abort();
......@@ -29,7 +36,7 @@ static void* WithSigStack(void* arg __attribute__((unused))) {
stack_t st = {}, ost = {};
st.ss_sp = (char*)base;
st.ss_flags = 0;
st.ss_size = SIGSTKSZ;
st.ss_size = CSIGSTKSZ;
if (sigaltstack(&st, &ost) < 0) {
perror("sigaltstack failed");
abort();
......@@ -42,13 +49,13 @@ static void* WithSigStack(void* arg __attribute__((unused))) {
if (ost.ss_flags & SS_DISABLE) {
// Darwin libsystem has a bug where it checks ss_size
// even if SS_DISABLE is set. (The kernel gets it right.)
ost.ss_size = SIGSTKSZ;
ost.ss_size = CSIGSTKSZ;
}
if (sigaltstack(&ost, NULL) < 0) {
perror("sigaltstack restore failed");
abort();
}
mprotect(base, SIGSTKSZ, PROT_NONE);
mprotect(base, CSIGSTKSZ, PROT_NONE);
return NULL;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment