From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26445 invoked by alias); 18 Sep 2014 22:28:09 -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 26433 invoked by uid 89); 18 Sep 2014 22:28:08 -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-oa0-f42.google.com Received: from mail-oa0-f42.google.com (HELO mail-oa0-f42.google.com) (209.85.219.42) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 18 Sep 2014 22:28:01 +0000 Received: by mail-oa0-f42.google.com with SMTP id o6so1068256oag.15 for ; Thu, 18 Sep 2014 15:27:59 -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=wltd7r4FhWobaQOHn6Z1WZ+kGMW2m0J7aQNSb+VX/Jo=; b=EC4om+VZzUb/0in0hAXAit5GTxYE2bWUxl/pBoeFQ9ogFJ7zVEaZK4zNTAvy8cGFgx 0GjxmbiHx5Iw3CRB7rLjBOJiVJiOE4HfgDGR5819uoKb9jwwaZ8pmyXIMHg/7eySUCTY BDE+IZFz9bqJoWv2v6QZ4NeumuEdSOHKW025MkG0PTDJ2Dn74i4CRt9ztOuYGmWZ6Id/ EkUnuLEq5rOy/4HLrvh8V1e/y1GEdk9cxMKQI67LYpjM0hXuDwFd9w8eFewqaJiawLhA 9GnmKmUl/SWjHbJxkmzzBj8vhpRKPFNsOl3qLPJ0zORGnoU391d7ryK5NO9UO9xd1R/i SaPg== X-Gm-Message-State: ALoCoQmtPf+sM0Z+MIAfIC2CCV0v3XN/CTxPn/atcxRPGkdk8wrS2LzXv3OORBMpahO6roHXyBwQ X-Received: by 10.182.129.163 with SMTP id nx3mr2429671obb.7.1411079279667; Thu, 18 Sep 2014 15:27:59 -0700 (PDT) MIME-Version: 1.0 Received: by 10.182.140.40 with HTTP; Thu, 18 Sep 2014 15:27:29 -0700 (PDT) In-Reply-To: References: <1409313190-23768-1-git-send-email-omair.javaid@linaro.org> From: Omair Javaid Date: Thu, 18 Sep 2014 22:28: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-09/txt/msg00622.txt.bz2 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.