@@ -48,6 +48,8 @@ def default():
4848 (32 , 'mips' , 'linux' ): linux_mips ,
4949 (32 , 'powerpc' , 'linux' ): linux_ppc ,
5050 (64 , 'powerpc' , 'linux' ): linux_ppc64 ,
51+ (32 , 'riscv32' , 'linux' ): linux_riscv32 ,
52+ (64 , 'riscv64' , 'linux' ): linux_riscv64 ,
5153 (32 , 'i386' , 'freebsd' ): freebsd_i386 ,
5254 (64 , 'aarch64' , 'freebsd' ): freebsd_aarch64 ,
5355 (64 , 'amd64' , 'freebsd' ): freebsd_amd64 ,
@@ -58,6 +60,8 @@ def default():
5860 (64 , 'powerpc' , 'freebsd' ): freebsd_ppc64 ,
5961 (32 , 'i386' , 'windows' ): windows_i386 ,
6062 (64 , 'amd64' , 'windows' ): windows_amd64 ,
63+ (64 , 'amd64' , 'darwin' ): darwin_amd64 ,
64+ (64 , 'aarch64' , 'darwin' ): darwin_aarch64 ,
6165 }[(context .bits , context .arch , context .os )]
6266
6367 @staticmethod
@@ -76,6 +80,8 @@ def syscall():
7680 (64 , 'aarch64' , 'linux' ): linux_aarch64_syscall ,
7781 (32 , 'powerpc' , 'linux' ): linux_ppc_syscall ,
7882 (64 , 'powerpc' , 'linux' ): linux_ppc64_syscall ,
83+ (32 , 'riscv32' , 'linux' ): linux_riscv32_syscall ,
84+ (64 , 'riscv64' , 'linux' ): linux_riscv64_syscall ,
7985 (32 , 'i386' , 'freebsd' ): freebsd_i386_syscall ,
8086 (64 , 'amd64' , 'freebsd' ): freebsd_amd64_syscall ,
8187 (64 , 'aarch64' , 'freebsd' ): freebsd_aarch64_syscall ,
@@ -85,6 +91,8 @@ def syscall():
8591 (64 , 'aarch64' , 'freebsd' ): freebsd_aarch64_syscall ,
8692 (32 , 'powerpc' , 'freebsd' ): freebsd_ppc_syscall ,
8793 (64 , 'powerpc' , 'freebsd' ): freebsd_ppc64_syscall ,
94+ (64 , 'amd64' , 'darwin' ): darwin_amd64_syscall ,
95+ (64 , 'aarch64' , 'darwin' ): darwin_aarch64_syscall ,
8896 }[(context .bits , context .arch , context .os )]
8997
9098 @staticmethod
@@ -99,13 +107,18 @@ def sigreturn():
99107 (32 , 'arm' , 'linux' ): linux_arm_sigreturn ,
100108 (32 , 'thumb' , 'linux' ): linux_arm_sigreturn ,
101109 (64 , 'aarch64' , 'linux' ): linux_aarch64_sigreturn ,
110+ (32 , 'riscv32' , 'linux' ): linux_riscv32_sigreturn ,
111+ (64 , 'riscv64' , 'linux' ): linux_riscv64_sigreturn ,
102112 (32 , 'i386' , 'freebsd' ): freebsd_i386_sigreturn ,
103113 (64 , 'amd64' , 'freebsd' ): freebsd_amd64_sigreturn ,
104114 (32 , 'arm' , 'freebsd' ): freebsd_arm_sigreturn ,
105115 (32 , 'thumb' , 'freebsd' ): freebsd_arm_sigreturn ,
106116 (64 , 'aarch64' , 'freebsd' ): freebsd_aarch64_sigreturn ,
117+ (64 , 'amd64' , 'darwin' ): darwin_amd64_sigreturn ,
118+ (64 , 'aarch64' , 'darwin' ): darwin_aarch64_sigreturn ,
107119 }[(context .bits , context .arch , context .os )]
108120
121+
109122class SyscallABI (ABI ):
110123 """
111124 The syscall ABI treats the syscall number as the zeroth argument,
@@ -115,6 +128,7 @@ def __init__(self, *a, **kw):
115128 super (SyscallABI , self ).__init__ (* a , ** kw )
116129 self .syscall_register = self .register_arguments [0 ]
117130
131+
118132class SigreturnABI (SyscallABI ):
119133 """
120134 The sigreturn ABI is similar to the syscall ABI, except that
@@ -132,6 +146,8 @@ class SigreturnABI(SyscallABI):
132146linux_mips = ABI ('$sp' , ['$a0' ,'$a1' ,'$a2' ,'$a3' ], 4 , 0 )
133147linux_ppc = ABI ('sp' , ['r3' , 'r4' , 'r5' , 'r6' , 'r7' , 'r8' , 'r9' , 'r10' ], 4 , 0 )
134148linux_ppc64 = ABI ('sp' , ['r3' , 'r4' , 'r5' , 'r6' , 'r7' , 'r8' , 'r9' , 'r10' ], 8 , 0 )
149+ linux_riscv32 = ABI ('sp' , ['a0' , 'a1' , 'a2' , 'a3' , 'a4' , 'a5' , 'a6' , 'a7' ], 8 , 0 )
150+ linux_riscv64 = ABI ('sp' , ['a0' , 'a1' , 'a2' , 'a3' , 'a4' , 'a5' , 'a6' , 'a7' ], 8 , 0 )
135151
136152sysv_i386 = linux_i386
137153sysv_amd64 = linux_amd64
@@ -140,24 +156,33 @@ class SigreturnABI(SyscallABI):
140156sysv_mips = linux_mips
141157sysv_ppc = linux_ppc
142158sysv_ppc64 = linux_ppc64
159+ sysv_riscv32 = linux_riscv32
160+ sysv_riscv64 = linux_riscv64
143161
162+ # Docs: https://man7.org/linux/man-pages/man2/syscall.2.html
144163linux_i386_syscall = SyscallABI ('esp' , ['eax' , 'ebx' , 'ecx' , 'edx' , 'esi' , 'edi' , 'ebp' ], 4 , 0 )
145164linux_amd64_syscall = SyscallABI ('rsp' , ['rax' , 'rdi' , 'rsi' , 'rdx' , 'r10' , 'r8' , 'r9' ], 8 , 0 )
146- linux_arm_syscall = SyscallABI ('sp' , ['r7' , 'r0' , 'r1' , 'r2' , 'r3' , 'r4' , 'r5' , 'r6' ], 4 , 0 )
147- linux_aarch64_syscall = SyscallABI ('sp' , ['x8' , 'x0' , 'x1' , 'x2' , 'x3' , 'x4' , 'x5' , 'x6 ' ], 16 , 0 )
165+ linux_arm_syscall = SyscallABI ('sp' , ['r7' , 'r0' , 'r1' , 'r2' , 'r3' , 'r4' , 'r5' , 'r6' ], 4 , 0 )
166+ linux_aarch64_syscall = SyscallABI ('sp' , ['x8' , 'x0' , 'x1' , 'x2' , 'x3' , 'x4' , 'x5' ], 16 , 0 )
148167linux_mips_syscall = SyscallABI ('$sp' , ['$v0' ,'$a0' ,'$a1' ,'$a2' ,'$a3' ], 4 , 0 )
149- linux_ppc_syscall = ABI ('sp' , ['r0' , 'r3' , 'r4' , 'r5' , 'r6' , 'r7' , 'r8' , 'r9' ], 4 , 0 )
150- linux_ppc64_syscall = ABI ('sp' , ['r0' , 'r3' , 'r4' , 'r5' , 'r6' , 'r7' , 'r8' , 'r9' ], 8 , 0 )
168+ linux_ppc_syscall = SyscallABI ('sp' , ['r0' , 'r3' , 'r4' , 'r5' , 'r6' , 'r7' , 'r8' , 'r9' ], 4 , 0 )
169+ linux_ppc64_syscall = SyscallABI ('sp' , ['r0' , 'r3' , 'r4' , 'r5' , 'r6' , 'r7' , 'r8' ], 8 , 0 )
170+ linux_riscv32_syscall = SyscallABI ('sp' , ['a7' , 'a0' , 'a1' , 'a2' , 'a3' , 'a4' , 'a5' ], 4 , 0 )
171+ linux_riscv64_syscall = SyscallABI ('sp' , ['a7' , 'a0' , 'a1' , 'a2' , 'a3' , 'a4' , 'a5' ], 8 , 0 )
151172
152173linux_i386_sigreturn = SigreturnABI ('esp' , ['eax' ], 4 , 0 )
153- linux_amd64_sigreturn = SigreturnABI ('rsp' , ['rax' ], 4 , 0 )
174+ linux_amd64_sigreturn = SigreturnABI ('rsp' , ['rax' ], 8 , 0 )
154175linux_arm_sigreturn = SigreturnABI ('sp' , ['r7' ], 4 , 0 )
155176linux_aarch64_sigreturn = SigreturnABI ('sp' , ['x8' ], 16 , 0 )
177+ linux_riscv32_sigreturn = SigreturnABI ('sp' , ['a7' ], 4 , 0 )
178+ linux_riscv64_sigreturn = SigreturnABI ('sp' , ['a7' ], 8 , 0 )
156179
157180sysv_i386_sigreturn = linux_i386_sigreturn
158181sysv_amd64_sigreturn = linux_amd64_sigreturn
159182sysv_arm_sigreturn = linux_arm_sigreturn
160183sysv_aarch64_sigreturn = linux_aarch64_sigreturn
184+ sysv_riscv32_sigreturn = linux_riscv32_sigreturn
185+ sysv_riscv64_sigreturn = linux_riscv64_sigreturn
161186
162187freebsd_i386 = sysv_i386
163188freebsd_amd64 = sysv_amd64
@@ -168,7 +193,7 @@ class SigreturnABI(SyscallABI):
168193freebsd_ppc64 = sysv_ppc64
169194
170195freebsd_i386_syscall = SyscallABI ('esp' , ['eax' ], 4 , 0 )
171- freebsd_amd64_syscall = SyscallABI ('rsp' , ['rax' ,'rdi' ,'rsi' ,'rdx' ,'rcx ' ,'r8' ,'r9' ], 8 , 0 )
196+ freebsd_amd64_syscall = SyscallABI ('rsp' , ['rax' ,'rdi' ,'rsi' ,'rdx' ,'r10 ' ,'r8' ,'r9' ], 8 , 0 )
172197freebsd_arm_syscall = SyscallABI ('sp' , ['r7' , 'r0' , 'r1' , 'r2' , 'r3' ], 8 , 0 )
173198freebsd_aarch64_syscall = SyscallABI ('sp' , ['x8' , 'x0' , 'x1' , 'x2' , 'x3' ], 16 , 0 )
174199freebsd_mips_syscall = SyscallABI ('$sp' , ['$v0' ,'$a0' ,'$a1' ,'$a2' ,'$a3' ], 4 , 0 )
@@ -182,3 +207,11 @@ class SigreturnABI(SyscallABI):
182207
183208windows_i386 = ABI ('esp' , [], 4 , 0 )
184209windows_amd64 = ABI ('rsp' , ['rcx' ,'rdx' ,'r8' ,'r9' ], 32 , 32 )
210+
211+ darwin_aarch64 = sysv_aarch64
212+ darwin_aarch64_syscall = SyscallABI ('sp' , ['x16' , 'x0' , 'x1' , 'x2' , 'x3' , 'x4' , 'x5' ], 16 , 0 )
213+ darwin_aarch64_sigreturn = SigreturnABI ('sp' , ['x16' ], 16 , 0 )
214+
215+ darwin_amd64 = sysv_amd64
216+ darwin_amd64_syscall = SyscallABI ('rsp' , ['rax' , 'rdi' , 'rsi' , 'rdx' , 'r10' , 'r8' , 'r9' ], 8 , 0 )
217+ darwin_amd64_sigreturn = SigreturnABI ('rsp' , ['rax' ], 8 , 0 )
0 commit comments