スレッドのスタック領域情報の取得
Unix 系でもそれぞれ異なるので調べた。
スタックオーバーフローのハンドリング (Stack Overflow Handling)
Linux
manpage
header
- #define _GNU_SOURCE
- pthread.h
API
int pthread_getattr_np(pthread_t thread, pthread_attr_t *attr);
main thread
pthread_getattr_npでもgetrlimit(2) でもとれるが、guard pageのサイズが含まれていることに注意。
__libc_stack_endでもaddrっぽいものが取れるが、argvやenviron、auxvの分ずれている。pthread_attr_getstackaddrは/proc/[pid]/mapsを読んで補正してくれている。
LinuxThreads では pthread_*_np 不可。
FreeBSD, DragonFly BSD
header
- pthread_np.h
API
- int pthread_attr_get_np(pthread_t pid, pthread_attr_t *dst);
main thread
pthread_*_np のみ。getrlimit(2) 不可。
NetBSD
manpage
なし
header
- pthread.h
API
- int pthread_attr_get_np(pthread_t pid, pthread_attr_t *dst);
main thread
pthread_*_np、getrlimit 共に可。