* [PATCH] This commit adds support for catching syscalls on riscv
@ 2025-08-28 22:42 timurgol007
2025-09-04 9:00 ` Timur Golubovich
0 siblings, 1 reply; 6+ messages in thread
From: timurgol007 @ 2025-08-28 22:42 UTC (permalink / raw)
To: gdb-patches; +Cc: Timur Golubovich
From: Timur Golubovich <timurgol007@gmail.com>
It affects following files:
- gdb/riscv-linux-tdep.c: a function to get syscall number.
- gdbserver/linux-riscv-low.cc: syscall trapinfo function to enable
catching syscalls on remote targets.
- gdb/syscalls/riscv-linux.xml.in: a file with syscalls, generated from
linux kernel sources using gdb/syscalls/update-linux-from-src.sh script.
- gdb/syscalls/riscv-linux.xml: a file with syscalls, patched with group
names gdb/syscalls/apply-defaults.xsl using xsltproc tool.
- gdb/syscalls/update-linux.sh: set startyear to 2025 on riscv.
- gdb/syscalls/update-linux-from-src.sh: riscv syscall table must be
generated from kernel headers.
- gdb/NEWS: catch-syscall feature is now available on riscv.
- gdb/data-directory/Makefile.in: adding file with syscalls to Makefile.
---
gdb/NEWS | 2 +
gdb/data-directory/Makefile.in | 1 +
gdb/riscv-linux-tdep.c | 26 ++
gdb/syscalls/riscv-linux.xml | 340 +++++++++++++++++++++++++
gdb/syscalls/riscv-linux.xml.in | 344 ++++++++++++++++++++++++++
gdb/syscalls/update-linux-from-src.sh | 5 +
gdb/syscalls/update-linux.sh | 3 +
gdbserver/linux-riscv-low.cc | 24 ++
8 files changed, 745 insertions(+)
create mode 100644 gdb/syscalls/riscv-linux.xml
create mode 100644 gdb/syscalls/riscv-linux.xml.in
diff --git a/gdb/NEWS b/gdb/NEWS
index db0e74a2623..3d4cf901444 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -48,6 +48,8 @@
* Add record full support for rv64gc architectures
+* The "catch syscall" command now works on riscv*-linux* targets.
+
* New commands
maintenance check psymtabs
diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
index 2ca2b8e7e5f..d7f4c988fb6 100644
--- a/gdb/data-directory/Makefile.in
+++ b/gdb/data-directory/Makefile.in
@@ -61,6 +61,7 @@ GEN_SYSCALLS_FILES = \
mips-o32-linux.xml \
ppc-linux.xml \
ppc64-linux.xml \
+ riscv-linux.xml \
s390-linux.xml \
s390x-linux.xml \
sparc-linux.xml \
diff --git a/gdb/riscv-linux-tdep.c b/gdb/riscv-linux-tdep.c
index 982273a0b9d..0a946111b9d 100644
--- a/gdb/riscv-linux-tdep.c
+++ b/gdb/riscv-linux-tdep.c
@@ -502,6 +502,28 @@ riscv_linux_get_tls_dtp_offset (struct gdbarch *gdbarch, ptid_t ptid,
return 0;
}
+/* Function to extract syscall number. */
+
+static LONGEST
+riscv_linux_get_syscall_number (struct gdbarch *gdbarch, thread_info *thread)
+{
+ struct regcache *regcache = get_thread_regcache (thread);
+ LONGEST ret;
+
+ /* Getting the system call number from the register.
+ When dealing with riscv architecture, this information
+ is stored in $a7 register. */
+ if (regcache->cooked_read (RISCV_A7_REGNUM, &ret)
+ != register_status::REG_VALID)
+ {
+ warning (_ ("Can not read a7 register"));
+ return -1;
+ }
+
+ /* The result. */
+ return ret;
+}
+
/* Initialize RISC-V Linux ABI info. */
static void
@@ -540,6 +562,10 @@ riscv_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
tdep->riscv_syscall_record = riscv_linux_syscall_record;
riscv64_linux_record_tdep_init (gdbarch, riscv_linux_record_tdep);
+
+ /* Functions for 'catch syscall'. */
+ set_gdbarch_xml_syscall_file (gdbarch, "syscalls/riscv-linux.xml");
+ set_gdbarch_get_syscall_number (gdbarch, riscv_linux_get_syscall_number);
}
/* Initialize RISC-V Linux target support. */
diff --git a/gdb/syscalls/riscv-linux.xml b/gdb/syscalls/riscv-linux.xml
new file mode 100644
index 00000000000..3578c3fcce5
--- /dev/null
+++ b/gdb/syscalls/riscv-linux.xml
@@ -0,0 +1,340 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+<!-- This file was generated using the following file:
+
+ <sys/syscall.h>
+
+ The file mentioned above belongs to the Linux Kernel. -->
+<syscalls_info>
+ <syscall name="io_setup" number="0" groups="memory"/>
+ <syscall name="io_destroy" number="1" groups="memory"/>
+ <syscall name="io_submit" number="2"/>
+ <syscall name="io_cancel" number="3"/>
+ <syscall name="io_getevents" number="4"/>
+ <syscall name="setxattr" number="5" groups="file"/>
+ <syscall name="lsetxattr" number="6" groups="file"/>
+ <syscall name="fsetxattr" number="7" groups="descriptor"/>
+ <syscall name="getxattr" number="8" groups="file"/>
+ <syscall name="lgetxattr" number="9" groups="file"/>
+ <syscall name="fgetxattr" number="10" groups="descriptor"/>
+ <syscall name="listxattr" number="11" groups="file"/>
+ <syscall name="llistxattr" number="12" groups="file"/>
+ <syscall name="flistxattr" number="13" groups="descriptor"/>
+ <syscall name="removexattr" number="14" groups="file"/>
+ <syscall name="lremovexattr" number="15" groups="file"/>
+ <syscall name="fremovexattr" number="16" groups="descriptor"/>
+ <syscall name="getcwd" number="17" groups="file"/>
+ <syscall name="lookup_dcookie" number="18"/>
+ <syscall name="eventfd2" number="19" groups="descriptor"/>
+ <syscall name="epoll_create1" number="20" groups="descriptor"/>
+ <syscall name="epoll_ctl" number="21" groups="descriptor"/>
+ <syscall name="epoll_pwait" number="22" groups="descriptor"/>
+ <syscall name="dup" number="23" groups="descriptor"/>
+ <syscall name="dup3" number="24" groups="descriptor"/>
+ <syscall name="fcntl" number="25" groups="descriptor"/>
+ <syscall name="inotify_init1" number="26" groups="descriptor"/>
+ <syscall name="inotify_add_watch" number="27" groups="descriptor,file"/>
+ <syscall name="inotify_rm_watch" number="28" groups="descriptor"/>
+ <syscall name="ioctl" number="29" groups="descriptor"/>
+ <syscall name="ioprio_set" number="30"/>
+ <syscall name="ioprio_get" number="31"/>
+ <syscall name="flock" number="32" groups="descriptor"/>
+ <syscall name="mknodat" number="33" groups="descriptor,file"/>
+ <syscall name="mkdirat" number="34" groups="descriptor,file"/>
+ <syscall name="unlinkat" number="35" groups="descriptor,file"/>
+ <syscall name="symlinkat" number="36" groups="descriptor,file"/>
+ <syscall name="linkat" number="37" groups="descriptor,file"/>
+ <syscall name="umount2" number="39" groups="file"/>
+ <syscall name="mount" number="40" groups="file"/>
+ <syscall name="pivot_root" number="41" groups="file"/>
+ <syscall name="nfsservctl" number="42"/>
+ <syscall name="statfs" number="43" groups="file"/>
+ <syscall name="fstatfs" number="44" groups="descriptor"/>
+ <syscall name="truncate" number="45" groups="file"/>
+ <syscall name="ftruncate" number="46" groups="descriptor"/>
+ <syscall name="fallocate" number="47" groups="descriptor"/>
+ <syscall name="faccessat" number="48" groups="descriptor,file"/>
+ <syscall name="chdir" number="49" groups="file"/>
+ <syscall name="fchdir" number="50" groups="descriptor"/>
+ <syscall name="chroot" number="51" groups="file"/>
+ <syscall name="fchmod" number="52" groups="descriptor"/>
+ <syscall name="fchmodat" number="53" groups="descriptor,file"/>
+ <syscall name="fchownat" number="54" groups="descriptor,file"/>
+ <syscall name="fchown" number="55" groups="descriptor"/>
+ <syscall name="openat" number="56" groups="descriptor,file"/>
+ <syscall name="close" number="57" groups="descriptor"/>
+ <syscall name="vhangup" number="58"/>
+ <syscall name="pipe2" number="59" groups="descriptor"/>
+ <syscall name="quotactl" number="60" groups="file"/>
+ <syscall name="getdents64" number="61" groups="descriptor"/>
+ <syscall name="lseek" number="62" groups="descriptor"/>
+ <syscall name="read" number="63" groups="descriptor"/>
+ <syscall name="write" number="64" groups="descriptor"/>
+ <syscall name="readv" number="65" groups="descriptor"/>
+ <syscall name="writev" number="66" groups="descriptor"/>
+ <syscall name="pread64" number="67" groups="descriptor"/>
+ <syscall name="pwrite64" number="68" groups="descriptor"/>
+ <syscall name="preadv" number="69" groups="descriptor"/>
+ <syscall name="pwritev" number="70" groups="descriptor"/>
+ <syscall name="sendfile" number="71" groups="descriptor,network"/>
+ <syscall name="pselect6" number="72" groups="descriptor"/>
+ <syscall name="ppoll" number="73" groups="descriptor"/>
+ <syscall name="signalfd4" number="74" groups="descriptor,signal"/>
+ <syscall name="vmsplice" number="75" groups="descriptor"/>
+ <syscall name="splice" number="76" groups="descriptor"/>
+ <syscall name="tee" number="77" groups="descriptor"/>
+ <syscall name="readlinkat" number="78" groups="descriptor,file"/>
+ <syscall name="newfstatat" number="79" groups="descriptor,file"/>
+ <syscall name="fstat" number="80" groups="descriptor"/>
+ <syscall name="sync" number="81"/>
+ <syscall name="fsync" number="82" groups="descriptor"/>
+ <syscall name="fdatasync" number="83" groups="descriptor"/>
+ <syscall name="sync_file_range" number="84" groups="descriptor"/>
+ <syscall name="timerfd_create" number="85" groups="descriptor"/>
+ <syscall name="timerfd_settime" number="86" groups="descriptor"/>
+ <syscall name="timerfd_gettime" number="87" groups="descriptor"/>
+ <syscall name="utimensat" number="88" groups="descriptor,file"/>
+ <syscall name="acct" number="89" groups="file"/>
+ <syscall name="capget" number="90"/>
+ <syscall name="capset" number="91"/>
+ <syscall name="personality" number="92"/>
+ <syscall name="exit" number="93" groups="process"/>
+ <syscall name="exit_group" number="94" groups="process"/>
+ <syscall name="waitid" number="95" groups="process"/>
+ <syscall name="set_tid_address" number="96"/>
+ <syscall name="unshare" number="97"/>
+ <syscall name="futex" number="98"/>
+ <syscall name="set_robust_list" number="99"/>
+ <syscall name="get_robust_list" number="100"/>
+ <syscall name="nanosleep" number="101"/>
+ <syscall name="getitimer" number="102"/>
+ <syscall name="setitimer" number="103"/>
+ <syscall name="kexec_load" number="104"/>
+ <syscall name="init_module" number="105"/>
+ <syscall name="delete_module" number="106"/>
+ <syscall name="timer_create" number="107"/>
+ <syscall name="timer_gettime" number="108"/>
+ <syscall name="timer_getoverrun" number="109"/>
+ <syscall name="timer_settime" number="110"/>
+ <syscall name="timer_delete" number="111"/>
+ <syscall name="clock_settime" number="112"/>
+ <syscall name="clock_gettime" number="113"/>
+ <syscall name="clock_getres" number="114"/>
+ <syscall name="clock_nanosleep" number="115"/>
+ <syscall name="syslog" number="116"/>
+ <syscall name="ptrace" number="117"/>
+ <syscall name="sched_setparam" number="118"/>
+ <syscall name="sched_setscheduler" number="119"/>
+ <syscall name="sched_getscheduler" number="120"/>
+ <syscall name="sched_getparam" number="121"/>
+ <syscall name="sched_setaffinity" number="122"/>
+ <syscall name="sched_getaffinity" number="123"/>
+ <syscall name="sched_yield" number="124"/>
+ <syscall name="sched_get_priority_max" number="125"/>
+ <syscall name="sched_get_priority_min" number="126"/>
+ <syscall name="sched_rr_get_interval" number="127"/>
+ <syscall name="restart_syscall" number="128"/>
+ <syscall name="kill" number="129" groups="signal,process"/>
+ <syscall name="tkill" number="130" groups="signal,process"/>
+ <syscall name="tgkill" number="131" groups="signal,process"/>
+ <syscall name="sigaltstack" number="132" groups="signal"/>
+ <syscall name="rt_sigsuspend" number="133" groups="signal"/>
+ <syscall name="rt_sigaction" number="134" groups="signal"/>
+ <syscall name="rt_sigprocmask" number="135" groups="signal"/>
+ <syscall name="rt_sigpending" number="136" groups="signal"/>
+ <syscall name="rt_sigtimedwait" number="137" groups="signal"/>
+ <syscall name="rt_sigqueueinfo" number="138" groups="signal,process"/>
+ <syscall name="rt_sigreturn" number="139" groups="signal"/>
+ <syscall name="setpriority" number="140"/>
+ <syscall name="getpriority" number="141"/>
+ <syscall name="reboot" number="142"/>
+ <syscall name="setregid" number="143"/>
+ <syscall name="setgid" number="144"/>
+ <syscall name="setreuid" number="145"/>
+ <syscall name="setuid" number="146"/>
+ <syscall name="setresuid" number="147"/>
+ <syscall name="getresuid" number="148"/>
+ <syscall name="setresgid" number="149"/>
+ <syscall name="getresgid" number="150"/>
+ <syscall name="setfsuid" number="151"/>
+ <syscall name="setfsgid" number="152"/>
+ <syscall name="times" number="153"/>
+ <syscall name="setpgid" number="154"/>
+ <syscall name="getpgid" number="155"/>
+ <syscall name="getsid" number="156"/>
+ <syscall name="setsid" number="157"/>
+ <syscall name="getgroups" number="158"/>
+ <syscall name="setgroups" number="159"/>
+ <syscall name="uname" number="160"/>
+ <syscall name="sethostname" number="161"/>
+ <syscall name="setdomainname" number="162"/>
+ <syscall name="getrlimit" number="163"/>
+ <syscall name="setrlimit" number="164"/>
+ <syscall name="getrusage" number="165"/>
+ <syscall name="umask" number="166"/>
+ <syscall name="prctl" number="167"/>
+ <syscall name="getcpu" number="168"/>
+ <syscall name="gettimeofday" number="169"/>
+ <syscall name="settimeofday" number="170"/>
+ <syscall name="adjtimex" number="171"/>
+ <syscall name="getpid" number="172"/>
+ <syscall name="getppid" number="173"/>
+ <syscall name="getuid" number="174"/>
+ <syscall name="geteuid" number="175"/>
+ <syscall name="getgid" number="176"/>
+ <syscall name="getegid" number="177"/>
+ <syscall name="gettid" number="178"/>
+ <syscall name="sysinfo" number="179"/>
+ <syscall name="mq_open" number="180" groups="descriptor"/>
+ <syscall name="mq_unlink" number="181"/>
+ <syscall name="mq_timedsend" number="182" groups="descriptor"/>
+ <syscall name="mq_timedreceive" number="183" groups="descriptor"/>
+ <syscall name="mq_notify" number="184" groups="descriptor"/>
+ <syscall name="mq_getsetattr" number="185" groups="descriptor"/>
+ <syscall name="msgget" number="186" groups="ipc"/>
+ <syscall name="msgctl" number="187" groups="ipc"/>
+ <syscall name="msgrcv" number="188" groups="ipc"/>
+ <syscall name="msgsnd" number="189" groups="ipc"/>
+ <syscall name="semget" number="190" groups="ipc"/>
+ <syscall name="semctl" number="191" groups="ipc"/>
+ <syscall name="semtimedop" number="192" groups="ipc"/>
+ <syscall name="semop" number="193" groups="ipc"/>
+ <syscall name="shmget" number="194" groups="ipc"/>
+ <syscall name="shmctl" number="195" groups="ipc"/>
+ <syscall name="shmat" number="196" groups="ipc,memory"/>
+ <syscall name="shmdt" number="197" groups="ipc,memory"/>
+ <syscall name="socket" number="198" groups="network"/>
+ <syscall name="socketpair" number="199" groups="network"/>
+ <syscall name="bind" number="200" groups="network"/>
+ <syscall name="listen" number="201" groups="network"/>
+ <syscall name="accept" number="202" groups="network"/>
+ <syscall name="connect" number="203" groups="network"/>
+ <syscall name="getsockname" number="204" groups="network"/>
+ <syscall name="getpeername" number="205" groups="network"/>
+ <syscall name="sendto" number="206" groups="network"/>
+ <syscall name="recvfrom" number="207" groups="network"/>
+ <syscall name="setsockopt" number="208" groups="network"/>
+ <syscall name="getsockopt" number="209" groups="network"/>
+ <syscall name="shutdown" number="210" groups="network"/>
+ <syscall name="sendmsg" number="211" groups="network"/>
+ <syscall name="recvmsg" number="212" groups="network"/>
+ <syscall name="readahead" number="213" groups="descriptor"/>
+ <syscall name="brk" number="214" groups="memory"/>
+ <syscall name="munmap" number="215" groups="memory"/>
+ <syscall name="mremap" number="216" groups="memory"/>
+ <syscall name="add_key" number="217"/>
+ <syscall name="request_key" number="218"/>
+ <syscall name="keyctl" number="219"/>
+ <syscall name="clone" number="220" groups="process"/>
+ <syscall name="execve" number="221" groups="file,process"/>
+ <syscall name="mmap" number="222" groups="descriptor,memory"/>
+ <syscall name="fadvise64" number="223" groups="descriptor"/>
+ <syscall name="swapon" number="224" groups="file"/>
+ <syscall name="swapoff" number="225" groups="file"/>
+ <syscall name="mprotect" number="226" groups="memory"/>
+ <syscall name="msync" number="227" groups="memory"/>
+ <syscall name="mlock" number="228" groups="memory"/>
+ <syscall name="munlock" number="229" groups="memory"/>
+ <syscall name="mlockall" number="230" groups="memory"/>
+ <syscall name="munlockall" number="231" groups="memory"/>
+ <syscall name="mincore" number="232" groups="memory"/>
+ <syscall name="madvise" number="233" groups="memory"/>
+ <syscall name="remap_file_pages" number="234" groups="memory"/>
+ <syscall name="mbind" number="235" groups="memory"/>
+ <syscall name="get_mempolicy" number="236" groups="memory"/>
+ <syscall name="set_mempolicy" number="237" groups="memory"/>
+ <syscall name="migrate_pages" number="238" groups="memory"/>
+ <syscall name="move_pages" number="239" groups="memory"/>
+ <syscall name="rt_tgsigqueueinfo" number="240" groups="process,signal"/>
+ <syscall name="perf_event_open" number="241" groups="descriptor"/>
+ <syscall name="accept4" number="242" groups="network"/>
+ <syscall name="recvmmsg" number="243" groups="network"/>
+ <syscall name="riscv_hwprobe" number="258"/>
+ <syscall name="riscv_flush_icache" number="259" groups="memory"/>
+ <syscall name="wait4" number="260" groups="process"/>
+ <syscall name="prlimit64" number="261"/>
+ <syscall name="fanotify_init" number="262" groups="descriptor"/>
+ <syscall name="fanotify_mark" number="263" groups="descriptor,file"/>
+ <syscall name="name_to_handle_at" number="264" groups="descriptor,file"/>
+ <syscall name="open_by_handle_at" number="265" groups="descriptor"/>
+ <syscall name="clock_adjtime" number="266"/>
+ <syscall name="syncfs" number="267" groups="descriptor"/>
+ <syscall name="setns" number="268" groups="descriptor"/>
+ <syscall name="sendmmsg" number="269" groups="network"/>
+ <syscall name="process_vm_readv" number="270"/>
+ <syscall name="process_vm_writev" number="271"/>
+ <syscall name="kcmp" number="272"/>
+ <syscall name="finit_module" number="273" groups="descriptor"/>
+ <syscall name="sched_setattr" number="274"/>
+ <syscall name="sched_getattr" number="275"/>
+ <syscall name="renameat2" number="276" groups="descriptor,file"/>
+ <syscall name="seccomp" number="277"/>
+ <syscall name="getrandom" number="278"/>
+ <syscall name="memfd_create" number="279" groups="descriptor"/>
+ <syscall name="bpf" number="280" groups="descriptor"/>
+ <syscall name="execveat" number="281" groups="descriptor,file,process"/>
+ <syscall name="userfaultfd" number="282" groups="descriptor"/>
+ <syscall name="membarrier" number="283"/>
+ <syscall name="mlock2" number="284" groups="memory"/>
+ <syscall name="copy_file_range" number="285" groups="descriptor"/>
+ <syscall name="preadv2" number="286" groups="descriptor"/>
+ <syscall name="pwritev2" number="287" groups="descriptor"/>
+ <syscall name="pkey_mprotect" number="288" groups="memory"/>
+ <syscall name="pkey_alloc" number="289"/>
+ <syscall name="pkey_free" number="290"/>
+ <syscall name="statx" number="291" groups="descriptor,file"/>
+ <syscall name="io_pgetevents" number="292"/>
+ <syscall name="rseq" number="293"/>
+ <syscall name="kexec_file_load" number="294" groups="descriptor"/>
+ <syscall name="pidfd_send_signal" number="424" groups="descriptor,signal,process"/>
+ <syscall name="io_uring_setup" number="425" groups="descriptor"/>
+ <syscall name="io_uring_enter" number="426" groups="descriptor,signal"/>
+ <syscall name="io_uring_register" number="427" groups="descriptor,memory"/>
+ <syscall name="open_tree" number="428" groups="descriptor,file"/>
+ <syscall name="move_mount" number="429" groups="descriptor,file"/>
+ <syscall name="fsopen" number="430" groups="descriptor"/>
+ <syscall name="fsconfig" number="431" groups="descriptor,file"/>
+ <syscall name="fsmount" number="432" groups="descriptor"/>
+ <syscall name="fspick" number="433" groups="descriptor,file"/>
+ <syscall name="pidfd_open" number="434" groups="descriptor"/>
+ <syscall name="clone3" number="435" groups="process"/>
+ <syscall name="close_range" number="436"/>
+ <syscall name="openat2" number="437" groups="descriptor,file"/>
+ <syscall name="pidfd_getfd" number="438" groups="descriptor"/>
+ <syscall name="faccessat2" number="439" groups="descriptor,file"/>
+ <syscall name="process_madvise" number="440" groups="descriptor"/>
+ <syscall name="epoll_pwait2" number="441" groups="descriptor"/>
+ <syscall name="mount_setattr" number="442" groups="descriptor,file"/>
+ <syscall name="quotactl_fd" number="443" groups="descriptor"/>
+ <syscall name="landlock_create_ruleset" number="444" groups="descriptor"/>
+ <syscall name="landlock_add_rule" number="445" groups="descriptor"/>
+ <syscall name="landlock_restrict_self" number="446" groups="descriptor"/>
+ <syscall name="memfd_secret" number="447" groups="descriptor"/>
+ <syscall name="process_mrelease" number="448" groups="descriptor"/>
+ <syscall name="futex_waitv" number="449"/>
+ <syscall name="set_mempolicy_home_node" number="450" groups="memory"/>
+ <syscall name="cachestat" number="451" groups="descriptor"/>
+ <syscall name="fchmodat2" number="452" groups="descriptor,file"/>
+ <syscall name="map_shadow_stack" number="453" groups="memory"/>
+ <syscall name="futex_wake" number="454"/>
+ <syscall name="futex_wait" number="455"/>
+ <syscall name="futex_requeue" number="456"/>
+ <syscall name="statmount" number="457"/>
+ <syscall name="listmount" number="458"/>
+ <syscall name="lsm_get_self_attr" number="459"/>
+ <syscall name="lsm_set_self_attr" number="460"/>
+ <syscall name="lsm_list_modules" number="461"/>
+ <syscall name="mseal" number="462" groups="memory"/>
+ <syscall name="setxattrat" number="463" groups="descriptor,file"/>
+ <syscall name="getxattrat" number="464" groups="descriptor,file"/>
+ <syscall name="listxattrat" number="465" groups="descriptor,file"/>
+ <syscall name="removexattrat" number="466" groups="descriptor,file"/>
+ <syscall name="open_tree_attr" number="467" groups="descriptor,file"/>
+ <syscall name="file_getattr" number="468" groups="descriptor,file"/>
+ <syscall name="file_setattr" number="469" groups="descriptor,file"/>
+</syscalls_info>
diff --git a/gdb/syscalls/riscv-linux.xml.in b/gdb/syscalls/riscv-linux.xml.in
new file mode 100644
index 00000000000..17b2b0ae2de
--- /dev/null
+++ b/gdb/syscalls/riscv-linux.xml.in
@@ -0,0 +1,344 @@
+<?xml version="1.0"?>
+<!-- Copyright (C) 2025 Free Software Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+ are permitted in any medium without royalty provided the copyright
+ notice and this notice are preserved. -->
+
+<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
+
+<!-- This file was generated using the following file:
+
+ <sys/syscall.h>
+
+ The file mentioned above belongs to the Linux Kernel. -->
+
+
+<syscalls_info>
+ <syscall name="io_setup" number="0"/>
+ <syscall name="io_destroy" number="1"/>
+ <syscall name="io_submit" number="2"/>
+ <syscall name="io_cancel" number="3"/>
+ <syscall name="io_getevents" number="4"/>
+ <syscall name="setxattr" number="5"/>
+ <syscall name="lsetxattr" number="6"/>
+ <syscall name="fsetxattr" number="7"/>
+ <syscall name="getxattr" number="8"/>
+ <syscall name="lgetxattr" number="9"/>
+ <syscall name="fgetxattr" number="10"/>
+ <syscall name="listxattr" number="11"/>
+ <syscall name="llistxattr" number="12"/>
+ <syscall name="flistxattr" number="13"/>
+ <syscall name="removexattr" number="14"/>
+ <syscall name="lremovexattr" number="15"/>
+ <syscall name="fremovexattr" number="16"/>
+ <syscall name="getcwd" number="17"/>
+ <syscall name="lookup_dcookie" number="18"/>
+ <syscall name="eventfd2" number="19"/>
+ <syscall name="epoll_create1" number="20"/>
+ <syscall name="epoll_ctl" number="21"/>
+ <syscall name="epoll_pwait" number="22"/>
+ <syscall name="dup" number="23"/>
+ <syscall name="dup3" number="24"/>
+ <syscall name="fcntl" number="25"/>
+ <syscall name="inotify_init1" number="26"/>
+ <syscall name="inotify_add_watch" number="27"/>
+ <syscall name="inotify_rm_watch" number="28"/>
+ <syscall name="ioctl" number="29"/>
+ <syscall name="ioprio_set" number="30"/>
+ <syscall name="ioprio_get" number="31"/>
+ <syscall name="flock" number="32"/>
+ <syscall name="mknodat" number="33"/>
+ <syscall name="mkdirat" number="34"/>
+ <syscall name="unlinkat" number="35"/>
+ <syscall name="symlinkat" number="36"/>
+ <syscall name="linkat" number="37"/>
+ <syscall name="umount2" number="39"/>
+ <syscall name="mount" number="40"/>
+ <syscall name="pivot_root" number="41"/>
+ <syscall name="nfsservctl" number="42"/>
+ <syscall name="statfs" number="43"/>
+ <syscall name="fstatfs" number="44"/>
+ <syscall name="truncate" number="45"/>
+ <syscall name="ftruncate" number="46"/>
+ <syscall name="fallocate" number="47"/>
+ <syscall name="faccessat" number="48"/>
+ <syscall name="chdir" number="49"/>
+ <syscall name="fchdir" number="50"/>
+ <syscall name="chroot" number="51"/>
+ <syscall name="fchmod" number="52"/>
+ <syscall name="fchmodat" number="53"/>
+ <syscall name="fchownat" number="54"/>
+ <syscall name="fchown" number="55"/>
+ <syscall name="openat" number="56"/>
+ <syscall name="close" number="57"/>
+ <syscall name="vhangup" number="58"/>
+ <syscall name="pipe2" number="59"/>
+ <syscall name="quotactl" number="60"/>
+ <syscall name="getdents64" number="61"/>
+ <syscall name="lseek" number="62"/>
+ <syscall name="read" number="63"/>
+ <syscall name="write" number="64"/>
+ <syscall name="readv" number="65"/>
+ <syscall name="writev" number="66"/>
+ <syscall name="pread64" number="67"/>
+ <syscall name="pwrite64" number="68"/>
+ <syscall name="preadv" number="69"/>
+ <syscall name="pwritev" number="70"/>
+ <syscall name="sendfile" number="71"/>
+ <syscall name="pselect6" number="72"/>
+ <syscall name="ppoll" number="73"/>
+ <syscall name="signalfd4" number="74"/>
+ <syscall name="vmsplice" number="75"/>
+ <syscall name="splice" number="76"/>
+ <syscall name="tee" number="77"/>
+ <syscall name="readlinkat" number="78"/>
+ <syscall name="newfstatat" number="79"/>
+ <syscall name="fstat" number="80"/>
+ <syscall name="sync" number="81"/>
+ <syscall name="fsync" number="82"/>
+ <syscall name="fdatasync" number="83"/>
+ <syscall name="sync_file_range" number="84"/>
+ <syscall name="timerfd_create" number="85"/>
+ <syscall name="timerfd_settime" number="86"/>
+ <syscall name="timerfd_gettime" number="87"/>
+ <syscall name="utimensat" number="88"/>
+ <syscall name="acct" number="89"/>
+ <syscall name="capget" number="90"/>
+ <syscall name="capset" number="91"/>
+ <syscall name="personality" number="92"/>
+ <syscall name="exit" number="93"/>
+ <syscall name="exit_group" number="94"/>
+ <syscall name="waitid" number="95"/>
+ <syscall name="set_tid_address" number="96"/>
+ <syscall name="unshare" number="97"/>
+ <syscall name="futex" number="98"/>
+ <syscall name="set_robust_list" number="99"/>
+ <syscall name="get_robust_list" number="100"/>
+ <syscall name="nanosleep" number="101"/>
+ <syscall name="getitimer" number="102"/>
+ <syscall name="setitimer" number="103"/>
+ <syscall name="kexec_load" number="104"/>
+ <syscall name="init_module" number="105"/>
+ <syscall name="delete_module" number="106"/>
+ <syscall name="timer_create" number="107"/>
+ <syscall name="timer_gettime" number="108"/>
+ <syscall name="timer_getoverrun" number="109"/>
+ <syscall name="timer_settime" number="110"/>
+ <syscall name="timer_delete" number="111"/>
+ <syscall name="clock_settime" number="112"/>
+ <syscall name="clock_gettime" number="113"/>
+ <syscall name="clock_getres" number="114"/>
+ <syscall name="clock_nanosleep" number="115"/>
+ <syscall name="syslog" number="116"/>
+ <syscall name="ptrace" number="117"/>
+ <syscall name="sched_setparam" number="118"/>
+ <syscall name="sched_setscheduler" number="119"/>
+ <syscall name="sched_getscheduler" number="120"/>
+ <syscall name="sched_getparam" number="121"/>
+ <syscall name="sched_setaffinity" number="122"/>
+ <syscall name="sched_getaffinity" number="123"/>
+ <syscall name="sched_yield" number="124"/>
+ <syscall name="sched_get_priority_max" number="125"/>
+ <syscall name="sched_get_priority_min" number="126"/>
+ <syscall name="sched_rr_get_interval" number="127"/>
+ <syscall name="restart_syscall" number="128"/>
+ <syscall name="kill" number="129"/>
+ <syscall name="tkill" number="130"/>
+ <syscall name="tgkill" number="131"/>
+ <syscall name="sigaltstack" number="132"/>
+ <syscall name="rt_sigsuspend" number="133"/>
+ <syscall name="rt_sigaction" number="134"/>
+ <syscall name="rt_sigprocmask" number="135"/>
+ <syscall name="rt_sigpending" number="136"/>
+ <syscall name="rt_sigtimedwait" number="137"/>
+ <syscall name="rt_sigqueueinfo" number="138"/>
+ <syscall name="rt_sigreturn" number="139"/>
+ <syscall name="setpriority" number="140"/>
+ <syscall name="getpriority" number="141"/>
+ <syscall name="reboot" number="142"/>
+ <syscall name="setregid" number="143"/>
+ <syscall name="setgid" number="144"/>
+ <syscall name="setreuid" number="145"/>
+ <syscall name="setuid" number="146"/>
+ <syscall name="setresuid" number="147"/>
+ <syscall name="getresuid" number="148"/>
+ <syscall name="setresgid" number="149"/>
+ <syscall name="getresgid" number="150"/>
+ <syscall name="setfsuid" number="151"/>
+ <syscall name="setfsgid" number="152"/>
+ <syscall name="times" number="153"/>
+ <syscall name="setpgid" number="154"/>
+ <syscall name="getpgid" number="155"/>
+ <syscall name="getsid" number="156"/>
+ <syscall name="setsid" number="157"/>
+ <syscall name="getgroups" number="158"/>
+ <syscall name="setgroups" number="159"/>
+ <syscall name="uname" number="160"/>
+ <syscall name="sethostname" number="161"/>
+ <syscall name="setdomainname" number="162"/>
+ <syscall name="getrlimit" number="163"/>
+ <syscall name="setrlimit" number="164"/>
+ <syscall name="getrusage" number="165"/>
+ <syscall name="umask" number="166"/>
+ <syscall name="prctl" number="167"/>
+ <syscall name="getcpu" number="168"/>
+ <syscall name="gettimeofday" number="169"/>
+ <syscall name="settimeofday" number="170"/>
+ <syscall name="adjtimex" number="171"/>
+ <syscall name="getpid" number="172"/>
+ <syscall name="getppid" number="173"/>
+ <syscall name="getuid" number="174"/>
+ <syscall name="geteuid" number="175"/>
+ <syscall name="getgid" number="176"/>
+ <syscall name="getegid" number="177"/>
+ <syscall name="gettid" number="178"/>
+ <syscall name="sysinfo" number="179"/>
+ <syscall name="mq_open" number="180"/>
+ <syscall name="mq_unlink" number="181"/>
+ <syscall name="mq_timedsend" number="182"/>
+ <syscall name="mq_timedreceive" number="183"/>
+ <syscall name="mq_notify" number="184"/>
+ <syscall name="mq_getsetattr" number="185"/>
+ <syscall name="msgget" number="186"/>
+ <syscall name="msgctl" number="187"/>
+ <syscall name="msgrcv" number="188"/>
+ <syscall name="msgsnd" number="189"/>
+ <syscall name="semget" number="190"/>
+ <syscall name="semctl" number="191"/>
+ <syscall name="semtimedop" number="192"/>
+ <syscall name="semop" number="193"/>
+ <syscall name="shmget" number="194"/>
+ <syscall name="shmctl" number="195"/>
+ <syscall name="shmat" number="196"/>
+ <syscall name="shmdt" number="197"/>
+ <syscall name="socket" number="198"/>
+ <syscall name="socketpair" number="199"/>
+ <syscall name="bind" number="200"/>
+ <syscall name="listen" number="201"/>
+ <syscall name="accept" number="202"/>
+ <syscall name="connect" number="203"/>
+ <syscall name="getsockname" number="204"/>
+ <syscall name="getpeername" number="205"/>
+ <syscall name="sendto" number="206"/>
+ <syscall name="recvfrom" number="207"/>
+ <syscall name="setsockopt" number="208"/>
+ <syscall name="getsockopt" number="209"/>
+ <syscall name="shutdown" number="210"/>
+ <syscall name="sendmsg" number="211"/>
+ <syscall name="recvmsg" number="212"/>
+ <syscall name="readahead" number="213"/>
+ <syscall name="brk" number="214"/>
+ <syscall name="munmap" number="215"/>
+ <syscall name="mremap" number="216"/>
+ <syscall name="add_key" number="217"/>
+ <syscall name="request_key" number="218"/>
+ <syscall name="keyctl" number="219"/>
+ <syscall name="clone" number="220"/>
+ <syscall name="execve" number="221"/>
+ <syscall name="mmap" number="222"/>
+ <syscall name="fadvise64" number="223"/>
+ <syscall name="swapon" number="224"/>
+ <syscall name="swapoff" number="225"/>
+ <syscall name="mprotect" number="226"/>
+ <syscall name="msync" number="227"/>
+ <syscall name="mlock" number="228"/>
+ <syscall name="munlock" number="229"/>
+ <syscall name="mlockall" number="230"/>
+ <syscall name="munlockall" number="231"/>
+ <syscall name="mincore" number="232"/>
+ <syscall name="madvise" number="233"/>
+ <syscall name="remap_file_pages" number="234"/>
+ <syscall name="mbind" number="235"/>
+ <syscall name="get_mempolicy" number="236"/>
+ <syscall name="set_mempolicy" number="237"/>
+ <syscall name="migrate_pages" number="238"/>
+ <syscall name="move_pages" number="239"/>
+ <syscall name="rt_tgsigqueueinfo" number="240"/>
+ <syscall name="perf_event_open" number="241"/>
+ <syscall name="accept4" number="242"/>
+ <syscall name="recvmmsg" number="243"/>
+ <syscall name="riscv_hwprobe" number="258"/>
+ <syscall name="riscv_flush_icache" number="259"/>
+ <syscall name="wait4" number="260"/>
+ <syscall name="prlimit64" number="261"/>
+ <syscall name="fanotify_init" number="262"/>
+ <syscall name="fanotify_mark" number="263"/>
+ <syscall name="name_to_handle_at" number="264"/>
+ <syscall name="open_by_handle_at" number="265"/>
+ <syscall name="clock_adjtime" number="266"/>
+ <syscall name="syncfs" number="267"/>
+ <syscall name="setns" number="268"/>
+ <syscall name="sendmmsg" number="269"/>
+ <syscall name="process_vm_readv" number="270"/>
+ <syscall name="process_vm_writev" number="271"/>
+ <syscall name="kcmp" number="272"/>
+ <syscall name="finit_module" number="273"/>
+ <syscall name="sched_setattr" number="274"/>
+ <syscall name="sched_getattr" number="275"/>
+ <syscall name="renameat2" number="276"/>
+ <syscall name="seccomp" number="277"/>
+ <syscall name="getrandom" number="278"/>
+ <syscall name="memfd_create" number="279"/>
+ <syscall name="bpf" number="280"/>
+ <syscall name="execveat" number="281"/>
+ <syscall name="userfaultfd" number="282"/>
+ <syscall name="membarrier" number="283"/>
+ <syscall name="mlock2" number="284"/>
+ <syscall name="copy_file_range" number="285"/>
+ <syscall name="preadv2" number="286"/>
+ <syscall name="pwritev2" number="287"/>
+ <syscall name="pkey_mprotect" number="288"/>
+ <syscall name="pkey_alloc" number="289"/>
+ <syscall name="pkey_free" number="290"/>
+ <syscall name="statx" number="291"/>
+ <syscall name="io_pgetevents" number="292"/>
+ <syscall name="rseq" number="293"/>
+ <syscall name="kexec_file_load" number="294"/>
+ <syscall name="pidfd_send_signal" number="424"/>
+ <syscall name="io_uring_setup" number="425"/>
+ <syscall name="io_uring_enter" number="426"/>
+ <syscall name="io_uring_register" number="427"/>
+ <syscall name="open_tree" number="428"/>
+ <syscall name="move_mount" number="429"/>
+ <syscall name="fsopen" number="430"/>
+ <syscall name="fsconfig" number="431"/>
+ <syscall name="fsmount" number="432"/>
+ <syscall name="fspick" number="433"/>
+ <syscall name="pidfd_open" number="434"/>
+ <syscall name="clone3" number="435"/>
+ <syscall name="close_range" number="436"/>
+ <syscall name="openat2" number="437"/>
+ <syscall name="pidfd_getfd" number="438"/>
+ <syscall name="faccessat2" number="439"/>
+ <syscall name="process_madvise" number="440"/>
+ <syscall name="epoll_pwait2" number="441"/>
+ <syscall name="mount_setattr" number="442"/>
+ <syscall name="quotactl_fd" number="443"/>
+ <syscall name="landlock_create_ruleset" number="444"/>
+ <syscall name="landlock_add_rule" number="445"/>
+ <syscall name="landlock_restrict_self" number="446"/>
+ <syscall name="memfd_secret" number="447"/>
+ <syscall name="process_mrelease" number="448"/>
+ <syscall name="futex_waitv" number="449"/>
+ <syscall name="set_mempolicy_home_node" number="450"/>
+ <syscall name="cachestat" number="451"/>
+ <syscall name="fchmodat2" number="452"/>
+ <syscall name="map_shadow_stack" number="453"/>
+ <syscall name="futex_wake" number="454"/>
+ <syscall name="futex_wait" number="455"/>
+ <syscall name="futex_requeue" number="456"/>
+ <syscall name="statmount" number="457"/>
+ <syscall name="listmount" number="458"/>
+ <syscall name="lsm_get_self_attr" number="459"/>
+ <syscall name="lsm_set_self_attr" number="460"/>
+ <syscall name="lsm_list_modules" number="461"/>
+ <syscall name="mseal" number="462"/>
+ <syscall name="setxattrat" number="463"/>
+ <syscall name="getxattrat" number="464"/>
+ <syscall name="listxattrat" number="465"/>
+ <syscall name="removexattrat" number="466"/>
+ <syscall name="open_tree_attr" number="467"/>
+ <syscall name="file_getattr" number="468"/>
+ <syscall name="file_setattr" number="469"/>
+</syscalls_info>
diff --git a/gdb/syscalls/update-linux-from-src.sh b/gdb/syscalls/update-linux-from-src.sh
index ea06c133242..26c38f6c531 100755
--- a/gdb/syscalls/update-linux-from-src.sh
+++ b/gdb/syscalls/update-linux-from-src.sh
@@ -325,6 +325,11 @@ regen ()
gen_from_kernel_headers "$f" arm64
return
;;
+ riscv-linux.xml.in)
+ # No syscall.tbl.
+ gen_from_kernel_headers "$f" riscv
+ return
+ ;;
arm-linux.xml.in)
t="arch/arm/tools/syscall.tbl"
h="arch/arm/include/uapi/asm/unistd.h"
diff --git a/gdb/syscalls/update-linux.sh b/gdb/syscalls/update-linux.sh
index 107ce05b4e8..cbc8a9d82d5 100755
--- a/gdb/syscalls/update-linux.sh
+++ b/gdb/syscalls/update-linux.sh
@@ -40,6 +40,9 @@ case "$f" in
*aarch64-linux.xml.in)
startyear=2015
;;
+ *riscv-linux.xml.in)
+ startyear=2025
+ ;;
esac
year=$(date +%Y)
diff --git a/gdbserver/linux-riscv-low.cc b/gdbserver/linux-riscv-low.cc
index 8c742f406a2..f70ed597051 100644
--- a/gdbserver/linux-riscv-low.cc
+++ b/gdbserver/linux-riscv-low.cc
@@ -58,6 +58,10 @@ protected:
void low_set_pc (regcache *regcache, CORE_ADDR newpc) override;
bool low_breakpoint_at (CORE_ADDR pc) override;
+
+ bool low_supports_catch_syscall () override;
+
+ void low_get_syscall_trapinfo (regcache *regcache, int *sysno) override;
};
/* The singleton target ops object. */
@@ -78,6 +82,26 @@ riscv_target::low_cannot_store_register (int regno)
"is not implemented by the target");
}
+/* Implementation of linux target ops method "low_supports_catch_syscall". */
+
+bool
+riscv_target::low_supports_catch_syscall ()
+{
+ return true;
+}
+
+/* Implementation of linux target ops method "low_get_syscall_trapinfo". */
+
+void
+riscv_target::low_get_syscall_trapinfo (regcache *regcache, int *sysno)
+{
+ LONGEST l_sysno;
+
+ /* The content of a register. */
+ collect_register_by_name (regcache, "a7", &l_sysno);
+ *sysno = (int)l_sysno;
+}
+
/* Implementation of linux target ops method "low_arch_setup". */
void
--
2.34.1
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH] This commit adds support for catching syscalls on riscv
2025-08-28 22:42 [PATCH] This commit adds support for catching syscalls on riscv timurgol007
@ 2025-09-04 9:00 ` Timur Golubovich
2025-09-04 9:23 ` Eli Zaretskii
0 siblings, 1 reply; 6+ messages in thread
From: Timur Golubovich @ 2025-09-04 9:00 UTC (permalink / raw)
To: gdb-patches
Hi!
A week has passed, so I am pinging.
Apart from the generated files, this patch is actually quite simple
due to the simplicity of the riscv architecture.
I also prepared another patch that would generate
riscv-canonicalize-syscall-gen.c not from glibc sources,
but from the generated riscv-linux.xml.in file. I also have an idea to
use this logic for all architectures that
support record-syscall. At least for those who have an xml file with syscalls.
On Fri, Aug 29, 2025 at 1:42 AM timurgol007 <timurgol007@gmail.com> wrote:
>
> From: Timur Golubovich <timurgol007@gmail.com>
>
> It affects following files:
> - gdb/riscv-linux-tdep.c: a function to get syscall number.
> - gdbserver/linux-riscv-low.cc: syscall trapinfo function to enable
> catching syscalls on remote targets.
> - gdb/syscalls/riscv-linux.xml.in: a file with syscalls, generated from
> linux kernel sources using gdb/syscalls/update-linux-from-src.sh script.
> - gdb/syscalls/riscv-linux.xml: a file with syscalls, patched with group
> names gdb/syscalls/apply-defaults.xsl using xsltproc tool.
> - gdb/syscalls/update-linux.sh: set startyear to 2025 on riscv.
> - gdb/syscalls/update-linux-from-src.sh: riscv syscall table must be
> generated from kernel headers.
> - gdb/NEWS: catch-syscall feature is now available on riscv.
> - gdb/data-directory/Makefile.in: adding file with syscalls to Makefile.
> ---
> gdb/NEWS | 2 +
> gdb/data-directory/Makefile.in | 1 +
> gdb/riscv-linux-tdep.c | 26 ++
> gdb/syscalls/riscv-linux.xml | 340 +++++++++++++++++++++++++
> gdb/syscalls/riscv-linux.xml.in | 344 ++++++++++++++++++++++++++
> gdb/syscalls/update-linux-from-src.sh | 5 +
> gdb/syscalls/update-linux.sh | 3 +
> gdbserver/linux-riscv-low.cc | 24 ++
> 8 files changed, 745 insertions(+)
> create mode 100644 gdb/syscalls/riscv-linux.xml
> create mode 100644 gdb/syscalls/riscv-linux.xml.in
>
> diff --git a/gdb/NEWS b/gdb/NEWS
> index db0e74a2623..3d4cf901444 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -48,6 +48,8 @@
>
> * Add record full support for rv64gc architectures
>
> +* The "catch syscall" command now works on riscv*-linux* targets.
> +
> * New commands
>
> maintenance check psymtabs
> diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
> index 2ca2b8e7e5f..d7f4c988fb6 100644
> --- a/gdb/data-directory/Makefile.in
> +++ b/gdb/data-directory/Makefile.in
> @@ -61,6 +61,7 @@ GEN_SYSCALLS_FILES = \
> mips-o32-linux.xml \
> ppc-linux.xml \
> ppc64-linux.xml \
> + riscv-linux.xml \
> s390-linux.xml \
> s390x-linux.xml \
> sparc-linux.xml \
> diff --git a/gdb/riscv-linux-tdep.c b/gdb/riscv-linux-tdep.c
> index 982273a0b9d..0a946111b9d 100644
> --- a/gdb/riscv-linux-tdep.c
> +++ b/gdb/riscv-linux-tdep.c
> @@ -502,6 +502,28 @@ riscv_linux_get_tls_dtp_offset (struct gdbarch *gdbarch, ptid_t ptid,
> return 0;
> }
>
> +/* Function to extract syscall number. */
> +
> +static LONGEST
> +riscv_linux_get_syscall_number (struct gdbarch *gdbarch, thread_info *thread)
> +{
> + struct regcache *regcache = get_thread_regcache (thread);
> + LONGEST ret;
> +
> + /* Getting the system call number from the register.
> + When dealing with riscv architecture, this information
> + is stored in $a7 register. */
> + if (regcache->cooked_read (RISCV_A7_REGNUM, &ret)
> + != register_status::REG_VALID)
> + {
> + warning (_ ("Can not read a7 register"));
> + return -1;
> + }
> +
> + /* The result. */
> + return ret;
> +}
> +
> /* Initialize RISC-V Linux ABI info. */
>
> static void
> @@ -540,6 +562,10 @@ riscv_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
> tdep->riscv_syscall_record = riscv_linux_syscall_record;
>
> riscv64_linux_record_tdep_init (gdbarch, riscv_linux_record_tdep);
> +
> + /* Functions for 'catch syscall'. */
> + set_gdbarch_xml_syscall_file (gdbarch, "syscalls/riscv-linux.xml");
> + set_gdbarch_get_syscall_number (gdbarch, riscv_linux_get_syscall_number);
> }
>
> /* Initialize RISC-V Linux target support. */
> diff --git a/gdb/syscalls/riscv-linux.xml b/gdb/syscalls/riscv-linux.xml
> new file mode 100644
> index 00000000000..3578c3fcce5
> --- /dev/null
> +++ b/gdb/syscalls/riscv-linux.xml
> @@ -0,0 +1,340 @@
> +<?xml version="1.0"?>
> +<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
> +<!-- Copyright (C) 2025 Free Software Foundation, Inc.
> +
> + Copying and distribution of this file, with or without modification,
> + are permitted in any medium without royalty provided the copyright
> + notice and this notice are preserved. -->
> +<!-- This file was generated using the following file:
> +
> + <sys/syscall.h>
> +
> + The file mentioned above belongs to the Linux Kernel. -->
> +<syscalls_info>
> + <syscall name="io_setup" number="0" groups="memory"/>
> + <syscall name="io_destroy" number="1" groups="memory"/>
> + <syscall name="io_submit" number="2"/>
> + <syscall name="io_cancel" number="3"/>
> + <syscall name="io_getevents" number="4"/>
> + <syscall name="setxattr" number="5" groups="file"/>
> + <syscall name="lsetxattr" number="6" groups="file"/>
> + <syscall name="fsetxattr" number="7" groups="descriptor"/>
> + <syscall name="getxattr" number="8" groups="file"/>
> + <syscall name="lgetxattr" number="9" groups="file"/>
> + <syscall name="fgetxattr" number="10" groups="descriptor"/>
> + <syscall name="listxattr" number="11" groups="file"/>
> + <syscall name="llistxattr" number="12" groups="file"/>
> + <syscall name="flistxattr" number="13" groups="descriptor"/>
> + <syscall name="removexattr" number="14" groups="file"/>
> + <syscall name="lremovexattr" number="15" groups="file"/>
> + <syscall name="fremovexattr" number="16" groups="descriptor"/>
> + <syscall name="getcwd" number="17" groups="file"/>
> + <syscall name="lookup_dcookie" number="18"/>
> + <syscall name="eventfd2" number="19" groups="descriptor"/>
> + <syscall name="epoll_create1" number="20" groups="descriptor"/>
> + <syscall name="epoll_ctl" number="21" groups="descriptor"/>
> + <syscall name="epoll_pwait" number="22" groups="descriptor"/>
> + <syscall name="dup" number="23" groups="descriptor"/>
> + <syscall name="dup3" number="24" groups="descriptor"/>
> + <syscall name="fcntl" number="25" groups="descriptor"/>
> + <syscall name="inotify_init1" number="26" groups="descriptor"/>
> + <syscall name="inotify_add_watch" number="27" groups="descriptor,file"/>
> + <syscall name="inotify_rm_watch" number="28" groups="descriptor"/>
> + <syscall name="ioctl" number="29" groups="descriptor"/>
> + <syscall name="ioprio_set" number="30"/>
> + <syscall name="ioprio_get" number="31"/>
> + <syscall name="flock" number="32" groups="descriptor"/>
> + <syscall name="mknodat" number="33" groups="descriptor,file"/>
> + <syscall name="mkdirat" number="34" groups="descriptor,file"/>
> + <syscall name="unlinkat" number="35" groups="descriptor,file"/>
> + <syscall name="symlinkat" number="36" groups="descriptor,file"/>
> + <syscall name="linkat" number="37" groups="descriptor,file"/>
> + <syscall name="umount2" number="39" groups="file"/>
> + <syscall name="mount" number="40" groups="file"/>
> + <syscall name="pivot_root" number="41" groups="file"/>
> + <syscall name="nfsservctl" number="42"/>
> + <syscall name="statfs" number="43" groups="file"/>
> + <syscall name="fstatfs" number="44" groups="descriptor"/>
> + <syscall name="truncate" number="45" groups="file"/>
> + <syscall name="ftruncate" number="46" groups="descriptor"/>
> + <syscall name="fallocate" number="47" groups="descriptor"/>
> + <syscall name="faccessat" number="48" groups="descriptor,file"/>
> + <syscall name="chdir" number="49" groups="file"/>
> + <syscall name="fchdir" number="50" groups="descriptor"/>
> + <syscall name="chroot" number="51" groups="file"/>
> + <syscall name="fchmod" number="52" groups="descriptor"/>
> + <syscall name="fchmodat" number="53" groups="descriptor,file"/>
> + <syscall name="fchownat" number="54" groups="descriptor,file"/>
> + <syscall name="fchown" number="55" groups="descriptor"/>
> + <syscall name="openat" number="56" groups="descriptor,file"/>
> + <syscall name="close" number="57" groups="descriptor"/>
> + <syscall name="vhangup" number="58"/>
> + <syscall name="pipe2" number="59" groups="descriptor"/>
> + <syscall name="quotactl" number="60" groups="file"/>
> + <syscall name="getdents64" number="61" groups="descriptor"/>
> + <syscall name="lseek" number="62" groups="descriptor"/>
> + <syscall name="read" number="63" groups="descriptor"/>
> + <syscall name="write" number="64" groups="descriptor"/>
> + <syscall name="readv" number="65" groups="descriptor"/>
> + <syscall name="writev" number="66" groups="descriptor"/>
> + <syscall name="pread64" number="67" groups="descriptor"/>
> + <syscall name="pwrite64" number="68" groups="descriptor"/>
> + <syscall name="preadv" number="69" groups="descriptor"/>
> + <syscall name="pwritev" number="70" groups="descriptor"/>
> + <syscall name="sendfile" number="71" groups="descriptor,network"/>
> + <syscall name="pselect6" number="72" groups="descriptor"/>
> + <syscall name="ppoll" number="73" groups="descriptor"/>
> + <syscall name="signalfd4" number="74" groups="descriptor,signal"/>
> + <syscall name="vmsplice" number="75" groups="descriptor"/>
> + <syscall name="splice" number="76" groups="descriptor"/>
> + <syscall name="tee" number="77" groups="descriptor"/>
> + <syscall name="readlinkat" number="78" groups="descriptor,file"/>
> + <syscall name="newfstatat" number="79" groups="descriptor,file"/>
> + <syscall name="fstat" number="80" groups="descriptor"/>
> + <syscall name="sync" number="81"/>
> + <syscall name="fsync" number="82" groups="descriptor"/>
> + <syscall name="fdatasync" number="83" groups="descriptor"/>
> + <syscall name="sync_file_range" number="84" groups="descriptor"/>
> + <syscall name="timerfd_create" number="85" groups="descriptor"/>
> + <syscall name="timerfd_settime" number="86" groups="descriptor"/>
> + <syscall name="timerfd_gettime" number="87" groups="descriptor"/>
> + <syscall name="utimensat" number="88" groups="descriptor,file"/>
> + <syscall name="acct" number="89" groups="file"/>
> + <syscall name="capget" number="90"/>
> + <syscall name="capset" number="91"/>
> + <syscall name="personality" number="92"/>
> + <syscall name="exit" number="93" groups="process"/>
> + <syscall name="exit_group" number="94" groups="process"/>
> + <syscall name="waitid" number="95" groups="process"/>
> + <syscall name="set_tid_address" number="96"/>
> + <syscall name="unshare" number="97"/>
> + <syscall name="futex" number="98"/>
> + <syscall name="set_robust_list" number="99"/>
> + <syscall name="get_robust_list" number="100"/>
> + <syscall name="nanosleep" number="101"/>
> + <syscall name="getitimer" number="102"/>
> + <syscall name="setitimer" number="103"/>
> + <syscall name="kexec_load" number="104"/>
> + <syscall name="init_module" number="105"/>
> + <syscall name="delete_module" number="106"/>
> + <syscall name="timer_create" number="107"/>
> + <syscall name="timer_gettime" number="108"/>
> + <syscall name="timer_getoverrun" number="109"/>
> + <syscall name="timer_settime" number="110"/>
> + <syscall name="timer_delete" number="111"/>
> + <syscall name="clock_settime" number="112"/>
> + <syscall name="clock_gettime" number="113"/>
> + <syscall name="clock_getres" number="114"/>
> + <syscall name="clock_nanosleep" number="115"/>
> + <syscall name="syslog" number="116"/>
> + <syscall name="ptrace" number="117"/>
> + <syscall name="sched_setparam" number="118"/>
> + <syscall name="sched_setscheduler" number="119"/>
> + <syscall name="sched_getscheduler" number="120"/>
> + <syscall name="sched_getparam" number="121"/>
> + <syscall name="sched_setaffinity" number="122"/>
> + <syscall name="sched_getaffinity" number="123"/>
> + <syscall name="sched_yield" number="124"/>
> + <syscall name="sched_get_priority_max" number="125"/>
> + <syscall name="sched_get_priority_min" number="126"/>
> + <syscall name="sched_rr_get_interval" number="127"/>
> + <syscall name="restart_syscall" number="128"/>
> + <syscall name="kill" number="129" groups="signal,process"/>
> + <syscall name="tkill" number="130" groups="signal,process"/>
> + <syscall name="tgkill" number="131" groups="signal,process"/>
> + <syscall name="sigaltstack" number="132" groups="signal"/>
> + <syscall name="rt_sigsuspend" number="133" groups="signal"/>
> + <syscall name="rt_sigaction" number="134" groups="signal"/>
> + <syscall name="rt_sigprocmask" number="135" groups="signal"/>
> + <syscall name="rt_sigpending" number="136" groups="signal"/>
> + <syscall name="rt_sigtimedwait" number="137" groups="signal"/>
> + <syscall name="rt_sigqueueinfo" number="138" groups="signal,process"/>
> + <syscall name="rt_sigreturn" number="139" groups="signal"/>
> + <syscall name="setpriority" number="140"/>
> + <syscall name="getpriority" number="141"/>
> + <syscall name="reboot" number="142"/>
> + <syscall name="setregid" number="143"/>
> + <syscall name="setgid" number="144"/>
> + <syscall name="setreuid" number="145"/>
> + <syscall name="setuid" number="146"/>
> + <syscall name="setresuid" number="147"/>
> + <syscall name="getresuid" number="148"/>
> + <syscall name="setresgid" number="149"/>
> + <syscall name="getresgid" number="150"/>
> + <syscall name="setfsuid" number="151"/>
> + <syscall name="setfsgid" number="152"/>
> + <syscall name="times" number="153"/>
> + <syscall name="setpgid" number="154"/>
> + <syscall name="getpgid" number="155"/>
> + <syscall name="getsid" number="156"/>
> + <syscall name="setsid" number="157"/>
> + <syscall name="getgroups" number="158"/>
> + <syscall name="setgroups" number="159"/>
> + <syscall name="uname" number="160"/>
> + <syscall name="sethostname" number="161"/>
> + <syscall name="setdomainname" number="162"/>
> + <syscall name="getrlimit" number="163"/>
> + <syscall name="setrlimit" number="164"/>
> + <syscall name="getrusage" number="165"/>
> + <syscall name="umask" number="166"/>
> + <syscall name="prctl" number="167"/>
> + <syscall name="getcpu" number="168"/>
> + <syscall name="gettimeofday" number="169"/>
> + <syscall name="settimeofday" number="170"/>
> + <syscall name="adjtimex" number="171"/>
> + <syscall name="getpid" number="172"/>
> + <syscall name="getppid" number="173"/>
> + <syscall name="getuid" number="174"/>
> + <syscall name="geteuid" number="175"/>
> + <syscall name="getgid" number="176"/>
> + <syscall name="getegid" number="177"/>
> + <syscall name="gettid" number="178"/>
> + <syscall name="sysinfo" number="179"/>
> + <syscall name="mq_open" number="180" groups="descriptor"/>
> + <syscall name="mq_unlink" number="181"/>
> + <syscall name="mq_timedsend" number="182" groups="descriptor"/>
> + <syscall name="mq_timedreceive" number="183" groups="descriptor"/>
> + <syscall name="mq_notify" number="184" groups="descriptor"/>
> + <syscall name="mq_getsetattr" number="185" groups="descriptor"/>
> + <syscall name="msgget" number="186" groups="ipc"/>
> + <syscall name="msgctl" number="187" groups="ipc"/>
> + <syscall name="msgrcv" number="188" groups="ipc"/>
> + <syscall name="msgsnd" number="189" groups="ipc"/>
> + <syscall name="semget" number="190" groups="ipc"/>
> + <syscall name="semctl" number="191" groups="ipc"/>
> + <syscall name="semtimedop" number="192" groups="ipc"/>
> + <syscall name="semop" number="193" groups="ipc"/>
> + <syscall name="shmget" number="194" groups="ipc"/>
> + <syscall name="shmctl" number="195" groups="ipc"/>
> + <syscall name="shmat" number="196" groups="ipc,memory"/>
> + <syscall name="shmdt" number="197" groups="ipc,memory"/>
> + <syscall name="socket" number="198" groups="network"/>
> + <syscall name="socketpair" number="199" groups="network"/>
> + <syscall name="bind" number="200" groups="network"/>
> + <syscall name="listen" number="201" groups="network"/>
> + <syscall name="accept" number="202" groups="network"/>
> + <syscall name="connect" number="203" groups="network"/>
> + <syscall name="getsockname" number="204" groups="network"/>
> + <syscall name="getpeername" number="205" groups="network"/>
> + <syscall name="sendto" number="206" groups="network"/>
> + <syscall name="recvfrom" number="207" groups="network"/>
> + <syscall name="setsockopt" number="208" groups="network"/>
> + <syscall name="getsockopt" number="209" groups="network"/>
> + <syscall name="shutdown" number="210" groups="network"/>
> + <syscall name="sendmsg" number="211" groups="network"/>
> + <syscall name="recvmsg" number="212" groups="network"/>
> + <syscall name="readahead" number="213" groups="descriptor"/>
> + <syscall name="brk" number="214" groups="memory"/>
> + <syscall name="munmap" number="215" groups="memory"/>
> + <syscall name="mremap" number="216" groups="memory"/>
> + <syscall name="add_key" number="217"/>
> + <syscall name="request_key" number="218"/>
> + <syscall name="keyctl" number="219"/>
> + <syscall name="clone" number="220" groups="process"/>
> + <syscall name="execve" number="221" groups="file,process"/>
> + <syscall name="mmap" number="222" groups="descriptor,memory"/>
> + <syscall name="fadvise64" number="223" groups="descriptor"/>
> + <syscall name="swapon" number="224" groups="file"/>
> + <syscall name="swapoff" number="225" groups="file"/>
> + <syscall name="mprotect" number="226" groups="memory"/>
> + <syscall name="msync" number="227" groups="memory"/>
> + <syscall name="mlock" number="228" groups="memory"/>
> + <syscall name="munlock" number="229" groups="memory"/>
> + <syscall name="mlockall" number="230" groups="memory"/>
> + <syscall name="munlockall" number="231" groups="memory"/>
> + <syscall name="mincore" number="232" groups="memory"/>
> + <syscall name="madvise" number="233" groups="memory"/>
> + <syscall name="remap_file_pages" number="234" groups="memory"/>
> + <syscall name="mbind" number="235" groups="memory"/>
> + <syscall name="get_mempolicy" number="236" groups="memory"/>
> + <syscall name="set_mempolicy" number="237" groups="memory"/>
> + <syscall name="migrate_pages" number="238" groups="memory"/>
> + <syscall name="move_pages" number="239" groups="memory"/>
> + <syscall name="rt_tgsigqueueinfo" number="240" groups="process,signal"/>
> + <syscall name="perf_event_open" number="241" groups="descriptor"/>
> + <syscall name="accept4" number="242" groups="network"/>
> + <syscall name="recvmmsg" number="243" groups="network"/>
> + <syscall name="riscv_hwprobe" number="258"/>
> + <syscall name="riscv_flush_icache" number="259" groups="memory"/>
> + <syscall name="wait4" number="260" groups="process"/>
> + <syscall name="prlimit64" number="261"/>
> + <syscall name="fanotify_init" number="262" groups="descriptor"/>
> + <syscall name="fanotify_mark" number="263" groups="descriptor,file"/>
> + <syscall name="name_to_handle_at" number="264" groups="descriptor,file"/>
> + <syscall name="open_by_handle_at" number="265" groups="descriptor"/>
> + <syscall name="clock_adjtime" number="266"/>
> + <syscall name="syncfs" number="267" groups="descriptor"/>
> + <syscall name="setns" number="268" groups="descriptor"/>
> + <syscall name="sendmmsg" number="269" groups="network"/>
> + <syscall name="process_vm_readv" number="270"/>
> + <syscall name="process_vm_writev" number="271"/>
> + <syscall name="kcmp" number="272"/>
> + <syscall name="finit_module" number="273" groups="descriptor"/>
> + <syscall name="sched_setattr" number="274"/>
> + <syscall name="sched_getattr" number="275"/>
> + <syscall name="renameat2" number="276" groups="descriptor,file"/>
> + <syscall name="seccomp" number="277"/>
> + <syscall name="getrandom" number="278"/>
> + <syscall name="memfd_create" number="279" groups="descriptor"/>
> + <syscall name="bpf" number="280" groups="descriptor"/>
> + <syscall name="execveat" number="281" groups="descriptor,file,process"/>
> + <syscall name="userfaultfd" number="282" groups="descriptor"/>
> + <syscall name="membarrier" number="283"/>
> + <syscall name="mlock2" number="284" groups="memory"/>
> + <syscall name="copy_file_range" number="285" groups="descriptor"/>
> + <syscall name="preadv2" number="286" groups="descriptor"/>
> + <syscall name="pwritev2" number="287" groups="descriptor"/>
> + <syscall name="pkey_mprotect" number="288" groups="memory"/>
> + <syscall name="pkey_alloc" number="289"/>
> + <syscall name="pkey_free" number="290"/>
> + <syscall name="statx" number="291" groups="descriptor,file"/>
> + <syscall name="io_pgetevents" number="292"/>
> + <syscall name="rseq" number="293"/>
> + <syscall name="kexec_file_load" number="294" groups="descriptor"/>
> + <syscall name="pidfd_send_signal" number="424" groups="descriptor,signal,process"/>
> + <syscall name="io_uring_setup" number="425" groups="descriptor"/>
> + <syscall name="io_uring_enter" number="426" groups="descriptor,signal"/>
> + <syscall name="io_uring_register" number="427" groups="descriptor,memory"/>
> + <syscall name="open_tree" number="428" groups="descriptor,file"/>
> + <syscall name="move_mount" number="429" groups="descriptor,file"/>
> + <syscall name="fsopen" number="430" groups="descriptor"/>
> + <syscall name="fsconfig" number="431" groups="descriptor,file"/>
> + <syscall name="fsmount" number="432" groups="descriptor"/>
> + <syscall name="fspick" number="433" groups="descriptor,file"/>
> + <syscall name="pidfd_open" number="434" groups="descriptor"/>
> + <syscall name="clone3" number="435" groups="process"/>
> + <syscall name="close_range" number="436"/>
> + <syscall name="openat2" number="437" groups="descriptor,file"/>
> + <syscall name="pidfd_getfd" number="438" groups="descriptor"/>
> + <syscall name="faccessat2" number="439" groups="descriptor,file"/>
> + <syscall name="process_madvise" number="440" groups="descriptor"/>
> + <syscall name="epoll_pwait2" number="441" groups="descriptor"/>
> + <syscall name="mount_setattr" number="442" groups="descriptor,file"/>
> + <syscall name="quotactl_fd" number="443" groups="descriptor"/>
> + <syscall name="landlock_create_ruleset" number="444" groups="descriptor"/>
> + <syscall name="landlock_add_rule" number="445" groups="descriptor"/>
> + <syscall name="landlock_restrict_self" number="446" groups="descriptor"/>
> + <syscall name="memfd_secret" number="447" groups="descriptor"/>
> + <syscall name="process_mrelease" number="448" groups="descriptor"/>
> + <syscall name="futex_waitv" number="449"/>
> + <syscall name="set_mempolicy_home_node" number="450" groups="memory"/>
> + <syscall name="cachestat" number="451" groups="descriptor"/>
> + <syscall name="fchmodat2" number="452" groups="descriptor,file"/>
> + <syscall name="map_shadow_stack" number="453" groups="memory"/>
> + <syscall name="futex_wake" number="454"/>
> + <syscall name="futex_wait" number="455"/>
> + <syscall name="futex_requeue" number="456"/>
> + <syscall name="statmount" number="457"/>
> + <syscall name="listmount" number="458"/>
> + <syscall name="lsm_get_self_attr" number="459"/>
> + <syscall name="lsm_set_self_attr" number="460"/>
> + <syscall name="lsm_list_modules" number="461"/>
> + <syscall name="mseal" number="462" groups="memory"/>
> + <syscall name="setxattrat" number="463" groups="descriptor,file"/>
> + <syscall name="getxattrat" number="464" groups="descriptor,file"/>
> + <syscall name="listxattrat" number="465" groups="descriptor,file"/>
> + <syscall name="removexattrat" number="466" groups="descriptor,file"/>
> + <syscall name="open_tree_attr" number="467" groups="descriptor,file"/>
> + <syscall name="file_getattr" number="468" groups="descriptor,file"/>
> + <syscall name="file_setattr" number="469" groups="descriptor,file"/>
> +</syscalls_info>
> diff --git a/gdb/syscalls/riscv-linux.xml.in b/gdb/syscalls/riscv-linux.xml.in
> new file mode 100644
> index 00000000000..17b2b0ae2de
> --- /dev/null
> +++ b/gdb/syscalls/riscv-linux.xml.in
> @@ -0,0 +1,344 @@
> +<?xml version="1.0"?>
> +<!-- Copyright (C) 2025 Free Software Foundation, Inc.
> +
> + Copying and distribution of this file, with or without modification,
> + are permitted in any medium without royalty provided the copyright
> + notice and this notice are preserved. -->
> +
> +<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
> +
> +<!-- This file was generated using the following file:
> +
> + <sys/syscall.h>
> +
> + The file mentioned above belongs to the Linux Kernel. -->
> +
> +
> +<syscalls_info>
> + <syscall name="io_setup" number="0"/>
> + <syscall name="io_destroy" number="1"/>
> + <syscall name="io_submit" number="2"/>
> + <syscall name="io_cancel" number="3"/>
> + <syscall name="io_getevents" number="4"/>
> + <syscall name="setxattr" number="5"/>
> + <syscall name="lsetxattr" number="6"/>
> + <syscall name="fsetxattr" number="7"/>
> + <syscall name="getxattr" number="8"/>
> + <syscall name="lgetxattr" number="9"/>
> + <syscall name="fgetxattr" number="10"/>
> + <syscall name="listxattr" number="11"/>
> + <syscall name="llistxattr" number="12"/>
> + <syscall name="flistxattr" number="13"/>
> + <syscall name="removexattr" number="14"/>
> + <syscall name="lremovexattr" number="15"/>
> + <syscall name="fremovexattr" number="16"/>
> + <syscall name="getcwd" number="17"/>
> + <syscall name="lookup_dcookie" number="18"/>
> + <syscall name="eventfd2" number="19"/>
> + <syscall name="epoll_create1" number="20"/>
> + <syscall name="epoll_ctl" number="21"/>
> + <syscall name="epoll_pwait" number="22"/>
> + <syscall name="dup" number="23"/>
> + <syscall name="dup3" number="24"/>
> + <syscall name="fcntl" number="25"/>
> + <syscall name="inotify_init1" number="26"/>
> + <syscall name="inotify_add_watch" number="27"/>
> + <syscall name="inotify_rm_watch" number="28"/>
> + <syscall name="ioctl" number="29"/>
> + <syscall name="ioprio_set" number="30"/>
> + <syscall name="ioprio_get" number="31"/>
> + <syscall name="flock" number="32"/>
> + <syscall name="mknodat" number="33"/>
> + <syscall name="mkdirat" number="34"/>
> + <syscall name="unlinkat" number="35"/>
> + <syscall name="symlinkat" number="36"/>
> + <syscall name="linkat" number="37"/>
> + <syscall name="umount2" number="39"/>
> + <syscall name="mount" number="40"/>
> + <syscall name="pivot_root" number="41"/>
> + <syscall name="nfsservctl" number="42"/>
> + <syscall name="statfs" number="43"/>
> + <syscall name="fstatfs" number="44"/>
> + <syscall name="truncate" number="45"/>
> + <syscall name="ftruncate" number="46"/>
> + <syscall name="fallocate" number="47"/>
> + <syscall name="faccessat" number="48"/>
> + <syscall name="chdir" number="49"/>
> + <syscall name="fchdir" number="50"/>
> + <syscall name="chroot" number="51"/>
> + <syscall name="fchmod" number="52"/>
> + <syscall name="fchmodat" number="53"/>
> + <syscall name="fchownat" number="54"/>
> + <syscall name="fchown" number="55"/>
> + <syscall name="openat" number="56"/>
> + <syscall name="close" number="57"/>
> + <syscall name="vhangup" number="58"/>
> + <syscall name="pipe2" number="59"/>
> + <syscall name="quotactl" number="60"/>
> + <syscall name="getdents64" number="61"/>
> + <syscall name="lseek" number="62"/>
> + <syscall name="read" number="63"/>
> + <syscall name="write" number="64"/>
> + <syscall name="readv" number="65"/>
> + <syscall name="writev" number="66"/>
> + <syscall name="pread64" number="67"/>
> + <syscall name="pwrite64" number="68"/>
> + <syscall name="preadv" number="69"/>
> + <syscall name="pwritev" number="70"/>
> + <syscall name="sendfile" number="71"/>
> + <syscall name="pselect6" number="72"/>
> + <syscall name="ppoll" number="73"/>
> + <syscall name="signalfd4" number="74"/>
> + <syscall name="vmsplice" number="75"/>
> + <syscall name="splice" number="76"/>
> + <syscall name="tee" number="77"/>
> + <syscall name="readlinkat" number="78"/>
> + <syscall name="newfstatat" number="79"/>
> + <syscall name="fstat" number="80"/>
> + <syscall name="sync" number="81"/>
> + <syscall name="fsync" number="82"/>
> + <syscall name="fdatasync" number="83"/>
> + <syscall name="sync_file_range" number="84"/>
> + <syscall name="timerfd_create" number="85"/>
> + <syscall name="timerfd_settime" number="86"/>
> + <syscall name="timerfd_gettime" number="87"/>
> + <syscall name="utimensat" number="88"/>
> + <syscall name="acct" number="89"/>
> + <syscall name="capget" number="90"/>
> + <syscall name="capset" number="91"/>
> + <syscall name="personality" number="92"/>
> + <syscall name="exit" number="93"/>
> + <syscall name="exit_group" number="94"/>
> + <syscall name="waitid" number="95"/>
> + <syscall name="set_tid_address" number="96"/>
> + <syscall name="unshare" number="97"/>
> + <syscall name="futex" number="98"/>
> + <syscall name="set_robust_list" number="99"/>
> + <syscall name="get_robust_list" number="100"/>
> + <syscall name="nanosleep" number="101"/>
> + <syscall name="getitimer" number="102"/>
> + <syscall name="setitimer" number="103"/>
> + <syscall name="kexec_load" number="104"/>
> + <syscall name="init_module" number="105"/>
> + <syscall name="delete_module" number="106"/>
> + <syscall name="timer_create" number="107"/>
> + <syscall name="timer_gettime" number="108"/>
> + <syscall name="timer_getoverrun" number="109"/>
> + <syscall name="timer_settime" number="110"/>
> + <syscall name="timer_delete" number="111"/>
> + <syscall name="clock_settime" number="112"/>
> + <syscall name="clock_gettime" number="113"/>
> + <syscall name="clock_getres" number="114"/>
> + <syscall name="clock_nanosleep" number="115"/>
> + <syscall name="syslog" number="116"/>
> + <syscall name="ptrace" number="117"/>
> + <syscall name="sched_setparam" number="118"/>
> + <syscall name="sched_setscheduler" number="119"/>
> + <syscall name="sched_getscheduler" number="120"/>
> + <syscall name="sched_getparam" number="121"/>
> + <syscall name="sched_setaffinity" number="122"/>
> + <syscall name="sched_getaffinity" number="123"/>
> + <syscall name="sched_yield" number="124"/>
> + <syscall name="sched_get_priority_max" number="125"/>
> + <syscall name="sched_get_priority_min" number="126"/>
> + <syscall name="sched_rr_get_interval" number="127"/>
> + <syscall name="restart_syscall" number="128"/>
> + <syscall name="kill" number="129"/>
> + <syscall name="tkill" number="130"/>
> + <syscall name="tgkill" number="131"/>
> + <syscall name="sigaltstack" number="132"/>
> + <syscall name="rt_sigsuspend" number="133"/>
> + <syscall name="rt_sigaction" number="134"/>
> + <syscall name="rt_sigprocmask" number="135"/>
> + <syscall name="rt_sigpending" number="136"/>
> + <syscall name="rt_sigtimedwait" number="137"/>
> + <syscall name="rt_sigqueueinfo" number="138"/>
> + <syscall name="rt_sigreturn" number="139"/>
> + <syscall name="setpriority" number="140"/>
> + <syscall name="getpriority" number="141"/>
> + <syscall name="reboot" number="142"/>
> + <syscall name="setregid" number="143"/>
> + <syscall name="setgid" number="144"/>
> + <syscall name="setreuid" number="145"/>
> + <syscall name="setuid" number="146"/>
> + <syscall name="setresuid" number="147"/>
> + <syscall name="getresuid" number="148"/>
> + <syscall name="setresgid" number="149"/>
> + <syscall name="getresgid" number="150"/>
> + <syscall name="setfsuid" number="151"/>
> + <syscall name="setfsgid" number="152"/>
> + <syscall name="times" number="153"/>
> + <syscall name="setpgid" number="154"/>
> + <syscall name="getpgid" number="155"/>
> + <syscall name="getsid" number="156"/>
> + <syscall name="setsid" number="157"/>
> + <syscall name="getgroups" number="158"/>
> + <syscall name="setgroups" number="159"/>
> + <syscall name="uname" number="160"/>
> + <syscall name="sethostname" number="161"/>
> + <syscall name="setdomainname" number="162"/>
> + <syscall name="getrlimit" number="163"/>
> + <syscall name="setrlimit" number="164"/>
> + <syscall name="getrusage" number="165"/>
> + <syscall name="umask" number="166"/>
> + <syscall name="prctl" number="167"/>
> + <syscall name="getcpu" number="168"/>
> + <syscall name="gettimeofday" number="169"/>
> + <syscall name="settimeofday" number="170"/>
> + <syscall name="adjtimex" number="171"/>
> + <syscall name="getpid" number="172"/>
> + <syscall name="getppid" number="173"/>
> + <syscall name="getuid" number="174"/>
> + <syscall name="geteuid" number="175"/>
> + <syscall name="getgid" number="176"/>
> + <syscall name="getegid" number="177"/>
> + <syscall name="gettid" number="178"/>
> + <syscall name="sysinfo" number="179"/>
> + <syscall name="mq_open" number="180"/>
> + <syscall name="mq_unlink" number="181"/>
> + <syscall name="mq_timedsend" number="182"/>
> + <syscall name="mq_timedreceive" number="183"/>
> + <syscall name="mq_notify" number="184"/>
> + <syscall name="mq_getsetattr" number="185"/>
> + <syscall name="msgget" number="186"/>
> + <syscall name="msgctl" number="187"/>
> + <syscall name="msgrcv" number="188"/>
> + <syscall name="msgsnd" number="189"/>
> + <syscall name="semget" number="190"/>
> + <syscall name="semctl" number="191"/>
> + <syscall name="semtimedop" number="192"/>
> + <syscall name="semop" number="193"/>
> + <syscall name="shmget" number="194"/>
> + <syscall name="shmctl" number="195"/>
> + <syscall name="shmat" number="196"/>
> + <syscall name="shmdt" number="197"/>
> + <syscall name="socket" number="198"/>
> + <syscall name="socketpair" number="199"/>
> + <syscall name="bind" number="200"/>
> + <syscall name="listen" number="201"/>
> + <syscall name="accept" number="202"/>
> + <syscall name="connect" number="203"/>
> + <syscall name="getsockname" number="204"/>
> + <syscall name="getpeername" number="205"/>
> + <syscall name="sendto" number="206"/>
> + <syscall name="recvfrom" number="207"/>
> + <syscall name="setsockopt" number="208"/>
> + <syscall name="getsockopt" number="209"/>
> + <syscall name="shutdown" number="210"/>
> + <syscall name="sendmsg" number="211"/>
> + <syscall name="recvmsg" number="212"/>
> + <syscall name="readahead" number="213"/>
> + <syscall name="brk" number="214"/>
> + <syscall name="munmap" number="215"/>
> + <syscall name="mremap" number="216"/>
> + <syscall name="add_key" number="217"/>
> + <syscall name="request_key" number="218"/>
> + <syscall name="keyctl" number="219"/>
> + <syscall name="clone" number="220"/>
> + <syscall name="execve" number="221"/>
> + <syscall name="mmap" number="222"/>
> + <syscall name="fadvise64" number="223"/>
> + <syscall name="swapon" number="224"/>
> + <syscall name="swapoff" number="225"/>
> + <syscall name="mprotect" number="226"/>
> + <syscall name="msync" number="227"/>
> + <syscall name="mlock" number="228"/>
> + <syscall name="munlock" number="229"/>
> + <syscall name="mlockall" number="230"/>
> + <syscall name="munlockall" number="231"/>
> + <syscall name="mincore" number="232"/>
> + <syscall name="madvise" number="233"/>
> + <syscall name="remap_file_pages" number="234"/>
> + <syscall name="mbind" number="235"/>
> + <syscall name="get_mempolicy" number="236"/>
> + <syscall name="set_mempolicy" number="237"/>
> + <syscall name="migrate_pages" number="238"/>
> + <syscall name="move_pages" number="239"/>
> + <syscall name="rt_tgsigqueueinfo" number="240"/>
> + <syscall name="perf_event_open" number="241"/>
> + <syscall name="accept4" number="242"/>
> + <syscall name="recvmmsg" number="243"/>
> + <syscall name="riscv_hwprobe" number="258"/>
> + <syscall name="riscv_flush_icache" number="259"/>
> + <syscall name="wait4" number="260"/>
> + <syscall name="prlimit64" number="261"/>
> + <syscall name="fanotify_init" number="262"/>
> + <syscall name="fanotify_mark" number="263"/>
> + <syscall name="name_to_handle_at" number="264"/>
> + <syscall name="open_by_handle_at" number="265"/>
> + <syscall name="clock_adjtime" number="266"/>
> + <syscall name="syncfs" number="267"/>
> + <syscall name="setns" number="268"/>
> + <syscall name="sendmmsg" number="269"/>
> + <syscall name="process_vm_readv" number="270"/>
> + <syscall name="process_vm_writev" number="271"/>
> + <syscall name="kcmp" number="272"/>
> + <syscall name="finit_module" number="273"/>
> + <syscall name="sched_setattr" number="274"/>
> + <syscall name="sched_getattr" number="275"/>
> + <syscall name="renameat2" number="276"/>
> + <syscall name="seccomp" number="277"/>
> + <syscall name="getrandom" number="278"/>
> + <syscall name="memfd_create" number="279"/>
> + <syscall name="bpf" number="280"/>
> + <syscall name="execveat" number="281"/>
> + <syscall name="userfaultfd" number="282"/>
> + <syscall name="membarrier" number="283"/>
> + <syscall name="mlock2" number="284"/>
> + <syscall name="copy_file_range" number="285"/>
> + <syscall name="preadv2" number="286"/>
> + <syscall name="pwritev2" number="287"/>
> + <syscall name="pkey_mprotect" number="288"/>
> + <syscall name="pkey_alloc" number="289"/>
> + <syscall name="pkey_free" number="290"/>
> + <syscall name="statx" number="291"/>
> + <syscall name="io_pgetevents" number="292"/>
> + <syscall name="rseq" number="293"/>
> + <syscall name="kexec_file_load" number="294"/>
> + <syscall name="pidfd_send_signal" number="424"/>
> + <syscall name="io_uring_setup" number="425"/>
> + <syscall name="io_uring_enter" number="426"/>
> + <syscall name="io_uring_register" number="427"/>
> + <syscall name="open_tree" number="428"/>
> + <syscall name="move_mount" number="429"/>
> + <syscall name="fsopen" number="430"/>
> + <syscall name="fsconfig" number="431"/>
> + <syscall name="fsmount" number="432"/>
> + <syscall name="fspick" number="433"/>
> + <syscall name="pidfd_open" number="434"/>
> + <syscall name="clone3" number="435"/>
> + <syscall name="close_range" number="436"/>
> + <syscall name="openat2" number="437"/>
> + <syscall name="pidfd_getfd" number="438"/>
> + <syscall name="faccessat2" number="439"/>
> + <syscall name="process_madvise" number="440"/>
> + <syscall name="epoll_pwait2" number="441"/>
> + <syscall name="mount_setattr" number="442"/>
> + <syscall name="quotactl_fd" number="443"/>
> + <syscall name="landlock_create_ruleset" number="444"/>
> + <syscall name="landlock_add_rule" number="445"/>
> + <syscall name="landlock_restrict_self" number="446"/>
> + <syscall name="memfd_secret" number="447"/>
> + <syscall name="process_mrelease" number="448"/>
> + <syscall name="futex_waitv" number="449"/>
> + <syscall name="set_mempolicy_home_node" number="450"/>
> + <syscall name="cachestat" number="451"/>
> + <syscall name="fchmodat2" number="452"/>
> + <syscall name="map_shadow_stack" number="453"/>
> + <syscall name="futex_wake" number="454"/>
> + <syscall name="futex_wait" number="455"/>
> + <syscall name="futex_requeue" number="456"/>
> + <syscall name="statmount" number="457"/>
> + <syscall name="listmount" number="458"/>
> + <syscall name="lsm_get_self_attr" number="459"/>
> + <syscall name="lsm_set_self_attr" number="460"/>
> + <syscall name="lsm_list_modules" number="461"/>
> + <syscall name="mseal" number="462"/>
> + <syscall name="setxattrat" number="463"/>
> + <syscall name="getxattrat" number="464"/>
> + <syscall name="listxattrat" number="465"/>
> + <syscall name="removexattrat" number="466"/>
> + <syscall name="open_tree_attr" number="467"/>
> + <syscall name="file_getattr" number="468"/>
> + <syscall name="file_setattr" number="469"/>
> +</syscalls_info>
> diff --git a/gdb/syscalls/update-linux-from-src.sh b/gdb/syscalls/update-linux-from-src.sh
> index ea06c133242..26c38f6c531 100755
> --- a/gdb/syscalls/update-linux-from-src.sh
> +++ b/gdb/syscalls/update-linux-from-src.sh
> @@ -325,6 +325,11 @@ regen ()
> gen_from_kernel_headers "$f" arm64
> return
> ;;
> + riscv-linux.xml.in)
> + # No syscall.tbl.
> + gen_from_kernel_headers "$f" riscv
> + return
> + ;;
> arm-linux.xml.in)
> t="arch/arm/tools/syscall.tbl"
> h="arch/arm/include/uapi/asm/unistd.h"
> diff --git a/gdb/syscalls/update-linux.sh b/gdb/syscalls/update-linux.sh
> index 107ce05b4e8..cbc8a9d82d5 100755
> --- a/gdb/syscalls/update-linux.sh
> +++ b/gdb/syscalls/update-linux.sh
> @@ -40,6 +40,9 @@ case "$f" in
> *aarch64-linux.xml.in)
> startyear=2015
> ;;
> + *riscv-linux.xml.in)
> + startyear=2025
> + ;;
> esac
>
> year=$(date +%Y)
> diff --git a/gdbserver/linux-riscv-low.cc b/gdbserver/linux-riscv-low.cc
> index 8c742f406a2..f70ed597051 100644
> --- a/gdbserver/linux-riscv-low.cc
> +++ b/gdbserver/linux-riscv-low.cc
> @@ -58,6 +58,10 @@ protected:
> void low_set_pc (regcache *regcache, CORE_ADDR newpc) override;
>
> bool low_breakpoint_at (CORE_ADDR pc) override;
> +
> + bool low_supports_catch_syscall () override;
> +
> + void low_get_syscall_trapinfo (regcache *regcache, int *sysno) override;
> };
>
> /* The singleton target ops object. */
> @@ -78,6 +82,26 @@ riscv_target::low_cannot_store_register (int regno)
> "is not implemented by the target");
> }
>
> +/* Implementation of linux target ops method "low_supports_catch_syscall". */
> +
> +bool
> +riscv_target::low_supports_catch_syscall ()
> +{
> + return true;
> +}
> +
> +/* Implementation of linux target ops method "low_get_syscall_trapinfo". */
> +
> +void
> +riscv_target::low_get_syscall_trapinfo (regcache *regcache, int *sysno)
> +{
> + LONGEST l_sysno;
> +
> + /* The content of a register. */
> + collect_register_by_name (regcache, "a7", &l_sysno);
> + *sysno = (int)l_sysno;
> +}
> +
> /* Implementation of linux target ops method "low_arch_setup". */
>
> void
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH] This commit adds support for catching syscalls on riscv
2025-09-04 9:00 ` Timur Golubovich
@ 2025-09-04 9:23 ` Eli Zaretskii
2025-09-04 9:29 ` Timur Golubovich
0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2025-09-04 9:23 UTC (permalink / raw)
To: Timur Golubovich; +Cc: gdb-patches
> From: Timur Golubovich <timurgol007@gmail.com>
> Date: Thu, 4 Sep 2025 12:00:56 +0300
>
> Hi!
> A week has passed, so I am pinging.
Sorry for missing you OP. The NEWS part is okay.
Reviewed-By: Eli Zaretskii <eliz@gnu.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] This commit adds support for catching syscalls on riscv
2025-09-04 9:23 ` Eli Zaretskii
@ 2025-09-04 9:29 ` Timur Golubovich
2025-09-04 10:01 ` Eli Zaretskii
0 siblings, 1 reply; 6+ messages in thread
From: Timur Golubovich @ 2025-09-04 9:29 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: gdb-patches
Thank you for such a quick response.
Then, can I push this patch now?
On Thu, Sep 4, 2025 at 12:23 PM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Timur Golubovich <timurgol007@gmail.com>
> > Date: Thu, 4 Sep 2025 12:00:56 +0300
> >
> > Hi!
> > A week has passed, so I am pinging.
>
> Sorry for missing you OP. The NEWS part is okay.
>
> Reviewed-By: Eli Zaretskii <eliz@gnu.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] This commit adds support for catching syscalls on riscv
2025-09-04 9:29 ` Timur Golubovich
@ 2025-09-04 10:01 ` Eli Zaretskii
2025-09-08 13:37 ` Fwd: " Timur Golubovich
0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2025-09-04 10:01 UTC (permalink / raw)
To: Timur Golubovich; +Cc: gdb-patches
> From: Timur Golubovich <timurgol007@gmail.com>
> Date: Thu, 4 Sep 2025 12:29:19 +0300
> Cc: gdb-patches@sourceware.org
>
> Thank you for such a quick response.
> Then, can I push this patch now?
Only if the rest of the patch was approved by the responsible
maintainers (I don't think that happened yet). I only approved the
NEWS part of the patch.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Fwd: [PATCH] This commit adds support for catching syscalls on riscv
2025-09-04 10:01 ` Eli Zaretskii
@ 2025-09-08 13:37 ` Timur Golubovich
0 siblings, 0 replies; 6+ messages in thread
From: Timur Golubovich @ 2025-09-08 13:37 UTC (permalink / raw)
To: Andrew Burgess, gdb-patches
Hi Andrew!
Can you please look at this patch from the side of functionality?
---------- Forwarded message ---------
From: Eli Zaretskii <eliz@gnu.org>
Date: Thu, Sep 4, 2025 at 1:01 PM
Subject: Re: [PATCH] This commit adds support for catching syscalls on riscv
To: Timur Golubovich <timurgol007@gmail.com>
Cc: <gdb-patches@sourceware.org>
> From: Timur Golubovich <timurgol007@gmail.com>
> Date: Thu, 4 Sep 2025 12:29:19 +0300
> Cc: gdb-patches@sourceware.org
>
> Thank you for such a quick response.
> Then, can I push this patch now?
Only if the rest of the patch was approved by the responsible
maintainers (I don't think that happened yet). I only approved the
NEWS part of the patch.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-09-08 13:57 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-08-28 22:42 [PATCH] This commit adds support for catching syscalls on riscv timurgol007
2025-09-04 9:00 ` Timur Golubovich
2025-09-04 9:23 ` Eli Zaretskii
2025-09-04 9:29 ` Timur Golubovich
2025-09-04 10:01 ` Eli Zaretskii
2025-09-08 13:37 ` Fwd: " Timur Golubovich
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox