aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/testdata/testprogcgo/stackswitch.c
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2023-09-11 12:18:51 -0400
committerGopher Robot <gobot@golang.org>2023-09-11 16:35:56 +0000
commitea8c05508b582f7ab20850e336d5ae4abf4e448d (patch)
tree995e6f59a842bfa727ffe4c6727ca0bae25d2777 /src/runtime/testdata/testprogcgo/stackswitch.c
parentc0c4a5981600aae2b7a9de9494a29e2f5d82be54 (diff)
downloadgo-ea8c05508b582f7ab20850e336d5ae4abf4e448d.tar.xz
Revert "runtime: allow update of system stack bounds on callback from C thread"
This reverts CL 525455. The test fails to build on darwin, alpine, and android. For #62440. Change-Id: I39c6b1e16499bd61e0f166de6c6efe7a07961e62 Reviewed-on: https://go-review.googlesource.com/c/go/+/527317 Auto-Submit: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Bryan Mills <bcmills@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
Diffstat (limited to 'src/runtime/testdata/testprogcgo/stackswitch.c')
-rw-r--r--src/runtime/testdata/testprogcgo/stackswitch.c81
1 files changed, 0 insertions, 81 deletions
diff --git a/src/runtime/testdata/testprogcgo/stackswitch.c b/src/runtime/testdata/testprogcgo/stackswitch.c
deleted file mode 100644
index 9c0c583bf4..0000000000
--- a/src/runtime/testdata/testprogcgo/stackswitch.c
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright 2023 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build unix && !openbsd
-
-#include <assert.h>
-#include <pthread.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ucontext.h>
-
-// Use a stack size larger than the 32kb estimate in
-// runtime.callbackUpdateSystemStack. This ensures that a second stack
-// allocation won't accidentally count as in bounds of the first stack
-#define STACK_SIZE (64ull << 10)
-
-static ucontext_t uctx_save, uctx_switch;
-
-extern void stackSwitchCallback(void);
-
-static void *stackSwitchThread(void *arg) {
- // Simple test: callback works from the normal system stack.
- stackSwitchCallback();
-
- // Next, verify that switching stacks doesn't break callbacks.
-
- char *stack1 = malloc(STACK_SIZE);
- if (stack1 == NULL) {
- perror("malloc");
- exit(1);
- }
-
- // Allocate the second stack before freeing the first to ensure we don't get
- // the same address from malloc.
- char *stack2 = malloc(STACK_SIZE);
- if (stack1 == NULL) {
- perror("malloc");
- exit(1);
- }
-
- if (getcontext(&uctx_switch) == -1) {
- perror("getcontext");
- exit(1);
- }
- uctx_switch.uc_stack.ss_sp = stack1;
- uctx_switch.uc_stack.ss_size = STACK_SIZE;
- uctx_switch.uc_link = &uctx_save;
- makecontext(&uctx_switch, stackSwitchCallback, 0);
-
- if (swapcontext(&uctx_save, &uctx_switch) == -1) {
- perror("swapcontext");
- exit(1);
- }
-
- if (getcontext(&uctx_switch) == -1) {
- perror("getcontext");
- exit(1);
- }
- uctx_switch.uc_stack.ss_sp = stack2;
- uctx_switch.uc_stack.ss_size = STACK_SIZE;
- uctx_switch.uc_link = &uctx_save;
- makecontext(&uctx_switch, stackSwitchCallback, 0);
-
- if (swapcontext(&uctx_save, &uctx_switch) == -1) {
- perror("swapcontext");
- exit(1);
- }
-
- free(stack1);
- free(stack2);
-
- return NULL;
-}
-
-void callStackSwitchCallbackFromThread(void) {
- pthread_t thread;
- assert(pthread_create(&thread, NULL, stackSwitchThread, NULL) == 0);
- assert(pthread_join(thread, NULL) == 0);
-}