[newlib-cygwin] Cygwin: obtain stack base on AArch64

Jeremy Drake via Cygwin-cvs <[email protected]>
Newsgroups gmane.os.cygwin.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=e97c157432985faa5a26a900a8dfb7a388a74857

commit e97c157432985faa5a26a900a8dfb7a388a74857
Author: Radek Bartoň <[email protected]>
Date:   Wed Jun 4 13:38:10 2025 +0200

    Cygwin: obtain stack base on AArch64
    
    Signed-off-by: Radek Bartoň <[email protected]>

Diff:
---
 winsup/cygwin/include/cygwin/config.h  | 7 ++++++-
 winsup/testsuite/winsup.api/cygload.cc | 7 +++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/winsup/cygwin/include/cygwin/config.h b/winsup/cygwin/include/cygwin/config.h
index 2a7083278..d9f911d47 100644
--- a/winsup/cygwin/include/cygwin/config.h
+++ b/winsup/cygwin/include/cygwin/config.h
@@ -36,8 +36,13 @@ __attribute__((__gnu_inline__))
 extern inline struct _reent *__getreent (void)
 {
   register char *ret;
-#ifdef __x86_64__
+#if defined(__x86_64__)
   __asm __volatile__ ("movq %%gs:8,%0" : "=r" (ret));
+#elif defined(__aarch64__)
+  /* x18 register points to TEB, offset 0x8 points to stack base.
+     See _TEB structure definition in winsup\cygwin\local_includes\ntdll.h
+     for more details. */
+  __asm __volatile__ ("ldr %0, [x18, #0x8]" : "=r" (ret));
 #else
 #error unimplemented for this target
 #endif
diff --git a/winsup/testsuite/winsup.api/cygload.cc b/winsup/testsuite/winsup.api/cygload.cc
index afd3ee90f..08372a302 100644
--- a/winsup/testsuite/winsup.api/cygload.cc
+++ b/winsup/testsuite/winsup.api/cygload.cc
@@ -82,6 +82,13 @@ cygwin::padding::padding ()
     "movl %%fs:4, %0"
     :"=r"(stackbase)
     );
+# elif __aarch64__
+  // x18 register points to TEB. See _TEB structure definition in
+  // winsup\cygwin\local_includes\ntdll.h
+  __asm__ volatile (
+    "ldr %0, [x18, #0x8]"
+   :"=r" (stackbase)
+   );
 # else
 #  error Unknown architecture
 # endif
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.