Commit | Line | Data |
---|---|---|
b7f6bf22 HZ |
1 | /* Process record and replay target code for GNU/Linux. |
2 | ||
3 | Copyright (C) 2008, 2009 Free Software Foundation, Inc. | |
4 | ||
5 | This file is part of GDB. | |
6 | ||
7 | This program is free software; you can redistribute it and/or modify | |
8 | it under the terms of the GNU General Public License as published by | |
9 | the Free Software Foundation; either version 3 of the License, or | |
10 | (at your option) any later version. | |
11 | ||
12 | This program is distributed in the hope that it will be useful, | |
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | GNU General Public License for more details. | |
16 | ||
17 | You should have received a copy of the GNU General Public License | |
18 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ | |
19 | ||
20 | #include "defs.h" | |
21 | #include "target.h" | |
22 | #include "regcache.h" | |
23 | #include "record.h" | |
24 | #include "linux-record.h" | |
25 | ||
26 | /* These macros are the values of the first argument of system call | |
27 | "sys_ptrace". The values of these macros were obtained from Linux | |
28 | Kernel source. */ | |
29 | ||
30 | #define RECORD_PTRACE_PEEKTEXT 1 | |
31 | #define RECORD_PTRACE_PEEKDATA 2 | |
32 | #define RECORD_PTRACE_PEEKUSR 3 | |
33 | ||
34 | /* These macros are the values of the first argument of system call | |
35 | "sys_socketcall". The values of these macros were obtained from | |
36 | Linux Kernel source. */ | |
37 | ||
38 | #define RECORD_SYS_SOCKET 1 | |
39 | #define RECORD_SYS_BIND 2 | |
40 | #define RECORD_SYS_CONNECT 3 | |
41 | #define RECORD_SYS_LISTEN 4 | |
42 | #define RECORD_SYS_ACCEPT 5 | |
43 | #define RECORD_SYS_GETSOCKNAME 6 | |
44 | #define RECORD_SYS_GETPEERNAME 7 | |
45 | #define RECORD_SYS_SOCKETPAIR 8 | |
46 | #define RECORD_SYS_SEND 9 | |
47 | #define RECORD_SYS_RECV 10 | |
48 | #define RECORD_SYS_SENDTO 11 | |
49 | #define RECORD_SYS_RECVFROM 12 | |
50 | #define RECORD_SYS_SHUTDOWN 13 | |
51 | #define RECORD_SYS_SETSOCKOPT 14 | |
52 | #define RECORD_SYS_GETSOCKOPT 15 | |
53 | #define RECORD_SYS_SENDMSG 16 | |
54 | #define RECORD_SYS_RECVMSG 17 | |
55 | ||
56 | /* These macros are the values of the first argument of system call | |
57 | "sys_ipc". The values of these macros were obtained from Linux | |
58 | Kernel source. */ | |
59 | ||
60 | #define RECORD_SEMOP 1 | |
61 | #define RECORD_SEMGET 2 | |
62 | #define RECORD_SEMCTL 3 | |
63 | #define RECORD_SEMTIMEDOP 4 | |
64 | #define RECORD_MSGSND 11 | |
65 | #define RECORD_MSGRCV 12 | |
66 | #define RECORD_MSGGET 13 | |
67 | #define RECORD_MSGCTL 14 | |
68 | #define RECORD_SHMAT 21 | |
69 | #define RECORD_SHMDT 22 | |
70 | #define RECORD_SHMGET 23 | |
71 | #define RECORD_SHMCTL 24 | |
72 | ||
73 | /* These macros are the values of the first argument of system call | |
74 | "sys_quotactl". The values of these macros were obtained from Linux | |
75 | Kernel source. */ | |
76 | ||
77 | #define RECORD_Q_GETFMT 0x800004 | |
78 | #define RECORD_Q_GETINFO 0x800005 | |
79 | #define RECORD_Q_GETQUOTA 0x800007 | |
80 | #define RECORD_Q_XGETQSTAT (('5' << 8) + 5) | |
81 | #define RECORD_Q_XGETQUOTA (('3' << 8) + 3) | |
82 | ||
83 | /* When the architecture process record get a Linux syscall | |
84 | instruction, it will get a Linux syscall number of this | |
85 | architecture and convert it to the Linux syscall number "num" which | |
86 | is internal to GDB. Most Linux syscalls across architectures in | |
87 | Linux would be similar and mostly differ by sizes of types and | |
88 | structures. This sizes are put to "tdep". | |
89 | ||
90 | Record the values of the registers and memory that will be changed | |
91 | in current system call. | |
92 | ||
93 | Return -1 if something wrong. */ | |
94 | ||
95 | int | |
96 | record_linux_system_call (int num, struct regcache *regcache, | |
97 | struct linux_record_tdep *tdep) | |
98 | { | |
5af949e3 | 99 | struct gdbarch *gdbarch = get_regcache_arch (regcache); |
b7f6bf22 HZ |
100 | uint32_t tmpu32; |
101 | ||
102 | switch (num) | |
103 | { | |
104 | /* sys_restart_syscall */ | |
105 | case 0: | |
106 | break; | |
107 | ||
108 | /* sys_exit */ | |
109 | case 1: | |
110 | { | |
111 | int q; | |
112 | target_terminal_ours (); | |
113 | q = | |
114 | yquery (_ ("The next instruction is syscall exit. " | |
115 | "It will make the program exit. " | |
116 | "Do you want to stop the program?")); | |
117 | target_terminal_inferior (); | |
118 | if (q) | |
119 | return 1; | |
120 | } | |
121 | break; | |
122 | ||
123 | /* sys_fork */ | |
124 | case 2: | |
125 | break; | |
126 | ||
127 | /* sys_read */ | |
128 | case 3: | |
129 | { | |
130 | uint32_t addr, count; | |
131 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr); | |
132 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); | |
133 | if (record_arch_list_add_mem (addr, count)) | |
134 | return -1; | |
135 | } | |
136 | break; | |
137 | ||
138 | /* sys_write */ | |
139 | case 4: | |
140 | /* sys_open */ | |
141 | case 5: | |
142 | /* sys_close */ | |
143 | case 6: | |
144 | /* sys_waitpid */ | |
145 | case 7: | |
146 | /* sys_creat */ | |
147 | case 8: | |
148 | /* sys_link */ | |
149 | case 9: | |
150 | /* sys_unlink */ | |
151 | case 10: | |
152 | /* sys_execve */ | |
153 | case 11: | |
154 | /* sys_chdir */ | |
155 | case 12: | |
156 | /* sys_time */ | |
157 | case 13: | |
158 | /* sys_mknod */ | |
159 | case 14: | |
160 | /* sys_chmod */ | |
161 | case 15: | |
162 | /* sys_lchown16 */ | |
163 | case 16: | |
164 | /* sys_ni_syscall */ | |
165 | case 17: | |
166 | break; | |
167 | ||
168 | /* sys_stat */ | |
169 | case 18: | |
170 | /* sys_fstat */ | |
171 | case 28: | |
172 | /* sys_lstat */ | |
173 | case 84: | |
174 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
175 | if (record_arch_list_add_mem (tmpu32, tdep->size__old_kernel_stat)) | |
176 | return -1; | |
177 | break; | |
178 | ||
179 | /* sys_lseek */ | |
180 | case 19: | |
181 | /* sys_getpid */ | |
182 | case 20: | |
183 | /* sys_mount */ | |
184 | case 21: | |
185 | /* sys_oldumount */ | |
186 | case 22: | |
187 | /* sys_setuid16 */ | |
188 | case 23: | |
189 | /* sys_getuid16 */ | |
190 | case 24: | |
191 | /* sys_stime */ | |
192 | case 25: | |
193 | break; | |
194 | ||
195 | /* sys_ptrace */ | |
196 | case 26: | |
197 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
198 | if (tmpu32 == RECORD_PTRACE_PEEKTEXT | |
199 | || tmpu32 == RECORD_PTRACE_PEEKDATA | |
200 | || tmpu32 == RECORD_PTRACE_PEEKUSR) | |
201 | { | |
202 | regcache_raw_read (regcache, tdep->arg4, | |
203 | (gdb_byte *) & tmpu32); | |
204 | if (record_arch_list_add_mem (tmpu32, 4)) | |
205 | return -1; | |
206 | } | |
207 | break; | |
208 | ||
209 | /* sys_alarm */ | |
210 | case 27: | |
211 | /* sys_pause */ | |
212 | case 29: | |
213 | /* sys_utime */ | |
214 | case 30: | |
215 | /* sys_ni_syscall */ | |
216 | case 31: | |
217 | /* sys_ni_syscall */ | |
218 | case 32: | |
219 | /* sys_access */ | |
220 | case 33: | |
221 | /* sys_nice */ | |
222 | case 34: | |
223 | /* sys_ni_syscall */ | |
224 | case 35: | |
225 | /* sys_sync */ | |
226 | case 36: | |
227 | /* sys_kill */ | |
228 | case 37: | |
229 | /* sys_rename */ | |
230 | case 38: | |
231 | /* sys_mkdir */ | |
232 | case 39: | |
233 | /* sys_rmdir */ | |
234 | case 40: | |
235 | /* sys_dup */ | |
236 | case 41: | |
237 | /* sys_pipe */ | |
238 | case 42: | |
239 | break; | |
240 | ||
241 | /* sys_times */ | |
242 | case 43: | |
243 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
244 | if (record_arch_list_add_mem (tmpu32, tdep->size_tms)) | |
245 | return -1; | |
246 | break; | |
247 | ||
248 | /* sys_ni_syscall */ | |
249 | case 44: | |
250 | /* sys_brk */ | |
251 | case 45: | |
252 | /* sys_setgid16 */ | |
253 | case 46: | |
254 | /* sys_getgid16 */ | |
255 | case 47: | |
256 | /* sys_signal */ | |
257 | case 48: | |
258 | /* sys_geteuid16 */ | |
259 | case 49: | |
260 | /* sys_getegid16 */ | |
261 | case 50: | |
262 | /* sys_acct */ | |
263 | case 51: | |
264 | /* sys_umount */ | |
265 | case 52: | |
266 | /* sys_ni_syscall */ | |
267 | case 53: | |
268 | break; | |
269 | ||
270 | /* sys_ioctl */ | |
271 | case 54: | |
272 | /* XXX Need to add a lot of support of other ioctl requests. */ | |
273 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
274 | if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX | |
275 | || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC | |
276 | || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW | |
277 | || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA | |
278 | || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF | |
279 | || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC | |
280 | || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL | |
281 | || tmpu32 == tdep->ioctl_TIOCNXCL | |
282 | || tmpu32 == tdep->ioctl_TIOCSCTTY | |
283 | || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI | |
284 | || tmpu32 == tdep->ioctl_TIOCSWINSZ | |
285 | || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC | |
286 | || tmpu32 == tdep->ioctl_TIOCMSET | |
287 | || tmpu32 == tdep->ioctl_TIOCSSOFTCAR | |
288 | || tmpu32 == tdep->ioctl_TIOCCONS | |
289 | || tmpu32 == tdep->ioctl_TIOCSSERIAL | |
290 | || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY | |
291 | || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP | |
292 | || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT | |
293 | || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK | |
294 | || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2 | |
295 | || tmpu32 == tdep->ioctl_TCSETSF2 | |
296 | || tmpu32 == tdep->ioctl_TIOCSPTLCK | |
297 | || tmpu32 == tdep->ioctl_TIOCSERCONFIG | |
298 | || tmpu32 == tdep->ioctl_TIOCSERGWILD | |
299 | || tmpu32 == tdep->ioctl_TIOCSERSWILD | |
300 | || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS | |
301 | || tmpu32 == tdep->ioctl_TIOCSERGETMULTI | |
302 | || tmpu32 == tdep->ioctl_TIOCSERSETMULTI | |
303 | || tmpu32 == tdep->ioctl_TIOCMIWAIT | |
304 | || tmpu32 == tdep->ioctl_TIOCSHAYESESP) | |
305 | { | |
306 | /* Nothing to do. */ | |
307 | } | |
308 | else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA | |
309 | || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS) | |
310 | { | |
311 | regcache_raw_read (regcache, tdep->arg3, | |
312 | (gdb_byte *) & tmpu32); | |
313 | if (record_arch_list_add_mem (tmpu32, tdep->size_termios)) | |
314 | return -1; | |
315 | } | |
316 | else if (tmpu32 == tdep->ioctl_TIOCGPGRP | |
317 | || tmpu32 == tdep->ioctl_TIOCGSID) | |
318 | { | |
319 | regcache_raw_read (regcache, tdep->arg3, | |
320 | (gdb_byte *) & tmpu32); | |
321 | if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t)) | |
322 | return -1; | |
323 | } | |
324 | else if (tmpu32 == tdep->ioctl_TIOCOUTQ | |
325 | || tmpu32 == tdep->ioctl_TIOCMGET | |
326 | || tmpu32 == tdep->ioctl_TIOCGSOFTCAR | |
327 | || tmpu32 == tdep->ioctl_FIONREAD | |
328 | || tmpu32 == tdep->ioctl_TIOCINQ | |
329 | || tmpu32 == tdep->ioctl_TIOCGETD | |
330 | || tmpu32 == tdep->ioctl_TIOCGPTN | |
331 | || tmpu32 == tdep->ioctl_TIOCSERGETLSR) | |
332 | { | |
333 | regcache_raw_read (regcache, tdep->arg3, | |
334 | (gdb_byte *) & tmpu32); | |
335 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
336 | return -1; | |
337 | } | |
338 | else if (tmpu32 == tdep->ioctl_TIOCGWINSZ) | |
339 | { | |
340 | regcache_raw_read (regcache, tdep->arg3, | |
341 | (gdb_byte *) & tmpu32); | |
342 | if (record_arch_list_add_mem (tmpu32, tdep->size_winsize)) | |
343 | return -1; | |
344 | } | |
345 | else if (tmpu32 == tdep->ioctl_TIOCLINUX) | |
346 | { | |
347 | regcache_raw_read (regcache, tdep->arg3, | |
348 | (gdb_byte *) & tmpu32); | |
5e31abdf HZ |
349 | /* This syscall affect a char size memory. */ |
350 | if (record_arch_list_add_mem (tmpu32, 1)) | |
b7f6bf22 HZ |
351 | return -1; |
352 | } | |
353 | else if (tmpu32 == tdep->ioctl_TIOCGSERIAL) | |
354 | { | |
355 | regcache_raw_read (regcache, tdep->arg3, | |
356 | (gdb_byte *) & tmpu32); | |
357 | if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct)) | |
358 | return -1; | |
359 | } | |
360 | else if (tmpu32 == tdep->ioctl_TCGETS2) | |
361 | { | |
362 | regcache_raw_read (regcache, tdep->arg3, | |
363 | (gdb_byte *) & tmpu32); | |
364 | if (record_arch_list_add_mem (tmpu32, tdep->size_termios2)) | |
365 | return -1; | |
366 | } | |
367 | else if (tmpu32 == tdep->ioctl_FIOQSIZE) | |
368 | { | |
369 | regcache_raw_read (regcache, tdep->arg3, | |
370 | (gdb_byte *) & tmpu32); | |
371 | if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) | |
372 | return -1; | |
373 | } | |
374 | else if (tmpu32 == tdep->ioctl_TIOCGICOUNT) | |
375 | { | |
376 | regcache_raw_read (regcache, tdep->arg3, | |
377 | (gdb_byte *) & tmpu32); | |
378 | if (record_arch_list_add_mem | |
379 | (tmpu32, tdep->size_serial_icounter_struct)) | |
380 | return -1; | |
381 | } | |
382 | else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP) | |
383 | { | |
384 | regcache_raw_read (regcache, tdep->arg3, | |
385 | (gdb_byte *) & tmpu32); | |
386 | if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config)) | |
387 | return -1; | |
388 | } | |
389 | else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT) | |
390 | { | |
391 | printf_unfiltered (_("Process record and replay target doesn't " | |
392 | "support ioctl request TIOCSERGSTRUCT\n")); | |
393 | return 1; | |
394 | } | |
395 | else | |
396 | { | |
397 | printf_unfiltered (_("Process record and replay target doesn't " | |
50ef67b3 HZ |
398 | "support ioctl request 0x%s.\n"), |
399 | phex_nz (tmpu32, 4)); | |
b7f6bf22 HZ |
400 | return 1; |
401 | } | |
402 | break; | |
403 | ||
404 | /* sys_fcntl */ | |
405 | case 55: | |
406 | /* XXX */ | |
407 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
408 | sys_fcntl: | |
50ef67b3 | 409 | if (tmpu32 == tdep->fcntl_F_GETLK) |
b7f6bf22 HZ |
410 | { |
411 | regcache_raw_read (regcache, tdep->arg3, | |
412 | (gdb_byte *) & tmpu32); | |
413 | if (record_arch_list_add_mem (tmpu32, tdep->size_flock)) | |
414 | return -1; | |
415 | } | |
416 | break; | |
417 | ||
418 | /* sys_ni_syscall */ | |
419 | case 56: | |
420 | /* sys_setpgid */ | |
421 | case 57: | |
422 | /* sys_ni_syscall */ | |
423 | case 58: | |
424 | break; | |
425 | ||
426 | /* sys_olduname */ | |
427 | case 59: | |
428 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
429 | if (record_arch_list_add_mem (tmpu32, tdep->size_oldold_utsname)) | |
430 | return -1; | |
431 | break; | |
432 | ||
433 | /* sys_umask */ | |
434 | case 60: | |
435 | /* sys_chroot */ | |
436 | case 61: | |
437 | break; | |
438 | ||
439 | /* sys_ustat */ | |
440 | case 62: | |
441 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
442 | if (record_arch_list_add_mem (tmpu32, tdep->size_ustat)) | |
443 | return -1; | |
444 | break; | |
445 | ||
446 | /* sys_dup2 */ | |
447 | case 63: | |
448 | /* sys_getppid */ | |
449 | case 64: | |
450 | /* sys_getpgrp */ | |
451 | case 65: | |
452 | /* sys_setsid */ | |
453 | case 66: | |
454 | break; | |
455 | ||
456 | /* sys_sigaction */ | |
457 | case 67: | |
458 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
459 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigaction)) | |
460 | return -1; | |
461 | break; | |
462 | ||
463 | /* sys_sgetmask */ | |
464 | case 68: | |
465 | /* sys_ssetmask */ | |
466 | case 69: | |
467 | /* sys_setreuid16 */ | |
468 | case 70: | |
469 | /* sys_setregid16 */ | |
470 | case 71: | |
471 | /* sys_sigsuspend */ | |
472 | case 72: | |
473 | break; | |
474 | ||
475 | /* sys_sigpending */ | |
476 | case 73: | |
477 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
478 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) | |
479 | return -1; | |
480 | break; | |
481 | ||
482 | /* sys_sethostname */ | |
483 | case 74: | |
484 | /* sys_setrlimit */ | |
485 | case 75: | |
486 | break; | |
487 | ||
488 | /* sys_old_getrlimit */ | |
489 | case 76: | |
490 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
491 | if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) | |
492 | return -1; | |
493 | break; | |
494 | ||
495 | /* sys_getrusage */ | |
496 | case 77: | |
497 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
498 | if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) | |
499 | return -1; | |
500 | break; | |
501 | ||
502 | /* sys_gettimeofday */ | |
503 | case 78: | |
504 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
505 | if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) | |
506 | return -1; | |
507 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
508 | if (record_arch_list_add_mem (tmpu32, tdep->size_timezone)) | |
509 | return -1; | |
510 | break; | |
511 | ||
512 | /* sys_settimeofday */ | |
513 | case 79: | |
514 | break; | |
515 | ||
516 | /* sys_getgroups16 */ | |
517 | case 80: | |
518 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
519 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) | |
520 | return -1; | |
521 | break; | |
522 | ||
523 | /* sys_setgroups16 */ | |
524 | case 81: | |
525 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
526 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) | |
527 | return -1; | |
528 | break; | |
529 | ||
530 | /* old_select */ | |
531 | case 82: | |
532 | { | |
533 | struct sel_arg_struct | |
534 | { | |
535 | CORE_ADDR n; | |
536 | CORE_ADDR inp; | |
537 | CORE_ADDR outp; | |
538 | CORE_ADDR exp; | |
539 | CORE_ADDR tvp; | |
540 | } sel; | |
541 | ||
542 | regcache_raw_read (regcache, tdep->arg1, | |
543 | (gdb_byte *) & tmpu32); | |
544 | if (tmpu32) | |
545 | { | |
546 | if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel))) | |
547 | { | |
548 | if (record_debug) | |
549 | fprintf_unfiltered (gdb_stdlog, | |
550 | "Process record: error reading memory " | |
5af949e3 UW |
551 | "at addr = %s len = %lu.\n", |
552 | paddress (gdbarch, tmpu32), | |
50ef67b3 | 553 | (unsigned long)sizeof (sel)); |
b7f6bf22 HZ |
554 | return -1; |
555 | } | |
556 | if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) | |
557 | return -1; | |
558 | if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set)) | |
559 | return -1; | |
560 | if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set)) | |
561 | return -1; | |
562 | if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval)) | |
563 | return -1; | |
564 | } | |
565 | } | |
566 | break; | |
567 | ||
568 | /* sys_symlink */ | |
569 | case 83: | |
570 | break; | |
571 | ||
572 | /* sys_readlink */ | |
573 | case 85: | |
574 | { | |
575 | uint32_t len; | |
576 | regcache_raw_read (regcache, tdep->arg2, | |
577 | (gdb_byte *) & tmpu32); | |
578 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); | |
579 | if (record_arch_list_add_mem (tmpu32, len)) | |
580 | return -1; | |
581 | } | |
582 | break; | |
583 | ||
584 | /* sys_uselib */ | |
585 | case 86: | |
586 | /* sys_swapon */ | |
587 | case 87: | |
588 | break; | |
589 | ||
590 | /* sys_reboot */ | |
591 | case 88: | |
592 | { | |
593 | int q; | |
594 | target_terminal_ours (); | |
595 | q = | |
596 | yquery (_("The next instruction is syscall reboot. " | |
597 | "It will restart the computer. " | |
598 | "Do you want to stop the program?")); | |
599 | target_terminal_inferior (); | |
600 | if (q) | |
601 | return 1; | |
602 | } | |
603 | break; | |
604 | ||
605 | /* old_readdir */ | |
606 | case 89: | |
607 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
608 | if (record_arch_list_add_mem (tmpu32, tdep->size_dirent)) | |
609 | return -1; | |
610 | break; | |
611 | ||
612 | /* old_mmap */ | |
613 | case 90: | |
614 | break; | |
615 | ||
616 | /* sys_munmap */ | |
617 | case 91: | |
618 | { | |
619 | int q; | |
620 | uint32_t len; | |
621 | ||
622 | regcache_raw_read (regcache, tdep->arg1, | |
623 | (gdb_byte *) & tmpu32); | |
624 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); | |
625 | target_terminal_ours (); | |
626 | q = | |
627 | yquery (_("The next instruction is syscall munmap. " | |
5af949e3 | 628 | "It will free the memory addr = %s len = %u. " |
b7f6bf22 HZ |
629 | "It will make record target get error. " |
630 | "Do you want to stop the program?"), | |
5af949e3 | 631 | paddress (gdbarch, tmpu32), (int)len); |
b7f6bf22 HZ |
632 | target_terminal_inferior (); |
633 | if (q) | |
634 | return 1; | |
635 | } | |
636 | break; | |
637 | ||
638 | /* sys_truncate */ | |
639 | case 92: | |
640 | /* sys_ftruncate */ | |
641 | case 93: | |
642 | /* sys_fchmod */ | |
643 | case 94: | |
644 | /* sys_fchown16 */ | |
645 | case 95: | |
646 | /* sys_getpriority */ | |
647 | case 96: | |
648 | /* sys_setpriority */ | |
649 | case 97: | |
650 | /* sys_ni_syscall */ | |
651 | case 98: | |
652 | break; | |
653 | ||
654 | /* sys_statfs */ | |
655 | case 99: | |
656 | /* sys_fstatfs */ | |
657 | case 100: | |
658 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
659 | if (record_arch_list_add_mem (tmpu32, tdep->size_statfs)) | |
660 | return -1; | |
661 | break; | |
662 | ||
663 | /* sys_ioperm */ | |
664 | case 101: | |
665 | break; | |
666 | ||
667 | /* sys_socketcall */ | |
668 | case 102: | |
669 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
670 | switch (tmpu32) | |
671 | { | |
672 | case RECORD_SYS_SOCKET: | |
673 | case RECORD_SYS_BIND: | |
674 | case RECORD_SYS_CONNECT: | |
675 | case RECORD_SYS_LISTEN: | |
676 | break; | |
677 | case RECORD_SYS_ACCEPT: | |
678 | case RECORD_SYS_GETSOCKNAME: | |
679 | case RECORD_SYS_GETPEERNAME: | |
680 | { | |
681 | uint32_t a[3]; | |
682 | regcache_raw_read (regcache, tdep->arg2, | |
683 | (gdb_byte *) & tmpu32); | |
684 | if (tmpu32) | |
685 | { | |
686 | if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) | |
687 | { | |
688 | if (record_debug) | |
689 | fprintf_unfiltered (gdb_stdlog, | |
690 | "Process record: error reading " | |
5af949e3 UW |
691 | "memory at addr = %s len = %lu.\n", |
692 | paddress (gdbarch, tmpu32), | |
50ef67b3 | 693 | (unsigned long)sizeof (a)); |
b7f6bf22 HZ |
694 | return -1; |
695 | } | |
696 | if (record_arch_list_add_mem (a[1], tdep->size_sockaddr)) | |
697 | return -1; | |
698 | if (record_arch_list_add_mem (a[2], tdep->size_int)) | |
699 | return -1; | |
700 | } | |
701 | } | |
702 | break; | |
703 | ||
704 | case RECORD_SYS_SOCKETPAIR: | |
705 | { | |
706 | uint32_t a[4]; | |
707 | regcache_raw_read (regcache, tdep->arg2, | |
708 | (gdb_byte *) & tmpu32); | |
709 | if (tmpu32) | |
710 | { | |
711 | if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) | |
712 | { | |
713 | if (record_debug) | |
714 | fprintf_unfiltered (gdb_stdlog, | |
715 | "Process record: error reading " | |
5af949e3 UW |
716 | "memory at addr = %s len = %lu.\n", |
717 | paddress (gdbarch, tmpu32), | |
50ef67b3 | 718 | (unsigned long)sizeof (a)); |
b7f6bf22 HZ |
719 | return -1; |
720 | } | |
721 | if (record_arch_list_add_mem (a[3], tdep->size_int)) | |
722 | return -1; | |
723 | } | |
724 | } | |
725 | break; | |
726 | case RECORD_SYS_SEND: | |
727 | case RECORD_SYS_SENDTO: | |
728 | break; | |
729 | case RECORD_SYS_RECV: | |
730 | { | |
731 | uint32_t a[3]; | |
732 | regcache_raw_read (regcache, tdep->arg2, | |
733 | (gdb_byte *) & tmpu32); | |
734 | if (tmpu32) | |
735 | { | |
736 | if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) | |
737 | { | |
738 | if (record_debug) | |
739 | fprintf_unfiltered (gdb_stdlog, | |
740 | "Process record: error reading " | |
5af949e3 UW |
741 | "memory at addr = %s len = %lu.\n", |
742 | paddress (gdbarch, tmpu32), | |
50ef67b3 | 743 | (unsigned long)sizeof (a)); |
b7f6bf22 HZ |
744 | return -1; |
745 | } | |
746 | if (a[2]) | |
747 | { | |
748 | if (target_read_memory | |
749 | (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) | |
750 | { | |
751 | if (record_debug) | |
752 | fprintf_unfiltered (gdb_stdlog, | |
753 | "Process record: error reading " | |
5af949e3 | 754 | "memory at addr = %s " |
50ef67b3 | 755 | "len = %lu.\n", |
5af949e3 | 756 | paddress (gdbarch, a[2]), |
50ef67b3 | 757 | (unsigned long)sizeof (a[2])); |
b7f6bf22 HZ |
758 | return -1; |
759 | } | |
760 | if (record_arch_list_add_mem (a[1], a[2])) | |
761 | return -1; | |
762 | } | |
763 | } | |
764 | } | |
765 | break; | |
766 | case RECORD_SYS_RECVFROM: | |
767 | { | |
768 | uint32_t a[6]; | |
769 | regcache_raw_read (regcache, tdep->arg2, | |
770 | (gdb_byte *) & tmpu32); | |
771 | if (tmpu32) | |
772 | { | |
773 | if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) | |
774 | { | |
775 | if (record_debug) | |
776 | fprintf_unfiltered (gdb_stdlog, | |
777 | "Process record: error reading " | |
5af949e3 UW |
778 | "memory at addr = %s len = %lu.\n", |
779 | paddress (gdbarch, tmpu32), | |
50ef67b3 | 780 | (unsigned long)sizeof (a)); |
b7f6bf22 HZ |
781 | return -1; |
782 | } | |
783 | if (a[2]) | |
784 | { | |
785 | if (target_read_memory | |
786 | (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) | |
787 | { | |
788 | if (record_debug) | |
789 | fprintf_unfiltered (gdb_stdlog, | |
790 | "Process record: error reading " | |
5af949e3 | 791 | "memory at addr = %s " |
50ef67b3 | 792 | "len = %lu.\n", |
5af949e3 | 793 | paddress (gdbarch, a[2]), |
50ef67b3 | 794 | (unsigned long)sizeof (a[2])); |
b7f6bf22 HZ |
795 | return -1; |
796 | } | |
797 | if (record_arch_list_add_mem (a[1], a[2])) | |
798 | return -1; | |
799 | if (record_arch_list_add_mem (a[4], tdep->size_sockaddr)) | |
800 | return -1; | |
801 | if (record_arch_list_add_mem (a[5], tdep->size_int)) | |
802 | return -1; | |
803 | } | |
804 | } | |
805 | } | |
806 | break; | |
807 | case RECORD_SYS_SHUTDOWN: | |
808 | case RECORD_SYS_SETSOCKOPT: | |
809 | break; | |
810 | case RECORD_SYS_GETSOCKOPT: | |
811 | { | |
812 | uint32_t a[5]; | |
813 | uint32_t av; | |
814 | ||
815 | regcache_raw_read (regcache, tdep->arg2, | |
816 | (gdb_byte *) & tmpu32); | |
817 | if (tmpu32) | |
818 | { | |
819 | if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) | |
820 | { | |
821 | if (record_debug) | |
822 | fprintf_unfiltered (gdb_stdlog, | |
823 | "Process record: error reading " | |
5af949e3 UW |
824 | "memory at addr = %s len = %lu.\n", |
825 | paddress (gdbarch, tmpu32), | |
50ef67b3 | 826 | (unsigned long)sizeof (a)); |
b7f6bf22 HZ |
827 | return -1; |
828 | } | |
829 | if (a[4]) | |
830 | { | |
831 | if (target_read_memory | |
832 | (a[4], (gdb_byte *) & av, sizeof (av))) | |
833 | { | |
834 | if (record_debug) | |
835 | fprintf_unfiltered (gdb_stdlog, | |
836 | "Process record: error reading " | |
5af949e3 | 837 | "memory at addr = %s " |
50ef67b3 | 838 | "len = %lu.\n", |
5af949e3 | 839 | paddress (gdbarch, a[4]), |
50ef67b3 | 840 | (unsigned long)sizeof (av)); |
b7f6bf22 HZ |
841 | return -1; |
842 | } | |
843 | if (record_arch_list_add_mem (a[3], av)) | |
844 | return -1; | |
845 | if (record_arch_list_add_mem (a[4], tdep->size_int)) | |
846 | return -1; | |
847 | } | |
848 | } | |
849 | } | |
850 | break; | |
851 | case RECORD_SYS_SENDMSG: | |
852 | break; | |
853 | case RECORD_SYS_RECVMSG: | |
854 | { | |
855 | uint32_t a[2], i; | |
856 | struct record_msghdr | |
857 | { | |
858 | uint32_t msg_name; | |
859 | uint32_t msg_namelen; | |
860 | uint32_t msg_iov; | |
861 | uint32_t msg_iovlen; | |
862 | uint32_t msg_control; | |
863 | uint32_t msg_controllen; | |
864 | uint32_t msg_flags; | |
865 | } rec; | |
866 | struct record_iovec | |
867 | { | |
868 | uint32_t iov_base; | |
869 | uint32_t iov_len; | |
870 | } iov; | |
871 | ||
872 | regcache_raw_read (regcache, tdep->arg2, | |
873 | (gdb_byte *) & tmpu32); | |
874 | if (tmpu32) | |
875 | { | |
876 | if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) | |
877 | { | |
878 | if (record_debug) | |
879 | fprintf_unfiltered (gdb_stdlog, | |
880 | "Process record: error reading " | |
5af949e3 UW |
881 | "memory at addr = %s len = %lu.\n", |
882 | paddress (gdbarch, tmpu32), | |
50ef67b3 | 883 | (unsigned long)sizeof (a)); |
b7f6bf22 HZ |
884 | return -1; |
885 | } | |
886 | if (record_arch_list_add_mem (a[1], tdep->size_msghdr)) | |
887 | return -1; | |
888 | if (a[1]) | |
889 | { | |
890 | if (target_read_memory | |
891 | (a[1], (gdb_byte *) & rec, sizeof (rec))) | |
892 | { | |
893 | if (record_debug) | |
894 | fprintf_unfiltered (gdb_stdlog, | |
895 | "Process record: error reading " | |
5af949e3 | 896 | "memory at addr = %s " |
50ef67b3 | 897 | "len = %lu.\n", |
5af949e3 | 898 | paddress (gdbarch, a[1]), |
50ef67b3 | 899 | (unsigned long)sizeof (rec)); |
b7f6bf22 HZ |
900 | return -1; |
901 | } | |
902 | if (record_arch_list_add_mem | |
903 | (rec.msg_name, rec.msg_namelen)) | |
904 | return -1; | |
905 | if (record_arch_list_add_mem | |
906 | (rec.msg_control, rec.msg_controllen)) | |
907 | return -1; | |
908 | if (rec.msg_iov) | |
909 | { | |
910 | for (i = 0; i < rec.msg_iovlen; i++) | |
911 | { | |
912 | if (target_read_memory | |
913 | (rec.msg_iov, (gdb_byte *) & iov, | |
914 | sizeof (iov))) | |
915 | { | |
916 | if (record_debug) | |
917 | fprintf_unfiltered (gdb_stdlog, | |
918 | "Process record: error " | |
919 | "reading memory at " | |
5af949e3 | 920 | "addr = %s " |
50ef67b3 | 921 | "len = %lu.\n", |
5af949e3 UW |
922 | paddress (gdbarch, |
923 | rec.msg_iov), | |
50ef67b3 | 924 | (unsigned long)sizeof (iov)); |
b7f6bf22 HZ |
925 | return -1; |
926 | } | |
927 | if (record_arch_list_add_mem | |
928 | (iov.iov_base, iov.iov_len)) | |
929 | return -1; | |
930 | rec.msg_iov += sizeof (struct record_iovec); | |
931 | } | |
932 | } | |
933 | } | |
934 | } | |
935 | } | |
936 | break; | |
937 | default: | |
938 | printf_unfiltered (_("Process record and replay target " | |
50ef67b3 HZ |
939 | "doesn't support socketcall call 0x%s\n"), |
940 | phex_nz (tmpu32, 4)); | |
b7f6bf22 HZ |
941 | return -1; |
942 | break; | |
943 | } | |
944 | break; | |
945 | ||
946 | /* sys_syslog */ | |
947 | case 103: | |
948 | break; | |
949 | ||
950 | /* sys_setitimer */ | |
951 | case 104: | |
952 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
953 | if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) | |
954 | return -1; | |
955 | break; | |
956 | ||
957 | /* sys_getitimer */ | |
958 | case 105: | |
959 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
960 | if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) | |
961 | return -1; | |
962 | break; | |
963 | ||
964 | /* sys_newstat */ | |
965 | case 106: | |
966 | /* sys_newlstat */ | |
967 | case 107: | |
968 | /* sys_newfstat */ | |
969 | case 108: | |
970 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
971 | if (record_arch_list_add_mem (tmpu32, tdep->size_stat)) | |
972 | return -1; | |
973 | break; | |
974 | ||
975 | /* sys_uname */ | |
976 | case 109: | |
977 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
978 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_utsname)) | |
979 | return -1; | |
980 | break; | |
981 | ||
982 | /* sys_iopl */ | |
983 | case 110: | |
984 | /* sys_vhangup */ | |
985 | case 111: | |
986 | /* sys_ni_syscall */ | |
987 | case 112: | |
988 | /* sys_vm86old */ | |
989 | case 113: | |
990 | break; | |
991 | ||
992 | /* sys_wait4 */ | |
993 | case 114: | |
994 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
995 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
996 | return -1; | |
997 | regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); | |
998 | if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) | |
999 | return -1; | |
1000 | break; | |
1001 | ||
1002 | /* sys_swapoff */ | |
1003 | case 115: | |
1004 | break; | |
1005 | ||
1006 | /* sys_sysinfo */ | |
1007 | case 116: | |
1008 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1009 | if (record_arch_list_add_mem (tmpu32, tdep->size_sysinfo)) | |
1010 | return -1; | |
1011 | break; | |
1012 | ||
1013 | /* sys_ipc */ | |
1014 | case 117: | |
1015 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1016 | switch (tmpu32) | |
1017 | { | |
1018 | case RECORD_MSGRCV: | |
1019 | { | |
1020 | int32_t second; | |
1021 | uint32_t ptr; | |
1022 | regcache_raw_read (regcache, tdep->arg3, | |
1023 | (gdb_byte *) & second); | |
1024 | regcache_raw_read (regcache, tdep->arg5, | |
1025 | (gdb_byte *) & ptr); | |
1026 | if (record_arch_list_add_mem (ptr, second + tdep->size_long)) | |
1027 | return -1; | |
1028 | } | |
1029 | break; | |
1030 | case RECORD_MSGCTL: | |
1031 | regcache_raw_read (regcache, tdep->arg5, | |
1032 | (gdb_byte *) & tmpu32); | |
1033 | if (record_arch_list_add_mem (tmpu32, tdep->size_msqid_ds)) | |
1034 | return -1; | |
1035 | break; | |
1036 | case RECORD_SHMAT: | |
1037 | regcache_raw_read (regcache, tdep->arg4, | |
1038 | (gdb_byte *) & tmpu32); | |
1039 | if (record_arch_list_add_mem (tmpu32, tdep->size_ulong)) | |
1040 | return -1; | |
1041 | break; | |
1042 | case RECORD_SHMCTL: | |
1043 | regcache_raw_read (regcache, tdep->arg5, | |
1044 | (gdb_byte *) & tmpu32); | |
1045 | if (record_arch_list_add_mem (tmpu32, tdep->size_shmid_ds)) | |
1046 | return -1; | |
1047 | break; | |
1048 | } | |
1049 | break; | |
1050 | ||
1051 | /* sys_fsync */ | |
1052 | case 118: | |
1053 | /* sys_sigreturn */ | |
1054 | case 119: | |
1055 | /* sys_clone */ | |
1056 | case 120: | |
1057 | /* sys_setdomainname */ | |
1058 | case 121: | |
1059 | break; | |
1060 | ||
1061 | /* sys_newuname */ | |
1062 | case 122: | |
1063 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1064 | if (record_arch_list_add_mem (tmpu32, tdep->size_new_utsname)) | |
1065 | return -1; | |
1066 | break; | |
1067 | ||
1068 | /* sys_modify_ldt */ | |
1069 | case 123: | |
1070 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1071 | if (tmpu32 == 0 || tmpu32 == 2) | |
1072 | { | |
1073 | uint32_t ptr, bytecount; | |
1074 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & ptr); | |
1075 | regcache_raw_read (regcache, tdep->arg3, | |
1076 | (gdb_byte *) & bytecount); | |
1077 | if (record_arch_list_add_mem (ptr, bytecount)) | |
1078 | return -1; | |
1079 | } | |
1080 | break; | |
1081 | ||
1082 | /* sys_adjtimex */ | |
1083 | case 124: | |
1084 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1085 | if (record_arch_list_add_mem (tmpu32, tdep->size_timex)) | |
1086 | return -1; | |
1087 | break; | |
1088 | ||
1089 | /* sys_mprotect */ | |
1090 | case 125: | |
1091 | break; | |
1092 | ||
1093 | /* sys_sigprocmask */ | |
1094 | case 126: | |
1095 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1096 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) | |
1097 | return -1; | |
1098 | break; | |
1099 | ||
1100 | /* sys_ni_syscall */ | |
1101 | case 127: | |
1102 | /* sys_init_module */ | |
1103 | case 128: | |
1104 | /* sys_delete_module */ | |
1105 | case 129: | |
1106 | /* sys_ni_syscall */ | |
1107 | case 130: | |
1108 | break; | |
1109 | ||
1110 | /* sys_quotactl */ | |
1111 | case 131: | |
1112 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1113 | switch (tmpu32) | |
1114 | { | |
1115 | case RECORD_Q_GETFMT: | |
1116 | regcache_raw_read (regcache, tdep->arg4, | |
1117 | (gdb_byte *) & tmpu32); | |
1118 | if (record_arch_list_add_mem (tmpu32, 4)) | |
1119 | return -1; | |
1120 | break; | |
1121 | case RECORD_Q_GETINFO: | |
1122 | regcache_raw_read (regcache, tdep->arg4, | |
1123 | (gdb_byte *) & tmpu32); | |
1124 | if (record_arch_list_add_mem (tmpu32, tdep->size_mem_dqinfo)) | |
1125 | return -1; | |
1126 | break; | |
1127 | case RECORD_Q_GETQUOTA: | |
1128 | regcache_raw_read (regcache, tdep->arg4, | |
1129 | (gdb_byte *) & tmpu32); | |
1130 | if (record_arch_list_add_mem (tmpu32, tdep->size_if_dqblk)) | |
1131 | return -1; | |
1132 | break; | |
1133 | case RECORD_Q_XGETQSTAT: | |
1134 | case RECORD_Q_XGETQUOTA: | |
1135 | regcache_raw_read (regcache, tdep->arg4, | |
1136 | (gdb_byte *) & tmpu32); | |
1137 | if (record_arch_list_add_mem (tmpu32, tdep->size_fs_quota_stat)) | |
1138 | return -1; | |
1139 | break; | |
1140 | } | |
1141 | break; | |
1142 | ||
1143 | /* sys_getpgid */ | |
1144 | case 132: | |
1145 | /* sys_fchdir */ | |
1146 | case 133: | |
1147 | /* sys_bdflush */ | |
1148 | case 134: | |
1149 | break; | |
1150 | ||
1151 | /* sys_sysfs */ | |
1152 | case 135: | |
1153 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1154 | if (tmpu32 == 2) | |
1155 | { | |
1156 | regcache_raw_read (regcache, tdep->arg3, | |
1157 | (gdb_byte *) & tmpu32); | |
1158 | /*XXX the size of memory is not very clear. */ | |
1159 | if (record_arch_list_add_mem (tmpu32, 10)) | |
1160 | return -1; | |
1161 | } | |
1162 | break; | |
1163 | ||
1164 | /* sys_personality */ | |
1165 | case 136: | |
1166 | /* sys_ni_syscall */ | |
1167 | case 137: | |
1168 | /* sys_setfsuid16 */ | |
1169 | case 138: | |
1170 | /* sys_setfsgid16 */ | |
1171 | case 139: | |
1172 | break; | |
1173 | ||
1174 | /* sys_llseek */ | |
1175 | case 140: | |
1176 | regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); | |
1177 | if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) | |
1178 | return -1; | |
1179 | break; | |
1180 | ||
1181 | /* sys_getdents */ | |
1182 | case 141: | |
1183 | { | |
1184 | uint32_t count; | |
1185 | regcache_raw_read (regcache, tdep->arg2, | |
1186 | (gdb_byte *) & tmpu32); | |
1187 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); | |
1188 | if (record_arch_list_add_mem (tmpu32, tdep->size_dirent * count)) | |
1189 | return -1; | |
1190 | } | |
1191 | break; | |
1192 | ||
1193 | /* sys_select */ | |
1194 | case 142: | |
1195 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1196 | if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) | |
1197 | return -1; | |
1198 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1199 | if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) | |
1200 | return -1; | |
1201 | regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); | |
1202 | if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) | |
1203 | return -1; | |
1204 | regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); | |
1205 | if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) | |
1206 | return -1; | |
1207 | break; | |
1208 | ||
1209 | /* sys_flock */ | |
1210 | case 143: | |
1211 | /* sys_msync */ | |
1212 | case 144: | |
1213 | break; | |
1214 | ||
1215 | /* sys_readv */ | |
1216 | case 145: | |
1217 | { | |
1218 | uint32_t vec; | |
1219 | uint32_t vlen; | |
1220 | struct record_iovec | |
1221 | { | |
1222 | uint32_t iov_base; | |
1223 | uint32_t iov_len; | |
1224 | } iov; | |
1225 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec); | |
1226 | if (vec) | |
1227 | { | |
1228 | regcache_raw_read (regcache, tdep->arg3, | |
1229 | (gdb_byte *) & vlen); | |
1230 | for (tmpu32 = 0; tmpu32 < vlen; tmpu32++) | |
1231 | { | |
1232 | if (target_read_memory | |
1233 | (vec, (gdb_byte *) & iov, sizeof (struct record_iovec))) | |
1234 | { | |
1235 | if (record_debug) | |
1236 | fprintf_unfiltered (gdb_stdlog, | |
1237 | "Process record: error reading " | |
5af949e3 UW |
1238 | "memory at addr = %s len = %lu.\n", |
1239 | paddress (gdbarch, vec), | |
50ef67b3 | 1240 | (unsigned long)sizeof (struct record_iovec)); |
b7f6bf22 HZ |
1241 | return -1; |
1242 | } | |
1243 | if (record_arch_list_add_mem (iov.iov_base, iov.iov_len)) | |
1244 | return -1; | |
1245 | vec += sizeof (struct record_iovec); | |
1246 | } | |
1247 | } | |
1248 | } | |
1249 | break; | |
1250 | ||
1251 | /* sys_writev */ | |
1252 | case 146: | |
1253 | /* sys_getsid */ | |
1254 | case 147: | |
1255 | /* sys_fdatasync */ | |
1256 | case 148: | |
1257 | /* sys_sysctl */ | |
1258 | case 149: | |
1259 | /* sys_mlock */ | |
1260 | case 150: | |
1261 | /* sys_munlock */ | |
1262 | case 151: | |
1263 | /* sys_mlockall */ | |
1264 | case 152: | |
1265 | /* sys_munlockall */ | |
1266 | case 153: | |
1267 | /* sys_sched_setparam */ | |
1268 | case 154: | |
1269 | break; | |
1270 | ||
1271 | /* sys_sched_getparam */ | |
1272 | case 155: | |
1273 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1274 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
1275 | return -1; | |
1276 | break; | |
1277 | ||
1278 | /* sys_sched_setscheduler */ | |
1279 | case 156: | |
1280 | /* sys_sched_getscheduler */ | |
1281 | case 157: | |
1282 | /* sys_sched_yield */ | |
1283 | case 158: | |
1284 | /* sys_sched_get_priority_max */ | |
1285 | case 159: | |
1286 | /* sys_sched_get_priority_min */ | |
1287 | case 160: | |
1288 | break; | |
1289 | ||
1290 | /* sys_sched_rr_get_interval */ | |
1291 | case 161: | |
1292 | /* sys_nanosleep */ | |
1293 | case 162: | |
1294 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1295 | if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) | |
1296 | return -1; | |
1297 | break; | |
1298 | ||
1299 | /* sys_mremap */ | |
1300 | case 163: | |
1301 | /* sys_setresuid16 */ | |
1302 | case 164: | |
1303 | break; | |
1304 | ||
1305 | /* sys_getresuid16 */ | |
1306 | case 165: | |
1307 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1308 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) | |
1309 | return -1; | |
1310 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1311 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) | |
1312 | return -1; | |
1313 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1314 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) | |
1315 | return -1; | |
1316 | break; | |
1317 | ||
1318 | /* sys_vm86 */ | |
1319 | case 166: | |
1320 | /* sys_ni_syscall */ | |
1321 | case 167: | |
1322 | break; | |
1323 | ||
1324 | /* sys_poll */ | |
1325 | case 168: | |
1326 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1327 | if (tmpu32) | |
1328 | { | |
1329 | uint32_t nfds; | |
1330 | regcache_raw_read (regcache, tdep->arg2, | |
1331 | (gdb_byte *) & nfds); | |
1332 | if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) | |
1333 | return -1; | |
1334 | } | |
1335 | break; | |
1336 | ||
1337 | /* sys_nfsservctl */ | |
1338 | case 169: | |
1339 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1340 | if (tmpu32 == 7 || tmpu32 == 8) | |
1341 | { | |
1342 | uint32_t rsize; | |
1343 | if (tmpu32 == 7) | |
1344 | rsize = tdep->size_NFS_FHSIZE; | |
1345 | else | |
1346 | rsize = tdep->size_knfsd_fh; | |
1347 | regcache_raw_read (regcache, tdep->arg3, | |
1348 | (gdb_byte *) & tmpu32); | |
1349 | if (record_arch_list_add_mem (tmpu32, rsize)) | |
1350 | return -1; | |
1351 | } | |
1352 | break; | |
1353 | ||
1354 | /* sys_setresgid16 */ | |
1355 | case 170: | |
1356 | break; | |
1357 | ||
1358 | /* sys_getresgid16 */ | |
1359 | case 171: | |
1360 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1361 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) | |
1362 | return -1; | |
1363 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1364 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) | |
1365 | return -1; | |
1366 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1367 | if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) | |
1368 | return -1; | |
1369 | break; | |
1370 | ||
1371 | /* sys_prctl */ | |
1372 | case 172: | |
1373 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1374 | switch (tmpu32) | |
1375 | { | |
1376 | case 2: | |
1377 | regcache_raw_read (regcache, tdep->arg2, | |
1378 | (gdb_byte *) & tmpu32); | |
1379 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
1380 | return -1; | |
1381 | break; | |
1382 | case 16: | |
1383 | regcache_raw_read (regcache, tdep->arg2, | |
1384 | (gdb_byte *) & tmpu32); | |
1385 | if (record_arch_list_add_mem (tmpu32, tdep->size_TASK_COMM_LEN)) | |
1386 | return -1; | |
1387 | break; | |
1388 | } | |
1389 | break; | |
1390 | ||
1391 | /* sys_rt_sigreturn */ | |
1392 | case 173: | |
1393 | break; | |
1394 | ||
1395 | /* sys_rt_sigaction */ | |
1396 | case 174: | |
1397 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1398 | if (record_arch_list_add_mem (tmpu32, tdep->size_sigaction)) | |
1399 | return -1; | |
1400 | break; | |
1401 | ||
1402 | /* sys_rt_sigprocmask */ | |
1403 | case 175: | |
1404 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1405 | if (record_arch_list_add_mem (tmpu32, tdep->size_sigset_t)) | |
1406 | return -1; | |
1407 | break; | |
1408 | ||
1409 | /* sys_rt_sigpending */ | |
1410 | case 176: | |
1411 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1412 | if (tmpu32) | |
1413 | { | |
1414 | uint32_t sigsetsize; | |
1415 | regcache_raw_read (regcache, tdep->arg2, | |
1416 | (gdb_byte *) & sigsetsize); | |
1417 | if (record_arch_list_add_mem (tmpu32, sigsetsize)) | |
1418 | return -1; | |
1419 | } | |
1420 | break; | |
1421 | ||
1422 | /* sys_rt_sigtimedwait */ | |
1423 | case 177: | |
1424 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1425 | if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo_t)) | |
1426 | return -1; | |
1427 | break; | |
1428 | ||
1429 | /* sys_rt_sigqueueinfo */ | |
1430 | case 178: | |
1431 | /* sys_rt_sigsuspend */ | |
1432 | case 179: | |
1433 | break; | |
1434 | ||
1435 | /* sys_pread64 */ | |
1436 | case 180: | |
1437 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1438 | if (tmpu32) | |
1439 | { | |
1440 | uint32_t count; | |
1441 | regcache_raw_read (regcache, tdep->arg3, | |
1442 | (gdb_byte *) & count); | |
1443 | if (record_arch_list_add_mem (tmpu32, count)) | |
1444 | return -1; | |
1445 | } | |
1446 | break; | |
1447 | ||
1448 | /* sys_pwrite64 */ | |
1449 | case 181: | |
1450 | /* sys_chown16 */ | |
1451 | case 182: | |
1452 | break; | |
1453 | ||
1454 | /* sys_getcwd */ | |
1455 | case 183: | |
1456 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1457 | if (tmpu32) | |
1458 | { | |
1459 | uint32_t size; | |
1460 | regcache_raw_read (regcache, tdep->arg2, | |
1461 | (gdb_byte *) & size); | |
1462 | if (record_arch_list_add_mem (tmpu32, size)) | |
1463 | return -1; | |
1464 | } | |
1465 | break; | |
1466 | ||
1467 | /* sys_capget */ | |
1468 | case 184: | |
1469 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1470 | if (record_arch_list_add_mem (tmpu32, tdep->size_cap_user_data_t)) | |
1471 | return -1; | |
1472 | break; | |
1473 | ||
1474 | /* sys_capset */ | |
1475 | case 185: | |
1476 | break; | |
1477 | ||
1478 | /* sys_sigaltstack */ | |
1479 | case 186: | |
1480 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1481 | if (record_arch_list_add_mem (tmpu32, tdep->size_stack_t)) | |
1482 | return -1; | |
1483 | break; | |
1484 | ||
1485 | /* sys_sendfile */ | |
1486 | case 187: | |
1487 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1488 | if (record_arch_list_add_mem (tmpu32, tdep->size_off_t)) | |
1489 | return -1; | |
1490 | break; | |
1491 | ||
1492 | /* sys_ni_syscall */ | |
1493 | case 188: | |
1494 | /* sys_ni_syscall */ | |
1495 | case 189: | |
1496 | /* sys_vfork */ | |
1497 | case 190: | |
1498 | break; | |
1499 | ||
1500 | /* sys_getrlimit */ | |
1501 | case 191: | |
1502 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1503 | if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) | |
1504 | return -1; | |
1505 | break; | |
1506 | ||
1507 | /* sys_mmap2 */ | |
1508 | case 192: | |
1509 | break; | |
1510 | ||
1511 | /* sys_truncate64 */ | |
1512 | case 193: | |
1513 | /* sys_ftruncate64 */ | |
1514 | case 194: | |
1515 | break; | |
1516 | ||
1517 | /* sys_stat64 */ | |
1518 | case 195: | |
1519 | /* sys_lstat64 */ | |
1520 | case 196: | |
1521 | /* sys_fstat64 */ | |
1522 | case 197: | |
1523 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1524 | if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) | |
1525 | return -1; | |
1526 | break; | |
1527 | ||
1528 | /* sys_lchown */ | |
1529 | case 198: | |
1530 | /* sys_getuid */ | |
1531 | case 199: | |
1532 | /* sys_getgid */ | |
1533 | case 200: | |
1534 | /* sys_geteuid */ | |
1535 | case 201: | |
1536 | /* sys_getegid */ | |
1537 | case 202: | |
1538 | /* sys_setreuid */ | |
1539 | case 203: | |
1540 | /* sys_setregid */ | |
1541 | case 204: | |
1542 | break; | |
1543 | ||
1544 | /* sys_getgroups */ | |
1545 | case 205: | |
1546 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1547 | if (tmpu32) | |
1548 | { | |
1549 | int gidsetsize; | |
1550 | regcache_raw_read (regcache, tdep->arg1, | |
1551 | (gdb_byte *) & gidsetsize); | |
1552 | if (record_arch_list_add_mem | |
1553 | (tmpu32, tdep->size_gid_t * gidsetsize)) | |
1554 | return -1; | |
1555 | } | |
1556 | break; | |
1557 | ||
1558 | /* sys_setgroups */ | |
1559 | case 206: | |
1560 | /* sys_fchown */ | |
1561 | case 207: | |
1562 | /* sys_setresuid */ | |
1563 | case 208: | |
1564 | break; | |
1565 | ||
1566 | /* sys_getresuid */ | |
1567 | case 209: | |
1568 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1569 | if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) | |
1570 | return -1; | |
1571 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1572 | if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) | |
1573 | return -1; | |
1574 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1575 | if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) | |
1576 | return -1; | |
1577 | break; | |
1578 | ||
1579 | /* sys_setresgid */ | |
1580 | case 210: | |
1581 | break; | |
1582 | ||
1583 | /* sys_getresgid */ | |
1584 | case 211: | |
1585 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1586 | if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) | |
1587 | return -1; | |
1588 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1589 | if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) | |
1590 | return -1; | |
1591 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1592 | if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) | |
1593 | return -1; | |
1594 | break; | |
1595 | ||
1596 | /* sys_chown */ | |
1597 | case 212: | |
1598 | /* sys_setuid */ | |
1599 | case 213: | |
1600 | /* sys_setgid */ | |
1601 | case 214: | |
1602 | /* sys_setfsuid */ | |
1603 | case 215: | |
1604 | /* sys_setfsgid */ | |
1605 | case 216: | |
1606 | /* sys_pivot_root */ | |
1607 | case 217: | |
1608 | break; | |
1609 | ||
1610 | /* sys_mincore */ | |
1611 | case 218: | |
1612 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1613 | if (record_arch_list_add_mem (tmpu32, tdep->size_PAGE_SIZE)) | |
1614 | return -1; | |
1615 | break; | |
1616 | ||
1617 | /* sys_madvise */ | |
1618 | case 219: | |
1619 | break; | |
1620 | ||
1621 | /* sys_getdents64 */ | |
1622 | case 220: | |
1623 | { | |
1624 | uint32_t count; | |
1625 | regcache_raw_read (regcache, tdep->arg2, | |
1626 | (gdb_byte *) & tmpu32); | |
1627 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); | |
1628 | if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count)) | |
1629 | return -1; | |
1630 | } | |
1631 | break; | |
1632 | ||
1633 | /* sys_fcntl64 */ | |
1634 | case 221: | |
1635 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
50ef67b3 HZ |
1636 | if (tmpu32 == tdep->fcntl_F_GETLK64) |
1637 | { | |
b7f6bf22 HZ |
1638 | regcache_raw_read (regcache, tdep->arg3, |
1639 | (gdb_byte *) & tmpu32); | |
1640 | if (record_arch_list_add_mem (tmpu32, tdep->size_flock64)) | |
1641 | return -1; | |
50ef67b3 HZ |
1642 | } |
1643 | else if (tmpu32 != tdep->fcntl_F_SETLK64 | |
1644 | && tmpu32 != tdep->fcntl_F_SETLKW64) | |
1645 | { | |
b7f6bf22 | 1646 | goto sys_fcntl; |
b7f6bf22 HZ |
1647 | } |
1648 | break; | |
1649 | ||
1650 | /* sys_ni_syscall */ | |
1651 | case 222: | |
1652 | /* sys_ni_syscall */ | |
1653 | case 223: | |
1654 | /* sys_gettid */ | |
1655 | case 224: | |
1656 | /* sys_readahead */ | |
1657 | case 225: | |
1658 | /* sys_setxattr */ | |
1659 | case 226: | |
1660 | /* sys_lsetxattr */ | |
1661 | case 227: | |
1662 | /* sys_fsetxattr */ | |
1663 | case 228: | |
1664 | break; | |
1665 | ||
1666 | /* sys_getxattr */ | |
1667 | case 229: | |
1668 | /* sys_lgetxattr */ | |
1669 | case 230: | |
1670 | /* sys_fgetxattr */ | |
1671 | case 231: | |
1672 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1673 | if (tmpu32) | |
1674 | { | |
1675 | uint32_t size; | |
1676 | regcache_raw_read (regcache, tdep->arg4, | |
1677 | (gdb_byte *) & size); | |
1678 | if (record_arch_list_add_mem (tmpu32, size)) | |
1679 | return -1; | |
1680 | } | |
1681 | break; | |
1682 | ||
1683 | /* sys_listxattr */ | |
1684 | case 232: | |
1685 | /* sys_llistxattr */ | |
1686 | case 233: | |
1687 | /* sys_flistxattr */ | |
1688 | case 234: | |
1689 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1690 | if (tmpu32) | |
1691 | { | |
1692 | uint32_t size; | |
1693 | regcache_raw_read (regcache, tdep->arg3, | |
1694 | (gdb_byte *) & size); | |
1695 | if (record_arch_list_add_mem (tmpu32, size)) | |
1696 | return -1; | |
1697 | } | |
1698 | break; | |
1699 | ||
1700 | /* sys_removexattr */ | |
1701 | case 235: | |
1702 | /* sys_lremovexattr */ | |
1703 | case 236: | |
1704 | /* sys_fremovexattr */ | |
1705 | case 237: | |
1706 | /* sys_tkill */ | |
1707 | case 238: | |
1708 | break; | |
1709 | ||
1710 | /* sys_sendfile64 */ | |
1711 | case 239: | |
1712 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1713 | if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) | |
1714 | return -1; | |
1715 | break; | |
1716 | ||
1717 | /* sys_futex */ | |
1718 | case 240: | |
1719 | /* sys_sched_setaffinity */ | |
1720 | case 241: | |
1721 | break; | |
1722 | ||
1723 | /* sys_sched_getaffinity */ | |
1724 | case 242: | |
1725 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1726 | if (tmpu32) | |
1727 | { | |
1728 | uint32_t len; | |
1729 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); | |
1730 | if (record_arch_list_add_mem (tmpu32, len)) | |
1731 | return -1; | |
1732 | } | |
1733 | break; | |
1734 | ||
1735 | /* sys_set_thread_area */ | |
1736 | case 243: | |
1737 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1738 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
1739 | return -1; | |
1740 | break; | |
1741 | ||
1742 | /* sys_get_thread_area */ | |
1743 | case 244: | |
1744 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1745 | if (record_arch_list_add_mem (tmpu32, tdep->size_user_desc)) | |
1746 | return -1; | |
1747 | break; | |
1748 | ||
1749 | /* sys_io_setup */ | |
1750 | case 245: | |
1751 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1752 | if (record_arch_list_add_mem (tmpu32, tdep->size_long)) | |
1753 | return -1; | |
1754 | break; | |
1755 | ||
1756 | /* sys_io_destroy */ | |
1757 | case 246: | |
1758 | break; | |
1759 | ||
1760 | /* sys_io_getevents */ | |
1761 | case 247: | |
1762 | regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); | |
1763 | if (tmpu32) | |
1764 | { | |
1765 | int32_t nr; | |
1766 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & nr); | |
1767 | if (record_arch_list_add_mem (tmpu32, nr * tdep->size_io_event)) | |
1768 | return -1; | |
1769 | } | |
1770 | break; | |
1771 | ||
1772 | /* sys_io_submit */ | |
1773 | case 248: | |
1774 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1775 | if (tmpu32) | |
1776 | { | |
1777 | int32_t i, nr; | |
1778 | uint32_t *iocbp; | |
1779 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr); | |
1780 | iocbp = (uint32_t *) alloca (nr * tdep->size_int); | |
1781 | if (target_read_memory | |
1782 | (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int)) | |
1783 | { | |
1784 | if (record_debug) | |
1785 | fprintf_unfiltered (gdb_stdlog, | |
1786 | "Process record: error reading memory " | |
5af949e3 UW |
1787 | "at addr = %s len = %u.\n", |
1788 | paddress (gdbarch, tmpu32), | |
50ef67b3 | 1789 | (int)(nr * tdep->size_int)); |
b7f6bf22 HZ |
1790 | return -1; |
1791 | } | |
1792 | for (i = 0; i < nr; i++) | |
1793 | { | |
1794 | if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb)) | |
1795 | return -1; | |
1796 | } | |
1797 | } | |
1798 | break; | |
1799 | ||
1800 | /* sys_io_cancel */ | |
1801 | case 249: | |
1802 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1803 | if (record_arch_list_add_mem (tmpu32, tdep->size_io_event)) | |
1804 | return -1; | |
1805 | break; | |
1806 | ||
1807 | /* sys_fadvise64 */ | |
1808 | case 250: | |
1809 | /* sys_ni_syscall */ | |
1810 | case 251: | |
1811 | break; | |
1812 | ||
1813 | /* sys_exit_group */ | |
1814 | case 252: | |
1815 | { | |
1816 | int q; | |
1817 | target_terminal_ours (); | |
1818 | q = | |
1819 | yquery (_("The next instruction is syscall exit_group. " | |
1820 | "It will make the program exit. " | |
1821 | "Do you want to stop the program?")); | |
1822 | target_terminal_inferior (); | |
1823 | if (q) | |
1824 | return 1; | |
1825 | } | |
1826 | break; | |
1827 | ||
1828 | /* sys_lookup_dcookie */ | |
1829 | case 253: | |
1830 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1831 | if (tmpu32) | |
1832 | { | |
1833 | uint32_t len; | |
1834 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); | |
1835 | if (record_arch_list_add_mem (tmpu32, len)) | |
1836 | return -1; | |
1837 | } | |
1838 | break; | |
1839 | ||
1840 | /* sys_epoll_create */ | |
1841 | case 254: | |
1842 | /* sys_epoll_ctl */ | |
1843 | case 255: | |
1844 | break; | |
1845 | ||
1846 | /* sys_epoll_wait */ | |
1847 | case 256: | |
1848 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1849 | if (tmpu32) | |
1850 | { | |
1851 | int32_t maxevents; | |
1852 | regcache_raw_read (regcache, tdep->arg3, | |
1853 | (gdb_byte *) & maxevents); | |
1854 | if (record_arch_list_add_mem | |
1855 | (tmpu32, maxevents * tdep->size_epoll_event)) | |
1856 | return -1; | |
1857 | } | |
1858 | break; | |
1859 | ||
1860 | /* sys_remap_file_pages */ | |
1861 | case 257: | |
1862 | /* sys_set_tid_address */ | |
1863 | case 258: | |
1864 | break; | |
1865 | ||
1866 | /* sys_timer_create */ | |
1867 | case 259: | |
1868 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1869 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
1870 | return -1; | |
1871 | break; | |
1872 | ||
1873 | /* sys_timer_settime */ | |
1874 | case 260: | |
1875 | regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); | |
1876 | if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) | |
1877 | return -1; | |
1878 | break; | |
1879 | ||
1880 | /* sys_timer_gettime */ | |
1881 | case 261: | |
1882 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1883 | if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) | |
1884 | return -1; | |
1885 | break; | |
1886 | ||
1887 | /* sys_timer_getoverrun */ | |
1888 | case 262: | |
1889 | /* sys_timer_delete */ | |
1890 | case 263: | |
1891 | /* sys_clock_settime */ | |
1892 | case 264: | |
1893 | break; | |
1894 | ||
1895 | /* sys_clock_gettime */ | |
1896 | case 265: | |
1897 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1898 | if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) | |
1899 | return -1; | |
1900 | break; | |
1901 | ||
1902 | /* sys_clock_getres */ | |
1903 | case 266: | |
1904 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1905 | if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) | |
1906 | return -1; | |
1907 | break; | |
1908 | ||
1909 | /* sys_clock_nanosleep */ | |
1910 | case 267: | |
1911 | regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); | |
1912 | if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) | |
1913 | return -1; | |
1914 | break; | |
1915 | ||
1916 | /* sys_statfs64 */ | |
1917 | case 268: | |
1918 | /* sys_fstatfs64 */ | |
1919 | case 269: | |
1920 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1921 | if (record_arch_list_add_mem (tmpu32, tdep->size_statfs64)) | |
1922 | return -1; | |
1923 | break; | |
1924 | ||
1925 | /* sys_tgkill */ | |
1926 | case 270: | |
1927 | /* sys_utimes */ | |
1928 | case 271: | |
1929 | /* sys_fadvise64_64 */ | |
1930 | case 272: | |
1931 | /* sys_ni_syscall */ | |
1932 | case 273: | |
1933 | /* sys_mbind */ | |
1934 | case 274: | |
1935 | break; | |
1936 | ||
1937 | /* sys_get_mempolicy */ | |
1938 | case 275: | |
1939 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
1940 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
1941 | return -1; | |
1942 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1943 | if (tmpu32) | |
1944 | { | |
1945 | uint32_t maxnode; | |
1946 | regcache_raw_read (regcache, tdep->arg3, | |
1947 | (gdb_byte *) & maxnode); | |
1948 | if (record_arch_list_add_mem (tmpu32, maxnode * tdep->size_long)) | |
1949 | return -1; | |
1950 | } | |
1951 | break; | |
1952 | ||
1953 | /* sys_set_mempolicy */ | |
1954 | case 276: | |
1955 | /* sys_mq_open */ | |
1956 | case 277: | |
1957 | /* sys_mq_unlink */ | |
1958 | case 278: | |
1959 | /* sys_mq_timedsend */ | |
1960 | case 279: | |
1961 | break; | |
1962 | ||
1963 | /* sys_mq_timedreceive */ | |
1964 | case 280: | |
1965 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
1966 | if (tmpu32) | |
1967 | { | |
1968 | uint32_t msg_len; | |
1969 | regcache_raw_read (regcache, tdep->arg3, | |
1970 | (gdb_byte *) & msg_len); | |
1971 | if (record_arch_list_add_mem (tmpu32, msg_len)) | |
1972 | return -1; | |
1973 | } | |
1974 | regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); | |
1975 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
1976 | return -1; | |
1977 | break; | |
1978 | ||
1979 | /* sys_mq_notify */ | |
1980 | case 281: | |
1981 | break; | |
1982 | ||
1983 | /* sys_mq_getsetattr */ | |
1984 | case 282: | |
1985 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1986 | if (record_arch_list_add_mem (tmpu32, tdep->size_mq_attr)) | |
1987 | return -1; | |
1988 | break; | |
1989 | ||
1990 | /* sys_kexec_load */ | |
1991 | case 283: | |
1992 | break; | |
1993 | ||
1994 | /* sys_waitid */ | |
1995 | case 284: | |
1996 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
1997 | if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo)) | |
1998 | return -1; | |
1999 | regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); | |
2000 | if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) | |
2001 | return -1; | |
2002 | break; | |
2003 | ||
2004 | /* sys_ni_syscall */ | |
2005 | case 285: | |
2006 | /* sys_add_key */ | |
2007 | case 286: | |
2008 | /* sys_request_key */ | |
2009 | case 287: | |
2010 | break; | |
2011 | ||
2012 | /* sys_keyctl */ | |
2013 | case 288: | |
2014 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
2015 | if (tmpu32 == 6 || tmpu32 == 11) | |
2016 | { | |
2017 | regcache_raw_read (regcache, tdep->arg3, | |
2018 | (gdb_byte *) & tmpu32); | |
2019 | if (tmpu32) | |
2020 | { | |
2021 | uint32_t buflen; | |
2022 | regcache_raw_read (regcache, tdep->arg4, | |
2023 | (gdb_byte *) & buflen); | |
2024 | if (record_arch_list_add_mem (tmpu32, buflen)) | |
2025 | return -1; | |
2026 | } | |
2027 | } | |
2028 | break; | |
2029 | ||
2030 | /* sys_ioprio_set */ | |
2031 | case 289: | |
2032 | /* sys_ioprio_get */ | |
2033 | case 290: | |
2034 | /* sys_inotify_init */ | |
2035 | case 291: | |
2036 | /* sys_inotify_add_watch */ | |
2037 | case 292: | |
2038 | /* sys_inotify_rm_watch */ | |
2039 | case 293: | |
2040 | /* sys_migrate_pages */ | |
2041 | case 294: | |
2042 | /* sys_openat */ | |
2043 | case 295: | |
2044 | /* sys_mkdirat */ | |
2045 | case 296: | |
2046 | /* sys_mknodat */ | |
2047 | case 297: | |
2048 | /* sys_fchownat */ | |
2049 | case 298: | |
2050 | /* sys_futimesat */ | |
2051 | case 299: | |
2052 | break; | |
2053 | ||
2054 | /* sys_fstatat64 */ | |
2055 | case 300: | |
2056 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
2057 | if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) | |
2058 | return -1; | |
2059 | break; | |
2060 | ||
2061 | /* sys_unlinkat */ | |
2062 | case 301: | |
2063 | /* sys_renameat */ | |
2064 | case 302: | |
2065 | /* sys_linkat */ | |
2066 | case 303: | |
2067 | /* sys_symlinkat */ | |
2068 | case 304: | |
2069 | break; | |
2070 | ||
2071 | /* sys_readlinkat */ | |
2072 | case 305: | |
2073 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
2074 | if (tmpu32) | |
2075 | { | |
2076 | int32_t bufsiz; | |
2077 | regcache_raw_read (regcache, tdep->arg4, | |
2078 | (gdb_byte *) & bufsiz); | |
2079 | if (record_arch_list_add_mem (tmpu32, bufsiz)) | |
2080 | return -1; | |
2081 | } | |
2082 | break; | |
2083 | ||
2084 | /* sys_fchmodat */ | |
2085 | case 306: | |
2086 | /* sys_faccessat */ | |
2087 | case 307: | |
2088 | break; | |
2089 | ||
2090 | /* sys_pselect6 */ | |
2091 | case 308: | |
2092 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
2093 | if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) | |
2094 | return -1; | |
2095 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
2096 | if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) | |
2097 | return -1; | |
2098 | regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); | |
2099 | if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) | |
2100 | return -1; | |
2101 | regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); | |
2102 | if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) | |
2103 | return -1; | |
2104 | break; | |
2105 | ||
2106 | /* sys_ppoll */ | |
2107 | case 309: | |
2108 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
2109 | if (tmpu32) | |
2110 | { | |
2111 | uint32_t nfds; | |
2112 | regcache_raw_read (regcache, tdep->arg2, | |
2113 | (gdb_byte *) & nfds); | |
2114 | if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) | |
2115 | return -1; | |
2116 | } | |
2117 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
2118 | if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) | |
2119 | return -1; | |
2120 | break; | |
2121 | ||
2122 | /* sys_unshare */ | |
2123 | case 310: | |
2124 | /* sys_set_robust_list */ | |
2125 | case 311: | |
2126 | break; | |
2127 | ||
2128 | /* sys_get_robust_list */ | |
2129 | case 312: | |
2130 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
2131 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
2132 | return -1; | |
2133 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
2134 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
2135 | return -1; | |
2136 | break; | |
2137 | ||
2138 | /* sys_splice */ | |
2139 | case 313: | |
2140 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
2141 | if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) | |
2142 | return -1; | |
2143 | regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); | |
2144 | if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) | |
2145 | return -1; | |
2146 | break; | |
2147 | ||
2148 | /* sys_sync_file_range */ | |
2149 | case 314: | |
2150 | /* sys_tee */ | |
2151 | case 315: | |
2152 | /* sys_vmsplice */ | |
2153 | case 316: | |
2154 | break; | |
2155 | ||
2156 | /* sys_move_pages */ | |
2157 | case 317: | |
2158 | regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); | |
2159 | if (tmpu32) | |
2160 | { | |
2161 | uint32_t nr_pages; | |
2162 | regcache_raw_read (regcache, tdep->arg2, | |
2163 | (gdb_byte *) & nr_pages); | |
2164 | if (record_arch_list_add_mem (tmpu32, nr_pages * tdep->size_int)) | |
2165 | return -1; | |
2166 | } | |
2167 | break; | |
2168 | ||
2169 | /* sys_getcpu */ | |
2170 | case 318: | |
2171 | regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); | |
2172 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
2173 | return -1; | |
2174 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
2175 | if (record_arch_list_add_mem (tmpu32, tdep->size_int)) | |
2176 | return -1; | |
2177 | regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); | |
2178 | if (record_arch_list_add_mem (tmpu32, tdep->size_ulong * 2)) | |
2179 | return -1; | |
2180 | break; | |
2181 | ||
2182 | /* sys_epoll_pwait */ | |
2183 | case 319: | |
2184 | regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); | |
2185 | if (tmpu32) | |
2186 | { | |
2187 | int32_t maxevents; | |
2188 | regcache_raw_read (regcache, tdep->arg3, | |
2189 | (gdb_byte *) & maxevents); | |
2190 | if (record_arch_list_add_mem | |
2191 | (tmpu32, maxevents * tdep->size_epoll_event)) | |
2192 | return -1; | |
2193 | } | |
2194 | break; | |
2195 | ||
2196 | default: | |
2197 | printf_unfiltered (_("Process record and replay target doesn't " | |
50ef67b3 HZ |
2198 | "support syscall number %u\n"), |
2199 | (int)tmpu32); | |
b7f6bf22 HZ |
2200 | return -1; |
2201 | break; | |
2202 | } | |
2203 | ||
2204 | return 0; | |
2205 | } |