Cygwin: gendef: stub implementations of routines for AArch64
authorRadek Bartoň <radek.barton@microsoft.com>
Fri, 6 Jun 2025 12:31:30 +0000 (14:31 +0200)
committerCorinna Vinschen <corinna@vinschen.de>
Mon, 14 Jul 2025 16:03:46 +0000 (18:03 +0200)
This patch aspires to provide only minimal changes to
`winsup/cygwin/scripts/gendef` allowing to pass the AArch64 build. It does not
provide any implementations of the generated routines.

Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
winsup/cygwin/scripts/gendef

index 861a2405b2ff4dce19924d528a57b36621ef4fdc..d60d45431480e7c8a4c0e10e93afd59ae3745d6c 100755 (executable)
@@ -21,6 +21,7 @@ if (!defined($cpu) || !defined($output_def)) {
     die "$0: missing required option\n";
 }
 
+my $is_aarch64 = $cpu eq 'aarch64';
 my $is_x86_64 = $cpu eq 'x86_64';
 # FIXME? Do other (non-32 bit) arches on Windows still use symbol prefixes?
 my $sym_prefix = '';
@@ -89,7 +90,7 @@ sub fefunc {
     my $func = $sym_prefix . shift;
     my $fe = $sym_prefix . shift;
     my $sigfe_func;
-    if ($is_x86_64) {
+    if ($is_x86_64 || $is_aarch64) {
        $sigfe_func = ($fe =~ /^(.*)_${func}$/)[0];
     }
     my $extra;
@@ -109,6 +110,15 @@ $fe:
 
 EOF
     }
+    # TODO: This is only a stub, it needs to be implemented properly for AArch64.
+    if ($is_aarch64) {
+       $res = <<EOF;
+       .extern $func
+       .global $fe
+$fe:
+EOF
+    }
+
     if (!$main::first++) {
        if ($is_x86_64) {
          $res = <<EOF . longjmp () . $res;
@@ -338,6 +348,23 @@ stabilize_sig_stack:
        popq    %r12
        ret
        .seh_endproc
+EOF
+       }
+       # TODO: These are only stubs, they need to be implemented properly for AArch64.
+       if ($is_aarch64) {
+         $res = <<EOF . longjmp () . $res;
+       .include "tlsoffsets"
+       .text
+
+_sigfe_maybe:
+       .global _sigbe
+_sigfe:
+_sigbe:
+       .global sigdelayed
+sigdelayed:
+_sigdelayed_end:
+       .global _sigdelayed_end
+stabilize_sig_stack:
 EOF
        }
     }
@@ -474,6 +501,19 @@ longjmp:
        incl    %eax
 0:     ret
        .seh_endproc
+EOF
+    }
+    if ($is_aarch64) {
+       # TODO: These are only stubs, they need to be implemented properly for AArch64.
+       return <<EOF;
+       .globl  sigsetjmp
+sigsetjmp:
+       .globl  setjmp
+setjmp:
+       .globl  siglongjmp
+siglongjmp:
+       .globl  longjmp
+longjmp:
 EOF
     }
 }
This page took 0.034295 seconds and 5 git commands to generate.