On Wed, 18 Jun 2025, Radek Barton via Cygwin-patches wrote:

> Hello.
>
> This patch ports stack pointer reading to AArch64 at fork.cc and cygtls.h.
>
> Radek
>
> ---
> From cc920233d50fe38f22610cb51f219e3c9b566109 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Radek=20Barto=C5=88?= <[email protected]>
> Date: Fri, 6 Jun 2025 10:21:10 +0200
> Subject: [PATCH] Cygwin: obtain stack pointer on AArch64
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> Signed-off-by: Radek BartoĊˆ <[email protected]>
> ---
>  winsup/cygwin/fork.cc                 | 4 +++-
>  winsup/cygwin/local_includes/cygtls.h | 6 ++++++
>  2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc
> index f88acdbbf..4abc52598 100644
> --- a/winsup/cygwin/fork.cc
> +++ b/winsup/cygwin/fork.cc
> @@ -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
> diff --git a/winsup/cygwin/local_includes/cygtls.h 
> b/winsup/cygwin/local_includes/cygtls.h
> index 31cadd51a..44bd44e72 100644
> --- a/winsup/cygwin/local_includes/cygtls.h
> +++ b/winsup/cygwin/local_includes/cygtls.h
> @@ -325,7 +325,13 @@ public:
>         address of the _except block to restore the context correctly.
>         See comment preceeding myfault_altstack_handler in exception.cc. */
>      ret = (DWORD64) _ret;
> +#if defined(__x86_64__)
>      __asm__ volatile ("movq %%rsp,%0": "=o" (frame));
> +#elif defined(__aarch64__)
> +    __asm__ volatile ("mov %0, sp" : "=r" (frame));
> +#else
> +#error unimplemented for this target
> +#endif
>    }
>    ~san () __attribute__ ((always_inline))
>    {
> --
> 2.49.0.vfs.0.4
>
>

LGTM

Reply via email to