@@ -48,6 +48,8 @@ def default():
48
48
(32 , 'mips' , 'linux' ): linux_mips ,
49
49
(32 , 'powerpc' , 'linux' ): linux_ppc ,
50
50
(64 , 'powerpc' , 'linux' ): linux_ppc64 ,
51
+ (32 , 'riscv32' , 'linux' ): linux_riscv32 ,
52
+ (64 , 'riscv64' , 'linux' ): linux_riscv64 ,
51
53
(32 , 'i386' , 'freebsd' ): freebsd_i386 ,
52
54
(64 , 'aarch64' , 'freebsd' ): freebsd_aarch64 ,
53
55
(64 , 'amd64' , 'freebsd' ): freebsd_amd64 ,
@@ -58,6 +60,8 @@ def default():
58
60
(64 , 'powerpc' , 'freebsd' ): freebsd_ppc64 ,
59
61
(32 , 'i386' , 'windows' ): windows_i386 ,
60
62
(64 , 'amd64' , 'windows' ): windows_amd64 ,
63
+ (64 , 'amd64' , 'darwin' ): darwin_amd64 ,
64
+ (64 , 'aarch64' , 'darwin' ): darwin_aarch64 ,
61
65
}[(context .bits , context .arch , context .os )]
62
66
63
67
@staticmethod
@@ -76,6 +80,8 @@ def syscall():
76
80
(64 , 'aarch64' , 'linux' ): linux_aarch64_syscall ,
77
81
(32 , 'powerpc' , 'linux' ): linux_ppc_syscall ,
78
82
(64 , 'powerpc' , 'linux' ): linux_ppc64_syscall ,
83
+ (32 , 'riscv32' , 'linux' ): linux_riscv32_syscall ,
84
+ (64 , 'riscv64' , 'linux' ): linux_riscv64_syscall ,
79
85
(32 , 'i386' , 'freebsd' ): freebsd_i386_syscall ,
80
86
(64 , 'amd64' , 'freebsd' ): freebsd_amd64_syscall ,
81
87
(64 , 'aarch64' , 'freebsd' ): freebsd_aarch64_syscall ,
@@ -85,6 +91,8 @@ def syscall():
85
91
(64 , 'aarch64' , 'freebsd' ): freebsd_aarch64_syscall ,
86
92
(32 , 'powerpc' , 'freebsd' ): freebsd_ppc_syscall ,
87
93
(64 , 'powerpc' , 'freebsd' ): freebsd_ppc64_syscall ,
94
+ (64 , 'amd64' , 'darwin' ): darwin_amd64_syscall ,
95
+ (64 , 'aarch64' , 'darwin' ): darwin_aarch64_syscall ,
88
96
}[(context .bits , context .arch , context .os )]
89
97
90
98
@staticmethod
@@ -99,13 +107,18 @@ def sigreturn():
99
107
(32 , 'arm' , 'linux' ): linux_arm_sigreturn ,
100
108
(32 , 'thumb' , 'linux' ): linux_arm_sigreturn ,
101
109
(64 , 'aarch64' , 'linux' ): linux_aarch64_sigreturn ,
110
+ (32 , 'riscv32' , 'linux' ): linux_riscv32_sigreturn ,
111
+ (64 , 'riscv64' , 'linux' ): linux_riscv64_sigreturn ,
102
112
(32 , 'i386' , 'freebsd' ): freebsd_i386_sigreturn ,
103
113
(64 , 'amd64' , 'freebsd' ): freebsd_amd64_sigreturn ,
104
114
(32 , 'arm' , 'freebsd' ): freebsd_arm_sigreturn ,
105
115
(32 , 'thumb' , 'freebsd' ): freebsd_arm_sigreturn ,
106
116
(64 , 'aarch64' , 'freebsd' ): freebsd_aarch64_sigreturn ,
117
+ (64 , 'amd64' , 'darwin' ): darwin_amd64_sigreturn ,
118
+ (64 , 'aarch64' , 'darwin' ): darwin_aarch64_sigreturn ,
107
119
}[(context .bits , context .arch , context .os )]
108
120
121
+
109
122
class SyscallABI (ABI ):
110
123
"""
111
124
The syscall ABI treats the syscall number as the zeroth argument,
@@ -115,6 +128,7 @@ def __init__(self, *a, **kw):
115
128
super (SyscallABI , self ).__init__ (* a , ** kw )
116
129
self .syscall_register = self .register_arguments [0 ]
117
130
131
+
118
132
class SigreturnABI (SyscallABI ):
119
133
"""
120
134
The sigreturn ABI is similar to the syscall ABI, except that
@@ -132,6 +146,8 @@ class SigreturnABI(SyscallABI):
132
146
linux_mips = ABI ('$sp' , ['$a0' ,'$a1' ,'$a2' ,'$a3' ], 4 , 0 )
133
147
linux_ppc = ABI ('sp' , ['r3' , 'r4' , 'r5' , 'r6' , 'r7' , 'r8' , 'r9' , 'r10' ], 4 , 0 )
134
148
linux_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 )
135
151
136
152
sysv_i386 = linux_i386
137
153
sysv_amd64 = linux_amd64
@@ -140,24 +156,33 @@ class SigreturnABI(SyscallABI):
140
156
sysv_mips = linux_mips
141
157
sysv_ppc = linux_ppc
142
158
sysv_ppc64 = linux_ppc64
159
+ sysv_riscv32 = linux_riscv32
160
+ sysv_riscv64 = linux_riscv64
143
161
162
+ # Docs: https://man7.org/linux/man-pages/man2/syscall.2.html
144
163
linux_i386_syscall = SyscallABI ('esp' , ['eax' , 'ebx' , 'ecx' , 'edx' , 'esi' , 'edi' , 'ebp' ], 4 , 0 )
145
164
linux_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 )
148
167
linux_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 )
151
172
152
173
linux_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 )
154
175
linux_arm_sigreturn = SigreturnABI ('sp' , ['r7' ], 4 , 0 )
155
176
linux_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 )
156
179
157
180
sysv_i386_sigreturn = linux_i386_sigreturn
158
181
sysv_amd64_sigreturn = linux_amd64_sigreturn
159
182
sysv_arm_sigreturn = linux_arm_sigreturn
160
183
sysv_aarch64_sigreturn = linux_aarch64_sigreturn
184
+ sysv_riscv32_sigreturn = linux_riscv32_sigreturn
185
+ sysv_riscv64_sigreturn = linux_riscv64_sigreturn
161
186
162
187
freebsd_i386 = sysv_i386
163
188
freebsd_amd64 = sysv_amd64
@@ -168,7 +193,7 @@ class SigreturnABI(SyscallABI):
168
193
freebsd_ppc64 = sysv_ppc64
169
194
170
195
freebsd_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 )
172
197
freebsd_arm_syscall = SyscallABI ('sp' , ['r7' , 'r0' , 'r1' , 'r2' , 'r3' ], 8 , 0 )
173
198
freebsd_aarch64_syscall = SyscallABI ('sp' , ['x8' , 'x0' , 'x1' , 'x2' , 'x3' ], 16 , 0 )
174
199
freebsd_mips_syscall = SyscallABI ('$sp' , ['$v0' ,'$a0' ,'$a1' ,'$a2' ,'$a3' ], 4 , 0 )
@@ -182,3 +207,11 @@ class SigreturnABI(SyscallABI):
182
207
183
208
windows_i386 = ABI ('esp' , [], 4 , 0 )
184
209
windows_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