1 // Copyright 2023 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 //go:build unix && !darwin
7 #ifndef _GNU_SOURCE // pthread_getattr_np
15 x_cgo_getstackbound(G *g)
21 pthread_attr_init(&attr);
22 #if defined(__GLIBC__) || defined(__sun)
23 pthread_getattr_np(pthread_self(), &attr); // GNU extension
24 pthread_attr_getstack(&attr, &addr, &size); // low address
26 pthread_attr_getstacksize(&attr, &size);
27 addr = __builtin_frame_address(0) + 4096 - size;
29 g->stacklo = (uintptr)addr;
30 // NOTE: don't change g->stackhi. We are called from asmcgocall
31 // which saves the stack depth based on g->stackhi.