diff options
Diffstat (limited to 'meta/recipes-devtools/strace/strace-4.7/0031-Add-support-for-tracing-32-bit-ARM-EABI-binaries-on-.patch')
-rw-r--r-- | meta/recipes-devtools/strace/strace-4.7/0031-Add-support-for-tracing-32-bit-ARM-EABI-binaries-on-.patch | 963 |
1 files changed, 963 insertions, 0 deletions
diff --git a/meta/recipes-devtools/strace/strace-4.7/0031-Add-support-for-tracing-32-bit-ARM-EABI-binaries-on-.patch b/meta/recipes-devtools/strace/strace-4.7/0031-Add-support-for-tracing-32-bit-ARM-EABI-binaries-on-.patch new file mode 100644 index 0000000000..61885b1b5b --- /dev/null +++ b/meta/recipes-devtools/strace/strace-4.7/0031-Add-support-for-tracing-32-bit-ARM-EABI-binaries-on-.patch | |||
@@ -0,0 +1,963 @@ | |||
1 | Upstream-Status: Backport | ||
2 | |||
3 | From 890a5cad2321ae72fb5ca1b253edb874b1ca7180 Mon Sep 17 00:00:00 2001 | ||
4 | From: Steve McIntyre <steve.mcintyre@linaro.org> | ||
5 | Date: Sat, 10 Nov 2012 11:24:48 +0000 | ||
6 | Subject: [PATCH 31/31] Add support for tracing 32-bit ARM EABI binaries on | ||
7 | AArch64 | ||
8 | |||
9 | * defs.h [AARCH64]: Copy in the definition of arm_pt_regs and the | ||
10 | accessor macros, so it's possible to build on AArch64 without | ||
11 | ARM system headers. Set SUPPORTED_PERSONALITIES to 2. | ||
12 | Define PERSONALITY0_WORDSIZE and PERSONALITY1_WORDSIZE. | ||
13 | Set DEFAULT_PERSONALITY to 1. | ||
14 | * linux/aarch64/errnoent1.h: New file, includes generic errnoent.h. | ||
15 | * linux/aarch64/ioctlent1.h: New file, includes generic ioctlent.h. | ||
16 | * linux/aarch64/signalent1.h: New file, includes generic signalent.h. | ||
17 | * linux/aarch64/syscallent1.h: Rename from linux/aarch64/syscallent.h. | ||
18 | * linux/aarch64/syscallent.h: New file, includes arm/syscallent.h. | ||
19 | * syscall.c [AARCH64]: Define aarch64_regs. | ||
20 | (update_personality) [AARCH64]: Add debug output. | ||
21 | (get_scno) [AARCH64]: Determine if we're in ARM or AArch64 mode by | ||
22 | checking the size of the returned uio structure from PTRACE_GETREGSET | ||
23 | and interpret the structure accordingly. | ||
24 | (get_syscall_result): Likewise. | ||
25 | (get_syscall_args): Merge the AArch64 and ARM sections so that on | ||
26 | AArch64 we can fall back to supporting the ARM personality. | ||
27 | (get_error): Likewise. | ||
28 | |||
29 | Signed-off-by: Steve McIntyre <steve.mcintyre@linaro.org> | ||
30 | --- | ||
31 | defs.h | 34 +++++ | ||
32 | linux/aarch64/errnoent1.h | 2 + | ||
33 | linux/aarch64/ioctlent1.h | 1 + | ||
34 | linux/aarch64/signalent1.h | 1 + | ||
35 | linux/aarch64/syscallent.h | 331 +------------------------------------------- | ||
36 | linux/aarch64/syscallent1.h | 330 +++++++++++++++++++++++++++++++++++++++++++ | ||
37 | syscall.c | 111 ++++++++++----- | ||
38 | 7 files changed, 448 insertions(+), 362 deletions(-) | ||
39 | create mode 100644 linux/aarch64/errnoent1.h | ||
40 | create mode 100644 linux/aarch64/ioctlent1.h | ||
41 | create mode 100644 linux/aarch64/signalent1.h | ||
42 | create mode 100644 linux/aarch64/syscallent1.h | ||
43 | |||
44 | diff --git a/defs.h b/defs.h | ||
45 | index 11e26bb..0e05c6e 100644 | ||
46 | --- a/defs.h | ||
47 | +++ b/defs.h | ||
48 | @@ -196,6 +196,30 @@ extern long ptrace(int, int, char *, long); | ||
49 | # define REG_PC (0*8) | ||
50 | # define REG_SYSCALL (2*8) | ||
51 | #endif /* SH64 */ | ||
52 | +#ifdef AARCH64 | ||
53 | +#define NUM_ARM_REGS 18 | ||
54 | +struct arm_pt_regs { | ||
55 | + int uregs[NUM_ARM_REGS]; | ||
56 | +}; | ||
57 | +#define ARM_cpsr uregs[16] | ||
58 | +#define ARM_pc uregs[15] | ||
59 | +#define ARM_lr uregs[14] | ||
60 | +#define ARM_sp uregs[13] | ||
61 | +#define ARM_ip uregs[12] | ||
62 | +#define ARM_fp uregs[11] | ||
63 | +#define ARM_r10 uregs[10] | ||
64 | +#define ARM_r9 uregs[9] | ||
65 | +#define ARM_r8 uregs[8] | ||
66 | +#define ARM_r7 uregs[7] | ||
67 | +#define ARM_r6 uregs[6] | ||
68 | +#define ARM_r5 uregs[5] | ||
69 | +#define ARM_r4 uregs[4] | ||
70 | +#define ARM_r3 uregs[3] | ||
71 | +#define ARM_r2 uregs[2] | ||
72 | +#define ARM_r1 uregs[1] | ||
73 | +#define ARM_r0 uregs[0] | ||
74 | +#define ARM_ORIG_r0 uregs[17] | ||
75 | +#endif /* AARCH64 */ | ||
76 | |||
77 | #define SUPPORTED_PERSONALITIES 1 | ||
78 | #define DEFAULT_PERSONALITY 0 | ||
79 | @@ -241,6 +265,16 @@ extern long ptrace(int, int, char *, long); | ||
80 | # define PERSONALITY1_WORDSIZE 4 | ||
81 | #endif | ||
82 | |||
83 | +#ifdef AARCH64 | ||
84 | +# undef SUPPORTED_PERSONALITIES | ||
85 | +/* The existing ARM personality, then AArch64 */ | ||
86 | +# define SUPPORTED_PERSONALITIES 2 | ||
87 | +# define PERSONALITY0_WORDSIZE 4 | ||
88 | +# define PERSONALITY1_WORDSIZE 8 | ||
89 | +# undef DEFAULT_PERSONALITY | ||
90 | +# define DEFAULT_PERSONALITY 1 | ||
91 | +#endif | ||
92 | + | ||
93 | #ifdef POWERPC64 | ||
94 | # undef SUPPORTED_PERSONALITIES | ||
95 | # define SUPPORTED_PERSONALITIES 2 | ||
96 | diff --git a/linux/aarch64/errnoent1.h b/linux/aarch64/errnoent1.h | ||
97 | new file mode 100644 | ||
98 | index 0000000..e1cbe33 | ||
99 | --- /dev/null | ||
100 | +++ b/linux/aarch64/errnoent1.h | ||
101 | @@ -0,0 +1,2 @@ | ||
102 | +/* Native AArch64 */ | ||
103 | +#include "../errnoent.h" | ||
104 | diff --git a/linux/aarch64/ioctlent1.h b/linux/aarch64/ioctlent1.h | ||
105 | new file mode 100644 | ||
106 | index 0000000..df485d3 | ||
107 | --- /dev/null | ||
108 | +++ b/linux/aarch64/ioctlent1.h | ||
109 | @@ -0,0 +1 @@ | ||
110 | +#include "../ioctlent.h" | ||
111 | diff --git a/linux/aarch64/signalent1.h b/linux/aarch64/signalent1.h | ||
112 | new file mode 100644 | ||
113 | index 0000000..d31e6a4 | ||
114 | --- /dev/null | ||
115 | +++ b/linux/aarch64/signalent1.h | ||
116 | @@ -0,0 +1 @@ | ||
117 | +#include "../signalent.h" | ||
118 | diff --git a/linux/aarch64/syscallent.h b/linux/aarch64/syscallent.h | ||
119 | index b712c9f..1b892be 100644 | ||
120 | --- a/linux/aarch64/syscallent.h | ||
121 | +++ b/linux/aarch64/syscallent.h | ||
122 | @@ -1,330 +1 @@ | ||
123 | - { 2, 0, sys_io_setup, "io_setup" }, /* 0 */ | ||
124 | - { 1, 0, sys_io_destroy, "io_destroy" }, /* 1 */ | ||
125 | - { 3, 0, sys_io_submit, "io_submit" }, /* 2 */ | ||
126 | - { 3, 0, sys_io_cancel, "io_cancel" }, /* 3 */ | ||
127 | - { 5, 0, sys_io_getevents, "io_getevents" }, /* 4 */ | ||
128 | - { 5, TF, sys_setxattr, "setxattr" }, /* 5 */ | ||
129 | - { 5, TF, sys_setxattr, "lsetxattr" }, /* 6 */ | ||
130 | - { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 7 */ | ||
131 | - { 4, TF, sys_getxattr, "getxattr" }, /* 8 */ | ||
132 | - { 4, TF, sys_getxattr, "lgetxattr" }, /* 9 */ | ||
133 | - { 4, TD, sys_fgetxattr, "fgetxattr" }, /* 10 */ | ||
134 | - { 3, TF, sys_listxattr, "listxattr" }, /* 11 */ | ||
135 | - { 3, TF, sys_listxattr, "llistxattr" }, /* 12 */ | ||
136 | - { 3, TD, sys_flistxattr, "flistxattr" }, /* 13 */ | ||
137 | - { 2, TF, sys_removexattr, "removexattr" }, /* 14 */ | ||
138 | - { 2, TF, sys_removexattr, "lremovexattr" }, /* 15 */ | ||
139 | - { 2, TD, sys_fremovexattr, "fremovexattr" }, /* 16 */ | ||
140 | - { 2, TF, sys_getcwd, "getcwd" }, /* 17 */ | ||
141 | - { 4, 0, sys_lookup_dcookie, "lookup_dcookie" }, /* 18 */ | ||
142 | - { 2, TD, sys_eventfd2, "eventfd2" }, /* 19 */ | ||
143 | - { 1, TD, sys_epoll_create1, "epoll_create1" }, /* 20 */ | ||
144 | - { 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 21 */ | ||
145 | - { 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 22 */ | ||
146 | - { 1, TD, sys_dup, "dup" }, /* 23 */ | ||
147 | - { 3, TD, sys_dup3, "dup3" }, /* 24 */ | ||
148 | - { 3, TD, sys_fcntl, "fcntl" }, /* 25 */ | ||
149 | - { 1, TD, sys_inotify_init1, "inotify_init1" }, /* 26 */ | ||
150 | - { 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 27 */ | ||
151 | - { 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 28 */ | ||
152 | - { 3, TD, sys_ioctl, "ioctl" }, /* 29 */ | ||
153 | - { 3, 0, sys_ioprio_set, "ioprio_set" }, /* 30 */ | ||
154 | - { 2, 0, sys_ioprio_get, "ioprio_get" }, /* 31 */ | ||
155 | - { 2, TD, sys_flock, "flock" }, /* 32 */ | ||
156 | - { 4, TD|TF, sys_mknodat, "mknodat" }, /* 33 */ | ||
157 | - { 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 34 */ | ||
158 | - { 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 35 */ | ||
159 | - { 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 36 */ | ||
160 | - { 5, TD|TF, sys_linkat, "linkat" }, /* 37 */ | ||
161 | - { 4, TD|TF, sys_renameat, "renameat" }, /* 38 */ | ||
162 | - { 2, TF, sys_umount2, "umount2" }, /* 39 */ | ||
163 | - { 5, TF, sys_mount, "mount" }, /* 40 */ | ||
164 | - { 2, TF, sys_pivotroot, "pivot_root" }, /* 41 */ | ||
165 | - { 3, 0, sys_nfsservctl, "nfsservctl" }, /* 42 */ | ||
166 | - { 2, TF, sys_statfs, "statfs64" }, /* 43 */ | ||
167 | - { 2, TD, sys_fstatfs, "fstatfs64" }, /* 44 */ | ||
168 | - { 2, TF, sys_truncate, "truncate64" }, /* 45 */ | ||
169 | - { 2, TD, sys_ftruncate, "ftruncate64" }, /* 46 */ | ||
170 | - { 6, TD, sys_fallocate, "fallocate" }, /* 47 */ | ||
171 | - { 3, TD|TF, sys_faccessat, "faccessat" }, /* 48 */ | ||
172 | - { 1, TF, sys_chdir, "chdir" }, /* 49 */ | ||
173 | - { 1, TD, sys_fchdir, "fchdir" }, /* 50 */ | ||
174 | - { 1, TF, sys_chroot, "chroot" }, /* 51 */ | ||
175 | - { 2, TD, sys_fchmod, "fchmod" }, /* 52 */ | ||
176 | - { 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 53 */ | ||
177 | - { 5, TD|TF, sys_fchownat, "fchownat" }, /* 54 */ | ||
178 | - { 3, TD, sys_fchown, "fchown" }, /* 55 */ | ||
179 | - { 4, TD|TF, sys_openat, "openat" }, /* 56 */ | ||
180 | - { 1, TD, sys_close, "close" }, /* 57 */ | ||
181 | - { 0, 0, sys_vhangup, "vhangup" }, /* 58 */ | ||
182 | - { 2, TD, sys_pipe2, "pipe2" }, /* 59 */ | ||
183 | - { 4, TF, sys_quotactl, "quotactl" }, /* 60 */ | ||
184 | - { 3, TD, sys_getdents64, "getdents64" }, /* 61 */ | ||
185 | - { 3, TD, sys_lseek, "lseek" }, /* 62 */ | ||
186 | - { 3, TD, sys_read, "read" }, /* 63 */ | ||
187 | - { 3, TD, sys_write, "write" }, /* 64 */ | ||
188 | - { 3, TD, sys_readv, "readv" }, /* 65 */ | ||
189 | - { 3, TD, sys_writev, "writev" }, /* 66 */ | ||
190 | - { 5, TD, sys_pread, "pread64" }, /* 67 */ | ||
191 | - { 5, TD, sys_pwrite, "pwrite64" }, /* 68 */ | ||
192 | - { 5, TD, sys_preadv, "preadv" }, /* 69 */ | ||
193 | - { 5, TD, sys_pwritev, "pwritev" }, /* 70 */ | ||
194 | - { 4, TD|TN, sys_sendfile, "sendfile" }, /* 71 */ | ||
195 | - { 6, TD, sys_pselect6, "pselect6" }, /* 72 */ | ||
196 | - { 5, TD, sys_ppoll, "ppoll" }, /* 73 */ | ||
197 | - { 4, TD|TS, sys_signalfd4, "signalfd4" }, /* 74 */ | ||
198 | - { 4, TD, sys_vmsplice, "vmsplice" }, /* 75 */ | ||
199 | - { 6, TD, sys_splice, "splice" }, /* 76 */ | ||
200 | - { 4, TD, sys_tee, "tee" }, /* 77 */ | ||
201 | - { 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 78 */ | ||
202 | - { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 79 */ | ||
203 | - { 2, TD, sys_fstat, "fstat" }, /* 80 */ | ||
204 | - { 0, 0, sys_sync, "sync" }, /* 81 */ | ||
205 | - { 1, TD, sys_fsync, "fsync" }, /* 82 */ | ||
206 | - { 1, TD, sys_fdatasync, "fdatasync" }, /* 83 */ | ||
207 | - { 4, TD, sys_sync_file_range, "sync_file_range" }, /* 84 */ | ||
208 | - { 2, TD, sys_timerfd_create, "timerfd_create" }, /* 85 */ | ||
209 | - { 4, TD, sys_timerfd_settime, "timerfd_settime" }, /* 86 */ | ||
210 | - { 2, TD, sys_timerfd_gettime, "timerfd_gettime" }, /* 87 */ | ||
211 | - { 4, TD|TF, sys_utimensat, "utimensat" }, /* 88 */ | ||
212 | - { 1, TF, sys_acct, "acct" }, /* 89 */ | ||
213 | - { 2, 0, sys_capget, "capget" }, /* 90 */ | ||
214 | - { 2, 0, sys_capset, "capset" }, /* 91 */ | ||
215 | - { 1, 0, sys_personality, "personality" }, /* 92 */ | ||
216 | - { 1, TP, sys_exit, "exit" }, /* 93 */ | ||
217 | - { 1, TP, sys_exit, "exit_group" }, /* 94 */ | ||
218 | - { 5, TP, sys_waitid, "waitid" }, /* 95 */ | ||
219 | - { 1, 0, sys_set_tid_address, "set_tid_address" }, /* 96 */ | ||
220 | - { 1, TP, sys_unshare, "unshare" }, /* 97 */ | ||
221 | - { 6, 0, sys_futex, "futex" }, /* 98 */ | ||
222 | - { 2, 0, sys_set_robust_list, "set_robust_list" }, /* 99 */ | ||
223 | - { 3, 0, sys_get_robust_list, "get_robust_list" }, /* 100 */ | ||
224 | - { 2, 0, sys_nanosleep, "nanosleep" }, /* 101 */ | ||
225 | - { 2, 0, sys_getitimer, "getitimer" }, /* 102 */ | ||
226 | - { 3, 0, sys_setitimer, "setitimer" }, /* 103 */ | ||
227 | - { 4, 0, sys_kexec_load, "kexec_load" }, /* 104 */ | ||
228 | - { 3, 0, sys_init_module, "init_module" }, /* 105 */ | ||
229 | - { 2, 0, sys_delete_module, "delete_module" }, /* 106 */ | ||
230 | - { 3, 0, sys_timer_create, "timer_create" }, /* 107 */ | ||
231 | - { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 108 */ | ||
232 | - { 1, 0, sys_timer_getoverrun, "timer_getoverrun" }, /* 109 */ | ||
233 | - { 4, 0, sys_timer_settime, "timer_settime" }, /* 110 */ | ||
234 | - { 1, 0, sys_timer_delete, "timer_delete" }, /* 111 */ | ||
235 | - { 2, 0, sys_clock_settime, "clock_settime" }, /* 112 */ | ||
236 | - { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 113 */ | ||
237 | - { 2, 0, sys_clock_getres, "clock_getres" }, /* 114 */ | ||
238 | - { 4, 0, sys_clock_nanosleep, "clock_nanosleep" }, /* 115 */ | ||
239 | - { 3, 0, sys_syslog, "syslog" }, /* 116 */ | ||
240 | - { 4, 0, sys_ptrace, "ptrace" }, /* 117 */ | ||
241 | - { 0, 0, sys_sched_setparam, "sched_setparam" }, /* 118 */ | ||
242 | - { 3, 0, sys_sched_setscheduler, "sched_setscheduler" }, /* 119 */ | ||
243 | - { 1, 0, sys_sched_getscheduler, "sched_getscheduler" }, /* 120 */ | ||
244 | - { 2, 0, sys_sched_getparam, "sched_getparam" }, /* 121 */ | ||
245 | - { 3, 0, sys_sched_setaffinity, "sched_setaffinity" }, /* 122 */ | ||
246 | - { 3, 0, sys_sched_getaffinity, "sched_getaffinity" }, /* 123 */ | ||
247 | - { 0, 0, sys_sched_yield, "sched_yield" }, /* 124 */ | ||
248 | - { 1, 0, sys_sched_get_priority_max, "sched_get_priority_max" }, /* 125 */ | ||
249 | - { 1, 0, sys_sched_get_priority_min, "sched_get_priority_min" }, /* 126 */ | ||
250 | - { 2, 0, sys_sched_rr_get_interval, "sched_rr_get_interval" }, /* 127 */ | ||
251 | - { 0, 0, sys_restart_syscall, "restart_syscall" }, /* 128 */ | ||
252 | - { 2, TS, sys_kill, "kill" }, /* 129 */ | ||
253 | - { 2, TS, sys_kill, "tkill" }, /* 130 */ | ||
254 | - { 3, TS, sys_tgkill, "tgkill" }, /* 131 */ | ||
255 | - { 2, TS, sys_sigaltstack, "sigaltstack" }, /* 132 */ | ||
256 | - { 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 133 */ | ||
257 | - { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 134 */ | ||
258 | - { 4, TS, sys_rt_sigprocmask, "rt_sigprocmask" }, /* 135 */ | ||
259 | - { 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 136 */ | ||
260 | - { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait" }, /* 137 */ | ||
261 | - { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo" }, /* 138 */ | ||
262 | - { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 139 */ | ||
263 | - { 3, 0, sys_setpriority, "setpriority" }, /* 140 */ | ||
264 | - { 2, 0, sys_getpriority, "getpriority" }, /* 141 */ | ||
265 | - { 4, 0, sys_reboot, "reboot" }, /* 142 */ | ||
266 | - { 2, 0, sys_setregid, "setregid" }, /* 143 */ | ||
267 | - { 1, 0, sys_setgid, "setgid" }, /* 144 */ | ||
268 | - { 2, 0, sys_setreuid, "setreuid" }, /* 145 */ | ||
269 | - { 1, 0, sys_setuid, "setuid" }, /* 146 */ | ||
270 | - { 3, 0, sys_setresuid, "setresuid" }, /* 147 */ | ||
271 | - { 3, 0, sys_getresuid, "getresuid" }, /* 148 */ | ||
272 | - { 3, 0, sys_setresgid, "setresgid" }, /* 149 */ | ||
273 | - { 3, 0, sys_getresgid, "getresgid" }, /* 150 */ | ||
274 | - { 1, NF, sys_setfsuid, "setfsuid" }, /* 151 */ | ||
275 | - { 1, NF, sys_setfsgid, "setfsgid" }, /* 152 */ | ||
276 | - { 1, 0, sys_times, "times" }, /* 153 */ | ||
277 | - { 2, 0, sys_setpgid, "setpgid" }, /* 154 */ | ||
278 | - { 1, 0, sys_getpgid, "getpgid" }, /* 155 */ | ||
279 | - { 1, 0, sys_getsid, "getsid" }, /* 156 */ | ||
280 | - { 0, 0, sys_setsid, "setsid" }, /* 157 */ | ||
281 | - { 2, 0, sys_getgroups, "getgroups" }, /* 158 */ | ||
282 | - { 2, 0, sys_setgroups, "setgroups" }, /* 159 */ | ||
283 | - { 1, 0, sys_uname, "uname" }, /* 160 */ | ||
284 | - { 2, 0, sys_sethostname, "sethostname" }, /* 161 */ | ||
285 | - { 2, 0, sys_setdomainname, "setdomainname" }, /* 162 */ | ||
286 | - { 2, 0, sys_getrlimit, "getrlimit" }, /* 163 */ | ||
287 | - { 2, 0, sys_setrlimit, "setrlimit" }, /* 164 */ | ||
288 | - { 2, 0, sys_getrusage, "getrusage" }, /* 165 */ | ||
289 | - { 1, 0, sys_umask, "umask" }, /* 166 */ | ||
290 | - { 5, 0, sys_prctl, "prctl" }, /* 167 */ | ||
291 | - { 3, 0, sys_getcpu, "getcpu" }, /* 168 */ | ||
292 | - { 2, 0, sys_gettimeofday, "gettimeofday" }, /* 169 */ | ||
293 | - { 2, 0, sys_settimeofday, "settimeofday" }, /* 170 */ | ||
294 | - { 1, 0, sys_adjtimex, "adjtimex" }, /* 171 */ | ||
295 | - { 0, 0, sys_getpid, "getpid" }, /* 172 */ | ||
296 | - { 0, 0, sys_getppid, "getppid" }, /* 173 */ | ||
297 | - { 0, NF, sys_getuid, "getuid" }, /* 174 */ | ||
298 | - { 0, NF, sys_geteuid, "geteuid" }, /* 175 */ | ||
299 | - { 0, NF, sys_getgid, "getgid" }, /* 176 */ | ||
300 | - { 0, NF, sys_getegid, "getegid" }, /* 177 */ | ||
301 | - { 0, 0, sys_gettid, "gettid" }, /* 178 */ | ||
302 | - { 1, 0, sys_sysinfo, "sysinfo" }, /* 179 */ | ||
303 | - { 4, 0, sys_mq_open, "mq_open" }, /* 180 */ | ||
304 | - { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 181 */ | ||
305 | - { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 182 */ | ||
306 | - { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 183 */ | ||
307 | - { 2, 0, sys_mq_notify, "mq_notify" }, /* 184 */ | ||
308 | - { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 185 */ | ||
309 | - { 4, TI, sys_msgget, "msgget" }, /* 186 */ | ||
310 | - { 3, TI, sys_msgctl, "msgctl" }, /* 187 */ | ||
311 | - { 5, TI, sys_msgrcv, "msgrcv" }, /* 188 */ | ||
312 | - { 4, TI, sys_msgsnd, "msgsnd" }, /* 189 */ | ||
313 | - { 4, TI, sys_semget, "semget" }, /* 190 */ | ||
314 | - { 4, TI, sys_semctl, "semctl" }, /* 191 */ | ||
315 | - { 5, TI, sys_semtimedop, "semtimedop" }, /* 192 */ | ||
316 | - { 4, TI, sys_semop, "semop" }, /* 193 */ | ||
317 | - { 4, TI, sys_shmget, "shmget" }, /* 194 */ | ||
318 | - { 4, TI, sys_shmctl, "shmctl" }, /* 195 */ | ||
319 | - { 4, TI, sys_shmat, "shmat" }, /* 196 */ | ||
320 | - { 4, TI, sys_shmdt, "shmdt" }, /* 197 */ | ||
321 | - { 3, TN, sys_socket, "socket" }, /* 198 */ | ||
322 | - { 4, TN, sys_socketpair, "socketpair" }, /* 199 */ | ||
323 | - { 3, TN, sys_bind, "bind" }, /* 200 */ | ||
324 | - { 2, TN, sys_listen, "listen" }, /* 201 */ | ||
325 | - { 3, TN, sys_accept, "accept" }, /* 202 */ | ||
326 | - { 3, TN, sys_connect, "connect" }, /* 203 */ | ||
327 | - { 3, TN, sys_getsockname, "getsockname" }, /* 204 */ | ||
328 | - { 3, TN, sys_getpeername, "getpeername" }, /* 205 */ | ||
329 | - { 6, TN, sys_sendto, "sendto" }, /* 206 */ | ||
330 | - { 6, TN, sys_recvfrom, "recvfrom" }, /* 207 */ | ||
331 | - { 5, TN, sys_setsockopt, "setsockopt" }, /* 208 */ | ||
332 | - { 5, TN, sys_getsockopt, "getsockopt" }, /* 209 */ | ||
333 | - { 2, TN, sys_shutdown, "shutdown" }, /* 210 */ | ||
334 | - { 3, TN, sys_sendmsg, "sendmsg" }, /* 211 */ | ||
335 | - { 5, TN, sys_recvmsg, "recvmsg" }, /* 212 */ | ||
336 | - { 4, TD, sys_readahead, "readahead" }, /* 213 */ | ||
337 | - { 1, TM, sys_brk, "brk" }, /* 214 */ | ||
338 | - { 2, TM, sys_munmap, "munmap" }, /* 215 */ | ||
339 | - { 5, TM, sys_mremap, "mremap" }, /* 216 */ | ||
340 | - { 5, 0, sys_add_key, "add_key" }, /* 217 */ | ||
341 | - { 4, 0, sys_request_key, "request_key" }, /* 218 */ | ||
342 | - { 5, 0, sys_keyctl, "keyctl" }, /* 219 */ | ||
343 | - { 5, TP, sys_clone, "clone" }, /* 220 */ | ||
344 | - { 3, TF|TP, sys_execve, "execve" }, /* 221 */ | ||
345 | - { 6, TD|TM, sys_mmap, "mmap" }, /* 222 */ | ||
346 | - { 4, TD, sys_fadvise64, "fadvise64" }, /* 223 */ | ||
347 | - { 2, TF, sys_swapon, "swapon" }, /* 224 */ | ||
348 | - { 1, TF, sys_swapoff, "swapoff" }, /* 225 */ | ||
349 | - { 3, TM, sys_mprotect, "mprotect" }, /* 226 */ | ||
350 | - { 3, TM, sys_msync, "msync" }, /* 227 */ | ||
351 | - { 3, TM, sys_msync, "msync" }, /* 228 */ | ||
352 | - { 2, TM, sys_munlock, "munlock" }, /* 229 */ | ||
353 | - { 1, TM, sys_mlockall, "mlockall" }, /* 230 */ | ||
354 | - { 0, TM, sys_munlockall, "munlockall" }, /* 231 */ | ||
355 | - { 3, TM, sys_mincore, "mincore" }, /* 232 */ | ||
356 | - { 3, TM, sys_madvise, "madvise" }, /* 233 */ | ||
357 | - { 5, TM, sys_remap_file_pages, "remap_file_pages" }, /* 234 */ | ||
358 | - { 6, TM, sys_mbind, "mbind" }, /* 235 */ | ||
359 | - { 5, TM, sys_get_mempolicy, "get_mempolicy" }, /* 236 */ | ||
360 | - { 3, TM, sys_set_mempolicy, "set_mempolicy" }, /* 237 */ | ||
361 | - { 4, TM, sys_migrate_pages, "migrate_pages" }, /* 238 */ | ||
362 | - { 6, TM, sys_move_pages, "move_pages" }, /* 239 */ | ||
363 | - { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 240 */ | ||
364 | - { 5, TD, sys_perf_event_open, "perf_event_open" }, /* 241 */ | ||
365 | - { 4, TN, sys_accept4, "accept4" }, /* 242 */ | ||
366 | - { 5, TN, sys_recvmmsg, "recvmmsg" }, /* 243 */ | ||
367 | - | ||
368 | - /* Arch-specific block, not used on AArch64 */ | ||
369 | - [244 ... 259] = { }, | ||
370 | - | ||
371 | - { 4, TP, sys_wait4, "wait4" }, /* 260 */ | ||
372 | - { 4, 0, sys_prlimit64, "prlimit64" }, /* 261 */ | ||
373 | - { 2, TD, sys_fanotify_init, "fanotify_init" }, /* 262 */ | ||
374 | - { 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 263 */ | ||
375 | - { 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at" }, /* 264 */ | ||
376 | - { 3, TD, sys_open_by_handle_at, "open_by_handle_at" }, /* 265 */ | ||
377 | - { 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 266 */ | ||
378 | - { 1, TD, sys_syncfs, "syncfs" }, /* 267 */ | ||
379 | - { 2, TD, sys_setns, "setns" }, /* 268 */ | ||
380 | - { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 269 */ | ||
381 | - { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 270 */ | ||
382 | - { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 271 */ | ||
383 | - | ||
384 | - /* Blank down to 1023 */ | ||
385 | - [272 ... 1023] = { }, | ||
386 | - | ||
387 | - /* Quote from asm-generic/unistd.h: | ||
388 | - * | ||
389 | - * All syscalls below here should go away really, | ||
390 | - * these are provided for both review and as a porting | ||
391 | - * help for the C library version. | ||
392 | - * | ||
393 | - * Last chance: are any of these important enough to | ||
394 | - * enable by default? | ||
395 | - */ | ||
396 | - | ||
397 | - { 3, TD|TF, sys_open, "open" }, /* 1024 */ | ||
398 | - { 2, TF, sys_link, "link" }, /* 1025 */ | ||
399 | - { 1, TF, sys_unlink, "unlink" }, /* 1026 */ | ||
400 | - { 3, TF, sys_mknod, "mknod" }, /* 1027 */ | ||
401 | - { 2, TF, sys_chmod, "chmod" }, /* 1028 */ | ||
402 | - { 3, TF, sys_chown, "chown" }, /* 1029 */ | ||
403 | - { 2, TF, sys_mkdir, "mkdir" }, /* 1030 */ | ||
404 | - { 1, TF, sys_rmdir, "rmdir" }, /* 1031 */ | ||
405 | - { 3, TF, sys_chown, "lchown" }, /* 1032 */ | ||
406 | - { 2, TF, sys_access, "access" }, /* 1033 */ | ||
407 | - { 2, TF, sys_rename, "rename" }, /* 1034 */ | ||
408 | - { 3, TF, sys_readlink, "readlink" }, /* 1035 */ | ||
409 | - { 2, TF, sys_symlink, "symlink" }, /* 1036 */ | ||
410 | - { 2, TF, sys_utimes, "utimes" }, /* 1037 */ | ||
411 | - { 2, TF, sys_stat, "stat" }, /* 1038 */ | ||
412 | - { 2, TF, sys_lstat, "lstat" }, /* 1039 */ | ||
413 | - { 1, TD, sys_pipe, "pipe" }, /* 1040 */ | ||
414 | - { 2, TD, sys_dup2, "dup2" }, /* 1041 */ | ||
415 | - { 1, TD, sys_epoll_create, "epoll_create" }, /* 1042 */ | ||
416 | - { 0, TD, sys_inotify_init, "inotify_init" }, /* 1043 */ | ||
417 | - { 1, TD, sys_eventfd, "eventfd" }, /* 1044 */ | ||
418 | - { 3, TD|TS, sys_signalfd, "signalfd" }, /* 1045 */ | ||
419 | - { 4, TD|TN, sys_sendfile, "sendfile" }, /* 1046 */ | ||
420 | - { 2, TD, sys_ftruncate, "ftruncate" }, /* 1047 */ | ||
421 | - { 2, TF, sys_truncate, "truncate" }, /* 1048 */ | ||
422 | - { 2, TF, sys_stat, "stat" }, /* 1049 */ | ||
423 | - { 2, TF, sys_lstat, "lstat" }, /* 1050 */ | ||
424 | - { 2, TD, sys_fstat, "fstat" }, /* 1051 */ | ||
425 | - { 3, TD, sys_fcntl, "fcntl" }, /* 1052 */ | ||
426 | - { 4, TD, sys_fadvise64, "fadvise64" }, /* 1053 */ | ||
427 | - { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 1054 */ | ||
428 | - { 2, TD, sys_fstatfs, "fstatfs" }, /* 1055 */ | ||
429 | - { 2, TF, sys_statfs, "statfs" }, /* 1056 */ | ||
430 | - { 3, TD, sys_lseek, "lseek" }, /* 1057 */ | ||
431 | - { 6, TD|TM, sys_mmap, "mmap" }, /* 1058 */ | ||
432 | - { 1, 0, sys_alarm, "alarm" }, /* 1059 */ | ||
433 | - { 0, 0, sys_getpgrp, "getpgrp" }, /* 1060 */ | ||
434 | - { 0, TS, sys_pause, "pause" }, /* 1061 */ | ||
435 | - { 1, 0, sys_time, "time" }, /* 1062 */ | ||
436 | - { 2, TF, sys_utime, "utime" }, /* 1063 */ | ||
437 | - { 2, TD|TF, sys_creat, "creat" }, /* 1064 */ | ||
438 | - { 3, TD, sys_getdents, "getdents" }, /* 1065 */ | ||
439 | - { 3, TD|TF, sys_futimesat, "futimesat" }, /* 1066 */ | ||
440 | - { 5, TD, sys_select, "select" }, /* 1067 */ | ||
441 | - { 3, TD, sys_poll, "poll" }, /* 1068 */ | ||
442 | - { 4, TD, sys_epoll_wait, "epoll_wait" }, /* 1069 */ | ||
443 | - { 2, 0, sys_ustat, "ustat" }, /* 1070 */ | ||
444 | - { 0, TP, sys_vfork, "vfork" }, /* 1071 */ | ||
445 | - { 4, TP, sys_wait4, "wait4" }, /* 1072 */ | ||
446 | - { 6, TN, sys_recv, "recv" }, /* 1073 */ | ||
447 | - { 4, TD|TN, sys_send, "send" }, /* 1074 */ | ||
448 | - { 2, 0, sys_bdflush, "bdflush" }, /* 1075 */ | ||
449 | - { 2, TF, sys_umount, "umount" }, /* 1076 */ | ||
450 | - { 1, TF, sys_uselib, "uselib" }, /* 1077 */ | ||
451 | - { 1, 0, sys_sysctl, "sysctl" }, /* 1078 */ | ||
452 | - { 0, TP, sys_fork, "fork" }, /* 1079 */ | ||
453 | +#include "../arm/syscallent.h" | ||
454 | diff --git a/linux/aarch64/syscallent1.h b/linux/aarch64/syscallent1.h | ||
455 | new file mode 100644 | ||
456 | index 0000000..b712c9f | ||
457 | --- /dev/null | ||
458 | +++ b/linux/aarch64/syscallent1.h | ||
459 | @@ -0,0 +1,330 @@ | ||
460 | + { 2, 0, sys_io_setup, "io_setup" }, /* 0 */ | ||
461 | + { 1, 0, sys_io_destroy, "io_destroy" }, /* 1 */ | ||
462 | + { 3, 0, sys_io_submit, "io_submit" }, /* 2 */ | ||
463 | + { 3, 0, sys_io_cancel, "io_cancel" }, /* 3 */ | ||
464 | + { 5, 0, sys_io_getevents, "io_getevents" }, /* 4 */ | ||
465 | + { 5, TF, sys_setxattr, "setxattr" }, /* 5 */ | ||
466 | + { 5, TF, sys_setxattr, "lsetxattr" }, /* 6 */ | ||
467 | + { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 7 */ | ||
468 | + { 4, TF, sys_getxattr, "getxattr" }, /* 8 */ | ||
469 | + { 4, TF, sys_getxattr, "lgetxattr" }, /* 9 */ | ||
470 | + { 4, TD, sys_fgetxattr, "fgetxattr" }, /* 10 */ | ||
471 | + { 3, TF, sys_listxattr, "listxattr" }, /* 11 */ | ||
472 | + { 3, TF, sys_listxattr, "llistxattr" }, /* 12 */ | ||
473 | + { 3, TD, sys_flistxattr, "flistxattr" }, /* 13 */ | ||
474 | + { 2, TF, sys_removexattr, "removexattr" }, /* 14 */ | ||
475 | + { 2, TF, sys_removexattr, "lremovexattr" }, /* 15 */ | ||
476 | + { 2, TD, sys_fremovexattr, "fremovexattr" }, /* 16 */ | ||
477 | + { 2, TF, sys_getcwd, "getcwd" }, /* 17 */ | ||
478 | + { 4, 0, sys_lookup_dcookie, "lookup_dcookie" }, /* 18 */ | ||
479 | + { 2, TD, sys_eventfd2, "eventfd2" }, /* 19 */ | ||
480 | + { 1, TD, sys_epoll_create1, "epoll_create1" }, /* 20 */ | ||
481 | + { 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 21 */ | ||
482 | + { 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 22 */ | ||
483 | + { 1, TD, sys_dup, "dup" }, /* 23 */ | ||
484 | + { 3, TD, sys_dup3, "dup3" }, /* 24 */ | ||
485 | + { 3, TD, sys_fcntl, "fcntl" }, /* 25 */ | ||
486 | + { 1, TD, sys_inotify_init1, "inotify_init1" }, /* 26 */ | ||
487 | + { 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 27 */ | ||
488 | + { 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 28 */ | ||
489 | + { 3, TD, sys_ioctl, "ioctl" }, /* 29 */ | ||
490 | + { 3, 0, sys_ioprio_set, "ioprio_set" }, /* 30 */ | ||
491 | + { 2, 0, sys_ioprio_get, "ioprio_get" }, /* 31 */ | ||
492 | + { 2, TD, sys_flock, "flock" }, /* 32 */ | ||
493 | + { 4, TD|TF, sys_mknodat, "mknodat" }, /* 33 */ | ||
494 | + { 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 34 */ | ||
495 | + { 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 35 */ | ||
496 | + { 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 36 */ | ||
497 | + { 5, TD|TF, sys_linkat, "linkat" }, /* 37 */ | ||
498 | + { 4, TD|TF, sys_renameat, "renameat" }, /* 38 */ | ||
499 | + { 2, TF, sys_umount2, "umount2" }, /* 39 */ | ||
500 | + { 5, TF, sys_mount, "mount" }, /* 40 */ | ||
501 | + { 2, TF, sys_pivotroot, "pivot_root" }, /* 41 */ | ||
502 | + { 3, 0, sys_nfsservctl, "nfsservctl" }, /* 42 */ | ||
503 | + { 2, TF, sys_statfs, "statfs64" }, /* 43 */ | ||
504 | + { 2, TD, sys_fstatfs, "fstatfs64" }, /* 44 */ | ||
505 | + { 2, TF, sys_truncate, "truncate64" }, /* 45 */ | ||
506 | + { 2, TD, sys_ftruncate, "ftruncate64" }, /* 46 */ | ||
507 | + { 6, TD, sys_fallocate, "fallocate" }, /* 47 */ | ||
508 | + { 3, TD|TF, sys_faccessat, "faccessat" }, /* 48 */ | ||
509 | + { 1, TF, sys_chdir, "chdir" }, /* 49 */ | ||
510 | + { 1, TD, sys_fchdir, "fchdir" }, /* 50 */ | ||
511 | + { 1, TF, sys_chroot, "chroot" }, /* 51 */ | ||
512 | + { 2, TD, sys_fchmod, "fchmod" }, /* 52 */ | ||
513 | + { 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 53 */ | ||
514 | + { 5, TD|TF, sys_fchownat, "fchownat" }, /* 54 */ | ||
515 | + { 3, TD, sys_fchown, "fchown" }, /* 55 */ | ||
516 | + { 4, TD|TF, sys_openat, "openat" }, /* 56 */ | ||
517 | + { 1, TD, sys_close, "close" }, /* 57 */ | ||
518 | + { 0, 0, sys_vhangup, "vhangup" }, /* 58 */ | ||
519 | + { 2, TD, sys_pipe2, "pipe2" }, /* 59 */ | ||
520 | + { 4, TF, sys_quotactl, "quotactl" }, /* 60 */ | ||
521 | + { 3, TD, sys_getdents64, "getdents64" }, /* 61 */ | ||
522 | + { 3, TD, sys_lseek, "lseek" }, /* 62 */ | ||
523 | + { 3, TD, sys_read, "read" }, /* 63 */ | ||
524 | + { 3, TD, sys_write, "write" }, /* 64 */ | ||
525 | + { 3, TD, sys_readv, "readv" }, /* 65 */ | ||
526 | + { 3, TD, sys_writev, "writev" }, /* 66 */ | ||
527 | + { 5, TD, sys_pread, "pread64" }, /* 67 */ | ||
528 | + { 5, TD, sys_pwrite, "pwrite64" }, /* 68 */ | ||
529 | + { 5, TD, sys_preadv, "preadv" }, /* 69 */ | ||
530 | + { 5, TD, sys_pwritev, "pwritev" }, /* 70 */ | ||
531 | + { 4, TD|TN, sys_sendfile, "sendfile" }, /* 71 */ | ||
532 | + { 6, TD, sys_pselect6, "pselect6" }, /* 72 */ | ||
533 | + { 5, TD, sys_ppoll, "ppoll" }, /* 73 */ | ||
534 | + { 4, TD|TS, sys_signalfd4, "signalfd4" }, /* 74 */ | ||
535 | + { 4, TD, sys_vmsplice, "vmsplice" }, /* 75 */ | ||
536 | + { 6, TD, sys_splice, "splice" }, /* 76 */ | ||
537 | + { 4, TD, sys_tee, "tee" }, /* 77 */ | ||
538 | + { 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 78 */ | ||
539 | + { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 79 */ | ||
540 | + { 2, TD, sys_fstat, "fstat" }, /* 80 */ | ||
541 | + { 0, 0, sys_sync, "sync" }, /* 81 */ | ||
542 | + { 1, TD, sys_fsync, "fsync" }, /* 82 */ | ||
543 | + { 1, TD, sys_fdatasync, "fdatasync" }, /* 83 */ | ||
544 | + { 4, TD, sys_sync_file_range, "sync_file_range" }, /* 84 */ | ||
545 | + { 2, TD, sys_timerfd_create, "timerfd_create" }, /* 85 */ | ||
546 | + { 4, TD, sys_timerfd_settime, "timerfd_settime" }, /* 86 */ | ||
547 | + { 2, TD, sys_timerfd_gettime, "timerfd_gettime" }, /* 87 */ | ||
548 | + { 4, TD|TF, sys_utimensat, "utimensat" }, /* 88 */ | ||
549 | + { 1, TF, sys_acct, "acct" }, /* 89 */ | ||
550 | + { 2, 0, sys_capget, "capget" }, /* 90 */ | ||
551 | + { 2, 0, sys_capset, "capset" }, /* 91 */ | ||
552 | + { 1, 0, sys_personality, "personality" }, /* 92 */ | ||
553 | + { 1, TP, sys_exit, "exit" }, /* 93 */ | ||
554 | + { 1, TP, sys_exit, "exit_group" }, /* 94 */ | ||
555 | + { 5, TP, sys_waitid, "waitid" }, /* 95 */ | ||
556 | + { 1, 0, sys_set_tid_address, "set_tid_address" }, /* 96 */ | ||
557 | + { 1, TP, sys_unshare, "unshare" }, /* 97 */ | ||
558 | + { 6, 0, sys_futex, "futex" }, /* 98 */ | ||
559 | + { 2, 0, sys_set_robust_list, "set_robust_list" }, /* 99 */ | ||
560 | + { 3, 0, sys_get_robust_list, "get_robust_list" }, /* 100 */ | ||
561 | + { 2, 0, sys_nanosleep, "nanosleep" }, /* 101 */ | ||
562 | + { 2, 0, sys_getitimer, "getitimer" }, /* 102 */ | ||
563 | + { 3, 0, sys_setitimer, "setitimer" }, /* 103 */ | ||
564 | + { 4, 0, sys_kexec_load, "kexec_load" }, /* 104 */ | ||
565 | + { 3, 0, sys_init_module, "init_module" }, /* 105 */ | ||
566 | + { 2, 0, sys_delete_module, "delete_module" }, /* 106 */ | ||
567 | + { 3, 0, sys_timer_create, "timer_create" }, /* 107 */ | ||
568 | + { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 108 */ | ||
569 | + { 1, 0, sys_timer_getoverrun, "timer_getoverrun" }, /* 109 */ | ||
570 | + { 4, 0, sys_timer_settime, "timer_settime" }, /* 110 */ | ||
571 | + { 1, 0, sys_timer_delete, "timer_delete" }, /* 111 */ | ||
572 | + { 2, 0, sys_clock_settime, "clock_settime" }, /* 112 */ | ||
573 | + { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 113 */ | ||
574 | + { 2, 0, sys_clock_getres, "clock_getres" }, /* 114 */ | ||
575 | + { 4, 0, sys_clock_nanosleep, "clock_nanosleep" }, /* 115 */ | ||
576 | + { 3, 0, sys_syslog, "syslog" }, /* 116 */ | ||
577 | + { 4, 0, sys_ptrace, "ptrace" }, /* 117 */ | ||
578 | + { 0, 0, sys_sched_setparam, "sched_setparam" }, /* 118 */ | ||
579 | + { 3, 0, sys_sched_setscheduler, "sched_setscheduler" }, /* 119 */ | ||
580 | + { 1, 0, sys_sched_getscheduler, "sched_getscheduler" }, /* 120 */ | ||
581 | + { 2, 0, sys_sched_getparam, "sched_getparam" }, /* 121 */ | ||
582 | + { 3, 0, sys_sched_setaffinity, "sched_setaffinity" }, /* 122 */ | ||
583 | + { 3, 0, sys_sched_getaffinity, "sched_getaffinity" }, /* 123 */ | ||
584 | + { 0, 0, sys_sched_yield, "sched_yield" }, /* 124 */ | ||
585 | + { 1, 0, sys_sched_get_priority_max, "sched_get_priority_max" }, /* 125 */ | ||
586 | + { 1, 0, sys_sched_get_priority_min, "sched_get_priority_min" }, /* 126 */ | ||
587 | + { 2, 0, sys_sched_rr_get_interval, "sched_rr_get_interval" }, /* 127 */ | ||
588 | + { 0, 0, sys_restart_syscall, "restart_syscall" }, /* 128 */ | ||
589 | + { 2, TS, sys_kill, "kill" }, /* 129 */ | ||
590 | + { 2, TS, sys_kill, "tkill" }, /* 130 */ | ||
591 | + { 3, TS, sys_tgkill, "tgkill" }, /* 131 */ | ||
592 | + { 2, TS, sys_sigaltstack, "sigaltstack" }, /* 132 */ | ||
593 | + { 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 133 */ | ||
594 | + { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 134 */ | ||
595 | + { 4, TS, sys_rt_sigprocmask, "rt_sigprocmask" }, /* 135 */ | ||
596 | + { 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 136 */ | ||
597 | + { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait" }, /* 137 */ | ||
598 | + { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo" }, /* 138 */ | ||
599 | + { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 139 */ | ||
600 | + { 3, 0, sys_setpriority, "setpriority" }, /* 140 */ | ||
601 | + { 2, 0, sys_getpriority, "getpriority" }, /* 141 */ | ||
602 | + { 4, 0, sys_reboot, "reboot" }, /* 142 */ | ||
603 | + { 2, 0, sys_setregid, "setregid" }, /* 143 */ | ||
604 | + { 1, 0, sys_setgid, "setgid" }, /* 144 */ | ||
605 | + { 2, 0, sys_setreuid, "setreuid" }, /* 145 */ | ||
606 | + { 1, 0, sys_setuid, "setuid" }, /* 146 */ | ||
607 | + { 3, 0, sys_setresuid, "setresuid" }, /* 147 */ | ||
608 | + { 3, 0, sys_getresuid, "getresuid" }, /* 148 */ | ||
609 | + { 3, 0, sys_setresgid, "setresgid" }, /* 149 */ | ||
610 | + { 3, 0, sys_getresgid, "getresgid" }, /* 150 */ | ||
611 | + { 1, NF, sys_setfsuid, "setfsuid" }, /* 151 */ | ||
612 | + { 1, NF, sys_setfsgid, "setfsgid" }, /* 152 */ | ||
613 | + { 1, 0, sys_times, "times" }, /* 153 */ | ||
614 | + { 2, 0, sys_setpgid, "setpgid" }, /* 154 */ | ||
615 | + { 1, 0, sys_getpgid, "getpgid" }, /* 155 */ | ||
616 | + { 1, 0, sys_getsid, "getsid" }, /* 156 */ | ||
617 | + { 0, 0, sys_setsid, "setsid" }, /* 157 */ | ||
618 | + { 2, 0, sys_getgroups, "getgroups" }, /* 158 */ | ||
619 | + { 2, 0, sys_setgroups, "setgroups" }, /* 159 */ | ||
620 | + { 1, 0, sys_uname, "uname" }, /* 160 */ | ||
621 | + { 2, 0, sys_sethostname, "sethostname" }, /* 161 */ | ||
622 | + { 2, 0, sys_setdomainname, "setdomainname" }, /* 162 */ | ||
623 | + { 2, 0, sys_getrlimit, "getrlimit" }, /* 163 */ | ||
624 | + { 2, 0, sys_setrlimit, "setrlimit" }, /* 164 */ | ||
625 | + { 2, 0, sys_getrusage, "getrusage" }, /* 165 */ | ||
626 | + { 1, 0, sys_umask, "umask" }, /* 166 */ | ||
627 | + { 5, 0, sys_prctl, "prctl" }, /* 167 */ | ||
628 | + { 3, 0, sys_getcpu, "getcpu" }, /* 168 */ | ||
629 | + { 2, 0, sys_gettimeofday, "gettimeofday" }, /* 169 */ | ||
630 | + { 2, 0, sys_settimeofday, "settimeofday" }, /* 170 */ | ||
631 | + { 1, 0, sys_adjtimex, "adjtimex" }, /* 171 */ | ||
632 | + { 0, 0, sys_getpid, "getpid" }, /* 172 */ | ||
633 | + { 0, 0, sys_getppid, "getppid" }, /* 173 */ | ||
634 | + { 0, NF, sys_getuid, "getuid" }, /* 174 */ | ||
635 | + { 0, NF, sys_geteuid, "geteuid" }, /* 175 */ | ||
636 | + { 0, NF, sys_getgid, "getgid" }, /* 176 */ | ||
637 | + { 0, NF, sys_getegid, "getegid" }, /* 177 */ | ||
638 | + { 0, 0, sys_gettid, "gettid" }, /* 178 */ | ||
639 | + { 1, 0, sys_sysinfo, "sysinfo" }, /* 179 */ | ||
640 | + { 4, 0, sys_mq_open, "mq_open" }, /* 180 */ | ||
641 | + { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 181 */ | ||
642 | + { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 182 */ | ||
643 | + { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 183 */ | ||
644 | + { 2, 0, sys_mq_notify, "mq_notify" }, /* 184 */ | ||
645 | + { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 185 */ | ||
646 | + { 4, TI, sys_msgget, "msgget" }, /* 186 */ | ||
647 | + { 3, TI, sys_msgctl, "msgctl" }, /* 187 */ | ||
648 | + { 5, TI, sys_msgrcv, "msgrcv" }, /* 188 */ | ||
649 | + { 4, TI, sys_msgsnd, "msgsnd" }, /* 189 */ | ||
650 | + { 4, TI, sys_semget, "semget" }, /* 190 */ | ||
651 | + { 4, TI, sys_semctl, "semctl" }, /* 191 */ | ||
652 | + { 5, TI, sys_semtimedop, "semtimedop" }, /* 192 */ | ||
653 | + { 4, TI, sys_semop, "semop" }, /* 193 */ | ||
654 | + { 4, TI, sys_shmget, "shmget" }, /* 194 */ | ||
655 | + { 4, TI, sys_shmctl, "shmctl" }, /* 195 */ | ||
656 | + { 4, TI, sys_shmat, "shmat" }, /* 196 */ | ||
657 | + { 4, TI, sys_shmdt, "shmdt" }, /* 197 */ | ||
658 | + { 3, TN, sys_socket, "socket" }, /* 198 */ | ||
659 | + { 4, TN, sys_socketpair, "socketpair" }, /* 199 */ | ||
660 | + { 3, TN, sys_bind, "bind" }, /* 200 */ | ||
661 | + { 2, TN, sys_listen, "listen" }, /* 201 */ | ||
662 | + { 3, TN, sys_accept, "accept" }, /* 202 */ | ||
663 | + { 3, TN, sys_connect, "connect" }, /* 203 */ | ||
664 | + { 3, TN, sys_getsockname, "getsockname" }, /* 204 */ | ||
665 | + { 3, TN, sys_getpeername, "getpeername" }, /* 205 */ | ||
666 | + { 6, TN, sys_sendto, "sendto" }, /* 206 */ | ||
667 | + { 6, TN, sys_recvfrom, "recvfrom" }, /* 207 */ | ||
668 | + { 5, TN, sys_setsockopt, "setsockopt" }, /* 208 */ | ||
669 | + { 5, TN, sys_getsockopt, "getsockopt" }, /* 209 */ | ||
670 | + { 2, TN, sys_shutdown, "shutdown" }, /* 210 */ | ||
671 | + { 3, TN, sys_sendmsg, "sendmsg" }, /* 211 */ | ||
672 | + { 5, TN, sys_recvmsg, "recvmsg" }, /* 212 */ | ||
673 | + { 4, TD, sys_readahead, "readahead" }, /* 213 */ | ||
674 | + { 1, TM, sys_brk, "brk" }, /* 214 */ | ||
675 | + { 2, TM, sys_munmap, "munmap" }, /* 215 */ | ||
676 | + { 5, TM, sys_mremap, "mremap" }, /* 216 */ | ||
677 | + { 5, 0, sys_add_key, "add_key" }, /* 217 */ | ||
678 | + { 4, 0, sys_request_key, "request_key" }, /* 218 */ | ||
679 | + { 5, 0, sys_keyctl, "keyctl" }, /* 219 */ | ||
680 | + { 5, TP, sys_clone, "clone" }, /* 220 */ | ||
681 | + { 3, TF|TP, sys_execve, "execve" }, /* 221 */ | ||
682 | + { 6, TD|TM, sys_mmap, "mmap" }, /* 222 */ | ||
683 | + { 4, TD, sys_fadvise64, "fadvise64" }, /* 223 */ | ||
684 | + { 2, TF, sys_swapon, "swapon" }, /* 224 */ | ||
685 | + { 1, TF, sys_swapoff, "swapoff" }, /* 225 */ | ||
686 | + { 3, TM, sys_mprotect, "mprotect" }, /* 226 */ | ||
687 | + { 3, TM, sys_msync, "msync" }, /* 227 */ | ||
688 | + { 3, TM, sys_msync, "msync" }, /* 228 */ | ||
689 | + { 2, TM, sys_munlock, "munlock" }, /* 229 */ | ||
690 | + { 1, TM, sys_mlockall, "mlockall" }, /* 230 */ | ||
691 | + { 0, TM, sys_munlockall, "munlockall" }, /* 231 */ | ||
692 | + { 3, TM, sys_mincore, "mincore" }, /* 232 */ | ||
693 | + { 3, TM, sys_madvise, "madvise" }, /* 233 */ | ||
694 | + { 5, TM, sys_remap_file_pages, "remap_file_pages" }, /* 234 */ | ||
695 | + { 6, TM, sys_mbind, "mbind" }, /* 235 */ | ||
696 | + { 5, TM, sys_get_mempolicy, "get_mempolicy" }, /* 236 */ | ||
697 | + { 3, TM, sys_set_mempolicy, "set_mempolicy" }, /* 237 */ | ||
698 | + { 4, TM, sys_migrate_pages, "migrate_pages" }, /* 238 */ | ||
699 | + { 6, TM, sys_move_pages, "move_pages" }, /* 239 */ | ||
700 | + { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 240 */ | ||
701 | + { 5, TD, sys_perf_event_open, "perf_event_open" }, /* 241 */ | ||
702 | + { 4, TN, sys_accept4, "accept4" }, /* 242 */ | ||
703 | + { 5, TN, sys_recvmmsg, "recvmmsg" }, /* 243 */ | ||
704 | + | ||
705 | + /* Arch-specific block, not used on AArch64 */ | ||
706 | + [244 ... 259] = { }, | ||
707 | + | ||
708 | + { 4, TP, sys_wait4, "wait4" }, /* 260 */ | ||
709 | + { 4, 0, sys_prlimit64, "prlimit64" }, /* 261 */ | ||
710 | + { 2, TD, sys_fanotify_init, "fanotify_init" }, /* 262 */ | ||
711 | + { 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 263 */ | ||
712 | + { 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at" }, /* 264 */ | ||
713 | + { 3, TD, sys_open_by_handle_at, "open_by_handle_at" }, /* 265 */ | ||
714 | + { 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 266 */ | ||
715 | + { 1, TD, sys_syncfs, "syncfs" }, /* 267 */ | ||
716 | + { 2, TD, sys_setns, "setns" }, /* 268 */ | ||
717 | + { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 269 */ | ||
718 | + { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 270 */ | ||
719 | + { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 271 */ | ||
720 | + | ||
721 | + /* Blank down to 1023 */ | ||
722 | + [272 ... 1023] = { }, | ||
723 | + | ||
724 | + /* Quote from asm-generic/unistd.h: | ||
725 | + * | ||
726 | + * All syscalls below here should go away really, | ||
727 | + * these are provided for both review and as a porting | ||
728 | + * help for the C library version. | ||
729 | + * | ||
730 | + * Last chance: are any of these important enough to | ||
731 | + * enable by default? | ||
732 | + */ | ||
733 | + | ||
734 | + { 3, TD|TF, sys_open, "open" }, /* 1024 */ | ||
735 | + { 2, TF, sys_link, "link" }, /* 1025 */ | ||
736 | + { 1, TF, sys_unlink, "unlink" }, /* 1026 */ | ||
737 | + { 3, TF, sys_mknod, "mknod" }, /* 1027 */ | ||
738 | + { 2, TF, sys_chmod, "chmod" }, /* 1028 */ | ||
739 | + { 3, TF, sys_chown, "chown" }, /* 1029 */ | ||
740 | + { 2, TF, sys_mkdir, "mkdir" }, /* 1030 */ | ||
741 | + { 1, TF, sys_rmdir, "rmdir" }, /* 1031 */ | ||
742 | + { 3, TF, sys_chown, "lchown" }, /* 1032 */ | ||
743 | + { 2, TF, sys_access, "access" }, /* 1033 */ | ||
744 | + { 2, TF, sys_rename, "rename" }, /* 1034 */ | ||
745 | + { 3, TF, sys_readlink, "readlink" }, /* 1035 */ | ||
746 | + { 2, TF, sys_symlink, "symlink" }, /* 1036 */ | ||
747 | + { 2, TF, sys_utimes, "utimes" }, /* 1037 */ | ||
748 | + { 2, TF, sys_stat, "stat" }, /* 1038 */ | ||
749 | + { 2, TF, sys_lstat, "lstat" }, /* 1039 */ | ||
750 | + { 1, TD, sys_pipe, "pipe" }, /* 1040 */ | ||
751 | + { 2, TD, sys_dup2, "dup2" }, /* 1041 */ | ||
752 | + { 1, TD, sys_epoll_create, "epoll_create" }, /* 1042 */ | ||
753 | + { 0, TD, sys_inotify_init, "inotify_init" }, /* 1043 */ | ||
754 | + { 1, TD, sys_eventfd, "eventfd" }, /* 1044 */ | ||
755 | + { 3, TD|TS, sys_signalfd, "signalfd" }, /* 1045 */ | ||
756 | + { 4, TD|TN, sys_sendfile, "sendfile" }, /* 1046 */ | ||
757 | + { 2, TD, sys_ftruncate, "ftruncate" }, /* 1047 */ | ||
758 | + { 2, TF, sys_truncate, "truncate" }, /* 1048 */ | ||
759 | + { 2, TF, sys_stat, "stat" }, /* 1049 */ | ||
760 | + { 2, TF, sys_lstat, "lstat" }, /* 1050 */ | ||
761 | + { 2, TD, sys_fstat, "fstat" }, /* 1051 */ | ||
762 | + { 3, TD, sys_fcntl, "fcntl" }, /* 1052 */ | ||
763 | + { 4, TD, sys_fadvise64, "fadvise64" }, /* 1053 */ | ||
764 | + { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 1054 */ | ||
765 | + { 2, TD, sys_fstatfs, "fstatfs" }, /* 1055 */ | ||
766 | + { 2, TF, sys_statfs, "statfs" }, /* 1056 */ | ||
767 | + { 3, TD, sys_lseek, "lseek" }, /* 1057 */ | ||
768 | + { 6, TD|TM, sys_mmap, "mmap" }, /* 1058 */ | ||
769 | + { 1, 0, sys_alarm, "alarm" }, /* 1059 */ | ||
770 | + { 0, 0, sys_getpgrp, "getpgrp" }, /* 1060 */ | ||
771 | + { 0, TS, sys_pause, "pause" }, /* 1061 */ | ||
772 | + { 1, 0, sys_time, "time" }, /* 1062 */ | ||
773 | + { 2, TF, sys_utime, "utime" }, /* 1063 */ | ||
774 | + { 2, TD|TF, sys_creat, "creat" }, /* 1064 */ | ||
775 | + { 3, TD, sys_getdents, "getdents" }, /* 1065 */ | ||
776 | + { 3, TD|TF, sys_futimesat, "futimesat" }, /* 1066 */ | ||
777 | + { 5, TD, sys_select, "select" }, /* 1067 */ | ||
778 | + { 3, TD, sys_poll, "poll" }, /* 1068 */ | ||
779 | + { 4, TD, sys_epoll_wait, "epoll_wait" }, /* 1069 */ | ||
780 | + { 2, 0, sys_ustat, "ustat" }, /* 1070 */ | ||
781 | + { 0, TP, sys_vfork, "vfork" }, /* 1071 */ | ||
782 | + { 4, TP, sys_wait4, "wait4" }, /* 1072 */ | ||
783 | + { 6, TN, sys_recv, "recv" }, /* 1073 */ | ||
784 | + { 4, TD|TN, sys_send, "send" }, /* 1074 */ | ||
785 | + { 2, 0, sys_bdflush, "bdflush" }, /* 1075 */ | ||
786 | + { 2, TF, sys_umount, "umount" }, /* 1076 */ | ||
787 | + { 1, TF, sys_uselib, "uselib" }, /* 1077 */ | ||
788 | + { 1, 0, sys_sysctl, "sysctl" }, /* 1078 */ | ||
789 | + { 0, TP, sys_fork, "fork" }, /* 1079 */ | ||
790 | diff --git a/syscall.c b/syscall.c | ||
791 | index 680cbc3..69eceed 100644 | ||
792 | --- a/syscall.c | ||
793 | +++ b/syscall.c | ||
794 | @@ -287,6 +287,12 @@ update_personality(struct tcb *tcp, int personality) | ||
795 | fprintf(stderr, "[ Process PID=%d runs in %s mode. ]\n", | ||
796 | tcp->pid, names[personality]); | ||
797 | } | ||
798 | +# elif defined(AARCH64) | ||
799 | + if (!qflag) { | ||
800 | + static const char *const names[] = {"32-bit ARM", "AArch64"}; | ||
801 | + fprintf(stderr, "[ Process PID=%d runs in %s mode. ]\n", | ||
802 | + tcp->pid, names[personality]); | ||
803 | + } | ||
804 | # endif | ||
805 | } | ||
806 | #endif | ||
807 | @@ -664,7 +670,8 @@ static long r0; | ||
808 | #elif defined(ARM) | ||
809 | static struct pt_regs regs; | ||
810 | #elif defined(AARCH64) | ||
811 | -static struct user_pt_regs regs; | ||
812 | +static struct user_pt_regs aarch64_regs; | ||
813 | +static struct arm_pt_regs regs; | ||
814 | #elif defined(ALPHA) | ||
815 | static long r0; | ||
816 | static long a3; | ||
817 | @@ -916,6 +923,29 @@ get_scno(struct tcb *tcp) | ||
818 | if (upeek(tcp, PT_R15, &scno) < 0) | ||
819 | return -1; | ||
820 | } | ||
821 | +#elif defined(AARCH64) | ||
822 | + struct iovec io; | ||
823 | + char buf[sizeof(aarch64_regs)]; | ||
824 | + io.iov_base = &buf; | ||
825 | + io.iov_len = sizeof(aarch64_regs); | ||
826 | + if (ptrace(PTRACE_GETREGSET, tcp->pid, NT_PRSTATUS, (void *)&io) == -1) | ||
827 | + return -1; | ||
828 | + switch (io.iov_len) { | ||
829 | + case sizeof(aarch64_regs): | ||
830 | + /* We are in 64-bit mode */ | ||
831 | + memcpy(&aarch64_regs, buf, sizeof(aarch64_regs)); | ||
832 | + scno = aarch64_regs.regs[8]; | ||
833 | + update_personality(tcp, 1); | ||
834 | + break; | ||
835 | + case sizeof(regs): | ||
836 | + /* We are in 32-bit mode */ | ||
837 | + memcpy(®s, buf, sizeof(regs)); | ||
838 | + scno = regs.uregs[7]; | ||
839 | + update_personality(tcp, 0); | ||
840 | + break; | ||
841 | + default: | ||
842 | + return -1; | ||
843 | + } | ||
844 | #elif defined(ARM) | ||
845 | /* Read complete register set in one go. */ | ||
846 | if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (void *)®s) == -1) | ||
847 | @@ -975,13 +1005,6 @@ get_scno(struct tcb *tcp) | ||
848 | fprintf(stderr, "pid %d stray syscall entry\n", tcp->pid); | ||
849 | tcp->flags |= TCB_INSYSCALL; | ||
850 | } | ||
851 | -#elif defined(AARCH64) | ||
852 | - struct iovec io; | ||
853 | - io.iov_base = ®s; | ||
854 | - io.iov_len = sizeof(regs); | ||
855 | - if (ptrace(PTRACE_GETREGSET, tcp->pid, NT_PRSTATUS, (void *)&io) == -1) | ||
856 | - return -1; | ||
857 | - scno = regs.regs[8]; | ||
858 | #elif defined(M68K) | ||
859 | if (upeek(tcp, 4*PT_ORIG_D0, &scno) < 0) | ||
860 | return -1; | ||
861 | @@ -1415,12 +1438,15 @@ get_syscall_args(struct tcb *tcp) | ||
862 | for (i = 0; i < nargs; ++i) | ||
863 | if (upeek(tcp, PT_GR26-4*i, &tcp->u_arg[i]) < 0) | ||
864 | return -1; | ||
865 | -#elif defined(ARM) | ||
866 | +#elif defined(ARM) || defined(AARCH64) | ||
867 | +# if defined(AARCH64) | ||
868 | + if (tcp->currpers == 1) | ||
869 | + for (i = 0; i < nargs; ++i) | ||
870 | + tcp->u_arg[i] = aarch64_regs.regs[i]; | ||
871 | + else | ||
872 | +# endif /* AARCH64 */ | ||
873 | for (i = 0; i < nargs; ++i) | ||
874 | tcp->u_arg[i] = regs.uregs[i]; | ||
875 | -#elif defined(AARCH64) | ||
876 | - for (i = 0; i < nargs; ++i) | ||
877 | - tcp->u_arg[i] = regs.regs[i]; | ||
878 | #elif defined(AVR32) | ||
879 | (void)i; | ||
880 | (void)nargs; | ||
881 | @@ -1655,16 +1681,31 @@ get_syscall_result(struct tcb *tcp) | ||
882 | return -1; | ||
883 | if (upeek(tcp, PT_R10, &r10) < 0) | ||
884 | return -1; | ||
885 | -#elif defined(ARM) | ||
886 | - /* Read complete register set in one go. */ | ||
887 | - if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (void *)®s) == -1) | ||
888 | - return -1; | ||
889 | #elif defined(AARCH64) | ||
890 | struct iovec io; | ||
891 | - io.iov_base = ®s; | ||
892 | - io.iov_len = sizeof(regs); | ||
893 | + char buf[sizeof(aarch64_regs)]; | ||
894 | + io.iov_base = &buf; | ||
895 | + io.iov_len = sizeof(aarch64_regs); | ||
896 | if (ptrace(PTRACE_GETREGSET, tcp->pid, NT_PRSTATUS, (void *)&io) == -1) | ||
897 | return -1; | ||
898 | + switch (io.iov_len) { | ||
899 | + case sizeof(aarch64_regs): | ||
900 | + /* We are in 64-bit mode */ | ||
901 | + memcpy(&aarch64_regs, buf, sizeof(aarch64_regs)); | ||
902 | + update_personality(tcp, 1); | ||
903 | + break; | ||
904 | + case sizeof(regs): | ||
905 | + /* We are in 32-bit mode */ | ||
906 | + memcpy(®s, buf, sizeof(regs)); | ||
907 | + update_personality(tcp, 0); | ||
908 | + break; | ||
909 | + default: | ||
910 | + return -1; | ||
911 | + } | ||
912 | +#elif defined(ARM) | ||
913 | + /* Read complete ARM register set in one go. */ | ||
914 | + if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (void *)®s) == -1) | ||
915 | + return -1; | ||
916 | #elif defined(M68K) | ||
917 | if (upeek(tcp, 4*PT_D0, &d0) < 0) | ||
918 | return -1; | ||
919 | @@ -1839,21 +1880,27 @@ get_error(struct tcb *tcp) | ||
920 | else { | ||
921 | tcp->u_rval = d0; | ||
922 | } | ||
923 | -#elif defined(ARM) | ||
924 | - if (check_errno && is_negated_errno(regs.ARM_r0)) { | ||
925 | - tcp->u_rval = -1; | ||
926 | - u_error = -regs.ARM_r0; | ||
927 | - } | ||
928 | - else { | ||
929 | - tcp->u_rval = regs.ARM_r0; | ||
930 | - } | ||
931 | -#elif defined(AARCH64) | ||
932 | - if (check_errno && is_negated_errno(regs.regs[0])) { | ||
933 | - tcp->u_rval = -1; | ||
934 | - u_error = -regs.regs[0]; | ||
935 | +#elif defined(ARM) || defined(AARCH64) | ||
936 | +# if defined(AARCH64) | ||
937 | + if (tcp->currpers == 1) { | ||
938 | + if (check_errno && is_negated_errno(aarch64_regs.regs[0])) { | ||
939 | + tcp->u_rval = -1; | ||
940 | + u_error = -aarch64_regs.regs[0]; | ||
941 | + } | ||
942 | + else { | ||
943 | + tcp->u_rval = aarch64_regs.regs[0]; | ||
944 | + } | ||
945 | } | ||
946 | - else { | ||
947 | - tcp->u_rval = regs.regs[0]; | ||
948 | + else | ||
949 | +# endif /* AARCH64 */ | ||
950 | + { | ||
951 | + if (check_errno && is_negated_errno(regs.ARM_r0)) { | ||
952 | + tcp->u_rval = -1; | ||
953 | + u_error = -regs.ARM_r0; | ||
954 | + } | ||
955 | + else { | ||
956 | + tcp->u_rval = regs.ARM_r0; | ||
957 | + } | ||
958 | } | ||
959 | #elif defined(AVR32) | ||
960 | if (check_errno && regs.r12 && (unsigned) -regs.r12 < nerrnos) { | ||
961 | -- | ||
962 | 1.8.0 | ||
963 | |||