Add missing cleanups to defaulted_query and prompt_for_continue
[deliverable/binutils-gdb.git] / gdb / linux-record.c
CommitLineData
b7f6bf22
HZ
1/* Process record and replay target code for GNU/Linux.
2
618f726f 3 Copyright (C) 2008-2016 Free Software Foundation, Inc.
b7f6bf22
HZ
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"
2c543fc4 22#include "gdbtypes.h"
b7f6bf22
HZ
23#include "regcache.h"
24#include "record.h"
d02ed0bb 25#include "record-full.h"
b7f6bf22
HZ
26#include "linux-record.h"
27
28/* These macros are the values of the first argument of system call
29 "sys_ptrace". The values of these macros were obtained from Linux
30 Kernel source. */
31
32#define RECORD_PTRACE_PEEKTEXT 1
33#define RECORD_PTRACE_PEEKDATA 2
34#define RECORD_PTRACE_PEEKUSR 3
35
36/* These macros are the values of the first argument of system call
37 "sys_socketcall". The values of these macros were obtained from
38 Linux Kernel source. */
39
40#define RECORD_SYS_SOCKET 1
41#define RECORD_SYS_BIND 2
42#define RECORD_SYS_CONNECT 3
43#define RECORD_SYS_LISTEN 4
44#define RECORD_SYS_ACCEPT 5
45#define RECORD_SYS_GETSOCKNAME 6
46#define RECORD_SYS_GETPEERNAME 7
47#define RECORD_SYS_SOCKETPAIR 8
48#define RECORD_SYS_SEND 9
49#define RECORD_SYS_RECV 10
50#define RECORD_SYS_SENDTO 11
51#define RECORD_SYS_RECVFROM 12
52#define RECORD_SYS_SHUTDOWN 13
53#define RECORD_SYS_SETSOCKOPT 14
54#define RECORD_SYS_GETSOCKOPT 15
55#define RECORD_SYS_SENDMSG 16
56#define RECORD_SYS_RECVMSG 17
57
58/* These macros are the values of the first argument of system call
59 "sys_ipc". The values of these macros were obtained from Linux
60 Kernel source. */
61
62#define RECORD_SEMOP 1
63#define RECORD_SEMGET 2
64#define RECORD_SEMCTL 3
65#define RECORD_SEMTIMEDOP 4
66#define RECORD_MSGSND 11
67#define RECORD_MSGRCV 12
68#define RECORD_MSGGET 13
69#define RECORD_MSGCTL 14
70#define RECORD_SHMAT 21
71#define RECORD_SHMDT 22
72#define RECORD_SHMGET 23
73#define RECORD_SHMCTL 24
74
75/* These macros are the values of the first argument of system call
76 "sys_quotactl". The values of these macros were obtained from Linux
77 Kernel source. */
78
79#define RECORD_Q_GETFMT 0x800004
80#define RECORD_Q_GETINFO 0x800005
81#define RECORD_Q_GETQUOTA 0x800007
82#define RECORD_Q_XGETQSTAT (('5' << 8) + 5)
83#define RECORD_Q_XGETQUOTA (('3' << 8) + 3)
84
2c543fc4
HZ
85#define OUTPUT_REG(val, num) phex_nz ((val), \
86 TYPE_LENGTH (gdbarch_register_type (get_regcache_arch (regcache), (num))))
87
5fd0888a
AA
88/* Record a memory area of length LEN pointed to by register
89 REGNUM. */
90
91static int
92record_mem_at_reg (struct regcache *regcache, int regnum, int len)
93{
94 ULONGEST addr;
95
96 regcache_raw_read_unsigned (regcache, regnum, &addr);
97 return record_full_arch_list_add_mem ((CORE_ADDR) addr, len);
98}
99
2c543fc4
HZ
100static int
101record_linux_sockaddr (struct regcache *regcache,
0fc8f115
AA
102 struct linux_record_tdep *tdep, ULONGEST addr,
103 ULONGEST len)
2c543fc4
HZ
104{
105 gdb_byte *a;
106 int addrlen;
107 struct gdbarch *gdbarch = get_regcache_arch (regcache);
108 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
109
110 if (!addr)
111 return 0;
112
224c3ddb 113 a = (gdb_byte *) alloca (tdep->size_int);
2c543fc4 114
25ea693b 115 if (record_full_arch_list_add_mem ((CORE_ADDR) len, tdep->size_int))
2c543fc4
HZ
116 return -1;
117
118 /* Get the addrlen. */
119 if (target_read_memory ((CORE_ADDR) len, a, tdep->size_int))
120 {
121 if (record_debug)
0fc8f115
AA
122 fprintf_unfiltered (gdb_stdlog,
123 "Process record: error reading "
124 "memory at addr = 0x%s len = %d.\n",
125 phex_nz (len, tdep->size_pointer),
126 tdep->size_int);
a579cd9a 127 return -1;
2c543fc4
HZ
128 }
129 addrlen = (int) extract_unsigned_integer (a, tdep->size_int, byte_order);
130 if (addrlen <= 0 || addrlen > tdep->size_sockaddr)
131 addrlen = tdep->size_sockaddr;
132
25ea693b 133 if (record_full_arch_list_add_mem ((CORE_ADDR) addr, addrlen))
2c543fc4
HZ
134 return -1;
135
136 return 0;
137}
138
139static int
140record_linux_msghdr (struct regcache *regcache,
0fc8f115 141 struct linux_record_tdep *tdep, ULONGEST addr)
2c543fc4
HZ
142{
143 gdb_byte *a;
144 struct gdbarch *gdbarch = get_regcache_arch (regcache);
145 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
146 CORE_ADDR tmpaddr;
147 int tmpint;
148
149 if (!addr)
150 return 0;
151
25ea693b 152 if (record_full_arch_list_add_mem ((CORE_ADDR) addr, tdep->size_msghdr))
2c543fc4
HZ
153 return -1;
154
224c3ddb 155 a = (gdb_byte *) alloca (tdep->size_msghdr);
2c543fc4
HZ
156 if (target_read_memory ((CORE_ADDR) addr, a, tdep->size_msghdr))
157 {
158 if (record_debug)
0fc8f115
AA
159 fprintf_unfiltered (gdb_stdlog,
160 "Process record: error reading "
161 "memory at addr = 0x%s "
162 "len = %d.\n",
163 phex_nz (addr, tdep->size_pointer),
164 tdep->size_msghdr);
a579cd9a 165 return -1;
2c543fc4
HZ
166 }
167
168 /* msg_name msg_namelen */
169 addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
170 a += tdep->size_pointer;
25ea693b
MM
171 if (record_full_arch_list_add_mem
172 ((CORE_ADDR) addr,
173 (int) extract_unsigned_integer (a,
174 tdep->size_int,
175 byte_order)))
2c543fc4 176 return -1;
933c5a62
MK
177 /* We have read an int, but skip size_pointer bytes to account for alignment
178 of the next field on 64-bit targets. */
179 a += tdep->size_pointer;
2c543fc4
HZ
180
181 /* msg_iov msg_iovlen */
182 addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
183 a += tdep->size_pointer;
184 if (addr)
185 {
186 ULONGEST i;
187 ULONGEST len = extract_unsigned_integer (a, tdep->size_size_t,
0fc8f115 188 byte_order);
224c3ddb 189 gdb_byte *iov = (gdb_byte *) alloca (tdep->size_iovec);
2c543fc4
HZ
190
191 for (i = 0; i < len; i++)
0fc8f115
AA
192 {
193 if (target_read_memory ((CORE_ADDR) addr, iov, tdep->size_iovec))
194 {
195 if (record_debug)
196 fprintf_unfiltered (gdb_stdlog,
197 "Process record: error "
198 "reading memory at "
199 "addr = 0x%s "
200 "len = %d.\n",
201 phex_nz (addr,tdep->size_pointer),
202 tdep->size_iovec);
203 return -1;
204 }
205 tmpaddr = (CORE_ADDR) extract_unsigned_integer (iov,
206 tdep->size_pointer,
207 byte_order);
208 tmpint = (int) extract_unsigned_integer (iov + tdep->size_pointer,
209 tdep->size_size_t,
210 byte_order);
211 if (record_full_arch_list_add_mem (tmpaddr, tmpint))
212 return -1;
213 addr += tdep->size_iovec;
214 }
2c543fc4
HZ
215 }
216 a += tdep->size_size_t;
217
218 /* msg_control msg_controllen */
219 addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
220 a += tdep->size_pointer;
221 tmpint = (int) extract_unsigned_integer (a, tdep->size_size_t, byte_order);
25ea693b 222 if (record_full_arch_list_add_mem ((CORE_ADDR) addr, tmpint))
2c543fc4
HZ
223 return -1;
224
225 return 0;
226}
227
b7f6bf22
HZ
228/* When the architecture process record get a Linux syscall
229 instruction, it will get a Linux syscall number of this
230 architecture and convert it to the Linux syscall number "num" which
231 is internal to GDB. Most Linux syscalls across architectures in
232 Linux would be similar and mostly differ by sizes of types and
233 structures. This sizes are put to "tdep".
234
235 Record the values of the registers and memory that will be changed
236 in current system call.
237
238 Return -1 if something wrong. */
239
240int
0fc8f115 241record_linux_system_call (enum gdb_syscall syscall,
13b6d1d4 242 struct regcache *regcache,
0fc8f115 243 struct linux_record_tdep *tdep)
b7f6bf22 244{
5af949e3 245 struct gdbarch *gdbarch = get_regcache_arch (regcache);
2c543fc4
HZ
246 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
247 ULONGEST tmpulongest;
248 CORE_ADDR tmpaddr;
249 int tmpint;
b7f6bf22 250
13b6d1d4 251 switch (syscall)
b7f6bf22 252 {
13b6d1d4 253 case gdb_sys_restart_syscall:
b7f6bf22
HZ
254 break;
255
13b6d1d4 256 case gdb_sys_exit:
b7f6bf22 257 {
0fc8f115
AA
258 int q;
259
260 target_terminal_ours ();
261 q = yquery (_("The next instruction is syscall exit. "
262 "It will make the program exit. "
263 "Do you want to stop the program?"));
264 target_terminal_inferior ();
265 if (q)
266 return 1;
b7f6bf22
HZ
267 }
268 break;
269
13b6d1d4 270 case gdb_sys_fork:
b7f6bf22
HZ
271 break;
272
13b6d1d4 273 case gdb_sys_read:
5fd0888a
AA
274 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
275 if (record_mem_at_reg (regcache, tdep->arg2, (int) tmpulongest))
276 return -1;
b7f6bf22
HZ
277 break;
278
13b6d1d4
MS
279 case gdb_sys_write:
280 case gdb_sys_open:
281 case gdb_sys_close:
b80d067f
MK
282 break;
283
13b6d1d4 284 case gdb_sys_waitpid:
b80d067f
MK
285 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
286 if (tmpulongest)
0fc8f115 287 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
b80d067f 288 tdep->size_int))
0fc8f115 289 return -1;
b80d067f
MK
290 break;
291
13b6d1d4
MS
292 case gdb_sys_creat:
293 case gdb_sys_link:
294 case gdb_sys_unlink:
295 case gdb_sys_execve:
296 case gdb_sys_chdir:
b80d067f
MK
297 break;
298
13b6d1d4 299 case gdb_sys_time:
b80d067f
MK
300 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
301 if (tmpulongest)
0fc8f115 302 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
b80d067f 303 tdep->size_time_t))
0fc8f115 304 return -1;
b80d067f
MK
305 break;
306
13b6d1d4
MS
307 case gdb_sys_mknod:
308 case gdb_sys_chmod:
309 case gdb_sys_lchown16:
310 case gdb_sys_ni_syscall17:
311 break;
312
313 case gdb_sys_stat:
314 case gdb_sys_fstat:
315 case gdb_sys_lstat:
5fd0888a
AA
316 if (record_mem_at_reg (regcache, tdep->arg2,
317 tdep->size__old_kernel_stat))
0fc8f115 318 return -1;
b7f6bf22
HZ
319 break;
320
13b6d1d4
MS
321 case gdb_sys_lseek:
322 case gdb_sys_getpid:
323 case gdb_sys_mount:
324 case gdb_sys_oldumount:
325 case gdb_sys_setuid16:
326 case gdb_sys_getuid16:
327 case gdb_sys_stime:
b7f6bf22
HZ
328 break;
329
13b6d1d4 330 case gdb_sys_ptrace:
2c543fc4
HZ
331 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
332 if (tmpulongest == RECORD_PTRACE_PEEKTEXT
0fc8f115
AA
333 || tmpulongest == RECORD_PTRACE_PEEKDATA
334 || tmpulongest == RECORD_PTRACE_PEEKUSR)
335 {
5fd0888a 336 if (record_mem_at_reg (regcache, tdep->arg4, 4))
0fc8f115
AA
337 return -1;
338 }
b7f6bf22
HZ
339 break;
340
13b6d1d4
MS
341 case gdb_sys_alarm:
342 case gdb_sys_pause:
343 case gdb_sys_utime:
344 case gdb_sys_ni_syscall31:
345 case gdb_sys_ni_syscall32:
346 case gdb_sys_access:
347 case gdb_sys_nice:
348 case gdb_sys_ni_syscall35:
349 case gdb_sys_sync:
350 case gdb_sys_kill:
351 case gdb_sys_rename:
352 case gdb_sys_mkdir:
353 case gdb_sys_rmdir:
354 case gdb_sys_dup:
b80d067f
MK
355 break;
356
13b6d1d4 357 case gdb_sys_pipe:
5fd0888a 358 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int * 2))
0fc8f115 359 return -1;
13b6d1d4
MS
360 break;
361
362 case gdb_sys_times:
5fd0888a 363 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_tms))
0fc8f115 364 return -1;
b7f6bf22
HZ
365 break;
366
13b6d1d4
MS
367 case gdb_sys_ni_syscall44:
368 case gdb_sys_brk:
369 case gdb_sys_setgid16:
370 case gdb_sys_getgid16:
371 case gdb_sys_signal:
372 case gdb_sys_geteuid16:
373 case gdb_sys_getegid16:
374 case gdb_sys_acct:
375 case gdb_sys_umount:
376 case gdb_sys_ni_syscall53:
377 break;
378
379 case gdb_sys_ioctl:
b7f6bf22 380 /* XXX Need to add a lot of support of other ioctl requests. */
2c543fc4
HZ
381 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
382 if (tmpulongest == tdep->ioctl_FIOCLEX
0fc8f115
AA
383 || tmpulongest == tdep->ioctl_FIONCLEX
384 || tmpulongest == tdep->ioctl_FIONBIO
385 || tmpulongest == tdep->ioctl_FIOASYNC
386 || tmpulongest == tdep->ioctl_TCSETS
387 || tmpulongest == tdep->ioctl_TCSETSW
388 || tmpulongest == tdep->ioctl_TCSETSF
389 || tmpulongest == tdep->ioctl_TCSETA
390 || tmpulongest == tdep->ioctl_TCSETAW
391 || tmpulongest == tdep->ioctl_TCSETAF
392 || tmpulongest == tdep->ioctl_TCSBRK
393 || tmpulongest == tdep->ioctl_TCXONC
394 || tmpulongest == tdep->ioctl_TCFLSH
395 || tmpulongest == tdep->ioctl_TIOCEXCL
396 || tmpulongest == tdep->ioctl_TIOCNXCL
397 || tmpulongest == tdep->ioctl_TIOCSCTTY
398 || tmpulongest == tdep->ioctl_TIOCSPGRP
399 || tmpulongest == tdep->ioctl_TIOCSTI
400 || tmpulongest == tdep->ioctl_TIOCSWINSZ
401 || tmpulongest == tdep->ioctl_TIOCMBIS
402 || tmpulongest == tdep->ioctl_TIOCMBIC
403 || tmpulongest == tdep->ioctl_TIOCMSET
404 || tmpulongest == tdep->ioctl_TIOCSSOFTCAR
405 || tmpulongest == tdep->ioctl_TIOCCONS
406 || tmpulongest == tdep->ioctl_TIOCSSERIAL
407 || tmpulongest == tdep->ioctl_TIOCPKT
408 || tmpulongest == tdep->ioctl_TIOCNOTTY
409 || tmpulongest == tdep->ioctl_TIOCSETD
410 || tmpulongest == tdep->ioctl_TCSBRKP
411 || tmpulongest == tdep->ioctl_TIOCTTYGSTRUCT
412 || tmpulongest == tdep->ioctl_TIOCSBRK
413 || tmpulongest == tdep->ioctl_TIOCCBRK
414 || tmpulongest == tdep->ioctl_TCSETS2
415 || tmpulongest == tdep->ioctl_TCSETSW2
416 || tmpulongest == tdep->ioctl_TCSETSF2
417 || tmpulongest == tdep->ioctl_TIOCSPTLCK
418 || tmpulongest == tdep->ioctl_TIOCSERCONFIG
419 || tmpulongest == tdep->ioctl_TIOCSERGWILD
420 || tmpulongest == tdep->ioctl_TIOCSERSWILD
421 || tmpulongest == tdep->ioctl_TIOCSLCKTRMIOS
422 || tmpulongest == tdep->ioctl_TIOCSERGETMULTI
423 || tmpulongest == tdep->ioctl_TIOCSERSETMULTI
424 || tmpulongest == tdep->ioctl_TIOCMIWAIT
425 || tmpulongest == tdep->ioctl_TIOCSHAYESESP)
426 {
427 /* Nothing to do. */
428 }
2c543fc4 429 else if (tmpulongest == tdep->ioctl_TCGETS
0fc8f115
AA
430 || tmpulongest == tdep->ioctl_TCGETA
431 || tmpulongest == tdep->ioctl_TIOCGLCKTRMIOS)
432 {
5fd0888a
AA
433 if (record_mem_at_reg (regcache, tdep->arg3,
434 tdep->size_termios))
0fc8f115
AA
435 return -1;
436 }
2c543fc4 437 else if (tmpulongest == tdep->ioctl_TIOCGPGRP
0fc8f115
AA
438 || tmpulongest == tdep->ioctl_TIOCGSID)
439 {
5fd0888a 440 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_pid_t))
0fc8f115
AA
441 return -1;
442 }
2c543fc4 443 else if (tmpulongest == tdep->ioctl_TIOCOUTQ
0fc8f115
AA
444 || tmpulongest == tdep->ioctl_TIOCMGET
445 || tmpulongest == tdep->ioctl_TIOCGSOFTCAR
446 || tmpulongest == tdep->ioctl_FIONREAD
447 || tmpulongest == tdep->ioctl_TIOCINQ
448 || tmpulongest == tdep->ioctl_TIOCGETD
449 || tmpulongest == tdep->ioctl_TIOCGPTN
450 || tmpulongest == tdep->ioctl_TIOCSERGETLSR)
451 {
5fd0888a 452 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_int))
0fc8f115
AA
453 return -1;
454 }
2c543fc4 455 else if (tmpulongest == tdep->ioctl_TIOCGWINSZ)
0fc8f115 456 {
5fd0888a
AA
457 if (record_mem_at_reg (regcache, tdep->arg3,
458 tdep->size_winsize))
0fc8f115
AA
459 return -1;
460 }
2c543fc4 461 else if (tmpulongest == tdep->ioctl_TIOCLINUX)
0fc8f115 462 {
13b6d1d4 463 /* This syscall affects a char-size memory. */
5fd0888a 464 if (record_mem_at_reg (regcache, tdep->arg3, 1))
0fc8f115
AA
465 return -1;
466 }
2c543fc4 467 else if (tmpulongest == tdep->ioctl_TIOCGSERIAL)
0fc8f115 468 {
5fd0888a
AA
469 if (record_mem_at_reg (regcache, tdep->arg3,
470 tdep->size_serial_struct))
0fc8f115
AA
471 return -1;
472 }
2c543fc4 473 else if (tmpulongest == tdep->ioctl_TCGETS2)
0fc8f115 474 {
5fd0888a
AA
475 if (record_mem_at_reg (regcache, tdep->arg3,
476 tdep->size_termios2))
0fc8f115
AA
477 return -1;
478 }
2c543fc4 479 else if (tmpulongest == tdep->ioctl_FIOQSIZE)
0fc8f115 480 {
5fd0888a 481 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_loff_t))
0fc8f115
AA
482 return -1;
483 }
2c543fc4 484 else if (tmpulongest == tdep->ioctl_TIOCGICOUNT)
0fc8f115 485 {
5fd0888a
AA
486 if (record_mem_at_reg (regcache, tdep->arg3,
487 tdep->size_serial_icounter_struct))
0fc8f115
AA
488 return -1;
489 }
2c543fc4 490 else if (tmpulongest == tdep->ioctl_TIOCGHAYESESP)
0fc8f115 491 {
5fd0888a
AA
492 if (record_mem_at_reg (regcache, tdep->arg3,
493 tdep->size_hayes_esp_config))
0fc8f115
AA
494 return -1;
495 }
2c543fc4 496 else if (tmpulongest == tdep->ioctl_TIOCSERGSTRUCT)
0fc8f115
AA
497 {
498 printf_unfiltered (_("Process record and replay target doesn't "
499 "support ioctl request TIOCSERGSTRUCT\n"));
500 return 1;
501 }
b7f6bf22 502 else
0fc8f115
AA
503 {
504 printf_unfiltered (_("Process record and replay target doesn't "
505 "support ioctl request 0x%s.\n"),
506 OUTPUT_REG (tmpulongest, tdep->arg2));
507 return 1;
508 }
b7f6bf22
HZ
509 break;
510
13b6d1d4 511 case gdb_sys_fcntl:
b7f6bf22 512 /* XXX */
2c543fc4 513 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
b7f6bf22 514 sys_fcntl:
2c543fc4 515 if (tmpulongest == tdep->fcntl_F_GETLK)
0fc8f115 516 {
5fd0888a 517 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_flock))
0fc8f115
AA
518 return -1;
519 }
b7f6bf22
HZ
520 break;
521
13b6d1d4
MS
522 case gdb_sys_ni_syscall56:
523 case gdb_sys_setpgid:
524 case gdb_sys_ni_syscall58:
b7f6bf22
HZ
525 break;
526
13b6d1d4 527 case gdb_sys_olduname:
5fd0888a
AA
528 if (record_mem_at_reg (regcache, tdep->arg1,
529 tdep->size_oldold_utsname))
0fc8f115 530 return -1;
b7f6bf22
HZ
531 break;
532
13b6d1d4
MS
533 case gdb_sys_umask:
534 case gdb_sys_chroot:
b7f6bf22
HZ
535 break;
536
13b6d1d4 537 case gdb_sys_ustat:
5fd0888a 538 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_ustat))
0fc8f115 539 return -1;
b7f6bf22
HZ
540 break;
541
13b6d1d4
MS
542 case gdb_sys_dup2:
543 case gdb_sys_getppid:
544 case gdb_sys_getpgrp:
545 case gdb_sys_setsid:
b7f6bf22
HZ
546 break;
547
13b6d1d4 548 case gdb_sys_sigaction:
5fd0888a
AA
549 if (record_mem_at_reg (regcache, tdep->arg3,
550 tdep->size_old_sigaction))
0fc8f115 551 return -1;
b7f6bf22
HZ
552 break;
553
13b6d1d4
MS
554 case gdb_sys_sgetmask:
555 case gdb_sys_ssetmask:
556 case gdb_sys_setreuid16:
557 case gdb_sys_setregid16:
558 case gdb_sys_sigsuspend:
b7f6bf22
HZ
559 break;
560
13b6d1d4 561 case gdb_sys_sigpending:
5fd0888a
AA
562 if (record_mem_at_reg (regcache, tdep->arg1,
563 tdep->size_old_sigset_t))
0fc8f115 564 return -1;
b7f6bf22
HZ
565 break;
566
13b6d1d4
MS
567 case gdb_sys_sethostname:
568 case gdb_sys_setrlimit:
b7f6bf22
HZ
569 break;
570
13b6d1d4 571 case gdb_sys_old_getrlimit:
5fd0888a 572 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_rlimit))
0fc8f115 573 return -1;
b7f6bf22
HZ
574 break;
575
13b6d1d4 576 case gdb_sys_getrusage:
5fd0888a 577 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_rusage))
0fc8f115 578 return -1;
b7f6bf22
HZ
579 break;
580
13b6d1d4 581 case gdb_sys_gettimeofday:
5fd0888a
AA
582 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_timeval)
583 || record_mem_at_reg (regcache, tdep->arg2, tdep->size_timezone))
0fc8f115 584 return -1;
b7f6bf22
HZ
585 break;
586
13b6d1d4 587 case gdb_sys_settimeofday:
b7f6bf22
HZ
588 break;
589
13b6d1d4 590 case gdb_sys_getgroups16:
2c543fc4 591 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
cb658d21 592 if (tmpulongest)
0fc8f115
AA
593 {
594 ULONGEST gidsetsize;
cb658d21 595
0fc8f115
AA
596 regcache_raw_read_unsigned (regcache, tdep->arg1,
597 &gidsetsize);
598 tmpint = tdep->size_old_gid_t * (int) gidsetsize;
599 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint))
600 return -1;
601 }
b7f6bf22
HZ
602 break;
603
13b6d1d4 604 case gdb_sys_setgroups16:
b7f6bf22
HZ
605 break;
606
13b6d1d4 607 case gdb_old_select:
b7f6bf22 608 {
0fc8f115
AA
609 unsigned long sz_sel_arg = tdep->size_long + tdep->size_pointer * 4;
610 gdb_byte *a = (gdb_byte *) alloca (sz_sel_arg);
611 CORE_ADDR inp, outp, exp, tvp;
612
613 regcache_raw_read_unsigned (regcache, tdep->arg1,
614 &tmpulongest);
615 if (tmpulongest)
616 {
617 if (target_read_memory (tmpulongest, a, sz_sel_arg))
618 {
619 if (record_debug)
620 fprintf_unfiltered (gdb_stdlog,
621 "Process record: error reading memory "
622 "at addr = 0x%s len = %lu.\n",
623 OUTPUT_REG (tmpulongest, tdep->arg1),
624 sz_sel_arg);
625 return -1;
626 }
627 /* Skip n. */
628 a += tdep->size_long;
629 inp = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
630 a += tdep->size_pointer;
631 outp = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
632 a += tdep->size_pointer;
633 exp = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
634 a += tdep->size_pointer;
635 tvp = extract_unsigned_integer (a, tdep->size_pointer, byte_order);
636 if (inp)
637 if (record_full_arch_list_add_mem (inp, tdep->size_fd_set))
638 return -1;
639 if (outp)
640 if (record_full_arch_list_add_mem (outp, tdep->size_fd_set))
641 return -1;
642 if (exp)
643 if (record_full_arch_list_add_mem (exp, tdep->size_fd_set))
644 return -1;
645 if (tvp)
646 if (record_full_arch_list_add_mem (tvp, tdep->size_timeval))
647 return -1;
648 }
b7f6bf22
HZ
649 }
650 break;
651
13b6d1d4 652 case gdb_sys_symlink:
b7f6bf22
HZ
653 break;
654
13b6d1d4 655 case gdb_sys_readlink:
5fd0888a
AA
656 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
657 if (record_mem_at_reg (regcache, tdep->arg2, (int) tmpulongest))
658 return -1;
b7f6bf22
HZ
659 break;
660
13b6d1d4
MS
661 case gdb_sys_uselib:
662 case gdb_sys_swapon:
b7f6bf22
HZ
663 break;
664
13b6d1d4 665 case gdb_sys_reboot:
b7f6bf22 666 {
0fc8f115 667 int q;
e0881a8e 668
0fc8f115
AA
669 target_terminal_ours ();
670 q = yquery (_("The next instruction is syscall reboot. "
e0881a8e
MS
671 "It will restart the computer. "
672 "Do you want to stop the program?"));
0fc8f115
AA
673 target_terminal_inferior ();
674 if (q)
675 return 1;
b7f6bf22
HZ
676 }
677 break;
678
13b6d1d4 679 case gdb_old_readdir:
5fd0888a 680 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_old_dirent))
0fc8f115 681 return -1;
b7f6bf22
HZ
682 break;
683
13b6d1d4 684 case gdb_old_mmap:
b7f6bf22
HZ
685 break;
686
13b6d1d4 687 case gdb_sys_munmap:
b7f6bf22 688 {
0fc8f115 689 ULONGEST len;
2c543fc4 690
0fc8f115
AA
691 regcache_raw_read_unsigned (regcache, tdep->arg1,
692 &tmpulongest);
693 regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
694 if (record_full_memory_query)
695 {
bb08c432
HZ
696 int q;
697
0fc8f115
AA
698 target_terminal_ours ();
699 q = yquery (_("\
bb08c432
HZ
700The next instruction is syscall munmap.\n\
701It will free the memory addr = 0x%s len = %u.\n\
702It will make record target cannot record some memory change.\n\
703Do you want to stop the program?"),
0fc8f115
AA
704 OUTPUT_REG (tmpulongest, tdep->arg1), (int) len);
705 target_terminal_inferior ();
706 if (q)
707 return 1;
708 }
b7f6bf22
HZ
709 }
710 break;
711
13b6d1d4
MS
712 case gdb_sys_truncate:
713 case gdb_sys_ftruncate:
714 case gdb_sys_fchmod:
715 case gdb_sys_fchown16:
716 case gdb_sys_getpriority:
717 case gdb_sys_setpriority:
718 case gdb_sys_ni_syscall98:
719 break;
720
721 case gdb_sys_statfs:
722 case gdb_sys_fstatfs:
5fd0888a 723 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_statfs))
0fc8f115 724 return -1;
b7f6bf22
HZ
725 break;
726
13b6d1d4 727 case gdb_sys_ioperm:
b7f6bf22
HZ
728 break;
729
13b6d1d4
MS
730 case gdb_sys_socket:
731 case gdb_sys_sendto:
732 case gdb_sys_sendmsg:
733 case gdb_sys_shutdown:
734 case gdb_sys_bind:
735 case gdb_sys_connect:
736 case gdb_sys_listen:
737 case gdb_sys_setsockopt:
2c543fc4
HZ
738 break;
739
13b6d1d4
MS
740 case gdb_sys_accept:
741 case gdb_sys_getsockname:
742 case gdb_sys_getpeername:
2c543fc4 743 {
0fc8f115 744 ULONGEST len;
e0881a8e 745
0fc8f115
AA
746 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
747 regcache_raw_read_unsigned (regcache, tdep->arg3, &len);
748 if (record_linux_sockaddr (regcache, tdep, tmpulongest, len))
749 return -1;
2c543fc4
HZ
750 }
751 break;
752
13b6d1d4 753 case gdb_sys_recvfrom:
2c543fc4 754 {
0fc8f115 755 ULONGEST len;
e0881a8e 756
0fc8f115
AA
757 regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
758 regcache_raw_read_unsigned (regcache, tdep->arg5, &len);
759 if (record_linux_sockaddr (regcache, tdep, tmpulongest, len))
760 return -1;
2c543fc4 761 }
907b7f4f
MS
762 break;
763
13b6d1d4 764 case gdb_sys_recv:
5fd0888a
AA
765 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
766 if (record_mem_at_reg (regcache, tdep->arg2, (int) tmpulongest))
767 return -1;
2c543fc4
HZ
768 break;
769
13b6d1d4 770 case gdb_sys_recvmsg:
2c543fc4
HZ
771 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
772 if (record_linux_msghdr (regcache, tdep, tmpulongest))
0fc8f115 773 return -1;
2c543fc4
HZ
774 break;
775
13b6d1d4 776 case gdb_sys_socketpair:
5fd0888a 777 if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_int))
0fc8f115 778 return -1;
2c543fc4
HZ
779 break;
780
13b6d1d4 781 case gdb_sys_getsockopt:
2c543fc4
HZ
782 regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
783 if (tmpulongest)
0fc8f115
AA
784 {
785 ULONGEST optvalp;
786 gdb_byte *optlenp = (gdb_byte *) alloca (tdep->size_int);
787
788 if (target_read_memory ((CORE_ADDR) tmpulongest, optlenp,
789 tdep->size_int))
790 {
791 if (record_debug)
792 fprintf_unfiltered (gdb_stdlog,
793 "Process record: error reading "
794 "memory at addr = 0x%s "
795 "len = %d.\n",
796 OUTPUT_REG (tmpulongest, tdep->arg5),
797 tdep->size_int);
798 return -1;
799 }
800 regcache_raw_read_unsigned (regcache, tdep->arg4, &optvalp);
801 tmpint = (int) extract_signed_integer (optlenp, tdep->size_int,
802 byte_order);
803 if (record_full_arch_list_add_mem ((CORE_ADDR) optvalp, tmpint))
804 return -1;
805 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 806 tdep->size_int))
0fc8f115
AA
807 return -1;
808 }
2c543fc4
HZ
809 break;
810
13b6d1d4 811 case gdb_sys_socketcall:
2c543fc4
HZ
812 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
813 switch (tmpulongest)
0fc8f115
AA
814 {
815 case RECORD_SYS_SOCKET:
816 case RECORD_SYS_BIND:
817 case RECORD_SYS_CONNECT:
818 case RECORD_SYS_LISTEN:
819 break;
820 case RECORD_SYS_ACCEPT:
821 case RECORD_SYS_GETSOCKNAME:
822 case RECORD_SYS_GETPEERNAME:
823 {
824 regcache_raw_read_unsigned (regcache, tdep->arg2,
825 &tmpulongest);
826 if (tmpulongest)
827 {
828 gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2);
829 ULONGEST len;
830
831 tmpulongest += tdep->size_ulong;
832 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
833 tdep->size_ulong * 2))
834 {
835 if (record_debug)
836 fprintf_unfiltered (gdb_stdlog,
837 "Process record: error reading "
838 "memory at addr = 0x%s len = %d.\n",
839 OUTPUT_REG (tmpulongest, tdep->arg2),
840 tdep->size_ulong * 2);
841 return -1;
842 }
843 tmpulongest = extract_unsigned_integer (a,
844 tdep->size_ulong,
845 byte_order);
846 len = extract_unsigned_integer (a + tdep->size_ulong,
847 tdep->size_ulong, byte_order);
848 if (record_linux_sockaddr (regcache, tdep, tmpulongest, len))
849 return -1;
850 }
851 }
852 break;
853
854 case RECORD_SYS_SOCKETPAIR:
855 {
856 gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong);
857
858 regcache_raw_read_unsigned (regcache, tdep->arg2,
859 &tmpulongest);
860 if (tmpulongest)
861 {
862 tmpulongest += tdep->size_ulong * 3;
863 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
864 tdep->size_ulong))
865 {
866 if (record_debug)
867 fprintf_unfiltered (gdb_stdlog,
868 "Process record: error reading "
869 "memory at addr = 0x%s len = %d.\n",
870 OUTPUT_REG (tmpulongest, tdep->arg2),
871 tdep->size_ulong);
872 return -1;
873 }
874 tmpaddr
875 = (CORE_ADDR) extract_unsigned_integer (a, tdep->size_ulong,
876 byte_order);
877 if (record_full_arch_list_add_mem (tmpaddr, tdep->size_int))
878 return -1;
879 }
880 }
881 break;
882 case RECORD_SYS_SEND:
883 case RECORD_SYS_SENDTO:
884 break;
885 case RECORD_SYS_RECVFROM:
886 regcache_raw_read_unsigned (regcache, tdep->arg2,
887 &tmpulongest);
888 if (tmpulongest)
889 {
890 gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2);
891 ULONGEST len;
892
893 tmpulongest += tdep->size_ulong * 4;
894 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
895 tdep->size_ulong * 2))
896 {
897 if (record_debug)
898 fprintf_unfiltered (gdb_stdlog,
899 "Process record: error reading "
900 "memory at addr = 0x%s len = %d.\n",
901 OUTPUT_REG (tmpulongest, tdep->arg2),
902 tdep->size_ulong * 2);
903 return -1;
904 }
905 tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
906 byte_order);
907 len = extract_unsigned_integer (a + tdep->size_ulong,
908 tdep->size_ulong, byte_order);
909 if (record_linux_sockaddr (regcache, tdep, tmpulongest, len))
910 return -1;
911 }
912 case RECORD_SYS_RECV:
913 regcache_raw_read_unsigned (regcache, tdep->arg2,
914 &tmpulongest);
915 if (tmpulongest)
916 {
917 gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2);
918
919 tmpulongest += tdep->size_ulong;
920 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
921 tdep->size_ulong))
922 {
923 if (record_debug)
924 fprintf_unfiltered (gdb_stdlog,
925 "Process record: error reading "
926 "memory at addr = 0x%s len = %d.\n",
927 OUTPUT_REG (tmpulongest, tdep->arg2),
928 tdep->size_ulong);
929 return -1;
930 }
931 tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
932 byte_order);
933 if (tmpulongest)
934 {
935 a += tdep->size_ulong;
936 tmpint = (int) extract_unsigned_integer (a, tdep->size_ulong,
937 byte_order);
938 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 939 tmpint))
0fc8f115
AA
940 return -1;
941 }
942 }
943 break;
944 case RECORD_SYS_SHUTDOWN:
945 case RECORD_SYS_SETSOCKOPT:
946 break;
947 case RECORD_SYS_GETSOCKOPT:
948 {
949 gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong * 2);
950 gdb_byte *av = (gdb_byte *) alloca (tdep->size_int);
951
952 regcache_raw_read_unsigned (regcache, tdep->arg2,
953 &tmpulongest);
954 if (tmpulongest)
955 {
956 tmpulongest += tdep->size_ulong * 3;
957 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
958 tdep->size_ulong * 2))
959 {
960 if (record_debug)
961 fprintf_unfiltered (gdb_stdlog,
962 "Process record: error reading "
963 "memory at addr = 0x%s len = %d.\n",
964 OUTPUT_REG (tmpulongest, tdep->arg2),
965 tdep->size_ulong * 2);
966 return -1;
967 }
968 tmpulongest = extract_unsigned_integer (a + tdep->size_ulong,
969 tdep->size_ulong,
970 byte_order);
971 if (tmpulongest)
972 {
973 if (target_read_memory ((CORE_ADDR) tmpulongest, av,
974 tdep->size_int))
975 {
976 if (record_debug)
977 fprintf_unfiltered (gdb_stdlog,
978 "Process record: error reading "
979 "memory at addr = 0x%s "
980 "len = %d.\n",
981 phex_nz (tmpulongest,
982 tdep->size_ulong),
983 tdep->size_int);
984 return -1;
985 }
986 tmpaddr
987 = (CORE_ADDR) extract_unsigned_integer (a,
988 tdep->size_ulong,
989 byte_order);
990 tmpint = (int) extract_unsigned_integer (av,
991 tdep->size_int,
992 byte_order);
993 if (record_full_arch_list_add_mem (tmpaddr, tmpint))
994 return -1;
995 a += tdep->size_ulong;
996 tmpaddr
997 = (CORE_ADDR) extract_unsigned_integer (a,
998 tdep->size_ulong,
999 byte_order);
1000 if (record_full_arch_list_add_mem (tmpaddr,
25ea693b 1001 tdep->size_int))
0fc8f115
AA
1002 return -1;
1003 }
1004 }
1005 }
1006 break;
1007 case RECORD_SYS_SENDMSG:
1008 break;
1009 case RECORD_SYS_RECVMSG:
1010 {
1011 gdb_byte *a = (gdb_byte *) alloca (tdep->size_ulong);
1012
1013 regcache_raw_read_unsigned (regcache, tdep->arg2,
1014 &tmpulongest);
1015 if (tmpulongest)
1016 {
1017 tmpulongest += tdep->size_ulong;
1018 if (target_read_memory ((CORE_ADDR) tmpulongest, a,
1019 tdep->size_ulong))
1020 {
1021 if (record_debug)
1022 fprintf_unfiltered (gdb_stdlog,
1023 "Process record: error reading "
1024 "memory at addr = 0x%s len = %d.\n",
1025 OUTPUT_REG (tmpulongest, tdep->arg2),
1026 tdep->size_ulong);
1027 return -1;
1028 }
1029 tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
1030 byte_order);
1031 if (record_linux_msghdr (regcache, tdep, tmpulongest))
1032 return -1;
1033 }
1034 }
1035 break;
1036 default:
1037 printf_unfiltered (_("Process record and replay target "
1038 "doesn't support socketcall call 0x%s\n"),
1039 OUTPUT_REG (tmpulongest, tdep->arg1));
1040 return -1;
1041 break;
1042 }
b7f6bf22
HZ
1043 break;
1044
13b6d1d4 1045 case gdb_sys_syslog:
b7f6bf22
HZ
1046 break;
1047
13b6d1d4 1048 case gdb_sys_setitimer:
5fd0888a 1049 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_itimerval))
0fc8f115 1050 return -1;
b7f6bf22
HZ
1051 break;
1052
13b6d1d4 1053 case gdb_sys_getitimer:
5fd0888a 1054 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_itimerval))
0fc8f115 1055 return -1;
b7f6bf22
HZ
1056 break;
1057
13b6d1d4
MS
1058 case gdb_sys_newstat:
1059 case gdb_sys_newlstat:
1060 case gdb_sys_newfstat:
5fd0888a 1061 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_stat))
0fc8f115 1062 return -1;
b7f6bf22
HZ
1063 break;
1064
d2de23ad
MK
1065 case gdb_sys_newfstatat:
1066 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1067 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
1068 tdep->size_stat))
0fc8f115 1069 return -1;
d2de23ad
MK
1070 break;
1071
13b6d1d4 1072 case gdb_sys_uname:
5fd0888a
AA
1073 if (record_mem_at_reg (regcache, tdep->arg1,
1074 tdep->size_old_utsname))
0fc8f115 1075 return -1;
b7f6bf22
HZ
1076 break;
1077
13b6d1d4
MS
1078 case gdb_sys_iopl:
1079 case gdb_sys_vhangup:
1080 case gdb_sys_ni_syscall112:
1081 case gdb_sys_vm86old:
b7f6bf22
HZ
1082 break;
1083
13b6d1d4 1084 case gdb_sys_wait4:
5fd0888a
AA
1085 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int)
1086 || record_mem_at_reg (regcache, tdep->arg4, tdep->size_rusage))
0fc8f115 1087 return -1;
b7f6bf22
HZ
1088 break;
1089
13b6d1d4 1090 case gdb_sys_swapoff:
b7f6bf22
HZ
1091 break;
1092
13b6d1d4 1093 case gdb_sys_sysinfo:
5fd0888a 1094 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_sysinfo))
0fc8f115 1095 return -1;
2c543fc4
HZ
1096 break;
1097
13b6d1d4
MS
1098 case gdb_sys_shmget:
1099 case gdb_sys_semget:
1100 case gdb_sys_semop:
1101 case gdb_sys_msgget:
2c543fc4 1102 /* XXX maybe need do some record works with sys_shmdt. */
13b6d1d4
MS
1103 case gdb_sys_shmdt:
1104 case gdb_sys_msgsnd:
1105 case gdb_sys_semtimedop:
2c543fc4
HZ
1106 break;
1107
13b6d1d4 1108 case gdb_sys_shmat:
5fd0888a 1109 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_ulong))
0fc8f115 1110 return -1;
2c543fc4
HZ
1111 break;
1112
13b6d1d4 1113 case gdb_sys_shmctl:
5fd0888a 1114 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_shmid_ds))
0fc8f115 1115 return -1;
2c543fc4
HZ
1116 break;
1117
13b6d1d4 1118 /* XXX sys_semctl 525 still not supported. */
2c543fc4 1119 /* sys_semctl */
2c543fc4 1120
13b6d1d4 1121 case gdb_sys_msgrcv:
2c543fc4 1122 {
0fc8f115
AA
1123 LONGEST l;
1124
1125 regcache_raw_read_signed (regcache, tdep->arg3, &l);
0fc8f115 1126 tmpint = l + tdep->size_long;
5fd0888a 1127 if (record_mem_at_reg (regcache, tdep->arg2, tmpint))
0fc8f115 1128 return -1;
2c543fc4
HZ
1129 }
1130 break;
1131
13b6d1d4 1132 case gdb_sys_msgctl:
5fd0888a 1133 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_msqid_ds))
0fc8f115 1134 return -1;
b7f6bf22
HZ
1135 break;
1136
13b6d1d4 1137 case gdb_sys_ipc:
2c543fc4
HZ
1138 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1139 tmpulongest &= 0xffff;
1140 switch (tmpulongest)
0fc8f115
AA
1141 {
1142 case RECORD_SEMOP:
1143 case RECORD_SEMGET:
1144 case RECORD_SEMTIMEDOP:
1145 case RECORD_MSGSND:
1146 case RECORD_MSGGET:
13b6d1d4 1147 /* XXX maybe need do some record works with RECORD_SHMDT. */
0fc8f115
AA
1148 case RECORD_SHMDT:
1149 case RECORD_SHMGET:
1150 break;
1151 case RECORD_MSGRCV:
1152 {
1153 LONGEST second;
0fc8f115
AA
1154
1155 regcache_raw_read_signed (regcache, tdep->arg3, &second);
0fc8f115 1156 tmpint = (int) second + tdep->size_long;
5fd0888a 1157 if (record_mem_at_reg (regcache, tdep->arg5, tmpint))
0fc8f115
AA
1158 return -1;
1159 }
1160 break;
1161 case RECORD_MSGCTL:
5fd0888a
AA
1162 if (record_mem_at_reg (regcache, tdep->arg5,
1163 tdep->size_msqid_ds))
0fc8f115
AA
1164 return -1;
1165 break;
1166 case RECORD_SHMAT:
5fd0888a 1167 if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_ulong))
0fc8f115
AA
1168 return -1;
1169 break;
1170 case RECORD_SHMCTL:
5fd0888a
AA
1171 if (record_mem_at_reg (regcache, tdep->arg5,
1172 tdep->size_shmid_ds))
0fc8f115
AA
1173 return -1;
1174 break;
1175 default:
13b6d1d4 1176 /* XXX RECORD_SEMCTL still not supported. */
0fc8f115
AA
1177 printf_unfiltered (_("Process record and replay target doesn't "
1178 "support ipc number %s\n"),
13b6d1d4 1179 pulongest (tmpulongest));
0fc8f115
AA
1180 break;
1181 }
b7f6bf22
HZ
1182 break;
1183
13b6d1d4
MS
1184 case gdb_sys_fsync:
1185 case gdb_sys_sigreturn:
1186 case gdb_sys_clone:
1187 case gdb_sys_setdomainname:
b7f6bf22
HZ
1188 break;
1189
13b6d1d4 1190 case gdb_sys_newuname:
5fd0888a
AA
1191 if (record_mem_at_reg (regcache, tdep->arg1,
1192 tdep->size_new_utsname))
0fc8f115 1193 return -1;
b7f6bf22
HZ
1194 break;
1195
13b6d1d4 1196 case gdb_sys_modify_ldt:
2c543fc4
HZ
1197 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1198 if (tmpulongest == 0 || tmpulongest == 2)
0fc8f115 1199 {
5fd0888a 1200 ULONGEST bytecount;
e0881a8e 1201
0fc8f115 1202 regcache_raw_read_unsigned (regcache, tdep->arg3, &bytecount);
5fd0888a 1203 if (record_mem_at_reg (regcache, tdep->arg2, (int) bytecount))
0fc8f115
AA
1204 return -1;
1205 }
b7f6bf22
HZ
1206 break;
1207
13b6d1d4 1208 case gdb_sys_adjtimex:
5fd0888a 1209 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_timex))
0fc8f115 1210 return -1;
b7f6bf22
HZ
1211 break;
1212
13b6d1d4 1213 case gdb_sys_mprotect:
b7f6bf22
HZ
1214 break;
1215
13b6d1d4 1216 case gdb_sys_sigprocmask:
5fd0888a
AA
1217 if (record_mem_at_reg (regcache, tdep->arg3,
1218 tdep->size_old_sigset_t))
0fc8f115 1219 return -1;
b7f6bf22
HZ
1220 break;
1221
13b6d1d4
MS
1222 case gdb_sys_ni_syscall127:
1223 case gdb_sys_init_module:
1224 case gdb_sys_delete_module:
1225 case gdb_sys_ni_syscall130:
b7f6bf22
HZ
1226 break;
1227
13b6d1d4 1228 case gdb_sys_quotactl:
2c543fc4
HZ
1229 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1230 switch (tmpulongest)
0fc8f115
AA
1231 {
1232 case RECORD_Q_GETFMT:
0fc8f115 1233 /* __u32 */
5fd0888a 1234 if (record_mem_at_reg (regcache, tdep->arg4, 4))
0fc8f115
AA
1235 return -1;
1236 break;
1237 case RECORD_Q_GETINFO:
5fd0888a
AA
1238 if (record_mem_at_reg (regcache, tdep->arg4,
1239 tdep->size_mem_dqinfo))
0fc8f115
AA
1240 return -1;
1241 break;
1242 case RECORD_Q_GETQUOTA:
5fd0888a
AA
1243 if (record_mem_at_reg (regcache, tdep->arg4,
1244 tdep->size_if_dqblk))
0fc8f115
AA
1245 return -1;
1246 break;
1247 case RECORD_Q_XGETQSTAT:
1248 case RECORD_Q_XGETQUOTA:
5fd0888a
AA
1249 if (record_mem_at_reg (regcache, tdep->arg4,
1250 tdep->size_fs_quota_stat))
0fc8f115
AA
1251 return -1;
1252 break;
1253 }
b7f6bf22
HZ
1254 break;
1255
13b6d1d4
MS
1256 case gdb_sys_getpgid:
1257 case gdb_sys_fchdir:
1258 case gdb_sys_bdflush:
b7f6bf22
HZ
1259 break;
1260
13b6d1d4 1261 case gdb_sys_sysfs:
2c543fc4
HZ
1262 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1263 if (tmpulongest == 2)
0fc8f115 1264 {
13b6d1d4 1265 /*XXX the size of memory is not very clear. */
5fd0888a 1266 if (record_mem_at_reg (regcache, tdep->arg3, 10))
0fc8f115
AA
1267 return -1;
1268 }
b7f6bf22
HZ
1269 break;
1270
13b6d1d4
MS
1271 case gdb_sys_personality:
1272 case gdb_sys_ni_syscall137:
1273 case gdb_sys_setfsuid16:
1274 case gdb_sys_setfsgid16:
b7f6bf22
HZ
1275 break;
1276
13b6d1d4 1277 case gdb_sys_llseek:
5fd0888a 1278 if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_loff_t))
0fc8f115 1279 return -1;
b7f6bf22
HZ
1280 break;
1281
13b6d1d4 1282 case gdb_sys_getdents:
72aded86 1283 case gdb_sys_getdents64:
5fd0888a
AA
1284 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1285 if (record_mem_at_reg (regcache, tdep->arg2, tmpulongest))
1286 return -1;
b7f6bf22
HZ
1287 break;
1288
13b6d1d4 1289 case gdb_sys_select:
5fd0888a
AA
1290 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_fd_set)
1291 || record_mem_at_reg (regcache, tdep->arg3, tdep->size_fd_set)
1292 || record_mem_at_reg (regcache, tdep->arg4, tdep->size_fd_set)
1293 || record_mem_at_reg (regcache, tdep->arg5, tdep->size_timeval))
0fc8f115 1294 return -1;
b7f6bf22
HZ
1295 break;
1296
13b6d1d4
MS
1297 case gdb_sys_flock:
1298 case gdb_sys_msync:
b7f6bf22
HZ
1299 break;
1300
13b6d1d4 1301 case gdb_sys_readv:
b7f6bf22 1302 {
0fc8f115
AA
1303 ULONGEST vec, vlen;
1304
1305 regcache_raw_read_unsigned (regcache, tdep->arg2, &vec);
1306 if (vec)
1307 {
1308 gdb_byte *iov = (gdb_byte *) alloca (tdep->size_iovec);
1309
1310 regcache_raw_read_unsigned (regcache, tdep->arg3, &vlen);
1311 for (tmpulongest = 0; tmpulongest < vlen; tmpulongest++)
1312 {
1313 if (target_read_memory ((CORE_ADDR) vec, iov,
1314 tdep->size_iovec))
1315 {
1316 if (record_debug)
1317 fprintf_unfiltered (gdb_stdlog,
1318 "Process record: error reading "
1319 "memory at addr = 0x%s len = %d.\n",
1320 OUTPUT_REG (vec, tdep->arg2),
1321 tdep->size_iovec);
1322 return -1;
1323 }
1324 tmpaddr
1325 = (CORE_ADDR) extract_unsigned_integer (iov,
1326 tdep->size_pointer,
1327 byte_order);
1328 tmpint
1329 = (int) extract_unsigned_integer (iov + tdep->size_pointer,
1330 tdep->size_size_t,
1331 byte_order);
1332 if (record_full_arch_list_add_mem (tmpaddr, tmpint))
1333 return -1;
1334 vec += tdep->size_iovec;
1335 }
1336 }
b7f6bf22
HZ
1337 }
1338 break;
1339
13b6d1d4
MS
1340 case gdb_sys_writev:
1341 case gdb_sys_getsid:
1342 case gdb_sys_fdatasync:
1343 case gdb_sys_sysctl:
1344 case gdb_sys_mlock:
1345 case gdb_sys_munlock:
1346 case gdb_sys_mlockall:
1347 case gdb_sys_munlockall:
1348 case gdb_sys_sched_setparam:
1349 break;
1350
1351 case gdb_sys_sched_getparam:
5fd0888a 1352 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int))
0fc8f115 1353 return -1;
b7f6bf22
HZ
1354 break;
1355
13b6d1d4
MS
1356 case gdb_sys_sched_setscheduler:
1357 case gdb_sys_sched_getscheduler:
1358 case gdb_sys_sched_yield:
1359 case gdb_sys_sched_get_priority_max:
1360 case gdb_sys_sched_get_priority_min:
b7f6bf22
HZ
1361 break;
1362
13b6d1d4
MS
1363 case gdb_sys_sched_rr_get_interval:
1364 case gdb_sys_nanosleep:
5fd0888a 1365 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_timespec))
0fc8f115 1366 return -1;
b7f6bf22
HZ
1367 break;
1368
13b6d1d4
MS
1369 case gdb_sys_mremap:
1370 case gdb_sys_setresuid16:
b7f6bf22
HZ
1371 break;
1372
13b6d1d4 1373 case gdb_sys_getresuid16:
5fd0888a
AA
1374 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_old_uid_t)
1375 || record_mem_at_reg (regcache, tdep->arg2,
1376 tdep->size_old_uid_t)
1377 || record_mem_at_reg (regcache, tdep->arg3,
1378 tdep->size_old_uid_t))
0fc8f115 1379 return -1;
b7f6bf22
HZ
1380 break;
1381
13b6d1d4
MS
1382 case gdb_sys_vm86:
1383 case gdb_sys_ni_syscall167:
b7f6bf22
HZ
1384 break;
1385
13b6d1d4 1386 case gdb_sys_poll:
2c543fc4
HZ
1387 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1388 if (tmpulongest)
0fc8f115
AA
1389 {
1390 ULONGEST nfds;
e0881a8e 1391
0fc8f115
AA
1392 regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds);
1393 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1394 tdep->size_pollfd * nfds))
0fc8f115
AA
1395 return -1;
1396 }
b7f6bf22
HZ
1397 break;
1398
13b6d1d4 1399 case gdb_sys_nfsservctl:
2c543fc4
HZ
1400 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1401 if (tmpulongest == 7 || tmpulongest == 8)
0fc8f115
AA
1402 {
1403 int rsize;
e0881a8e 1404
0fc8f115
AA
1405 if (tmpulongest == 7)
1406 rsize = tdep->size_NFS_FHSIZE;
1407 else
1408 rsize = tdep->size_knfsd_fh;
5fd0888a 1409 if (record_mem_at_reg (regcache, tdep->arg3, rsize))
0fc8f115
AA
1410 return -1;
1411 }
b7f6bf22
HZ
1412 break;
1413
13b6d1d4 1414 case gdb_sys_setresgid16:
b7f6bf22
HZ
1415 break;
1416
13b6d1d4 1417 case gdb_sys_getresgid16:
5fd0888a
AA
1418 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_old_gid_t)
1419 || record_mem_at_reg (regcache, tdep->arg2,
1420 tdep->size_old_gid_t)
1421 || record_mem_at_reg (regcache, tdep->arg3,
1422 tdep->size_old_gid_t))
0fc8f115 1423 return -1;
b7f6bf22
HZ
1424 break;
1425
13b6d1d4 1426 case gdb_sys_prctl:
2c543fc4
HZ
1427 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1428 switch (tmpulongest)
0fc8f115
AA
1429 {
1430 case 2:
5fd0888a 1431 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int))
0fc8f115
AA
1432 return -1;
1433 break;
1434 case 16:
5fd0888a
AA
1435 if (record_mem_at_reg (regcache, tdep->arg2,
1436 tdep->size_TASK_COMM_LEN))
0fc8f115
AA
1437 return -1;
1438 break;
1439 }
b7f6bf22
HZ
1440 break;
1441
13b6d1d4 1442 case gdb_sys_rt_sigreturn:
b7f6bf22
HZ
1443 break;
1444
13b6d1d4 1445 case gdb_sys_rt_sigaction:
5fd0888a 1446 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_sigaction))
0fc8f115 1447 return -1;
b7f6bf22
HZ
1448 break;
1449
13b6d1d4 1450 case gdb_sys_rt_sigprocmask:
5fd0888a 1451 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_sigset_t))
0fc8f115 1452 return -1;
b7f6bf22
HZ
1453 break;
1454
13b6d1d4 1455 case gdb_sys_rt_sigpending:
2c543fc4
HZ
1456 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1457 if (tmpulongest)
0fc8f115
AA
1458 {
1459 ULONGEST sigsetsize;
e0881a8e 1460
0fc8f115
AA
1461 regcache_raw_read_unsigned (regcache, tdep->arg2,&sigsetsize);
1462 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1463 (int) sigsetsize))
0fc8f115
AA
1464 return -1;
1465 }
b7f6bf22
HZ
1466 break;
1467
13b6d1d4 1468 case gdb_sys_rt_sigtimedwait:
5fd0888a 1469 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_siginfo_t))
0fc8f115 1470 return -1;
b7f6bf22
HZ
1471 break;
1472
13b6d1d4
MS
1473 case gdb_sys_rt_sigqueueinfo:
1474 case gdb_sys_rt_sigsuspend:
b7f6bf22
HZ
1475 break;
1476
13b6d1d4 1477 case gdb_sys_pread64:
2c543fc4
HZ
1478 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1479 if (tmpulongest)
0fc8f115
AA
1480 {
1481 ULONGEST count;
e0881a8e 1482
0fc8f115
AA
1483 regcache_raw_read_unsigned (regcache, tdep->arg3,&count);
1484 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1485 (int) count))
0fc8f115
AA
1486 return -1;
1487 }
b7f6bf22
HZ
1488 break;
1489
13b6d1d4
MS
1490 case gdb_sys_pwrite64:
1491 case gdb_sys_chown16:
b7f6bf22
HZ
1492 break;
1493
13b6d1d4 1494 case gdb_sys_getcwd:
2c543fc4
HZ
1495 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1496 if (tmpulongest)
0fc8f115
AA
1497 {
1498 ULONGEST size;
e0881a8e 1499
0fc8f115
AA
1500 regcache_raw_read_unsigned (regcache, tdep->arg2, &size);
1501 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1502 (int) size))
0fc8f115
AA
1503 return -1;
1504 }
b7f6bf22
HZ
1505 break;
1506
13b6d1d4 1507 case gdb_sys_capget:
5fd0888a
AA
1508 if (record_mem_at_reg (regcache, tdep->arg2,
1509 tdep->size_cap_user_data_t))
0fc8f115 1510 return -1;
b7f6bf22
HZ
1511 break;
1512
13b6d1d4 1513 case gdb_sys_capset:
b7f6bf22
HZ
1514 break;
1515
13b6d1d4 1516 case gdb_sys_sigaltstack:
5fd0888a 1517 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_stack_t))
0fc8f115 1518 return -1;
b7f6bf22
HZ
1519 break;
1520
13b6d1d4 1521 case gdb_sys_sendfile:
5fd0888a 1522 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_off_t))
0fc8f115 1523 return -1;
b7f6bf22
HZ
1524 break;
1525
13b6d1d4
MS
1526 case gdb_sys_ni_syscall188:
1527 case gdb_sys_ni_syscall189:
1528 case gdb_sys_vfork:
b7f6bf22
HZ
1529 break;
1530
13b6d1d4 1531 case gdb_sys_getrlimit:
5fd0888a 1532 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_rlimit))
0fc8f115 1533 return -1;
b7f6bf22
HZ
1534 break;
1535
13b6d1d4 1536 case gdb_sys_mmap2:
b7f6bf22
HZ
1537 break;
1538
13b6d1d4
MS
1539 case gdb_sys_truncate64:
1540 case gdb_sys_ftruncate64:
b7f6bf22
HZ
1541 break;
1542
13b6d1d4
MS
1543 case gdb_sys_stat64:
1544 case gdb_sys_lstat64:
1545 case gdb_sys_fstat64:
5fd0888a 1546 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_stat64))
0fc8f115 1547 return -1;
b7f6bf22
HZ
1548 break;
1549
13b6d1d4
MS
1550 case gdb_sys_lchown:
1551 case gdb_sys_getuid:
1552 case gdb_sys_getgid:
1553 case gdb_sys_geteuid:
1554 case gdb_sys_getegid:
1555 case gdb_sys_setreuid:
1556 case gdb_sys_setregid:
b7f6bf22
HZ
1557 break;
1558
13b6d1d4 1559 case gdb_sys_getgroups:
2c543fc4
HZ
1560 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1561 if (tmpulongest)
0fc8f115
AA
1562 {
1563 ULONGEST gidsetsize;
e0881a8e 1564
0fc8f115
AA
1565 regcache_raw_read_unsigned (regcache, tdep->arg1,
1566 &gidsetsize);
1567 tmpint = tdep->size_gid_t * (int) gidsetsize;
1568 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint))
1569 return -1;
1570 }
b7f6bf22
HZ
1571 break;
1572
13b6d1d4
MS
1573 case gdb_sys_setgroups:
1574 case gdb_sys_fchown:
1575 case gdb_sys_setresuid:
b7f6bf22
HZ
1576 break;
1577
13b6d1d4 1578 case gdb_sys_getresuid:
5fd0888a
AA
1579 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_uid_t)
1580 || record_mem_at_reg (regcache, tdep->arg2, tdep->size_uid_t)
1581 || record_mem_at_reg (regcache, tdep->arg3, tdep->size_uid_t))
0fc8f115 1582 return -1;
b7f6bf22
HZ
1583 break;
1584
13b6d1d4 1585 case gdb_sys_setresgid:
b7f6bf22
HZ
1586 break;
1587
13b6d1d4 1588 case gdb_sys_getresgid:
5fd0888a
AA
1589 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_gid_t)
1590 || record_mem_at_reg (regcache, tdep->arg2, tdep->size_gid_t)
1591 || record_mem_at_reg (regcache, tdep->arg3, tdep->size_gid_t))
0fc8f115 1592 return -1;
b7f6bf22
HZ
1593 break;
1594
13b6d1d4
MS
1595 case gdb_sys_chown:
1596 case gdb_sys_setuid:
1597 case gdb_sys_setgid:
1598 case gdb_sys_setfsuid:
1599 case gdb_sys_setfsgid:
1600 case gdb_sys_pivot_root:
b7f6bf22
HZ
1601 break;
1602
13b6d1d4 1603 case gdb_sys_mincore:
5fd0888a 1604 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_PAGE_SIZE))
0fc8f115 1605 return -1;
b7f6bf22
HZ
1606 break;
1607
13b6d1d4 1608 case gdb_sys_madvise:
b7f6bf22
HZ
1609 break;
1610
13b6d1d4 1611 case gdb_sys_fcntl64:
2c543fc4
HZ
1612 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1613 if (tmpulongest == tdep->fcntl_F_GETLK64)
0fc8f115 1614 {
5fd0888a
AA
1615 if (record_mem_at_reg (regcache, tdep->arg3,
1616 tdep->size_flock64))
0fc8f115
AA
1617 return -1;
1618 }
2c543fc4 1619 else if (tmpulongest != tdep->fcntl_F_SETLK64
0fc8f115
AA
1620 && tmpulongest != tdep->fcntl_F_SETLKW64)
1621 {
1622 goto sys_fcntl;
1623 }
b7f6bf22
HZ
1624 break;
1625
13b6d1d4
MS
1626 case gdb_sys_ni_syscall222:
1627 case gdb_sys_ni_syscall223:
1628 case gdb_sys_gettid:
1629 case gdb_sys_readahead:
1630 case gdb_sys_setxattr:
1631 case gdb_sys_lsetxattr:
1632 case gdb_sys_fsetxattr:
1633 break;
1634
1635 case gdb_sys_getxattr:
1636 case gdb_sys_lgetxattr:
1637 case gdb_sys_fgetxattr:
2c543fc4
HZ
1638 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1639 if (tmpulongest)
0fc8f115
AA
1640 {
1641 ULONGEST size;
e0881a8e 1642
0fc8f115
AA
1643 regcache_raw_read_unsigned (regcache, tdep->arg4, &size);
1644 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1645 (int) size))
0fc8f115
AA
1646 return -1;
1647 }
b7f6bf22
HZ
1648 break;
1649
13b6d1d4
MS
1650 case gdb_sys_listxattr:
1651 case gdb_sys_llistxattr:
1652 case gdb_sys_flistxattr:
2c543fc4
HZ
1653 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1654 if (tmpulongest)
0fc8f115
AA
1655 {
1656 ULONGEST size;
e0881a8e 1657
0fc8f115
AA
1658 regcache_raw_read_unsigned (regcache, tdep->arg3, &size);
1659 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1660 (int) size))
0fc8f115
AA
1661 return -1;
1662 }
b7f6bf22
HZ
1663 break;
1664
13b6d1d4
MS
1665 case gdb_sys_removexattr:
1666 case gdb_sys_lremovexattr:
1667 case gdb_sys_fremovexattr:
1668 case gdb_sys_tkill:
b7f6bf22
HZ
1669 break;
1670
13b6d1d4 1671 case gdb_sys_sendfile64:
5fd0888a 1672 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_loff_t))
0fc8f115 1673 return -1;
b7f6bf22
HZ
1674 break;
1675
13b6d1d4
MS
1676 case gdb_sys_futex:
1677 case gdb_sys_sched_setaffinity:
b7f6bf22
HZ
1678 break;
1679
13b6d1d4 1680 case gdb_sys_sched_getaffinity:
2c543fc4
HZ
1681 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1682 if (tmpulongest)
0fc8f115
AA
1683 {
1684 ULONGEST len;
e0881a8e 1685
0fc8f115
AA
1686 regcache_raw_read_unsigned (regcache, tdep->arg2, &len);
1687 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1688 (int) len))
0fc8f115
AA
1689 return -1;
1690 }
b7f6bf22
HZ
1691 break;
1692
13b6d1d4 1693 case gdb_sys_set_thread_area:
5fd0888a 1694 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int))
0fc8f115 1695 return -1;
b7f6bf22
HZ
1696 break;
1697
13b6d1d4 1698 case gdb_sys_get_thread_area:
5fd0888a 1699 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_user_desc))
0fc8f115 1700 return -1;
b7f6bf22
HZ
1701 break;
1702
13b6d1d4 1703 case gdb_sys_io_setup:
5fd0888a 1704 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_long))
0fc8f115 1705 return -1;
b7f6bf22
HZ
1706 break;
1707
13b6d1d4 1708 case gdb_sys_io_destroy:
b7f6bf22
HZ
1709 break;
1710
13b6d1d4 1711 case gdb_sys_io_getevents:
2c543fc4
HZ
1712 regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest);
1713 if (tmpulongest)
0fc8f115
AA
1714 {
1715 ULONGEST nr;
e0881a8e 1716
0fc8f115
AA
1717 regcache_raw_read_unsigned (regcache, tdep->arg3, &nr);
1718 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1719 nr * tdep->size_io_event))
0fc8f115
AA
1720 return -1;
1721 }
b7f6bf22
HZ
1722 break;
1723
13b6d1d4 1724 case gdb_sys_io_submit:
2c543fc4
HZ
1725 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1726 if (tmpulongest)
0fc8f115
AA
1727 {
1728 ULONGEST nr, i;
1729 gdb_byte *iocbp;
1730
1731 regcache_raw_read_unsigned (regcache, tdep->arg2, &nr);
1732 iocbp = (gdb_byte *) alloca (nr * tdep->size_pointer);
1733 if (target_read_memory ((CORE_ADDR) tmpulongest, iocbp,
1734 nr * tdep->size_pointer))
1735 {
1736 if (record_debug)
1737 fprintf_unfiltered (gdb_stdlog,
1738 "Process record: error reading memory "
1739 "at addr = 0x%s len = %u.\n",
1740 OUTPUT_REG (tmpulongest, tdep->arg2),
1741 (int) (nr * tdep->size_pointer));
1742 return -1;
1743 }
1744 for (i = 0; i < nr; i++)
1745 {
1746 tmpaddr
1747 = (CORE_ADDR) extract_unsigned_integer (iocbp,
1748 tdep->size_pointer,
1749 byte_order);
1750 if (record_full_arch_list_add_mem (tmpaddr, tdep->size_iocb))
1751 return -1;
1752 iocbp += tdep->size_pointer;
1753 }
1754 }
b7f6bf22
HZ
1755 break;
1756
13b6d1d4 1757 case gdb_sys_io_cancel:
5fd0888a 1758 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_io_event))
0fc8f115 1759 return -1;
b7f6bf22
HZ
1760 break;
1761
13b6d1d4
MS
1762 case gdb_sys_fadvise64:
1763 case gdb_sys_ni_syscall251:
b7f6bf22
HZ
1764 break;
1765
13b6d1d4 1766 case gdb_sys_exit_group:
b7f6bf22 1767 {
0fc8f115
AA
1768 int q;
1769
1770 target_terminal_ours ();
1771 q = yquery (_("The next instruction is syscall exit_group. "
1772 "It will make the program exit. "
1773 "Do you want to stop the program?"));
1774 target_terminal_inferior ();
1775 if (q)
1776 return 1;
b7f6bf22
HZ
1777 }
1778 break;
1779
13b6d1d4 1780 case gdb_sys_lookup_dcookie:
2c543fc4
HZ
1781 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1782 if (tmpulongest)
0fc8f115
AA
1783 {
1784 ULONGEST len;
e0881a8e 1785
0fc8f115
AA
1786 regcache_raw_read_unsigned (regcache, tdep->arg3, &len);
1787 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1788 (int) len))
0fc8f115
AA
1789 return -1;
1790 }
b7f6bf22
HZ
1791 break;
1792
13b6d1d4
MS
1793 case gdb_sys_epoll_create:
1794 case gdb_sys_epoll_ctl:
b7f6bf22
HZ
1795 break;
1796
13b6d1d4 1797 case gdb_sys_epoll_wait:
2c543fc4
HZ
1798 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1799 if (tmpulongest)
0fc8f115
AA
1800 {
1801 ULONGEST maxevents;
e0881a8e 1802
0fc8f115
AA
1803 regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents);
1804 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b
MM
1805 (maxevents
1806 * tdep->size_epoll_event)))
0fc8f115
AA
1807 return -1;
1808 }
b7f6bf22
HZ
1809 break;
1810
13b6d1d4
MS
1811 case gdb_sys_remap_file_pages:
1812 case gdb_sys_set_tid_address:
b7f6bf22
HZ
1813 break;
1814
13b6d1d4 1815 case gdb_sys_timer_create:
5fd0888a 1816 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_int))
0fc8f115 1817 return -1;
b7f6bf22
HZ
1818 break;
1819
13b6d1d4 1820 case gdb_sys_timer_settime:
5fd0888a 1821 if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_itimerspec))
0fc8f115 1822 return -1;
b7f6bf22
HZ
1823 break;
1824
13b6d1d4 1825 case gdb_sys_timer_gettime:
5fd0888a 1826 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_itimerspec))
0fc8f115 1827 return -1;
b7f6bf22
HZ
1828 break;
1829
13b6d1d4
MS
1830 case gdb_sys_timer_getoverrun:
1831 case gdb_sys_timer_delete:
1832 case gdb_sys_clock_settime:
b7f6bf22
HZ
1833 break;
1834
13b6d1d4 1835 case gdb_sys_clock_gettime:
5fd0888a 1836 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_timespec))
0fc8f115 1837 return -1;
b7f6bf22
HZ
1838 break;
1839
13b6d1d4 1840 case gdb_sys_clock_getres:
5fd0888a 1841 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_timespec))
0fc8f115 1842 return -1;
b7f6bf22
HZ
1843 break;
1844
13b6d1d4 1845 case gdb_sys_clock_nanosleep:
5fd0888a 1846 if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_timespec))
0fc8f115 1847 return -1;
b7f6bf22
HZ
1848 break;
1849
13b6d1d4
MS
1850 case gdb_sys_statfs64:
1851 case gdb_sys_fstatfs64:
5fd0888a 1852 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_statfs64))
0fc8f115 1853 return -1;
b7f6bf22
HZ
1854 break;
1855
13b6d1d4
MS
1856 case gdb_sys_tgkill:
1857 case gdb_sys_utimes:
1858 case gdb_sys_fadvise64_64:
1859 case gdb_sys_ni_syscall273:
1860 case gdb_sys_mbind:
b7f6bf22
HZ
1861 break;
1862
13b6d1d4 1863 case gdb_sys_get_mempolicy:
5fd0888a 1864 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int))
0fc8f115 1865 return -1;
2c543fc4
HZ
1866 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1867 if (tmpulongest)
0fc8f115
AA
1868 {
1869 ULONGEST maxnode;
e0881a8e 1870
0fc8f115
AA
1871 regcache_raw_read_unsigned (regcache, tdep->arg3, &maxnode);
1872 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1873 maxnode * tdep->size_long))
0fc8f115
AA
1874 return -1;
1875 }
b7f6bf22
HZ
1876 break;
1877
13b6d1d4
MS
1878 case gdb_sys_set_mempolicy:
1879 case gdb_sys_mq_open:
1880 case gdb_sys_mq_unlink:
1881 case gdb_sys_mq_timedsend:
b7f6bf22
HZ
1882 break;
1883
13b6d1d4 1884 case gdb_sys_mq_timedreceive:
2c543fc4
HZ
1885 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
1886 if (tmpulongest)
0fc8f115
AA
1887 {
1888 ULONGEST msg_len;
e0881a8e 1889
0fc8f115
AA
1890 regcache_raw_read_unsigned (regcache, tdep->arg3, &msg_len);
1891 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1892 (int) msg_len))
0fc8f115
AA
1893 return -1;
1894 }
5fd0888a 1895 if (record_mem_at_reg (regcache, tdep->arg4, tdep->size_int))
0fc8f115 1896 return -1;
b7f6bf22
HZ
1897 break;
1898
13b6d1d4 1899 case gdb_sys_mq_notify:
b7f6bf22
HZ
1900 break;
1901
13b6d1d4 1902 case gdb_sys_mq_getsetattr:
5fd0888a 1903 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_mq_attr))
0fc8f115 1904 return -1;
b7f6bf22
HZ
1905 break;
1906
13b6d1d4 1907 case gdb_sys_kexec_load:
b7f6bf22
HZ
1908 break;
1909
13b6d1d4 1910 case gdb_sys_waitid:
5fd0888a
AA
1911 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_siginfo_t)
1912 || record_mem_at_reg (regcache, tdep->arg5, tdep->size_rusage))
0fc8f115 1913 return -1;
b7f6bf22
HZ
1914 break;
1915
13b6d1d4
MS
1916 case gdb_sys_ni_syscall285:
1917 case gdb_sys_add_key:
1918 case gdb_sys_request_key:
b7f6bf22
HZ
1919 break;
1920
13b6d1d4 1921 case gdb_sys_keyctl:
2c543fc4
HZ
1922 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1923 if (tmpulongest == 6 || tmpulongest == 11)
0fc8f115
AA
1924 {
1925 regcache_raw_read_unsigned (regcache, tdep->arg3,
1926 &tmpulongest);
1927 if (tmpulongest)
1928 {
1929 ULONGEST buflen;
1930
1931 regcache_raw_read_unsigned (regcache, tdep->arg4, &buflen);
1932 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1933 (int) buflen))
0fc8f115
AA
1934 return -1;
1935 }
1936 }
b7f6bf22
HZ
1937 break;
1938
13b6d1d4
MS
1939 case gdb_sys_ioprio_set:
1940 case gdb_sys_ioprio_get:
1941 case gdb_sys_inotify_init:
1942 case gdb_sys_inotify_add_watch:
1943 case gdb_sys_inotify_rm_watch:
1944 case gdb_sys_migrate_pages:
1945 case gdb_sys_openat:
1946 case gdb_sys_mkdirat:
1947 case gdb_sys_mknodat:
1948 case gdb_sys_fchownat:
1949 case gdb_sys_futimesat:
1950 break;
1951
1952 case gdb_sys_fstatat64:
5fd0888a 1953 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_stat64))
0fc8f115 1954 return -1;
b7f6bf22
HZ
1955 break;
1956
13b6d1d4
MS
1957 case gdb_sys_unlinkat:
1958 case gdb_sys_renameat:
1959 case gdb_sys_linkat:
1960 case gdb_sys_symlinkat:
b7f6bf22
HZ
1961 break;
1962
13b6d1d4 1963 case gdb_sys_readlinkat:
2c543fc4
HZ
1964 regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest);
1965 if (tmpulongest)
0fc8f115
AA
1966 {
1967 ULONGEST bufsiz;
e0881a8e 1968
0fc8f115
AA
1969 regcache_raw_read_unsigned (regcache, tdep->arg4, &bufsiz);
1970 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1971 (int) bufsiz))
0fc8f115
AA
1972 return -1;
1973 }
b7f6bf22
HZ
1974 break;
1975
13b6d1d4
MS
1976 case gdb_sys_fchmodat:
1977 case gdb_sys_faccessat:
b7f6bf22
HZ
1978 break;
1979
13b6d1d4 1980 case gdb_sys_pselect6:
5fd0888a
AA
1981 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_fd_set)
1982 || record_mem_at_reg (regcache, tdep->arg3, tdep->size_fd_set)
1983 || record_mem_at_reg (regcache, tdep->arg4, tdep->size_fd_set)
1984 || record_mem_at_reg (regcache, tdep->arg5, tdep->size_timespec))
0fc8f115 1985 return -1;
b7f6bf22
HZ
1986 break;
1987
13b6d1d4 1988 case gdb_sys_ppoll:
2c543fc4
HZ
1989 regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest);
1990 if (tmpulongest)
0fc8f115
AA
1991 {
1992 ULONGEST nfds;
e0881a8e 1993
0fc8f115
AA
1994 regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds);
1995 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 1996 tdep->size_pollfd * nfds))
0fc8f115
AA
1997 return -1;
1998 }
5fd0888a 1999 if (record_mem_at_reg (regcache, tdep->arg3, tdep->size_timespec))
0fc8f115 2000 return -1;
b7f6bf22
HZ
2001 break;
2002
13b6d1d4
MS
2003 case gdb_sys_unshare:
2004 case gdb_sys_set_robust_list:
b7f6bf22
HZ
2005 break;
2006
13b6d1d4 2007 case gdb_sys_get_robust_list:
5fd0888a
AA
2008 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_int)
2009 || record_mem_at_reg (regcache, tdep->arg3, tdep->size_int))
0fc8f115 2010 return -1;
b7f6bf22
HZ
2011 break;
2012
13b6d1d4 2013 case gdb_sys_splice:
5fd0888a
AA
2014 if (record_mem_at_reg (regcache, tdep->arg2, tdep->size_loff_t)
2015 || record_mem_at_reg (regcache, tdep->arg4, tdep->size_loff_t))
0fc8f115 2016 return -1;
b7f6bf22
HZ
2017 break;
2018
13b6d1d4
MS
2019 case gdb_sys_sync_file_range:
2020 case gdb_sys_tee:
2021 case gdb_sys_vmsplice:
b7f6bf22
HZ
2022 break;
2023
13b6d1d4 2024 case gdb_sys_move_pages:
2c543fc4
HZ
2025 regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest);
2026 if (tmpulongest)
0fc8f115
AA
2027 {
2028 ULONGEST nr_pages;
e0881a8e 2029
0fc8f115
AA
2030 regcache_raw_read_unsigned (regcache, tdep->arg2, &nr_pages);
2031 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest,
25ea693b 2032 nr_pages * tdep->size_int))
0fc8f115
AA
2033 return -1;
2034 }
b7f6bf22
HZ
2035 break;
2036
13b6d1d4 2037 case gdb_sys_getcpu:
5fd0888a
AA
2038 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int)
2039 || record_mem_at_reg (regcache, tdep->arg2, tdep->size_int)
2040 || record_mem_at_reg (regcache, tdep->arg3,
2041 tdep->size_ulong * 2))
0fc8f115 2042 return -1;
b7f6bf22
HZ
2043 break;
2044
13b6d1d4 2045 case gdb_sys_epoll_pwait:
2c543fc4
HZ
2046 regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest);
2047 if (tmpulongest)
0fc8f115
AA
2048 {
2049 ULONGEST maxevents;
e0881a8e 2050
0fc8f115
AA
2051 regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents);
2052 tmpint = (int) maxevents * tdep->size_epoll_event;
2053 if (record_full_arch_list_add_mem ((CORE_ADDR) tmpulongest, tmpint))
2054 return -1;
2055 }
b7f6bf22
HZ
2056 break;
2057
253b4d3a
YQ
2058 case gdb_sys_fallocate:
2059 case gdb_sys_eventfd2:
2060 case gdb_sys_epoll_create1:
2061 case gdb_sys_dup3:
2062 break;
2063
2064 case gdb_sys_pipe2:
5fd0888a 2065 if (record_mem_at_reg (regcache, tdep->arg1, tdep->size_int * 2))
0fc8f115 2066 return -1;
253b4d3a
YQ
2067 break;
2068
2069 case gdb_sys_inotify_init1:
2070 break;
2071
b7f6bf22
HZ
2072 default:
2073 printf_unfiltered (_("Process record and replay target doesn't "
0fc8f115 2074 "support syscall number %d\n"), syscall);
b7f6bf22
HZ
2075 return -1;
2076 break;
2077 }
2078
2079 return 0;
2080}
This page took 0.74506 seconds and 4 git commands to generate.