From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30249 invoked by alias); 14 Oct 2014 12:47:39 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 30236 invoked by uid 89); 14 Oct 2014 12:47:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-oi0-f52.google.com Received: from mail-oi0-f52.google.com (HELO mail-oi0-f52.google.com) (209.85.218.52) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Tue, 14 Oct 2014 12:47:34 +0000 Received: by mail-oi0-f52.google.com with SMTP id a3so16305291oib.39 for ; Tue, 14 Oct 2014 05:47:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=8chE6sfKluAr66qxyh/uusjS90I7+6Br+tnleLvNHDI=; b=hykACamP+FW+cb04f/NUN7k2gEr9OFiP3WSPtunMZwcn6Wy5m/lMkFiRseFE2LlrH8 OabR96wKZZ/s46PCwzSWPoI7korJ4sHayAyVZ89vL6KKGMuoWmHtNjc0UTmGFVWcXsx3 aGLcfWgUvG6qf5TFcS4jC3+qMRQT1kXwOt/XZZ+ZjxY59oakytPhOB5Xu1gpqgTfljaA IeK+gi3nkU6551dFk1RL4OgWOX6Cf8cwSZNvVvluhFeXDsCkF8p111XnI/PjAM37dDUH lrP2BbhCCprM50QhcLLch3CRZi8AyI7NpMA8MxImCqM/9XFBcoPQmTm49KeAWqIqu3Wj AtPw== X-Gm-Message-State: ALoCoQm2kvLZnx1EY6kvZTKB9AVEQGpvHprwof0hBoYkghUE6lGVV3ojjzZeLqStKVgV93f5QTpP X-Received: by 10.202.212.214 with SMTP id l205mr4316312oig.42.1413290852702; Tue, 14 Oct 2014 05:47:32 -0700 (PDT) MIME-Version: 1.0 Received: by 10.182.142.194 with HTTP; Tue, 14 Oct 2014 05:47:02 -0700 (PDT) In-Reply-To: References: <1409313190-23768-1-git-send-email-omair.javaid@linaro.org> From: Omair Javaid Date: Tue, 14 Oct 2014 12:47:00 -0000 Message-ID: Subject: Re: [PATCH 5/7] Support for recording syscall on aarch64-linux To: Will Newton , Pedro Alves Cc: "gdb-patches@sourceware.org" Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2014-10/txt/msg00343.txt.bz2 On 19 September 2014 03:27, Omair Javaid wrote: > On 18 September 2014 05:22, Will Newton wrote: >> On 29 August 2014 04:53, Omair Javaid wrote: >>> Suggestion have been incorporated and updated patch is given below. >>> >>> gdb: >>> >>> 2014-08-28 Omair Javaid >>> >>> * aarch64-linux-tdep.c (record.h): Include. >>> (record-full.h): Include. >>> (struct linux_record_tdep aarch64_linux_record_tdep): Declare. >>> (aarch64_canonicalize_syscall): New function to translate syscall >>> numbers from aarch64 to canonical. >>> (aarch64_all_but_pc_registers_record): New function. >>> (aarch64_linux_syscall_record): New function. >>> (aarch64_linux_init_abi): Update to handle syscall recording. >>> * aarch64-linux-tdep.h (aarch64_syscall): New enum. >>> * aarch64-tdep.c (aarch64_record_branch_except_sys): Add code to >>> handle recording of syscalls. >>> * aarch64-tdep.h >>> (struct gdbarch_tdep) : Defined. >>> * linux-record.h (struct linux_record_tdep): Add two more syscall >>> argument fields. >>> >>> --- >>> gdb/aarch64-linux-tdep.c | 913 +++++++++++++++++++++++++++++++++++++++++++++++ >>> gdb/aarch64-linux-tdep.h | 266 ++++++++++++++ >>> gdb/aarch64-tdep.c | 15 +- >>> gdb/aarch64-tdep.h | 3 + >>> gdb/linux-record.h | 2 + >>> 5 files changed, 1198 insertions(+), 1 deletion(-) >> >> This one looks ok to me now. >> >>> diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c >>> index 5ab7b37..82b55b6 100644 >>> --- a/gdb/aarch64-linux-tdep.c >>> +++ b/gdb/aarch64-linux-tdep.c >>> @@ -41,6 +41,9 @@ >>> #include "user-regs.h" >>> #include >>> >>> +#include "record-full.h" >>> +#include "linux-record.h" >>> + >>> /* Signal frame handling. >>> >>> +------------+ ^ >>> @@ -354,6 +357,752 @@ aarch64_stap_parse_special_token (struct gdbarch *gdbarch, >>> return 1; >>> } >>> >>> +/* AArch64 process record-replay constructs: syscall, signal etc. */ >>> + >>> +struct linux_record_tdep aarch64_linux_record_tdep; >>> + >>> +/* aarch64_canonicalize_syscall maps syscall ids from the native AArch64 >>> + linux set of syscall ids into a canonical set of syscall ids used by >>> + process record. */ >>> + >>> +static enum gdb_syscall >>> +aarch64_canonicalize_syscall (enum aarch64_syscall syscall_number) >>> +{ >>> + switch (syscall_number) { >>> + case aarch64_sys_read: >>> + return gdb_sys_read; >>> + >>> + case aarch64_sys_write: >>> + return gdb_sys_write; >>> + >>> + case aarch64_sys_open: >>> + return gdb_sys_open; >>> + >>> + case aarch64_sys_close: >>> + return gdb_sys_close; >>> + >>> + case aarch64_sys_lseek: >>> + return gdb_sys_lseek; >>> + >>> + case aarch64_sys_mprotect: >>> + return gdb_sys_mprotect; >>> + >>> + case aarch64_sys_munmap: >>> + return gdb_sys_munmap; >>> + >>> + case aarch64_sys_brk: >>> + return gdb_sys_brk; >>> + >>> + case aarch64_sys_rt_sigaction: >>> + return gdb_sys_rt_sigaction; >>> + >>> + case aarch64_sys_rt_sigprocmask: >>> + return gdb_sys_rt_sigprocmask; >>> + >>> + case aarch64_sys_rt_sigreturn: >>> + return gdb_sys_rt_sigreturn; >>> + >>> + case aarch64_sys_ioctl: >>> + return gdb_sys_ioctl; >>> + >>> + case aarch64_sys_pread64: >>> + return gdb_sys_pread64; >>> + >>> + case aarch64_sys_pwrite64: >>> + return gdb_sys_pwrite64; >>> + >>> + case aarch64_sys_readv: >>> + return gdb_sys_readv; >>> + >>> + case aarch64_sys_writev: >>> + return gdb_sys_writev; >>> + >>> + case aarch64_sys_sched_yield: >>> + return gdb_sys_sched_yield; >>> + >>> + case aarch64_sys_mremap: >>> + return gdb_sys_mremap; >>> + >>> + case aarch64_sys_msync: >>> + return gdb_sys_msync; >>> + >>> + case aarch64_sys_mincore: >>> + return gdb_sys_mincore; >>> + >>> + case aarch64_sys_madvise: >>> + return gdb_sys_madvise; >>> + >>> + case aarch64_sys_shmget: >>> + return gdb_sys_shmget; >>> + >>> + case aarch64_sys_shmat: >>> + return gdb_sys_shmat; >>> + >>> + case aarch64_sys_shmctl: >>> + return gdb_sys_shmctl; >>> + >>> + case aarch64_sys_dup: >>> + return gdb_sys_dup; >>> + >>> + case aarch64_sys_nanosleep: >>> + return gdb_sys_nanosleep; >>> + >>> + case aarch64_sys_getitimer: >>> + return gdb_sys_getitimer; >>> + >>> + case aarch64_sys_setitimer: >>> + return gdb_sys_setitimer; >>> + >>> + case aarch64_sys_getpid: >>> + return gdb_sys_getpid; >>> + >>> + case aarch64_sys_sendfile: >>> + return gdb_sys_sendfile; >>> + >>> + case aarch64_sys_socket: >>> + return gdb_sys_socket; >>> + >>> + case aarch64_sys_connect: >>> + return gdb_sys_connect; >>> + >>> + case aarch64_sys_accept: >>> + return gdb_sys_accept; >>> + >>> + case aarch64_sys_sendto: >>> + return gdb_sys_sendto; >>> + >>> + case aarch64_sys_recvfrom: >>> + return gdb_sys_recvfrom; >>> + >>> + case aarch64_sys_sendmsg: >>> + return gdb_sys_sendmsg; >>> + >>> + case aarch64_sys_recvmsg: >>> + return gdb_sys_recvmsg; >>> + >>> + case aarch64_sys_shutdown: >>> + return gdb_sys_shutdown; >>> + >>> + case aarch64_sys_bind: >>> + return gdb_sys_bind; >>> + >>> + case aarch64_sys_listen: >>> + return gdb_sys_listen; >>> + >>> + case aarch64_sys_getsockname: >>> + return gdb_sys_getsockname; >>> + >>> + case aarch64_sys_getpeername: >>> + return gdb_sys_getpeername; >>> + >>> + case aarch64_sys_socketpair: >>> + return gdb_sys_socketpair; >>> + >>> + case aarch64_sys_setsockopt: >>> + return gdb_sys_setsockopt; >>> + >>> + case aarch64_sys_getsockopt: >>> + return gdb_sys_getsockopt; >>> + >>> + case aarch64_sys_clone: >>> + return gdb_sys_clone; >>> + >>> + case aarch64_sys_execve: >>> + return gdb_sys_execve; >>> + >>> + case aarch64_sys_exit: >>> + return gdb_sys_exit; >>> + >>> + case aarch64_sys_wait4: >>> + return gdb_sys_wait4; >>> + >>> + case aarch64_sys_kill: >>> + return gdb_sys_kill; >>> + >>> + case aarch64_sys_uname: >>> + return gdb_sys_uname; >>> + >>> + case aarch64_sys_semget: >>> + return gdb_sys_semget; >>> + >>> + case aarch64_sys_semop: >>> + return gdb_sys_semop; >>> + >>> + case aarch64_sys_semctl: >>> + return gdb_sys_semctl; >>> + >>> + case aarch64_sys_shmdt: >>> + return gdb_sys_shmdt; >>> + >>> + case aarch64_sys_msgget: >>> + return gdb_sys_msgget; >>> + >>> + case aarch64_sys_msgsnd: >>> + return gdb_sys_msgsnd; >>> + >>> + case aarch64_sys_msgrcv: >>> + return gdb_sys_msgrcv; >>> + >>> + case aarch64_sys_msgctl: >>> + return gdb_sys_msgctl; >>> + >>> + case aarch64_sys_fcntl: >>> + return gdb_sys_fcntl; >>> + >>> + case aarch64_sys_flock: >>> + return gdb_sys_flock; >>> + >>> + case aarch64_sys_fsync: >>> + return gdb_sys_fsync; >>> + >>> + case aarch64_sys_fdatasync: >>> + return gdb_sys_fdatasync; >>> + >>> + case aarch64_sys_truncate: >>> + return gdb_sys_truncate; >>> + >>> + case aarch64_sys_ftruncate: >>> + return gdb_sys_ftruncate; >>> + >>> + case aarch64_sys_getcwd: >>> + return gdb_sys_getcwd; >>> + >>> + case aarch64_sys_chdir: >>> + return gdb_sys_chdir; >>> + >>> + case aarch64_sys_fchdir: >>> + return gdb_sys_fchdir; >>> + >>> + case aarch64_sys_rename: >>> + return gdb_sys_rename; >>> + >>> + case aarch64_sys_mkdir: >>> + return gdb_sys_mkdir; >>> + >>> + case aarch64_sys_link: >>> + return gdb_sys_link; >>> + >>> + case aarch64_sys_unlink: >>> + return gdb_sys_unlink; >>> + >>> + case aarch64_sys_symlink: >>> + return gdb_sys_symlink; >>> + >>> + case aarch64_sys_readlink: >>> + return gdb_sys_readlink; >>> + >>> + case aarch64_sys_fchmodat: >>> + return gdb_sys_fchmodat; >>> + >>> + case aarch64_sys_fchmod: >>> + return gdb_sys_fchmod; >>> + >>> + case aarch64_sys_fchownat: >>> + return gdb_sys_fchownat; >>> + >>> + case aarch64_sys_fchown: >>> + return gdb_sys_fchown; >>> + >>> + case aarch64_sys_umask: >>> + return gdb_sys_umask; >>> + >>> + case aarch64_sys_gettimeofday: >>> + return gdb_sys_gettimeofday; >>> + >>> + case aarch64_sys_getrlimit: >>> + return gdb_sys_getrlimit; >>> + >>> + case aarch64_sys_getrusage: >>> + return gdb_sys_getrusage; >>> + >>> + case aarch64_sys_sysinfo: >>> + return gdb_sys_sysinfo; >>> + >>> + case aarch64_sys_ptrace: >>> + return gdb_sys_ptrace; >>> + >>> + case aarch64_sys_getuid: >>> + return gdb_sys_getuid; >>> + >>> + case aarch64_sys_syslog: >>> + return gdb_sys_syslog; >>> + >>> + case aarch64_sys_getgid: >>> + return gdb_sys_getgid; >>> + >>> + case aarch64_sys_setuid: >>> + return gdb_sys_setuid; >>> + >>> + case aarch64_sys_setgid: >>> + return gdb_sys_setgid; >>> + >>> + case aarch64_sys_geteuid: >>> + return gdb_sys_geteuid; >>> + >>> + case aarch64_sys_getegid: >>> + return gdb_sys_getegid; >>> + >>> + case aarch64_sys_setpgid: >>> + return gdb_sys_setpgid; >>> + >>> + case aarch64_sys_getppid: >>> + return gdb_sys_getppid; >>> + >>> + case aarch64_sys_setsid: >>> + return gdb_sys_setsid; >>> + >>> + case aarch64_sys_setreuid: >>> + return gdb_sys_setreuid; >>> + >>> + case aarch64_sys_setregid: >>> + return gdb_sys_setregid; >>> + >>> + case aarch64_sys_getgroups: >>> + return gdb_sys_getgroups; >>> + >>> + case aarch64_sys_setgroups: >>> + return gdb_sys_setgroups; >>> + >>> + case aarch64_sys_setresuid: >>> + return gdb_sys_setresuid; >>> + >>> + case aarch64_sys_getresuid: >>> + return gdb_sys_getresuid; >>> + >>> + case aarch64_sys_setresgid: >>> + return gdb_sys_setresgid; >>> + >>> + case aarch64_sys_getresgid: >>> + return gdb_sys_getresgid; >>> + >>> + case aarch64_sys_getpgid: >>> + return gdb_sys_getpgid; >>> + >>> + case aarch64_sys_setfsuid: >>> + return gdb_sys_setfsuid; >>> + >>> + case aarch64_sys_setfsgid: >>> + return gdb_sys_setfsgid; >>> + >>> + case aarch64_sys_getsid: >>> + return gdb_sys_getsid; >>> + >>> + case aarch64_sys_capget: >>> + return gdb_sys_capget; >>> + >>> + case aarch64_sys_capset: >>> + return gdb_sys_capset; >>> + >>> + case aarch64_sys_rt_sigpending: >>> + return gdb_sys_rt_sigpending; >>> + >>> + case aarch64_sys_rt_sigtimedwait: >>> + return gdb_sys_rt_sigtimedwait; >>> + >>> + case aarch64_sys_rt_sigqueueinfo: >>> + return gdb_sys_rt_sigqueueinfo; >>> + >>> + case aarch64_sys_rt_sigsuspend: >>> + return gdb_sys_rt_sigsuspend; >>> + >>> + case aarch64_sys_sigaltstack: >>> + return gdb_sys_sigaltstack; >>> + >>> + case aarch64_sys_mknod: >>> + return gdb_sys_mknod; >>> + >>> + case aarch64_sys_personality: >>> + return gdb_sys_personality; >>> + >>> + case aarch64_sys_statfs: >>> + return gdb_sys_statfs; >>> + >>> + case aarch64_sys_fstat: >>> + return gdb_sys_fstat; >>> + >>> + case aarch64_sys_fstatfs: >>> + return gdb_sys_fstatfs; >>> + >>> + case aarch64_sys_getpriority: >>> + return gdb_sys_getpriority; >>> + >>> + case aarch64_sys_setpriority: >>> + return gdb_sys_setpriority; >>> + >>> + case aarch64_sys_sched_setparam: >>> + return gdb_sys_sched_setparam; >>> + >>> + case aarch64_sys_sched_getparam: >>> + return gdb_sys_sched_getparam; >>> + >>> + case aarch64_sys_sched_setscheduler: >>> + return gdb_sys_sched_setscheduler; >>> + >>> + case aarch64_sys_sched_getscheduler: >>> + return gdb_sys_sched_getscheduler; >>> + >>> + case aarch64_sys_sched_get_priority_max: >>> + return gdb_sys_sched_get_priority_max; >>> + >>> + case aarch64_sys_sched_get_priority_min: >>> + return gdb_sys_sched_get_priority_min; >>> + >>> + case aarch64_sys_sched_rr_get_interval: >>> + return gdb_sys_sched_rr_get_interval; >>> + >>> + case aarch64_sys_mlock: >>> + return gdb_sys_mlock; >>> + >>> + case aarch64_sys_munlock: >>> + return gdb_sys_munlock; >>> + >>> + case aarch64_sys_mlockall: >>> + return gdb_sys_mlockall; >>> + >>> + case aarch64_sys_munlockall: >>> + return gdb_sys_munlockall; >>> + >>> + case aarch64_sys_vhangup: >>> + return gdb_sys_vhangup; >>> + >>> + case aarch64_sys_prctl: >>> + return gdb_sys_prctl; >>> + >>> + case aarch64_sys_adjtimex: >>> + return gdb_sys_adjtimex; >>> + >>> + case aarch64_sys_setrlimit: >>> + return gdb_sys_setrlimit; >>> + >>> + case aarch64_sys_chroot: >>> + return gdb_sys_chroot; >>> + >>> + case aarch64_sys_sync: >>> + return gdb_sys_sync; >>> + >>> + case aarch64_sys_acct: >>> + return gdb_sys_acct; >>> + >>> + case aarch64_sys_settimeofday: >>> + return gdb_sys_settimeofday; >>> + >>> + case aarch64_sys_mount: >>> + return gdb_sys_mount; >>> + >>> + case aarch64_sys_swapon: >>> + return gdb_sys_swapon; >>> + >>> + case aarch64_sys_swapoff: >>> + return gdb_sys_swapoff; >>> + >>> + case aarch64_sys_reboot: >>> + return gdb_sys_reboot; >>> + >>> + case aarch64_sys_sethostname: >>> + return gdb_sys_sethostname; >>> + >>> + case aarch64_sys_setdomainname: >>> + return gdb_sys_setdomainname; >>> + >>> + case aarch64_sys_init_module: >>> + return gdb_sys_init_module; >>> + >>> + case aarch64_sys_delete_module: >>> + return gdb_sys_delete_module; >>> + >>> + case aarch64_sys_quotactl: >>> + return gdb_sys_quotactl; >>> + >>> + case aarch64_sys_nfsservctl: >>> + return gdb_sys_nfsservctl; >>> + >>> + case aarch64_sys_gettid: >>> + return gdb_sys_gettid; >>> + >>> + case aarch64_sys_readahead: >>> + return gdb_sys_readahead; >>> + >>> + case aarch64_sys_setxattr: >>> + return gdb_sys_setxattr; >>> + >>> + case aarch64_sys_lsetxattr: >>> + return gdb_sys_lsetxattr; >>> + >>> + case aarch64_sys_fsetxattr: >>> + return gdb_sys_fsetxattr; >>> + >>> + case aarch64_sys_getxattr: >>> + return gdb_sys_getxattr; >>> + >>> + case aarch64_sys_lgetxattr: >>> + return gdb_sys_lgetxattr; >>> + >>> + case aarch64_sys_fgetxattr: >>> + return gdb_sys_fgetxattr; >>> + >>> + case aarch64_sys_listxattr: >>> + return gdb_sys_listxattr; >>> + >>> + case aarch64_sys_llistxattr: >>> + return gdb_sys_llistxattr; >>> + >>> + case aarch64_sys_flistxattr: >>> + return gdb_sys_flistxattr; >>> + >>> + case aarch64_sys_removexattr: >>> + return gdb_sys_removexattr; >>> + >>> + case aarch64_sys_lremovexattr: >>> + return gdb_sys_lremovexattr; >>> + >>> + case aarch64_sys_fremovexattr: >>> + return gdb_sys_fremovexattr; >>> + >>> + case aarch64_sys_tkill: >>> + return gdb_sys_tkill; >>> + >>> + case aarch64_sys_times: >>> + return gdb_sys_times; >>> + >>> + case aarch64_sys_futex: >>> + return gdb_sys_futex; >>> + >>> + case aarch64_sys_sched_setaffinity: >>> + return gdb_sys_sched_setaffinity; >>> + >>> + case aarch64_sys_sched_getaffinity: >>> + return gdb_sys_sched_getaffinity; >>> + >>> + case aarch64_sys_io_setup: >>> + return gdb_sys_io_setup; >>> + >>> + case aarch64_sys_io_destroy: >>> + return gdb_sys_io_destroy; >>> + >>> + case aarch64_sys_io_getevents: >>> + return gdb_sys_io_getevents; >>> + >>> + case aarch64_sys_io_submit: >>> + return gdb_sys_io_submit; >>> + >>> + case aarch64_sys_io_cancel: >>> + return gdb_sys_io_cancel; >>> + >>> + case aarch64_sys_lookup_dcookie: >>> + return gdb_sys_lookup_dcookie; >>> + >>> + case aarch64_sys_epoll_create1: >>> + return gdb_sys_epoll_create; >>> + >>> + case aarch64_sys_remap_file_pages: >>> + return gdb_sys_remap_file_pages; >>> + >>> + case aarch64_sys_getdents64: >>> + return gdb_sys_getdents64; >>> + >>> + case aarch64_sys_set_tid_address: >>> + return gdb_sys_set_tid_address; >>> + >>> + case aarch64_sys_semtimedop: >>> + return gdb_sys_semtimedop; >>> + >>> + case aarch64_sys_fadvise64: >>> + return gdb_sys_fadvise64; >>> + >>> + case aarch64_sys_timer_create: >>> + return gdb_sys_timer_create; >>> + >>> + case aarch64_sys_timer_settime: >>> + return gdb_sys_timer_settime; >>> + >>> + case aarch64_sys_timer_gettime: >>> + return gdb_sys_timer_gettime; >>> + >>> + case aarch64_sys_timer_getoverrun: >>> + return gdb_sys_timer_getoverrun; >>> + >>> + case aarch64_sys_timer_delete: >>> + return gdb_sys_timer_delete; >>> + >>> + case aarch64_sys_clock_settime: >>> + return gdb_sys_clock_settime; >>> + >>> + case aarch64_sys_clock_gettime: >>> + return gdb_sys_clock_gettime; >>> + >>> + case aarch64_sys_clock_getres: >>> + return gdb_sys_clock_getres; >>> + >>> + case aarch64_sys_clock_nanosleep: >>> + return gdb_sys_clock_nanosleep; >>> + >>> + case aarch64_sys_exit_group: >>> + return gdb_sys_exit_group; >>> + >>> + case aarch64_sys_epoll_pwait: >>> + return gdb_sys_epoll_pwait; >>> + >>> + case aarch64_sys_epoll_ctl: >>> + return gdb_sys_epoll_ctl; >>> + >>> + case aarch64_sys_tgkill: >>> + return gdb_sys_tgkill; >>> + >>> + case aarch64_sys_mbind: >>> + return gdb_sys_mbind; >>> + >>> + case aarch64_sys_set_mempolicy: >>> + return gdb_sys_set_mempolicy; >>> + >>> + case aarch64_sys_get_mempolicy: >>> + return gdb_sys_get_mempolicy; >>> + >>> + case aarch64_sys_mq_open: >>> + return gdb_sys_mq_open; >>> + >>> + case aarch64_sys_mq_unlink: >>> + return gdb_sys_mq_unlink; >>> + >>> + case aarch64_sys_mq_timedsend: >>> + return gdb_sys_mq_timedsend; >>> + >>> + case aarch64_sys_mq_timedreceive: >>> + return gdb_sys_mq_timedreceive; >>> + >>> + case aarch64_sys_mq_notify: >>> + return gdb_sys_mq_notify; >>> + >>> + case aarch64_sys_mq_getsetattr: >>> + return gdb_sys_mq_getsetattr; >>> + >>> + case aarch64_sys_kexec_load: >>> + return gdb_sys_kexec_load; >>> + >>> + case aarch64_sys_waitid: >>> + return gdb_sys_waitid; >>> + >>> + case aarch64_sys_add_key: >>> + return gdb_sys_add_key; >>> + >>> + case aarch64_sys_request_key: >>> + return gdb_sys_request_key; >>> + >>> + case aarch64_sys_keyctl: >>> + return gdb_sys_keyctl; >>> + >>> + case aarch64_sys_ioprio_set: >>> + return gdb_sys_ioprio_set; >>> + >>> + case aarch64_sys_ioprio_get: >>> + return gdb_sys_ioprio_get; >>> + >>> + case aarch64_sys_inotify_add_watch: >>> + return gdb_sys_inotify_add_watch; >>> + >>> + case aarch64_sys_inotify_rm_watch: >>> + return gdb_sys_inotify_rm_watch; >>> + >>> + case aarch64_sys_migrate_pages: >>> + return gdb_sys_migrate_pages; >>> + >>> + case aarch64_sys_pselect6: >>> + return gdb_sys_pselect6; >>> + >>> + case aarch64_sys_ppoll: >>> + return gdb_sys_ppoll; >>> + >>> + case aarch64_sys_unshare: >>> + return gdb_sys_unshare; >>> + >>> + case aarch64_sys_set_robust_list: >>> + return gdb_sys_set_robust_list; >>> + >>> + case aarch64_sys_get_robust_list: >>> + return gdb_sys_get_robust_list; >>> + >>> + case aarch64_sys_splice: >>> + return gdb_sys_splice; >>> + >>> + case aarch64_sys_tee: >>> + return gdb_sys_tee; >>> + >>> + case aarch64_sys_sync_file_range: >>> + return gdb_sys_sync_file_range; >>> + >>> + case aarch64_sys_vmsplice: >>> + return gdb_sys_vmsplice; >>> + >>> + case aarch64_sys_move_pages: >>> + return gdb_sys_move_pages; >>> + >>> + default: >>> + return -1; >>> + } >>> +} >>> + >>> +/* Record all registers but PC register for process-record. */ >>> + >>> +static int >>> +aarch64_all_but_pc_registers_record (struct regcache *regcache) >>> +{ >>> + int i; >>> + >>> + for (i = 0; i < AARCH64_PC_REGNUM; i++) >>> + if (record_full_arch_list_add_reg (regcache, AARCH64_X0_REGNUM + i)) >>> + return -1; >>> + >>> + if (record_full_arch_list_add_reg (regcache, AARCH64_CPSR_REGNUM)) >>> + return -1; >>> + >>> + return 0; >>> +} >>> + >>> +/* Handler for arm system call instruction recording. */ >>> + >>> +static int >>> +aarch64_linux_syscall_record (struct regcache *regcache, unsigned long svc_number) >>> +{ >>> + int ret = 0; >>> + enum gdb_syscall syscall_gdb; >>> + >>> + printf_unfiltered (_("syscall number %s\n"), >>> + plongest (svc_number)); >>> + syscall_gdb = aarch64_canonicalize_syscall (svc_number); >>> + >>> + if (syscall_gdb < 0) >>> + { >>> + printf_unfiltered (_("Process record and replay target doesn't " >>> + "support syscall number %s\n"), >>> + plongest (svc_number)); >>> + return -1; >>> + } >>> + >>> + if (syscall_gdb == gdb_sys_sigreturn >>> + || syscall_gdb == gdb_sys_rt_sigreturn) >>> + { >>> + if (aarch64_all_but_pc_registers_record (regcache)) >>> + return -1; >>> + return 0; >>> + } >>> + >>> + ret = record_linux_system_call (syscall_gdb, regcache, >>> + &aarch64_linux_record_tdep); >>> + if (ret != 0) >>> + return ret; >>> + >>> + /* Record the return value of the system call. */ >>> + if (record_full_arch_list_add_reg (regcache, AARCH64_X0_REGNUM)) >>> + return -1; >>> + /* Record LR. */ >>> + if (record_full_arch_list_add_reg (regcache, AARCH64_LR_REGNUM)) >>> + return -1; >>> + /* Record CPSR. */ >>> + if (record_full_arch_list_add_reg (regcache, AARCH64_CPSR_REGNUM)) >>> + return -1; >>> + >>> + return 0; >>> +} >>> + >>> static void >>> aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) >>> { >>> @@ -404,6 +1153,170 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) >>> >>> /* Reversible debugging, process record. */ >>> set_gdbarch_process_record (gdbarch, aarch64_process_record); >>> + /* Syscall record. */ >>> + tdep->aarch64_syscall_record = aarch64_linux_syscall_record; >>> + >>> + /* Initialize the aarch64_linux_record_tdep. */ >>> + /* These values are the size of the type that will be used in a system >>> + call. They are obtained from Linux Kernel source. */ >>> + aarch64_linux_record_tdep.size_pointer >>> + = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT; >>> + aarch64_linux_record_tdep.size__old_kernel_stat = 32; >>> + aarch64_linux_record_tdep.size_tms = 32; >>> + aarch64_linux_record_tdep.size_loff_t = 8; >>> + aarch64_linux_record_tdep.size_flock = 32; >>> + aarch64_linux_record_tdep.size_oldold_utsname = 45; >>> + aarch64_linux_record_tdep.size_ustat = 32; >>> + aarch64_linux_record_tdep.size_old_sigaction = 152; >>> + aarch64_linux_record_tdep.size_old_sigset_t = 128; >>> + aarch64_linux_record_tdep.size_rlimit = 16; >>> + aarch64_linux_record_tdep.size_rusage = 144; >>> + aarch64_linux_record_tdep.size_timeval = 16; >>> + aarch64_linux_record_tdep.size_timezone = 8; >>> + aarch64_linux_record_tdep.size_old_gid_t = 2; >>> + aarch64_linux_record_tdep.size_old_uid_t = 2; >>> + aarch64_linux_record_tdep.size_fd_set = 128; >>> + aarch64_linux_record_tdep.size_dirent = 280; >>> + aarch64_linux_record_tdep.size_dirent64 = 280; >>> + aarch64_linux_record_tdep.size_statfs = 120; >>> + aarch64_linux_record_tdep.size_statfs64 = 120; >>> + aarch64_linux_record_tdep.size_sockaddr = 16; >>> + aarch64_linux_record_tdep.size_int >>> + = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT; >>> + aarch64_linux_record_tdep.size_long >>> + = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; >>> + aarch64_linux_record_tdep.size_ulong >>> + = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT; >>> + aarch64_linux_record_tdep.size_msghdr = 56; >>> + aarch64_linux_record_tdep.size_itimerval = 32; >>> + aarch64_linux_record_tdep.size_stat = 144; >>> + aarch64_linux_record_tdep.size_old_utsname = 325; >>> + aarch64_linux_record_tdep.size_sysinfo = 112; >>> + aarch64_linux_record_tdep.size_msqid_ds = 120; >>> + aarch64_linux_record_tdep.size_shmid_ds = 112; >>> + aarch64_linux_record_tdep.size_new_utsname = 390; >>> + aarch64_linux_record_tdep.size_timex = 208; >>> + aarch64_linux_record_tdep.size_mem_dqinfo = 24; >>> + aarch64_linux_record_tdep.size_if_dqblk = 72; >>> + aarch64_linux_record_tdep.size_fs_quota_stat = 80; >>> + aarch64_linux_record_tdep.size_timespec = 16; >>> + aarch64_linux_record_tdep.size_pollfd = 8; >>> + aarch64_linux_record_tdep.size_NFS_FHSIZE = 32; >>> + aarch64_linux_record_tdep.size_knfsd_fh = 132; >>> + aarch64_linux_record_tdep.size_TASK_COMM_LEN = 16; >>> + aarch64_linux_record_tdep.size_sigaction = 152; >>> + aarch64_linux_record_tdep.size_sigset_t = 128; >>> + aarch64_linux_record_tdep.size_siginfo_t = 128; >>> + aarch64_linux_record_tdep.size_cap_user_data_t = 8; >>> + aarch64_linux_record_tdep.size_stack_t = 24; >>> + aarch64_linux_record_tdep.size_off_t = 8; >>> + aarch64_linux_record_tdep.size_stat64 = 144; >>> + aarch64_linux_record_tdep.size_gid_t = 4; >>> + aarch64_linux_record_tdep.size_uid_t = 4; >>> + aarch64_linux_record_tdep.size_PAGE_SIZE = 4096; >>> + aarch64_linux_record_tdep.size_flock64 = 32; >>> + aarch64_linux_record_tdep.size_user_desc = 16; >>> + aarch64_linux_record_tdep.size_io_event = 32; >>> + aarch64_linux_record_tdep.size_iocb = 64; >>> + aarch64_linux_record_tdep.size_epoll_event = 12; >>> + aarch64_linux_record_tdep.size_itimerspec = 32; >>> + aarch64_linux_record_tdep.size_mq_attr = 64; >>> + aarch64_linux_record_tdep.size_siginfo = 128; >>> + aarch64_linux_record_tdep.size_termios = 60; >>> + aarch64_linux_record_tdep.size_termios2 = 44; >>> + aarch64_linux_record_tdep.size_pid_t = 4; >>> + aarch64_linux_record_tdep.size_winsize = 8; >>> + aarch64_linux_record_tdep.size_serial_struct = 72; >>> + aarch64_linux_record_tdep.size_serial_icounter_struct = 80; >>> + aarch64_linux_record_tdep.size_hayes_esp_config = 12; >>> + aarch64_linux_record_tdep.size_size_t = 8; >>> + aarch64_linux_record_tdep.size_iovec = 16; >>> + >>> + /* These values are the second argument of system call "sys_ioctl". >>> + They are obtained from Linux Kernel source. */ >>> + aarch64_linux_record_tdep.ioctl_TCGETS = 0x5401; >>> + aarch64_linux_record_tdep.ioctl_TCSETS = 0x5402; >>> + aarch64_linux_record_tdep.ioctl_TCSETSW = 0x5403; >>> + aarch64_linux_record_tdep.ioctl_TCSETSF = 0x5404; >>> + aarch64_linux_record_tdep.ioctl_TCGETA = 0x5405; >>> + aarch64_linux_record_tdep.ioctl_TCSETA = 0x5406; >>> + aarch64_linux_record_tdep.ioctl_TCSETAW = 0x5407; >>> + aarch64_linux_record_tdep.ioctl_TCSETAF = 0x5408; >>> + aarch64_linux_record_tdep.ioctl_TCSBRK = 0x5409; >>> + aarch64_linux_record_tdep.ioctl_TCXONC = 0x540a; >>> + aarch64_linux_record_tdep.ioctl_TCFLSH = 0x540b; >>> + aarch64_linux_record_tdep.ioctl_TIOCEXCL = 0x540c; >>> + aarch64_linux_record_tdep.ioctl_TIOCNXCL = 0x540d; >>> + aarch64_linux_record_tdep.ioctl_TIOCSCTTY = 0x540e; >>> + aarch64_linux_record_tdep.ioctl_TIOCGPGRP = 0x540f; >>> + aarch64_linux_record_tdep.ioctl_TIOCSPGRP = 0x5410; >>> + aarch64_linux_record_tdep.ioctl_TIOCOUTQ = 0x5411; >>> + aarch64_linux_record_tdep.ioctl_TIOCSTI = 0x5412; >>> + aarch64_linux_record_tdep.ioctl_TIOCGWINSZ = 0x5413; >>> + aarch64_linux_record_tdep.ioctl_TIOCSWINSZ = 0x5414; >>> + aarch64_linux_record_tdep.ioctl_TIOCMGET = 0x5415; >>> + aarch64_linux_record_tdep.ioctl_TIOCMBIS = 0x5416; >>> + aarch64_linux_record_tdep.ioctl_TIOCMBIC = 0x5417; >>> + aarch64_linux_record_tdep.ioctl_TIOCMSET = 0x5418; >>> + aarch64_linux_record_tdep.ioctl_TIOCGSOFTCAR = 0x5419; >>> + aarch64_linux_record_tdep.ioctl_TIOCSSOFTCAR = 0x541a; >>> + aarch64_linux_record_tdep.ioctl_FIONREAD = 0x541b; >>> + aarch64_linux_record_tdep.ioctl_TIOCINQ = 0x541b; >>> + aarch64_linux_record_tdep.ioctl_TIOCLINUX = 0x541c; >>> + aarch64_linux_record_tdep.ioctl_TIOCCONS = 0x541d; >>> + aarch64_linux_record_tdep.ioctl_TIOCGSERIAL = 0x541e; >>> + aarch64_linux_record_tdep.ioctl_TIOCSSERIAL = 0x541f; >>> + aarch64_linux_record_tdep.ioctl_TIOCPKT = 0x5420; >>> + aarch64_linux_record_tdep.ioctl_FIONBIO = 0x5421; >>> + aarch64_linux_record_tdep.ioctl_TIOCNOTTY = 0x5422; >>> + aarch64_linux_record_tdep.ioctl_TIOCSETD = 0x5423; >>> + aarch64_linux_record_tdep.ioctl_TIOCGETD = 0x5424; >>> + aarch64_linux_record_tdep.ioctl_TCSBRKP = 0x5425; >>> + aarch64_linux_record_tdep.ioctl_TIOCTTYGSTRUCT = 0x5426; >>> + aarch64_linux_record_tdep.ioctl_TIOCSBRK = 0x5427; >>> + aarch64_linux_record_tdep.ioctl_TIOCCBRK = 0x5428; >>> + aarch64_linux_record_tdep.ioctl_TIOCGSID = 0x5429; >>> + aarch64_linux_record_tdep.ioctl_TCGETS2 = 0x802c542a; >>> + aarch64_linux_record_tdep.ioctl_TCSETS2 = 0x402c542b; >>> + aarch64_linux_record_tdep.ioctl_TCSETSW2 = 0x402c542c; >>> + aarch64_linux_record_tdep.ioctl_TCSETSF2 = 0x402c542d; >>> + aarch64_linux_record_tdep.ioctl_TIOCGPTN = 0x80045430; >>> + aarch64_linux_record_tdep.ioctl_TIOCSPTLCK = 0x40045431; >>> + aarch64_linux_record_tdep.ioctl_FIONCLEX = 0x5450; >>> + aarch64_linux_record_tdep.ioctl_FIOCLEX = 0x5451; >>> + aarch64_linux_record_tdep.ioctl_FIOASYNC = 0x5452; >>> + aarch64_linux_record_tdep.ioctl_TIOCSERCONFIG = 0x5453; >>> + aarch64_linux_record_tdep.ioctl_TIOCSERGWILD = 0x5454; >>> + aarch64_linux_record_tdep.ioctl_TIOCSERSWILD = 0x5455; >>> + aarch64_linux_record_tdep.ioctl_TIOCGLCKTRMIOS = 0x5456; >>> + aarch64_linux_record_tdep.ioctl_TIOCSLCKTRMIOS = 0x5457; >>> + aarch64_linux_record_tdep.ioctl_TIOCSERGSTRUCT = 0x5458; >>> + aarch64_linux_record_tdep.ioctl_TIOCSERGETLSR = 0x5459; >>> + aarch64_linux_record_tdep.ioctl_TIOCSERGETMULTI = 0x545a; >>> + aarch64_linux_record_tdep.ioctl_TIOCSERSETMULTI = 0x545b; >>> + aarch64_linux_record_tdep.ioctl_TIOCMIWAIT = 0x545c; >>> + aarch64_linux_record_tdep.ioctl_TIOCGICOUNT = 0x545d; >>> + aarch64_linux_record_tdep.ioctl_TIOCGHAYESESP = 0x545e; >>> + aarch64_linux_record_tdep.ioctl_TIOCSHAYESESP = 0x545f; >>> + aarch64_linux_record_tdep.ioctl_FIOQSIZE = 0x5460; >>> + >>> + /* These values are the second argument of system call "sys_fcntl" >>> + and "sys_fcntl64". They are obtained from Linux Kernel source. */ >>> + aarch64_linux_record_tdep.fcntl_F_GETLK = 5; >>> + aarch64_linux_record_tdep.fcntl_F_GETLK64 = 12; >>> + aarch64_linux_record_tdep.fcntl_F_SETLK64 = 13; >>> + aarch64_linux_record_tdep.fcntl_F_SETLKW64 = 14; >>> + >>> + /* The AArch64 syscall calling convention: reg x0-x7 for arguments, >>> + reg x8 for syscall number and return value in reg x0. */ >>> + aarch64_linux_record_tdep.arg1 = AARCH64_X0_REGNUM + 0; >>> + aarch64_linux_record_tdep.arg2 = AARCH64_X0_REGNUM + 1; >>> + aarch64_linux_record_tdep.arg3 = AARCH64_X0_REGNUM + 2; >>> + aarch64_linux_record_tdep.arg4 = AARCH64_X0_REGNUM + 3; >>> + aarch64_linux_record_tdep.arg5 = AARCH64_X0_REGNUM + 4; >>> + aarch64_linux_record_tdep.arg6 = AARCH64_X0_REGNUM + 5; >>> + aarch64_linux_record_tdep.arg7 = AARCH64_X0_REGNUM + 6; >>> + aarch64_linux_record_tdep.arg8 = AARCH64_X0_REGNUM + 7; >>> } >>> >>> /* Provide a prototype to silence -Wmissing-prototypes. */ >>> diff --git a/gdb/aarch64-linux-tdep.h b/gdb/aarch64-linux-tdep.h >>> index 2e1de60..1ae3786 100644 >>> --- a/gdb/aarch64-linux-tdep.h >>> +++ b/gdb/aarch64-linux-tdep.h >>> @@ -32,3 +32,269 @@ >>> >>> extern const struct regset aarch64_linux_gregset; >>> extern const struct regset aarch64_linux_fpregset; >>> + >>> +/* Enum that defines the AArch64 linux specific syscall identifiers used for >>> + process record/replay. */ >>> + >>> +enum aarch64_syscall { >>> + aarch64_sys_io_setup = 0, >>> + aarch64_sys_io_destroy = 1, >>> + aarch64_sys_io_submit = 2, >>> + aarch64_sys_io_cancel = 3, >>> + aarch64_sys_io_getevents = 4, >>> + aarch64_sys_setxattr = 5, >>> + aarch64_sys_lsetxattr = 6, >>> + aarch64_sys_fsetxattr = 7, >>> + aarch64_sys_getxattr = 8, >>> + aarch64_sys_lgetxattr = 9, >>> + aarch64_sys_fgetxattr = 10, >>> + aarch64_sys_listxattr = 11, >>> + aarch64_sys_llistxattr = 12, >>> + aarch64_sys_flistxattr = 13, >>> + aarch64_sys_removexattr = 14, >>> + aarch64_sys_lremovexattr = 15, >>> + aarch64_sys_fremovexattr = 16, >>> + aarch64_sys_getcwd = 17, >>> + aarch64_sys_lookup_dcookie = 18, >>> + aarch64_sys_eventfd2 = 19, >>> + aarch64_sys_epoll_create1 = 20, >>> + aarch64_sys_epoll_ctl = 21, >>> + aarch64_sys_epoll_pwait = 22, >>> + aarch64_sys_dup = 23, >>> + aarch64_sys_dup3 = 24, >>> + aarch64_sys_fcntl = 25, >>> + aarch64_sys_inotify_init1 = 26, >>> + aarch64_sys_inotify_add_watch = 27, >>> + aarch64_sys_inotify_rm_watch = 28, >>> + aarch64_sys_ioctl = 29, >>> + aarch64_sys_ioprio_set = 30, >>> + aarch64_sys_ioprio_get = 31, >>> + aarch64_sys_flock = 32, >>> + aarch64_sys_mknod = 33, >>> + aarch64_sys_mkdir = 34, >>> + aarch64_sys_unlink = 35, >>> + aarch64_sys_symlink = 36, >>> + aarch64_sys_link = 37, >>> + aarch64_sys_rename = 38, >>> + aarch64_sys_umount2 = 39, >>> + aarch64_sys_mount = 40, >>> + aarch64_sys_pivot_root = 41, >>> + aarch64_sys_nfsservctl = 42, >>> + aarch64_sys_statfs = 43, >>> + aarch64_sys_fstatfs = 44, >>> + aarch64_sys_truncate = 45, >>> + aarch64_sys_ftruncate = 46, >>> + aarch64_sys_fallocate = 47, >>> + aarch64_sys_faccess = 48, >>> + aarch64_sys_chdir = 49, >>> + aarch64_sys_fchdir = 50, >>> + aarch64_sys_chroot = 51, >>> + aarch64_sys_fchmod = 52, >>> + aarch64_sys_fchmodat = 53, >>> + aarch64_sys_fchownat = 54, >>> + aarch64_sys_fchown = 55, >>> + aarch64_sys_open = 56, >>> + aarch64_sys_close = 57, >>> + aarch64_sys_vhangup = 58, >>> + aarch64_sys_pipe2 = 59, >>> + aarch64_sys_quotactl = 60, >>> + aarch64_sys_getdents64 = 61, >>> + aarch64_sys_lseek = 62, >>> + aarch64_sys_read = 63, >>> + aarch64_sys_write = 64, >>> + aarch64_sys_readv = 65, >>> + aarch64_sys_writev = 66, >>> + aarch64_sys_pread64 = 67, >>> + aarch64_sys_pwrite64 = 68, >>> + aarch64_sys_preadv = 69, >>> + aarch64_sys_pwritev = 70, >>> + aarch64_sys_sendfile = 71, >>> + aarch64_sys_pselect6 = 72, >>> + aarch64_sys_ppoll = 73, >>> + aarch64_sys_signalfd4 = 74, >>> + aarch64_sys_vmsplice = 75, >>> + aarch64_sys_splice = 76, >>> + aarch64_sys_tee = 77, >>> + aarch64_sys_readlink = 78, >>> + aarch64_sys_fstatat = 79, >>> + aarch64_sys_fstat = 80, >>> + aarch64_sys_sync = 81, >>> + aarch64_sys_fsync = 82, >>> + aarch64_sys_fdatasync = 83, >>> + aarch64_sys_sync_file_range2 = 84, >>> + aarch64_sys_sync_file_range = 84, >>> + aarch64_sys_timerfd_create = 85, >>> + aarch64_sys_timerfd_settime = 86, >>> + aarch64_sys_timerfd_gettime = 87, >>> + aarch64_sys_utimensat = 88, >>> + aarch64_sys_acct = 89, >>> + aarch64_sys_capget = 90, >>> + aarch64_sys_capset = 91, >>> + aarch64_sys_personality = 92, >>> + aarch64_sys_exit = 93, >>> + aarch64_sys_exit_group = 94, >>> + aarch64_sys_waitid = 95, >>> + aarch64_sys_set_tid_address = 96, >>> + aarch64_sys_unshare = 97, >>> + aarch64_sys_futex = 98, >>> + aarch64_sys_set_robust_list = 99, >>> + aarch64_sys_get_robust_list = 100, >>> + aarch64_sys_nanosleep = 101, >>> + aarch64_sys_getitimer = 102, >>> + aarch64_sys_setitimer = 103, >>> + aarch64_sys_kexec_load = 104, >>> + aarch64_sys_init_module = 105, >>> + aarch64_sys_delete_module = 106, >>> + aarch64_sys_timer_create = 107, >>> + aarch64_sys_timer_gettime = 108, >>> + aarch64_sys_timer_getoverrun = 109, >>> + aarch64_sys_timer_settime = 110, >>> + aarch64_sys_timer_delete = 111, >>> + aarch64_sys_clock_settime = 112, >>> + aarch64_sys_clock_gettime = 113, >>> + aarch64_sys_clock_getres = 114, >>> + aarch64_sys_clock_nanosleep = 115, >>> + aarch64_sys_syslog = 116, >>> + aarch64_sys_ptrace = 117, >>> + aarch64_sys_sched_setparam = 118, >>> + aarch64_sys_sched_setscheduler = 119, >>> + aarch64_sys_sched_getscheduler = 120, >>> + aarch64_sys_sched_getparam = 121, >>> + aarch64_sys_sched_setaffinity = 122, >>> + aarch64_sys_sched_getaffinity = 123, >>> + aarch64_sys_sched_yield = 124, >>> + aarch64_sys_sched_get_priority_max = 125, >>> + aarch64_sys_sched_get_priority_min = 126, >>> + aarch64_sys_sched_rr_get_interval = 127, >>> + aarch64_sys_kill = 129, >>> + aarch64_sys_tkill = 130, >>> + aarch64_sys_tgkill = 131, >>> + aarch64_sys_sigaltstack = 132, >>> + aarch64_sys_rt_sigsuspend = 133, >>> + aarch64_sys_rt_sigaction = 134, >>> + aarch64_sys_rt_sigprocmask = 135, >>> + aarch64_sys_rt_sigpending = 136, >>> + aarch64_sys_rt_sigtimedwait = 137, >>> + aarch64_sys_rt_sigqueueinfo = 138, >>> + aarch64_sys_rt_sigreturn = 139, >>> + aarch64_sys_setpriority = 140, >>> + aarch64_sys_getpriority = 141, >>> + aarch64_sys_reboot = 142, >>> + aarch64_sys_setregid = 143, >>> + aarch64_sys_setgid = 144, >>> + aarch64_sys_setreuid = 145, >>> + aarch64_sys_setuid = 146, >>> + aarch64_sys_setresuid = 147, >>> + aarch64_sys_getresuid = 148, >>> + aarch64_sys_setresgid = 149, >>> + aarch64_sys_getresgid = 150, >>> + aarch64_sys_setfsuid = 151, >>> + aarch64_sys_setfsgid = 152, >>> + aarch64_sys_times = 153, >>> + aarch64_sys_setpgid = 154, >>> + aarch64_sys_getpgid = 155, >>> + aarch64_sys_getsid = 156, >>> + aarch64_sys_setsid = 157, >>> + aarch64_sys_getgroups = 158, >>> + aarch64_sys_setgroups = 159, >>> + aarch64_sys_uname = 160, >>> + aarch64_sys_sethostname = 161, >>> + aarch64_sys_setdomainname = 162, >>> + aarch64_sys_getrlimit = 163, >>> + aarch64_sys_setrlimit = 164, >>> + aarch64_sys_getrusage = 165, >>> + aarch64_sys_umask = 166, >>> + aarch64_sys_prctl = 167, >>> + aarch64_sys_getcpu = 168, >>> + aarch64_sys_gettimeofday = 169, >>> + aarch64_sys_settimeofday = 170, >>> + aarch64_sys_adjtimex = 171, >>> + aarch64_sys_getpid = 172, >>> + aarch64_sys_getppid = 173, >>> + aarch64_sys_getuid = 174, >>> + aarch64_sys_geteuid = 175, >>> + aarch64_sys_getgid = 176, >>> + aarch64_sys_getegid = 177, >>> + aarch64_sys_gettid = 178, >>> + aarch64_sys_sysinfo = 179, >>> + aarch64_sys_mq_open = 180, >>> + aarch64_sys_mq_unlink = 181, >>> + aarch64_sys_mq_timedsend = 182, >>> + aarch64_sys_mq_timedreceive = 183, >>> + aarch64_sys_mq_notify = 184, >>> + aarch64_sys_mq_getsetattr = 185, >>> + aarch64_sys_msgget = 186, >>> + aarch64_sys_msgctl = 187, >>> + aarch64_sys_msgrcv = 188, >>> + aarch64_sys_msgsnd = 189, >>> + aarch64_sys_semget = 190, >>> + aarch64_sys_semctl = 191, >>> + aarch64_sys_semtimedop = 192, >>> + aarch64_sys_semop = 193, >>> + aarch64_sys_shmget = 194, >>> + aarch64_sys_shmctl = 195, >>> + aarch64_sys_shmat = 196, >>> + aarch64_sys_shmdt = 197, >>> + aarch64_sys_socket = 198, >>> + aarch64_sys_socketpair = 199, >>> + aarch64_sys_bind = 200, >>> + aarch64_sys_listen = 201, >>> + aarch64_sys_accept = 202, >>> + aarch64_sys_connect = 203, >>> + aarch64_sys_getsockname = 204, >>> + aarch64_sys_getpeername = 205, >>> + aarch64_sys_sendto = 206, >>> + aarch64_sys_recvfrom = 207, >>> + aarch64_sys_setsockopt = 208, >>> + aarch64_sys_getsockopt = 209, >>> + aarch64_sys_shutdown = 210, >>> + aarch64_sys_sendmsg = 211, >>> + aarch64_sys_recvmsg = 212, >>> + aarch64_sys_readahead = 213, >>> + aarch64_sys_brk = 214, >>> + aarch64_sys_munmap = 215, >>> + aarch64_sys_mremap = 216, >>> + aarch64_sys_add_key = 217, >>> + aarch64_sys_request_key = 218, >>> + aarch64_sys_keyctl = 219, >>> + aarch64_sys_clone = 220, >>> + aarch64_sys_execve = 221, >>> + aarch64_sys_mmap = 222, >>> + aarch64_sys_fadvise64 = 223, >>> + aarch64_sys_swapon = 224, >>> + aarch64_sys_swapoff = 225, >>> + aarch64_sys_mprotect = 226, >>> + aarch64_sys_msync = 227, >>> + aarch64_sys_mlock = 228, >>> + aarch64_sys_munlock = 229, >>> + aarch64_sys_mlockall = 230, >>> + aarch64_sys_munlockall = 231, >>> + aarch64_sys_mincore = 232, >>> + aarch64_sys_madvise = 233, >>> + aarch64_sys_remap_file_pages = 234, >>> + aarch64_sys_mbind = 235, >>> + aarch64_sys_get_mempolicy = 236, >>> + aarch64_sys_set_mempolicy = 237, >>> + aarch64_sys_migrate_pages = 238, >>> + aarch64_sys_move_pages = 239, >>> + aarch64_sys_rt_tgsigqueueinfo = 240, >>> + aarch64_sys_perf_event_open = 241, >>> + aarch64_sys_accept4 = 242, >>> + aarch64_sys_recvmmsg = 243, >>> + aarch64_sys_wait4 = 260, >>> + aarch64_sys_prlimit64 = 261, >>> + aarch64_sys_fanotify_init = 262, >>> + aarch64_sys_fanotify_mark = 263, >>> + aarch64_sys_name_to_handle_at = 264, >>> + aarch64_sys_open_by_handle_at = 265, >>> + aarch64_sys_clock_adjtime = 266, >>> + aarch64_sys_syncfs = 267, >>> + aarch64_sys_setns = 268, >>> + aarch64_sys_sendmmsg = 269, >>> + aarch64_sys_process_vm_readv = 270, >>> + aarch64_sys_process_vm_writev = 271, >>> + aarch64_sys_kcmp = 272, >>> + aarch64_sys_finit_module = 273, >>> + aarch64_sys_sched_setattr = 274, >>> + aarch64_sys_sched_getattr = 275, >>> +}; >>> diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c >>> index 0847585..c6da25a 100644 >>> --- a/gdb/aarch64-tdep.c >>> +++ b/gdb/aarch64-tdep.c >>> @@ -2941,7 +2941,20 @@ aarch64_record_branch_except_sys (insn_decode_record *aarch64_insn_r) >>> { >>> /* Exception generation instructions. */ >>> if (insn_bits24_27 == 0x04) >>> - return AARCH64_RECORD_UNSUPPORTED; >>> + { >>> + if (!bits (aarch64_insn_r->aarch64_insn, 2, 4) && >>> + !bits (aarch64_insn_r->aarch64_insn, 21, 23) && >>> + bits (aarch64_insn_r->aarch64_insn, 0, 1) == 0x01) >>> + { >>> + ULONGEST svc_number; >>> + regcache_raw_read_unsigned (aarch64_insn_r->regcache, 8, >>> + &svc_number); >>> + return tdep->aarch64_syscall_record (aarch64_insn_r->regcache, >>> + svc_number); >>> + } >>> + else >>> + return AARCH64_RECORD_UNSUPPORTED; >>> + } >>> /* System instructions. */ >>> else if (insn_bits24_27 == 0x05 && insn_bits22_23 == 0x00) >>> { >>> diff --git a/gdb/aarch64-tdep.h b/gdb/aarch64-tdep.h >>> index 1d74ef8..25751fe 100644 >>> --- a/gdb/aarch64-tdep.h >>> +++ b/gdb/aarch64-tdep.h >>> @@ -88,6 +88,9 @@ struct gdbarch_tdep >>> struct type *vns_type; >>> struct type *vnh_type; >>> struct type *vnb_type; >>> + >>> + /* syscall record. */ >>> + int (*aarch64_syscall_record) (struct regcache *regcache, unsigned long svc_number); >>> }; >>> >>> /* AArch64 process record-replay related structures, defines etc. */ >>> diff --git a/gdb/linux-record.h b/gdb/linux-record.h >>> index 7b5218e..2649ce5 100644 >>> --- a/gdb/linux-record.h >>> +++ b/gdb/linux-record.h >>> @@ -174,6 +174,8 @@ struct linux_record_tdep >>> int arg4; >>> int arg5; >>> int arg6; >>> + int arg7; >>> + int arg8; >>> }; >>> >>> /* Enum that defines the gdb-canonical set of Linux syscall identifiers. >>> -- >>> 1.9.1 >>> >> >> >> >> -- >> Will Newton >> Toolchain Working Group, Linaro > > Ping! Kindly help me approve this patch. ping!