From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29557 invoked by alias); 18 Sep 2014 00:23:03 -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 29547 invoked by uid 89); 18 Sep 2014 00:23:02 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-ig0-f180.google.com Received: from mail-ig0-f180.google.com (HELO mail-ig0-f180.google.com) (209.85.213.180) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 18 Sep 2014 00:22:58 +0000 Received: by mail-ig0-f180.google.com with SMTP id a13so344784igq.13 for ; Wed, 17 Sep 2014 17:22:56 -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:date :message-id:subject:from:to:cc:content-type; bh=nVBSQ5JwyyktRkVQSN9iWu3hoZTaJDMskoJ8fpgXKy4=; b=mDWcTjzGHRTiP6VcMm2FUfKjaZvPJ2ddFeyqBobdH362414GLPF+TMUl1KYwjk4tqV vfaB/MSMYyNVVQeBeamPDe/WW9lhBqOvZWliUxGEigyAUPXfCPJKgELl3VveU3SQMrQQ qOXB2SOpcJ+O1wVZEttO9sOfcSolQAR6iCSZrNwbi0aMxfbvfMUgn4Lt78k6ozwfVF3v 1fClI8yaDGKEct5hUY8d40Iia29r14+yCdoNb1Wi/x4dqUoxEKVAkgkANc7sal08dwTs mpZ7HddgNNHVA0VSmYhhTxY7v5hJJOjJV9OasJ4ac2mnyFPRpIdm3OD0o+u4I3VpjiBb wqnA== X-Gm-Message-State: ALoCoQkjCY0sn7yA1FnqXygCB8B6oFXNrledRZndULqT2iM6IFKK6VRFooki7Jss4wmppxEcJ8ym MIME-Version: 1.0 X-Received: by 10.42.172.195 with SMTP id o3mr5944395icz.76.1410999776322; Wed, 17 Sep 2014 17:22:56 -0700 (PDT) Received: by 10.64.142.116 with HTTP; Wed, 17 Sep 2014 17:22:56 -0700 (PDT) In-Reply-To: <1409313190-23768-1-git-send-email-omair.javaid@linaro.org> References: <1409313190-23768-1-git-send-email-omair.javaid@linaro.org> Date: Thu, 18 Sep 2014 00:23:00 -0000 Message-ID: Subject: Re: [PATCH 5/7] Support for recording syscall on aarch64-linux From: Will Newton To: Omair Javaid Cc: "gdb-patches@sourceware.org" Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2014-09/txt/msg00606.txt.bz2 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