From 479fe002f5fdc83fbd5ef64c701bbf8b1a76d8ec Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Mon, 21 Mar 2016 10:22:59 +0000 Subject: [PATCH] Canonicalize more arm linux syscalls This patch is to canonicalize more syscalls on arm linux in process record. In this patch, I also comment out some syscalls which isn't handled by GDB now. With this patch applied, two fails are fixed. -FAIL: gdb.reverse/fstatat-reverse.exp: continue to breakpoint: marker2 -FAIL: gdb.reverse/recvmsg-reverse.exp: continue to breakpoint: marker2 gdb: 2016-03-21 Yao Qi * arm-linux-tdep.c (arm_canonicalize_syscall): Canonicalize more syscalls. --- gdb/ChangeLog | 5 + gdb/arm-linux-tdep.c | 375 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 370 insertions(+), 10 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c15a6beeb63..551d07057da 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2016-03-21 Yao Qi + + * arm-linux-tdep.c (arm_canonicalize_syscall): Canonicalize + more syscalls. + 2016-03-18 Yao Qi * sparc-tdep.c (sparc_software_single_step): Make it static. diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c index 22f2acaeaf6..9b68315107f 100644 --- a/gdb/arm-linux-tdep.c +++ b/gdb/arm-linux-tdep.c @@ -1283,16 +1283,371 @@ struct linux_record_tdep arm_linux_record_tdep; static enum gdb_syscall arm_canonicalize_syscall (int syscall) { - enum { sys_process_vm_writev = 377 }; - - if (syscall <= gdb_sys_sched_getaffinity) - return (enum gdb_syscall) syscall; - else if (syscall >= 243 && syscall <= 247) - return (enum gdb_syscall) (syscall + 2); - else if (syscall >= 248 && syscall <= 253) - return (enum gdb_syscall) (syscall + 4); - - return gdb_sys_no_syscall; + switch (syscall) + { + case 0: return gdb_sys_restart_syscall; + case 1: return gdb_sys_exit; + case 2: return gdb_sys_fork; + case 3: return gdb_sys_read; + case 4: return gdb_sys_write; + case 5: return gdb_sys_open; + case 6: return gdb_sys_close; + case 8: return gdb_sys_creat; + case 9: return gdb_sys_link; + case 10: return gdb_sys_unlink; + case 11: return gdb_sys_execve; + case 12: return gdb_sys_chdir; + case 13: return gdb_sys_time; + case 14: return gdb_sys_mknod; + case 15: return gdb_sys_chmod; + case 16: return gdb_sys_lchown16; + case 19: return gdb_sys_lseek; + case 20: return gdb_sys_getpid; + case 21: return gdb_sys_mount; + case 22: return gdb_sys_oldumount; + case 23: return gdb_sys_setuid16; + case 24: return gdb_sys_getuid16; + case 25: return gdb_sys_stime; + case 26: return gdb_sys_ptrace; + case 27: return gdb_sys_alarm; + case 29: return gdb_sys_pause; + case 30: return gdb_sys_utime; + case 33: return gdb_sys_access; + case 34: return gdb_sys_nice; + case 36: return gdb_sys_sync; + case 37: return gdb_sys_kill; + case 38: return gdb_sys_rename; + case 39: return gdb_sys_mkdir; + case 40: return gdb_sys_rmdir; + case 41: return gdb_sys_dup; + case 42: return gdb_sys_pipe; + case 43: return gdb_sys_times; + case 45: return gdb_sys_brk; + case 46: return gdb_sys_setgid16; + case 47: return gdb_sys_getgid16; + case 49: return gdb_sys_geteuid16; + case 50: return gdb_sys_getegid16; + case 51: return gdb_sys_acct; + case 52: return gdb_sys_umount; + case 54: return gdb_sys_ioctl; + case 55: return gdb_sys_fcntl; + case 57: return gdb_sys_setpgid; + case 60: return gdb_sys_umask; + case 61: return gdb_sys_chroot; + case 62: return gdb_sys_ustat; + case 63: return gdb_sys_dup2; + case 64: return gdb_sys_getppid; + case 65: return gdb_sys_getpgrp; + case 66: return gdb_sys_setsid; + case 67: return gdb_sys_sigaction; + case 70: return gdb_sys_setreuid16; + case 71: return gdb_sys_setregid16; + case 72: return gdb_sys_sigsuspend; + case 73: return gdb_sys_sigpending; + case 74: return gdb_sys_sethostname; + case 75: return gdb_sys_setrlimit; + case 76: return gdb_sys_getrlimit; + case 77: return gdb_sys_getrusage; + case 78: return gdb_sys_gettimeofday; + case 79: return gdb_sys_settimeofday; + case 80: return gdb_sys_getgroups16; + case 81: return gdb_sys_setgroups16; + case 82: return gdb_sys_select; + case 83: return gdb_sys_symlink; + case 85: return gdb_sys_readlink; + case 86: return gdb_sys_uselib; + case 87: return gdb_sys_swapon; + case 88: return gdb_sys_reboot; + case 89: return gdb_old_readdir; + case 90: return gdb_old_mmap; + case 91: return gdb_sys_munmap; + case 92: return gdb_sys_truncate; + case 93: return gdb_sys_ftruncate; + case 94: return gdb_sys_fchmod; + case 95: return gdb_sys_fchown16; + case 96: return gdb_sys_getpriority; + case 97: return gdb_sys_setpriority; + case 99: return gdb_sys_statfs; + case 100: return gdb_sys_fstatfs; + case 102: return gdb_sys_socketcall; + case 103: return gdb_sys_syslog; + case 104: return gdb_sys_setitimer; + case 105: return gdb_sys_getitimer; + case 106: return gdb_sys_stat; + case 107: return gdb_sys_lstat; + case 108: return gdb_sys_fstat; + case 111: return gdb_sys_vhangup; + case 113: /* sys_syscall */ + return gdb_sys_no_syscall; + case 114: return gdb_sys_wait4; + case 115: return gdb_sys_swapoff; + case 116: return gdb_sys_sysinfo; + case 117: return gdb_sys_ipc; + case 118: return gdb_sys_fsync; + case 119: return gdb_sys_sigreturn; + case 120: return gdb_sys_clone; + case 121: return gdb_sys_setdomainname; + case 122: return gdb_sys_uname; + case 124: return gdb_sys_adjtimex; + case 125: return gdb_sys_mprotect; + case 126: return gdb_sys_sigprocmask; + case 128: return gdb_sys_init_module; + case 129: return gdb_sys_delete_module; + case 131: return gdb_sys_quotactl; + case 132: return gdb_sys_getpgid; + case 133: return gdb_sys_fchdir; + case 134: return gdb_sys_bdflush; + case 135: return gdb_sys_sysfs; + case 136: return gdb_sys_personality; + case 138: return gdb_sys_setfsuid16; + case 139: return gdb_sys_setfsgid16; + case 140: return gdb_sys_llseek; + case 141: return gdb_sys_getdents; + case 142: return gdb_sys_select; + case 143: return gdb_sys_flock; + case 144: return gdb_sys_msync; + case 145: return gdb_sys_readv; + case 146: return gdb_sys_writev; + case 147: return gdb_sys_getsid; + case 148: return gdb_sys_fdatasync; + case 149: return gdb_sys_sysctl; + case 150: return gdb_sys_mlock; + case 151: return gdb_sys_munlock; + case 152: return gdb_sys_mlockall; + case 153: return gdb_sys_munlockall; + case 154: return gdb_sys_sched_setparam; + case 155: return gdb_sys_sched_getparam; + case 156: return gdb_sys_sched_setscheduler; + case 157: return gdb_sys_sched_getscheduler; + case 158: return gdb_sys_sched_yield; + case 159: return gdb_sys_sched_get_priority_max; + case 160: return gdb_sys_sched_get_priority_min; + case 161: return gdb_sys_sched_rr_get_interval; + case 162: return gdb_sys_nanosleep; + case 163: return gdb_sys_mremap; + case 164: return gdb_sys_setresuid16; + case 165: return gdb_sys_getresuid16; + case 168: return gdb_sys_poll; + case 169: return gdb_sys_nfsservctl; + case 170: return gdb_sys_setresgid; + case 171: return gdb_sys_getresgid; + case 172: return gdb_sys_prctl; + case 173: return gdb_sys_rt_sigreturn; + case 174: return gdb_sys_rt_sigaction; + case 175: return gdb_sys_rt_sigprocmask; + case 176: return gdb_sys_rt_sigpending; + case 177: return gdb_sys_rt_sigtimedwait; + case 178: return gdb_sys_rt_sigqueueinfo; + case 179: return gdb_sys_rt_sigsuspend; + case 180: return gdb_sys_pread64; + case 181: return gdb_sys_pwrite64; + case 182: return gdb_sys_chown; + case 183: return gdb_sys_getcwd; + case 184: return gdb_sys_capget; + case 185: return gdb_sys_capset; + case 186: return gdb_sys_sigaltstack; + case 187: return gdb_sys_sendfile; + case 190: return gdb_sys_vfork; + case 191: return gdb_sys_getrlimit; + case 192: return gdb_sys_mmap2; + case 193: return gdb_sys_truncate64; + case 194: return gdb_sys_ftruncate64; + case 195: return gdb_sys_stat64; + case 196: return gdb_sys_lstat64; + case 197: return gdb_sys_fstat64; + case 198: return gdb_sys_lchown; + case 199: return gdb_sys_getuid; + case 200: return gdb_sys_getgid; + case 201: return gdb_sys_geteuid; + case 202: return gdb_sys_getegid; + case 203: return gdb_sys_setreuid; + case 204: return gdb_sys_setregid; + case 205: return gdb_sys_getgroups; + case 206: return gdb_sys_setgroups; + case 207: return gdb_sys_fchown; + case 208: return gdb_sys_setresuid; + case 209: return gdb_sys_getresuid; + case 210: return gdb_sys_setresgid; + case 211: return gdb_sys_getresgid; + case 212: return gdb_sys_chown; + case 213: return gdb_sys_setuid; + case 214: return gdb_sys_setgid; + case 215: return gdb_sys_setfsuid; + case 216: return gdb_sys_setfsgid; + case 217: return gdb_sys_getdents64; + case 218: return gdb_sys_pivot_root; + case 219: return gdb_sys_mincore; + case 220: return gdb_sys_madvise; + case 221: return gdb_sys_fcntl64; + case 224: return gdb_sys_gettid; + case 225: return gdb_sys_readahead; + case 226: return gdb_sys_setxattr; + case 227: return gdb_sys_lsetxattr; + case 228: return gdb_sys_fsetxattr; + case 229: return gdb_sys_getxattr; + case 230: return gdb_sys_lgetxattr; + case 231: return gdb_sys_fgetxattr; + case 232: return gdb_sys_listxattr; + case 233: return gdb_sys_llistxattr; + case 234: return gdb_sys_flistxattr; + case 235: return gdb_sys_removexattr; + case 236: return gdb_sys_lremovexattr; + case 237: return gdb_sys_fremovexattr; + case 238: return gdb_sys_tkill; + case 239: return gdb_sys_sendfile64; + case 240: return gdb_sys_futex; + case 241: return gdb_sys_sched_setaffinity; + case 242: return gdb_sys_sched_getaffinity; + case 243: return gdb_sys_io_setup; + case 244: return gdb_sys_io_destroy; + case 245: return gdb_sys_io_getevents; + case 246: return gdb_sys_io_submit; + case 247: return gdb_sys_io_cancel; + case 248: return gdb_sys_exit_group; + case 249: return gdb_sys_lookup_dcookie; + case 250: return gdb_sys_epoll_create; + case 251: return gdb_sys_epoll_ctl; + case 252: return gdb_sys_epoll_wait; + case 253: return gdb_sys_remap_file_pages; + case 256: return gdb_sys_set_tid_address; + case 257: return gdb_sys_timer_create; + case 258: return gdb_sys_timer_settime; + case 259: return gdb_sys_timer_gettime; + case 260: return gdb_sys_timer_getoverrun; + case 261: return gdb_sys_timer_delete; + case 262: return gdb_sys_clock_settime; + case 263: return gdb_sys_clock_gettime; + case 264: return gdb_sys_clock_getres; + case 265: return gdb_sys_clock_nanosleep; + case 266: return gdb_sys_statfs64; + case 267: return gdb_sys_fstatfs64; + case 268: return gdb_sys_tgkill; + case 269: return gdb_sys_utimes; + /* + case 270: return gdb_sys_arm_fadvise64_64; + case 271: return gdb_sys_pciconfig_iobase; + case 272: return gdb_sys_pciconfig_read; + case 273: return gdb_sys_pciconfig_write; + */ + case 274: return gdb_sys_mq_open; + case 275: return gdb_sys_mq_unlink; + case 276: return gdb_sys_mq_timedsend; + case 277: return gdb_sys_mq_timedreceive; + case 278: return gdb_sys_mq_notify; + case 279: return gdb_sys_mq_getsetattr; + case 280: return gdb_sys_waitid; + case 281: return gdb_sys_socket; + case 282: return gdb_sys_bind; + case 283: return gdb_sys_connect; + case 284: return gdb_sys_listen; + case 285: return gdb_sys_accept; + case 286: return gdb_sys_getsockname; + case 287: return gdb_sys_getpeername; + case 288: return gdb_sys_socketpair; + case 289: /* send */ return gdb_sys_no_syscall; + case 290: return gdb_sys_sendto; + case 291: return gdb_sys_recv; + case 292: return gdb_sys_recvfrom; + case 293: return gdb_sys_shutdown; + case 294: return gdb_sys_setsockopt; + case 295: return gdb_sys_getsockopt; + case 296: return gdb_sys_sendmsg; + case 297: return gdb_sys_recvmsg; + case 298: return gdb_sys_semop; + case 299: return gdb_sys_semget; + case 300: return gdb_sys_semctl; + case 301: return gdb_sys_msgsnd; + case 302: return gdb_sys_msgrcv; + case 303: return gdb_sys_msgget; + case 304: return gdb_sys_msgctl; + case 305: return gdb_sys_shmat; + case 306: return gdb_sys_shmdt; + case 307: return gdb_sys_shmget; + case 308: return gdb_sys_shmctl; + case 309: return gdb_sys_add_key; + case 310: return gdb_sys_request_key; + case 311: return gdb_sys_keyctl; + case 312: return gdb_sys_semtimedop; + case 313: /* vserver */ return gdb_sys_no_syscall; + case 314: return gdb_sys_ioprio_set; + case 315: return gdb_sys_ioprio_get; + case 316: return gdb_sys_inotify_init; + case 317: return gdb_sys_inotify_add_watch; + case 318: return gdb_sys_inotify_rm_watch; + case 319: return gdb_sys_mbind; + case 320: return gdb_sys_get_mempolicy; + case 321: return gdb_sys_set_mempolicy; + case 322: return gdb_sys_openat; + case 323: return gdb_sys_mkdirat; + case 324: return gdb_sys_mknodat; + case 325: return gdb_sys_fchownat; + case 326: return gdb_sys_futimesat; + case 327: return gdb_sys_fstatat64; + case 328: return gdb_sys_unlinkat; + case 329: return gdb_sys_renameat; + case 330: return gdb_sys_linkat; + case 331: return gdb_sys_symlinkat; + case 332: return gdb_sys_readlinkat; + case 333: return gdb_sys_fchmodat; + case 334: return gdb_sys_faccessat; + case 335: return gdb_sys_pselect6; + case 336: return gdb_sys_ppoll; + case 337: return gdb_sys_unshare; + case 338: return gdb_sys_set_robust_list; + case 339: return gdb_sys_get_robust_list; + case 340: return gdb_sys_splice; + /*case 341: return gdb_sys_arm_sync_file_range;*/ + case 342: return gdb_sys_tee; + case 343: return gdb_sys_vmsplice; + case 344: return gdb_sys_move_pages; + case 345: return gdb_sys_getcpu; + case 346: return gdb_sys_epoll_pwait; + case 347: return gdb_sys_kexec_load; + /* + case 348: return gdb_sys_utimensat; + case 349: return gdb_sys_signalfd; + case 350: return gdb_sys_timerfd_create; + case 351: return gdb_sys_eventfd; + */ + case 352: return gdb_sys_fallocate; + /* + case 353: return gdb_sys_timerfd_settime; + case 354: return gdb_sys_timerfd_gettime; + case 355: return gdb_sys_signalfd4; + */ + case 356: return gdb_sys_eventfd2; + case 357: return gdb_sys_epoll_create1; + case 358: return gdb_sys_dup3; + case 359: return gdb_sys_pipe2; + case 360: return gdb_sys_inotify_init1; + /* + case 361: return gdb_sys_preadv; + case 362: return gdb_sys_pwritev; + case 363: return gdb_sys_rt_tgsigqueueinfo; + case 364: return gdb_sys_perf_event_open; + case 365: return gdb_sys_recvmmsg; + case 366: return gdb_sys_accept4; + case 367: return gdb_sys_fanotify_init; + case 368: return gdb_sys_fanotify_mark; + case 369: return gdb_sys_prlimit64; + case 370: return gdb_sys_name_to_handle_at; + case 371: return gdb_sys_open_by_handle_at; + case 372: return gdb_sys_clock_adjtime; + case 373: return gdb_sys_syncfs; + case 374: return gdb_sys_sendmmsg; + case 375: return gdb_sys_setns; + case 376: return gdb_sys_process_vm_readv; + case 377: return gdb_sys_process_vm_writev; + case 378: return gdb_sys_kcmp; + case 379: return gdb_sys_finit_module; + */ + case 983041: /* ARM_breakpoint */ return gdb_sys_no_syscall; + case 983042: /* ARM_cacheflush */ return gdb_sys_no_syscall; + case 983043: /* ARM_usr26 */ return gdb_sys_no_syscall; + case 983044: /* ARM_usr32 */ return gdb_sys_no_syscall; + case 983045: /* ARM_set_tls */ return gdb_sys_no_syscall; + default: return gdb_sys_no_syscall; + } } /* Record all registers but PC register for process-record. */ -- 2.30.2