mirror of
https://sourceware.org/git/glibc.git
synced 2024-09-19 16:10:01 +00:00
hurd: Fix getting signal thread stack layout for fork
* hurd/hurdsig.c: Include <pthread.h>. (_hurdsig_init): Call pthread_getattr_np and pthread_attr_getstack to get the signal thread stack layout.
This commit is contained in:
parent
f8baf2a224
commit
34e6a8694d
@ -1,3 +1,9 @@
|
||||
2018-03-17 Samuel Thibault <samuel.thibault@ens-lyon.org>
|
||||
|
||||
* hurd/hurdsig.c: Include <pthread.h>.
|
||||
(_hurdsig_init): Call pthread_getattr_np and pthread_attr_getstack to
|
||||
get the signal thread stack layout.
|
||||
|
||||
2018-03-16 Samuel Thibault <samuel.thibault@ens-lyon.org>
|
||||
|
||||
* sysdeps/generic/thread_state.h (MACHINE_NEW_THREAD_STATE_FLAVOR):
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include <string.h>
|
||||
|
||||
#include <cthreads.h> /* For `struct mutex'. */
|
||||
#include <pthread.h>
|
||||
#include <mach.h>
|
||||
#include <mach/thread_switch.h>
|
||||
|
||||
@ -1297,7 +1298,24 @@ _hurdsig_init (const int *intarray, size_t intarraysize)
|
||||
values all zero so they'll be ignored. */
|
||||
#pragma weak cthread_fork
|
||||
#pragma weak cthread_detach
|
||||
cthread_detach (cthread_fork ((cthread_fn_t) &_hurd_msgport_receive, 0));
|
||||
#pragma weak pthread_getattr_np
|
||||
#pragma weak pthread_attr_getstack
|
||||
cthread_t thread = cthread_fork ((cthread_fn_t) &_hurd_msgport_receive,
|
||||
0);
|
||||
cthread_detach (thread);
|
||||
|
||||
if (pthread_getattr_np)
|
||||
{
|
||||
/* Record signal thread stack layout for fork() */
|
||||
pthread_attr_t attr;
|
||||
void *addr;
|
||||
size_t size;
|
||||
|
||||
pthread_getattr_np ((pthread_t) thread, &attr);
|
||||
pthread_attr_getstack (&attr, &addr, &size);
|
||||
__hurd_sigthread_stack_base = (uintptr_t) addr;
|
||||
__hurd_sigthread_stack_end = __hurd_sigthread_stack_base + size;
|
||||
}
|
||||
|
||||
/* XXX We need the thread port for the signal thread further on
|
||||
in this thread (see hurdfault.c:_hurdsigfault_init).
|
||||
|
Loading…
Reference in New Issue
Block a user