diff options
Diffstat (limited to 'winsup/cygwin/fork.cc')
-rw-r--r-- | winsup/cygwin/fork.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc index 783971b..4abc525 100644 --- a/winsup/cygwin/fork.cc +++ b/winsup/cygwin/fork.cc @@ -187,7 +187,6 @@ frok::child (volatile char * volatile here) ForceCloseHandle1 (fork_info->forker_finished, forker_finished); - pthread::atforkchild (); cygbench ("fork-child"); ld_preload (); fixup_hooks_after_fork (); @@ -199,6 +198,7 @@ frok::child (volatile char * volatile here) CloseHandle (hParent); hParent = NULL; cygwin_finished_initializing = true; + pthread::atforkchild (); return 0; } @@ -660,8 +660,10 @@ dofork (void **proc, bool *with_forkables) ischild = !!setjmp (grouped.ch.jmp); volatile char * volatile stackp; -#ifdef __x86_64__ +#if defined(__x86_64__) __asm__ volatile ("movq %%rsp,%0": "=r" (stackp)); +#elif defined(__aarch64__) + __asm__ volatile ("mov %0, sp" : "=r" (stackp)); #else #error unimplemented for this target #endif |