[gdb/tdep] Rewrite i386_canonicalize_syscall

On openSUSE Tumbleweed x86_64, with target board unix/-m32 and test-case
gdb.reverse/recvmsg-reverse.exp, I run into:
...
(gdb) continue^M
Continuing.^M
Process record and replay target doesn't support syscall number 360^M
Process record: failed to record execution log.^M
^M
Program stopped.^M
0xf7fc5575 in __kernel_vsyscall ()^M
(gdb) FAIL: $exp: continue to breakpoint: marker2
...

The syscall number 360 in i386 is for syscall socketpair, as we can see in
arch/x86/entry/syscalls/syscall_32.tbl:
...
<number>  <abi>  <name>      <entry point>
360       i386   socketpair  sys_socketpair
...

Function i386_canonicalize_syscall assumes that any syscall below 500 maps to
an identically valued enum in enum gdb_syscall:
...
static enum gdb_syscall
i386_canonicalize_syscall (int syscall)
{
  enum { i386_syscall_max = 499 };

  if (syscall <= i386_syscall_max)
    return (enum gdb_syscall) syscall;
  else
    return gdb_sys_no_syscall;
}
...

However, that's not the case.  The value of gdb_sys_socketpair is not 360,
but 512:
...
enum gdb_syscall {
  ...
  gdb_sys_getrandom = 355,
  gdb_sys_statx = 383,
  ...
  gdb_sys_socketpair = 512,
...

Consequently, when record_linux_system_call is called with
syscall == i386_canonicalize_syscall (360), we hit the default case here:
....
  switch (syscall)
    {
    ...
    default:
      gdb_printf (gdb_stderr,
                  _("Process record and replay target doesn't "
                    "support syscall number %d\n"), syscall);
      return -1;
      break;
    }
...
rather than hitting the case for gdb_sys_socketpair.

I initially wrote a trivial fix for this, changing the value of
gdb_sys_socketpair to 360.  However, Andreas Schwab pointed out that there are
other functions (ppc_canonicalize_syscall and s390_canonicalize_syscall) that
make assumptions about specific values of enum gdb_syscall, and fixing this
for i386 may break things for ppc or s390.

So instead, I decided to rewrite i386_canonicalize_syscall to match the
approach taken in aarch64_canonicalize_syscall, which allows
gdb_sys_socketpair to keep the same value.

So, fix this by:
- adding a new table file gdb/i386-syscalls.def, using a SYSCALL entry for
  each syscall, generated from arch/x86/entry/syscalls/syscall_32.tbl,
- using gdb/i386-syscalls.def to define enum i386_syscall, and
- using macros SYSCALL_MAP, SYSCALL_MAP_RENAME and UNSUPPORTED_SYSCALL_MAP to
  define the mapping from enum i386_syscall to enum gdb_syscall in
  i386_canonicalize_syscall.

I've created the mapping as follows:
- I used arch/x86/entry/syscalls/syscall_32.tbl to generate an initial mapping
  using SYSCALL_MAP for each syscall,
- I attempted to compile this and used the compilation errors about
  non-existing gdb_sys_ values to change those entries to
  UNSUPPORTED_SYSCALL_MAP, which got me a compiling version,
- I reviewed the UNSUPPORTED_SYSCALL_MAP entries, changing to
  SYSCALL_MAP_RENAME where necessary,
- I then reviewed syscalls below 500 that mapped to a gdb_syscall value below
  500, but not the same, and fixed those using SYSCALL_MAP_RENAME, and
- reviewed the mapping for gdb_syscall entries >= 500.

On the resulting mapping, I was able to do the following sanity check:
...
  for (int i = 0; i < 500; ++i)
    {
      int res = i386_canonicalize_syscall (i);
      if (res == i)
	continue;
      if (res == -1)
	continue;
      if (res >= 500)
	continue;
      gdb_assert_not_reached ("");
    }
}
...
to make sure that any syscall below 500 either:
- maps to the same number,
- is unsupported, or
- maps to a number >= 500.

Coming back to our original problem, the socket pair syscall is addressed by
an entry:
...
      SYSCALL_MAP (socketpair);
...
which maps i386_sys_socketpair (360) to gdb_sys_socketpair (512).

Tested on x86_64-linux with target board unix/-m32.

Approved-By: Guinevere Larsen <guinevere@redhat.com>

PR tdep/32770
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32770
This commit is contained in:
Tom de Vries
2025-03-13 07:41:51 +01:00
parent 0d1d256715
commit fbfb29b304
2 changed files with 968 additions and 5 deletions

View File

@@ -370,6 +370,16 @@ i386_all_but_ip_registers_record (struct regcache *regcache)
return 0;
}
enum i386_syscall
{
#define SYSCALL(NUMBER,NAME) \
i386_sys_ ## NAME = NUMBER,
#include "gdb/i386-syscalls.def"
#undef SYSCALL
};
/* i386_canonicalize_syscall maps from the native i386 Linux set
of syscall ids into a canonical set of syscall ids used by
process record (a mostly trivial mapping, since the canonical
@@ -378,12 +388,486 @@ i386_all_but_ip_registers_record (struct regcache *regcache)
static enum gdb_syscall
i386_canonicalize_syscall (int syscall)
{
enum { i386_syscall_max = 499 };
switch ((enum i386_syscall) syscall)
{
#define SYSCALL_MAP(SYSCALL) \
case i386_sys_ ## SYSCALL: \
return gdb_sys_ ## SYSCALL
if (syscall <= i386_syscall_max)
return (enum gdb_syscall) syscall;
else
return gdb_sys_no_syscall;
#define SYSCALL_MAP_RENAME(SYSCALL,GDB_SYSCALL) \
case i386_sys_##SYSCALL: \
return GDB_SYSCALL;
#define UNSUPPORTED_SYSCALL_MAP(SYSCALL) \
case i386_sys_ ## SYSCALL: \
return gdb_sys_no_syscall;
SYSCALL_MAP (restart_syscall);
SYSCALL_MAP (exit);
SYSCALL_MAP (fork);
SYSCALL_MAP (read);
SYSCALL_MAP (write);
SYSCALL_MAP (open);
SYSCALL_MAP (close);
SYSCALL_MAP (waitpid);
SYSCALL_MAP (creat);
SYSCALL_MAP (link);
SYSCALL_MAP (unlink);
SYSCALL_MAP (execve);
SYSCALL_MAP (chdir);
SYSCALL_MAP (time);
SYSCALL_MAP (mknod);
SYSCALL_MAP (chmod);
SYSCALL_MAP_RENAME (lchown, gdb_sys_lchown16);
SYSCALL_MAP_RENAME (break, gdb_sys_ni_syscall17);
SYSCALL_MAP_RENAME (oldstat, gdb_sys_stat);
SYSCALL_MAP (lseek);
SYSCALL_MAP (getpid);
SYSCALL_MAP (mount);
SYSCALL_MAP_RENAME (umount, gdb_sys_oldumount);
SYSCALL_MAP_RENAME (setuid, gdb_sys_setuid16);
SYSCALL_MAP_RENAME (getuid, gdb_sys_getuid16);
SYSCALL_MAP (stime);
SYSCALL_MAP (ptrace);
SYSCALL_MAP (alarm);
SYSCALL_MAP_RENAME (oldfstat, gdb_sys_fstat);
SYSCALL_MAP (pause);
SYSCALL_MAP (utime);
SYSCALL_MAP_RENAME (stty, gdb_sys_ni_syscall31);
SYSCALL_MAP_RENAME (gtty, gdb_sys_ni_syscall32);
SYSCALL_MAP (access);
SYSCALL_MAP (nice);
SYSCALL_MAP_RENAME (ftime, gdb_sys_ni_syscall35);
SYSCALL_MAP (sync);
SYSCALL_MAP (kill);
SYSCALL_MAP (rename);
SYSCALL_MAP (mkdir);
SYSCALL_MAP (rmdir);
SYSCALL_MAP (dup);
SYSCALL_MAP (pipe);
SYSCALL_MAP (times);
SYSCALL_MAP_RENAME (prof, gdb_sys_ni_syscall44);
SYSCALL_MAP (brk);
SYSCALL_MAP_RENAME (setgid, gdb_sys_setgid16);
SYSCALL_MAP_RENAME (getgid, gdb_sys_getgid16);
SYSCALL_MAP (signal);
SYSCALL_MAP_RENAME (geteuid, gdb_sys_geteuid16);
SYSCALL_MAP_RENAME (getegid, gdb_sys_getegid16);
SYSCALL_MAP (acct);
SYSCALL_MAP_RENAME (umount2, gdb_sys_umount);
SYSCALL_MAP_RENAME (lock, gdb_sys_ni_syscall53);
SYSCALL_MAP (ioctl);
SYSCALL_MAP (fcntl);
SYSCALL_MAP_RENAME (mpx, gdb_sys_ni_syscall56);
SYSCALL_MAP (setpgid);
SYSCALL_MAP_RENAME (ulimit, gdb_sys_ni_syscall58);
SYSCALL_MAP_RENAME (oldolduname, gdb_sys_olduname);
SYSCALL_MAP (umask);
SYSCALL_MAP (chroot);
SYSCALL_MAP (ustat);
SYSCALL_MAP (dup2);
SYSCALL_MAP (getppid);
SYSCALL_MAP (getpgrp);
SYSCALL_MAP (setsid);
SYSCALL_MAP (sigaction);
SYSCALL_MAP (sgetmask);
SYSCALL_MAP (ssetmask);
SYSCALL_MAP_RENAME (setreuid, gdb_sys_setreuid16);
SYSCALL_MAP_RENAME (setregid, gdb_sys_setregid16);
SYSCALL_MAP (sigsuspend);
SYSCALL_MAP (sigpending);
SYSCALL_MAP (sethostname);
SYSCALL_MAP (setrlimit);
SYSCALL_MAP_RENAME (getrlimit, gdb_sys_old_getrlimit);
SYSCALL_MAP (getrusage);
SYSCALL_MAP (gettimeofday);
SYSCALL_MAP (settimeofday);
SYSCALL_MAP_RENAME (getgroups, gdb_sys_getgroups16);
SYSCALL_MAP_RENAME (setgroups, gdb_sys_setgroups16);
SYSCALL_MAP_RENAME (select, gdb_old_select);
SYSCALL_MAP (symlink);
SYSCALL_MAP_RENAME (oldlstat, gdb_sys_lstat);
SYSCALL_MAP (readlink);
SYSCALL_MAP (uselib);
SYSCALL_MAP (swapon);
SYSCALL_MAP (reboot);
SYSCALL_MAP_RENAME (readdir, gdb_old_readdir);
SYSCALL_MAP_RENAME (mmap, gdb_old_mmap);
SYSCALL_MAP (munmap);
SYSCALL_MAP (truncate);
SYSCALL_MAP (ftruncate);
SYSCALL_MAP (fchmod);
SYSCALL_MAP_RENAME (fchown, gdb_sys_fchown16);
SYSCALL_MAP (getpriority);
SYSCALL_MAP (setpriority);
SYSCALL_MAP_RENAME (profil, gdb_sys_ni_syscall98);
SYSCALL_MAP (statfs);
SYSCALL_MAP (fstatfs);
SYSCALL_MAP (ioperm);
SYSCALL_MAP (socketcall);
SYSCALL_MAP (syslog);
SYSCALL_MAP (setitimer);
SYSCALL_MAP (getitimer);
SYSCALL_MAP_RENAME (stat, gdb_sys_newstat);
SYSCALL_MAP_RENAME (lstat, gdb_sys_newlstat);
SYSCALL_MAP_RENAME (fstat, gdb_sys_newfstat);
SYSCALL_MAP_RENAME (olduname, gdb_sys_uname);
SYSCALL_MAP (iopl);
SYSCALL_MAP (vhangup);
SYSCALL_MAP_RENAME (idle, gdb_sys_ni_syscall112);
SYSCALL_MAP (vm86old);
SYSCALL_MAP (wait4);
SYSCALL_MAP (swapoff);
SYSCALL_MAP (sysinfo);
SYSCALL_MAP (ipc);
SYSCALL_MAP (fsync);
SYSCALL_MAP (sigreturn);
SYSCALL_MAP (clone);
SYSCALL_MAP (setdomainname);
SYSCALL_MAP_RENAME (uname, gdb_sys_newuname);
SYSCALL_MAP (modify_ldt);
SYSCALL_MAP (adjtimex);
SYSCALL_MAP (mprotect);
SYSCALL_MAP (sigprocmask);
SYSCALL_MAP_RENAME (create_module, gdb_sys_ni_syscall127);
SYSCALL_MAP (init_module);
SYSCALL_MAP (delete_module);
SYSCALL_MAP_RENAME (get_kernel_syms, gdb_sys_ni_syscall130);
SYSCALL_MAP (quotactl);
SYSCALL_MAP (getpgid);
SYSCALL_MAP (fchdir);
SYSCALL_MAP (bdflush);
SYSCALL_MAP (sysfs);
SYSCALL_MAP (personality);
SYSCALL_MAP_RENAME (afs_syscall, gdb_sys_ni_syscall137);
SYSCALL_MAP_RENAME (setfsuid, gdb_sys_setfsuid16);
SYSCALL_MAP_RENAME (setfsgid, gdb_sys_setfsgid16);
SYSCALL_MAP_RENAME (_llseek, gdb_sys_llseek);
SYSCALL_MAP (getdents);
SYSCALL_MAP_RENAME (_newselect, gdb_sys_select);
SYSCALL_MAP (flock);
SYSCALL_MAP (msync);
SYSCALL_MAP (readv);
SYSCALL_MAP (writev);
SYSCALL_MAP (getsid);
SYSCALL_MAP (fdatasync);
SYSCALL_MAP_RENAME (_sysctl, gdb_sys_sysctl);
SYSCALL_MAP (mlock);
SYSCALL_MAP (munlock);
SYSCALL_MAP (mlockall);
SYSCALL_MAP (munlockall);
SYSCALL_MAP (sched_setparam);
SYSCALL_MAP (sched_getparam);
SYSCALL_MAP (sched_setscheduler);
SYSCALL_MAP (sched_getscheduler);
SYSCALL_MAP (sched_yield);
SYSCALL_MAP (sched_get_priority_max);
SYSCALL_MAP (sched_get_priority_min);
SYSCALL_MAP (sched_rr_get_interval);
SYSCALL_MAP (nanosleep);
SYSCALL_MAP (mremap);
SYSCALL_MAP_RENAME (setresuid, gdb_sys_setresuid16);
SYSCALL_MAP_RENAME (getresuid, gdb_sys_getresuid16);
SYSCALL_MAP (vm86);
SYSCALL_MAP_RENAME (query_module, gdb_sys_ni_syscall167);
SYSCALL_MAP (poll);
SYSCALL_MAP (nfsservctl);
SYSCALL_MAP_RENAME (setresgid, gdb_sys_setresgid16);
SYSCALL_MAP_RENAME (getresgid, gdb_sys_getresgid16);
SYSCALL_MAP (prctl);
SYSCALL_MAP (rt_sigreturn);
SYSCALL_MAP (rt_sigaction);
SYSCALL_MAP (rt_sigprocmask);
SYSCALL_MAP (rt_sigpending);
SYSCALL_MAP (rt_sigtimedwait);
SYSCALL_MAP (rt_sigqueueinfo);
SYSCALL_MAP (rt_sigsuspend);
SYSCALL_MAP (pread64);
SYSCALL_MAP (pwrite64);
SYSCALL_MAP_RENAME (chown, gdb_sys_chown16);
SYSCALL_MAP (getcwd);
SYSCALL_MAP (capget);
SYSCALL_MAP (capset);
SYSCALL_MAP (sigaltstack);
SYSCALL_MAP (sendfile);
SYSCALL_MAP_RENAME (getpmsg, gdb_sys_ni_syscall188);
SYSCALL_MAP_RENAME (putpmsg, gdb_sys_ni_syscall189);
SYSCALL_MAP (vfork);
SYSCALL_MAP_RENAME (ugetrlimit, gdb_sys_getrlimit);
SYSCALL_MAP (mmap2);
SYSCALL_MAP (truncate64);
SYSCALL_MAP (ftruncate64);
SYSCALL_MAP (stat64);
SYSCALL_MAP (lstat64);
SYSCALL_MAP (fstat64);
SYSCALL_MAP_RENAME (lchown32, gdb_sys_lchown);
SYSCALL_MAP_RENAME (getuid32, gdb_sys_getuid);
SYSCALL_MAP_RENAME (getgid32, gdb_sys_getgid);
SYSCALL_MAP_RENAME (geteuid32, gdb_sys_geteuid);
SYSCALL_MAP_RENAME (getegid32, gdb_sys_getegid);
SYSCALL_MAP_RENAME (setreuid32, gdb_sys_setreuid);
SYSCALL_MAP_RENAME (setregid32, gdb_sys_setregid);
SYSCALL_MAP_RENAME (getgroups32, gdb_sys_getgroups);
SYSCALL_MAP_RENAME (setgroups32, gdb_sys_setgroups);
SYSCALL_MAP_RENAME (fchown32, gdb_sys_fchown);
SYSCALL_MAP_RENAME (setresuid32, gdb_sys_setresuid);
SYSCALL_MAP_RENAME (getresuid32, gdb_sys_getresuid);
SYSCALL_MAP_RENAME (setresgid32, gdb_sys_setresgid);
SYSCALL_MAP_RENAME (getresgid32, gdb_sys_getresgid);
SYSCALL_MAP_RENAME (chown32, gdb_sys_chown);
SYSCALL_MAP_RENAME (setuid32, gdb_sys_setuid);
SYSCALL_MAP_RENAME (setgid32, gdb_sys_setgid);
SYSCALL_MAP_RENAME (setfsuid32, gdb_sys_setfsuid);
SYSCALL_MAP_RENAME (setfsgid32, gdb_sys_setfsgid);
SYSCALL_MAP (pivot_root);
SYSCALL_MAP (mincore);
SYSCALL_MAP (madvise);
SYSCALL_MAP (getdents64);
SYSCALL_MAP (fcntl64);
SYSCALL_MAP (gettid);
SYSCALL_MAP (readahead);
SYSCALL_MAP (setxattr);
SYSCALL_MAP (lsetxattr);
SYSCALL_MAP (fsetxattr);
SYSCALL_MAP (getxattr);
SYSCALL_MAP (lgetxattr);
SYSCALL_MAP (fgetxattr);
SYSCALL_MAP (listxattr);
SYSCALL_MAP (llistxattr);
SYSCALL_MAP (flistxattr);
SYSCALL_MAP (removexattr);
SYSCALL_MAP (lremovexattr);
SYSCALL_MAP (fremovexattr);
SYSCALL_MAP (tkill);
SYSCALL_MAP (sendfile64);
SYSCALL_MAP (futex);
SYSCALL_MAP (sched_setaffinity);
SYSCALL_MAP (sched_getaffinity);
SYSCALL_MAP (set_thread_area);
SYSCALL_MAP (get_thread_area);
SYSCALL_MAP (io_setup);
SYSCALL_MAP (io_destroy);
SYSCALL_MAP (io_getevents);
SYSCALL_MAP (io_submit);
SYSCALL_MAP (io_cancel);
SYSCALL_MAP (fadvise64);
SYSCALL_MAP (exit_group);
SYSCALL_MAP (lookup_dcookie);
SYSCALL_MAP (epoll_create);
SYSCALL_MAP (epoll_ctl);
SYSCALL_MAP (epoll_wait);
SYSCALL_MAP (remap_file_pages);
SYSCALL_MAP (set_tid_address);
SYSCALL_MAP (timer_create);
SYSCALL_MAP (timer_settime);
SYSCALL_MAP (timer_gettime);
SYSCALL_MAP (timer_getoverrun);
SYSCALL_MAP (timer_delete);
SYSCALL_MAP (clock_settime);
SYSCALL_MAP (clock_gettime);
SYSCALL_MAP (clock_getres);
SYSCALL_MAP (clock_nanosleep);
SYSCALL_MAP (statfs64);
SYSCALL_MAP (fstatfs64);
SYSCALL_MAP (tgkill);
SYSCALL_MAP (utimes);
SYSCALL_MAP (fadvise64_64);
SYSCALL_MAP_RENAME (vserver, gdb_sys_ni_syscall273);
SYSCALL_MAP (mbind);
SYSCALL_MAP (get_mempolicy);
SYSCALL_MAP (set_mempolicy);
SYSCALL_MAP (mq_open);
SYSCALL_MAP (mq_unlink);
SYSCALL_MAP (mq_timedsend);
SYSCALL_MAP (mq_timedreceive);
SYSCALL_MAP (mq_notify);
SYSCALL_MAP (mq_getsetattr);
SYSCALL_MAP (kexec_load);
SYSCALL_MAP (waitid);
SYSCALL_MAP (add_key);
SYSCALL_MAP (request_key);
SYSCALL_MAP (keyctl);
SYSCALL_MAP (ioprio_set);
SYSCALL_MAP (ioprio_get);
SYSCALL_MAP (inotify_init);
SYSCALL_MAP (inotify_add_watch);
SYSCALL_MAP (inotify_rm_watch);
SYSCALL_MAP (migrate_pages);
SYSCALL_MAP (openat);
SYSCALL_MAP (mkdirat);
SYSCALL_MAP (mknodat);
SYSCALL_MAP (fchownat);
SYSCALL_MAP (futimesat);
SYSCALL_MAP (fstatat64);
SYSCALL_MAP (unlinkat);
SYSCALL_MAP (renameat);
SYSCALL_MAP (linkat);
SYSCALL_MAP (symlinkat);
SYSCALL_MAP (readlinkat);
SYSCALL_MAP (fchmodat);
SYSCALL_MAP (faccessat);
SYSCALL_MAP (pselect6);
SYSCALL_MAP (ppoll);
SYSCALL_MAP (unshare);
SYSCALL_MAP (set_robust_list);
SYSCALL_MAP (get_robust_list);
SYSCALL_MAP (splice);
SYSCALL_MAP (sync_file_range);
SYSCALL_MAP (tee);
SYSCALL_MAP (vmsplice);
SYSCALL_MAP (move_pages);
SYSCALL_MAP (getcpu);
SYSCALL_MAP (epoll_pwait);
UNSUPPORTED_SYSCALL_MAP (utimensat);
UNSUPPORTED_SYSCALL_MAP (signalfd);
UNSUPPORTED_SYSCALL_MAP (timerfd_create);
UNSUPPORTED_SYSCALL_MAP (eventfd);
SYSCALL_MAP (fallocate);
UNSUPPORTED_SYSCALL_MAP (timerfd_settime);
UNSUPPORTED_SYSCALL_MAP (timerfd_gettime);
UNSUPPORTED_SYSCALL_MAP (signalfd4);
SYSCALL_MAP (eventfd2);
SYSCALL_MAP (epoll_create1);
SYSCALL_MAP (dup3);
SYSCALL_MAP (pipe2);
SYSCALL_MAP (inotify_init1);
UNSUPPORTED_SYSCALL_MAP (preadv);
UNSUPPORTED_SYSCALL_MAP (pwritev);
UNSUPPORTED_SYSCALL_MAP (rt_tgsigqueueinfo);
UNSUPPORTED_SYSCALL_MAP (perf_event_open);
UNSUPPORTED_SYSCALL_MAP (recvmmsg);
UNSUPPORTED_SYSCALL_MAP (fanotify_init);
UNSUPPORTED_SYSCALL_MAP (fanotify_mark);
UNSUPPORTED_SYSCALL_MAP (prlimit64);
UNSUPPORTED_SYSCALL_MAP (name_to_handle_at);
UNSUPPORTED_SYSCALL_MAP (open_by_handle_at);
UNSUPPORTED_SYSCALL_MAP (clock_adjtime);
UNSUPPORTED_SYSCALL_MAP (syncfs);
UNSUPPORTED_SYSCALL_MAP (sendmmsg);
UNSUPPORTED_SYSCALL_MAP (setns);
UNSUPPORTED_SYSCALL_MAP (process_vm_readv);
UNSUPPORTED_SYSCALL_MAP (process_vm_writev);
UNSUPPORTED_SYSCALL_MAP (kcmp);
UNSUPPORTED_SYSCALL_MAP (finit_module);
UNSUPPORTED_SYSCALL_MAP (sched_setattr);
UNSUPPORTED_SYSCALL_MAP (sched_getattr);
UNSUPPORTED_SYSCALL_MAP (renameat2);
UNSUPPORTED_SYSCALL_MAP (seccomp);
SYSCALL_MAP (getrandom);
UNSUPPORTED_SYSCALL_MAP (memfd_create);
UNSUPPORTED_SYSCALL_MAP (bpf);
UNSUPPORTED_SYSCALL_MAP (execveat);
SYSCALL_MAP (socket);
SYSCALL_MAP (socketpair);
SYSCALL_MAP (bind);
SYSCALL_MAP (connect);
SYSCALL_MAP (listen);
UNSUPPORTED_SYSCALL_MAP (accept4);
SYSCALL_MAP (getsockopt);
SYSCALL_MAP (setsockopt);
SYSCALL_MAP (getsockname);
SYSCALL_MAP (getpeername);
SYSCALL_MAP (sendto);
SYSCALL_MAP (sendmsg);
SYSCALL_MAP (recvfrom);
SYSCALL_MAP (recvmsg);
SYSCALL_MAP (shutdown);
UNSUPPORTED_SYSCALL_MAP (userfaultfd);
UNSUPPORTED_SYSCALL_MAP (membarrier);
UNSUPPORTED_SYSCALL_MAP (mlock2);
UNSUPPORTED_SYSCALL_MAP (copy_file_range);
UNSUPPORTED_SYSCALL_MAP (preadv2);
UNSUPPORTED_SYSCALL_MAP (pwritev2);
UNSUPPORTED_SYSCALL_MAP (pkey_mprotect);
UNSUPPORTED_SYSCALL_MAP (pkey_alloc);
UNSUPPORTED_SYSCALL_MAP (pkey_free);
SYSCALL_MAP (statx);
UNSUPPORTED_SYSCALL_MAP (arch_prctl);
UNSUPPORTED_SYSCALL_MAP (io_pgetevents);
UNSUPPORTED_SYSCALL_MAP (rseq);
SYSCALL_MAP (semget);
SYSCALL_MAP (semctl);
SYSCALL_MAP (shmget);
SYSCALL_MAP (shmctl);
SYSCALL_MAP (shmat);
SYSCALL_MAP (shmdt);
SYSCALL_MAP (msgget);
SYSCALL_MAP (msgsnd);
SYSCALL_MAP (msgrcv);
SYSCALL_MAP (msgctl);
SYSCALL_MAP (clock_gettime64);
UNSUPPORTED_SYSCALL_MAP (clock_settime64);
UNSUPPORTED_SYSCALL_MAP (clock_adjtime64);
UNSUPPORTED_SYSCALL_MAP (clock_getres_time64);
UNSUPPORTED_SYSCALL_MAP (clock_nanosleep_time64);
UNSUPPORTED_SYSCALL_MAP (timer_gettime64);
UNSUPPORTED_SYSCALL_MAP (timer_settime64);
UNSUPPORTED_SYSCALL_MAP (timerfd_gettime64);
UNSUPPORTED_SYSCALL_MAP (timerfd_settime64);
UNSUPPORTED_SYSCALL_MAP (utimensat_time64);
UNSUPPORTED_SYSCALL_MAP (pselect6_time64);
UNSUPPORTED_SYSCALL_MAP (ppoll_time64);
UNSUPPORTED_SYSCALL_MAP (io_pgetevents_time64);
UNSUPPORTED_SYSCALL_MAP (recvmmsg_time64);
UNSUPPORTED_SYSCALL_MAP (mq_timedsend_time64);
UNSUPPORTED_SYSCALL_MAP (mq_timedreceive_time64);
SYSCALL_MAP_RENAME (semtimedop_time64, gdb_sys_semtimedop);
UNSUPPORTED_SYSCALL_MAP (rt_sigtimedwait_time64);
UNSUPPORTED_SYSCALL_MAP (futex_time64);
UNSUPPORTED_SYSCALL_MAP (sched_rr_get_interval_time64);
UNSUPPORTED_SYSCALL_MAP (pidfd_send_signal);
UNSUPPORTED_SYSCALL_MAP (io_uring_setup);
UNSUPPORTED_SYSCALL_MAP (io_uring_enter);
UNSUPPORTED_SYSCALL_MAP (io_uring_register);
UNSUPPORTED_SYSCALL_MAP (open_tree);
UNSUPPORTED_SYSCALL_MAP (move_mount);
UNSUPPORTED_SYSCALL_MAP (fsopen);
UNSUPPORTED_SYSCALL_MAP (fsconfig);
UNSUPPORTED_SYSCALL_MAP (fsmount);
UNSUPPORTED_SYSCALL_MAP (fspick);
UNSUPPORTED_SYSCALL_MAP (pidfd_open);
UNSUPPORTED_SYSCALL_MAP (clone3);
UNSUPPORTED_SYSCALL_MAP (close_range);
UNSUPPORTED_SYSCALL_MAP (openat2);
UNSUPPORTED_SYSCALL_MAP (pidfd_getfd);
UNSUPPORTED_SYSCALL_MAP (faccessat2);
UNSUPPORTED_SYSCALL_MAP (process_madvise);
UNSUPPORTED_SYSCALL_MAP (epoll_pwait2);
UNSUPPORTED_SYSCALL_MAP (mount_setattr);
UNSUPPORTED_SYSCALL_MAP (quotactl_fd);
UNSUPPORTED_SYSCALL_MAP (landlock_create_ruleset);
UNSUPPORTED_SYSCALL_MAP (landlock_add_rule);
UNSUPPORTED_SYSCALL_MAP (landlock_restrict_self);
UNSUPPORTED_SYSCALL_MAP (memfd_secret);
UNSUPPORTED_SYSCALL_MAP (process_mrelease);
UNSUPPORTED_SYSCALL_MAP (futex_waitv);
UNSUPPORTED_SYSCALL_MAP (set_mempolicy_home_node);
UNSUPPORTED_SYSCALL_MAP (cachestat);
UNSUPPORTED_SYSCALL_MAP (fchmodat2);
UNSUPPORTED_SYSCALL_MAP (map_shadow_stack);
UNSUPPORTED_SYSCALL_MAP (futex_wake);
UNSUPPORTED_SYSCALL_MAP (futex_wait);
UNSUPPORTED_SYSCALL_MAP (futex_requeue);
UNSUPPORTED_SYSCALL_MAP (statmount);
UNSUPPORTED_SYSCALL_MAP (listmount);
UNSUPPORTED_SYSCALL_MAP (lsm_get_self_attr);
UNSUPPORTED_SYSCALL_MAP (lsm_set_self_attr);
UNSUPPORTED_SYSCALL_MAP (lsm_list_modules);
UNSUPPORTED_SYSCALL_MAP (mseal);
UNSUPPORTED_SYSCALL_MAP (setxattrat);
UNSUPPORTED_SYSCALL_MAP (getxattrat);
UNSUPPORTED_SYSCALL_MAP (listxattrat);
UNSUPPORTED_SYSCALL_MAP (removexattrat);
#undef SYSCALL_MAP
#undef SYSCALL_MAP_RENAME
#undef UNSUPPORTED_SYSCALL_MAP
default:
return gdb_sys_no_syscall;
}
}
/* Value of the sigcode in case of a boundary fault. */

479
gdb/i386-syscalls.def Normal file
View File

@@ -0,0 +1,479 @@
/* Copyright (C) 2025 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Generated using linux v6.13 and command:
$ egrep -v "^#.*" ./arch/x86/entry/syscalls/syscall_32.tbl \
| awk '{printf "SYSCALL (%s, %s)\n", $1, $3}'
*/
SYSCALL (0, restart_syscall)
SYSCALL (1, exit)
SYSCALL (2, fork)
SYSCALL (3, read)
SYSCALL (4, write)
SYSCALL (5, open)
SYSCALL (6, close)
SYSCALL (7, waitpid)
SYSCALL (8, creat)
SYSCALL (9, link)
SYSCALL (10, unlink)
SYSCALL (11, execve)
SYSCALL (12, chdir)
SYSCALL (13, time)
SYSCALL (14, mknod)
SYSCALL (15, chmod)
SYSCALL (16, lchown)
SYSCALL (17, break)
SYSCALL (18, oldstat)
SYSCALL (19, lseek)
SYSCALL (20, getpid)
SYSCALL (21, mount)
SYSCALL (22, umount)
SYSCALL (23, setuid)
SYSCALL (24, getuid)
SYSCALL (25, stime)
SYSCALL (26, ptrace)
SYSCALL (27, alarm)
SYSCALL (28, oldfstat)
SYSCALL (29, pause)
SYSCALL (30, utime)
SYSCALL (31, stty)
SYSCALL (32, gtty)
SYSCALL (33, access)
SYSCALL (34, nice)
SYSCALL (35, ftime)
SYSCALL (36, sync)
SYSCALL (37, kill)
SYSCALL (38, rename)
SYSCALL (39, mkdir)
SYSCALL (40, rmdir)
SYSCALL (41, dup)
SYSCALL (42, pipe)
SYSCALL (43, times)
SYSCALL (44, prof)
SYSCALL (45, brk)
SYSCALL (46, setgid)
SYSCALL (47, getgid)
SYSCALL (48, signal)
SYSCALL (49, geteuid)
SYSCALL (50, getegid)
SYSCALL (51, acct)
SYSCALL (52, umount2)
SYSCALL (53, lock)
SYSCALL (54, ioctl)
SYSCALL (55, fcntl)
SYSCALL (56, mpx)
SYSCALL (57, setpgid)
SYSCALL (58, ulimit)
SYSCALL (59, oldolduname)
SYSCALL (60, umask)
SYSCALL (61, chroot)
SYSCALL (62, ustat)
SYSCALL (63, dup2)
SYSCALL (64, getppid)
SYSCALL (65, getpgrp)
SYSCALL (66, setsid)
SYSCALL (67, sigaction)
SYSCALL (68, sgetmask)
SYSCALL (69, ssetmask)
SYSCALL (70, setreuid)
SYSCALL (71, setregid)
SYSCALL (72, sigsuspend)
SYSCALL (73, sigpending)
SYSCALL (74, sethostname)
SYSCALL (75, setrlimit)
SYSCALL (76, getrlimit)
SYSCALL (77, getrusage)
SYSCALL (78, gettimeofday)
SYSCALL (79, settimeofday)
SYSCALL (80, getgroups)
SYSCALL (81, setgroups)
SYSCALL (82, select)
SYSCALL (83, symlink)
SYSCALL (84, oldlstat)
SYSCALL (85, readlink)
SYSCALL (86, uselib)
SYSCALL (87, swapon)
SYSCALL (88, reboot)
SYSCALL (89, readdir)
SYSCALL (90, mmap)
SYSCALL (91, munmap)
SYSCALL (92, truncate)
SYSCALL (93, ftruncate)
SYSCALL (94, fchmod)
SYSCALL (95, fchown)
SYSCALL (96, getpriority)
SYSCALL (97, setpriority)
SYSCALL (98, profil)
SYSCALL (99, statfs)
SYSCALL (100, fstatfs)
SYSCALL (101, ioperm)
SYSCALL (102, socketcall)
SYSCALL (103, syslog)
SYSCALL (104, setitimer)
SYSCALL (105, getitimer)
SYSCALL (106, stat)
SYSCALL (107, lstat)
SYSCALL (108, fstat)
SYSCALL (109, olduname)
SYSCALL (110, iopl)
SYSCALL (111, vhangup)
SYSCALL (112, idle)
SYSCALL (113, vm86old)
SYSCALL (114, wait4)
SYSCALL (115, swapoff)
SYSCALL (116, sysinfo)
SYSCALL (117, ipc)
SYSCALL (118, fsync)
SYSCALL (119, sigreturn)
SYSCALL (120, clone)
SYSCALL (121, setdomainname)
SYSCALL (122, uname)
SYSCALL (123, modify_ldt)
SYSCALL (124, adjtimex)
SYSCALL (125, mprotect)
SYSCALL (126, sigprocmask)
SYSCALL (127, create_module)
SYSCALL (128, init_module)
SYSCALL (129, delete_module)
SYSCALL (130, get_kernel_syms)
SYSCALL (131, quotactl)
SYSCALL (132, getpgid)
SYSCALL (133, fchdir)
SYSCALL (134, bdflush)
SYSCALL (135, sysfs)
SYSCALL (136, personality)
SYSCALL (137, afs_syscall)
SYSCALL (138, setfsuid)
SYSCALL (139, setfsgid)
SYSCALL (140, _llseek)
SYSCALL (141, getdents)
SYSCALL (142, _newselect)
SYSCALL (143, flock)
SYSCALL (144, msync)
SYSCALL (145, readv)
SYSCALL (146, writev)
SYSCALL (147, getsid)
SYSCALL (148, fdatasync)
SYSCALL (149, _sysctl)
SYSCALL (150, mlock)
SYSCALL (151, munlock)
SYSCALL (152, mlockall)
SYSCALL (153, munlockall)
SYSCALL (154, sched_setparam)
SYSCALL (155, sched_getparam)
SYSCALL (156, sched_setscheduler)
SYSCALL (157, sched_getscheduler)
SYSCALL (158, sched_yield)
SYSCALL (159, sched_get_priority_max)
SYSCALL (160, sched_get_priority_min)
SYSCALL (161, sched_rr_get_interval)
SYSCALL (162, nanosleep)
SYSCALL (163, mremap)
SYSCALL (164, setresuid)
SYSCALL (165, getresuid)
SYSCALL (166, vm86)
SYSCALL (167, query_module)
SYSCALL (168, poll)
SYSCALL (169, nfsservctl)
SYSCALL (170, setresgid)
SYSCALL (171, getresgid)
SYSCALL (172, prctl)
SYSCALL (173, rt_sigreturn)
SYSCALL (174, rt_sigaction)
SYSCALL (175, rt_sigprocmask)
SYSCALL (176, rt_sigpending)
SYSCALL (177, rt_sigtimedwait)
SYSCALL (178, rt_sigqueueinfo)
SYSCALL (179, rt_sigsuspend)
SYSCALL (180, pread64)
SYSCALL (181, pwrite64)
SYSCALL (182, chown)
SYSCALL (183, getcwd)
SYSCALL (184, capget)
SYSCALL (185, capset)
SYSCALL (186, sigaltstack)
SYSCALL (187, sendfile)
SYSCALL (188, getpmsg)
SYSCALL (189, putpmsg)
SYSCALL (190, vfork)
SYSCALL (191, ugetrlimit)
SYSCALL (192, mmap2)
SYSCALL (193, truncate64)
SYSCALL (194, ftruncate64)
SYSCALL (195, stat64)
SYSCALL (196, lstat64)
SYSCALL (197, fstat64)
SYSCALL (198, lchown32)
SYSCALL (199, getuid32)
SYSCALL (200, getgid32)
SYSCALL (201, geteuid32)
SYSCALL (202, getegid32)
SYSCALL (203, setreuid32)
SYSCALL (204, setregid32)
SYSCALL (205, getgroups32)
SYSCALL (206, setgroups32)
SYSCALL (207, fchown32)
SYSCALL (208, setresuid32)
SYSCALL (209, getresuid32)
SYSCALL (210, setresgid32)
SYSCALL (211, getresgid32)
SYSCALL (212, chown32)
SYSCALL (213, setuid32)
SYSCALL (214, setgid32)
SYSCALL (215, setfsuid32)
SYSCALL (216, setfsgid32)
SYSCALL (217, pivot_root)
SYSCALL (218, mincore)
SYSCALL (219, madvise)
SYSCALL (220, getdents64)
SYSCALL (221, fcntl64)
SYSCALL (224, gettid)
SYSCALL (225, readahead)
SYSCALL (226, setxattr)
SYSCALL (227, lsetxattr)
SYSCALL (228, fsetxattr)
SYSCALL (229, getxattr)
SYSCALL (230, lgetxattr)
SYSCALL (231, fgetxattr)
SYSCALL (232, listxattr)
SYSCALL (233, llistxattr)
SYSCALL (234, flistxattr)
SYSCALL (235, removexattr)
SYSCALL (236, lremovexattr)
SYSCALL (237, fremovexattr)
SYSCALL (238, tkill)
SYSCALL (239, sendfile64)
SYSCALL (240, futex)
SYSCALL (241, sched_setaffinity)
SYSCALL (242, sched_getaffinity)
SYSCALL (243, set_thread_area)
SYSCALL (244, get_thread_area)
SYSCALL (245, io_setup)
SYSCALL (246, io_destroy)
SYSCALL (247, io_getevents)
SYSCALL (248, io_submit)
SYSCALL (249, io_cancel)
SYSCALL (250, fadvise64)
SYSCALL (252, exit_group)
SYSCALL (253, lookup_dcookie)
SYSCALL (254, epoll_create)
SYSCALL (255, epoll_ctl)
SYSCALL (256, epoll_wait)
SYSCALL (257, remap_file_pages)
SYSCALL (258, set_tid_address)
SYSCALL (259, timer_create)
SYSCALL (260, timer_settime)
SYSCALL (261, timer_gettime)
SYSCALL (262, timer_getoverrun)
SYSCALL (263, timer_delete)
SYSCALL (264, clock_settime)
SYSCALL (265, clock_gettime)
SYSCALL (266, clock_getres)
SYSCALL (267, clock_nanosleep)
SYSCALL (268, statfs64)
SYSCALL (269, fstatfs64)
SYSCALL (270, tgkill)
SYSCALL (271, utimes)
SYSCALL (272, fadvise64_64)
SYSCALL (273, vserver)
SYSCALL (274, mbind)
SYSCALL (275, get_mempolicy)
SYSCALL (276, set_mempolicy)
SYSCALL (277, mq_open)
SYSCALL (278, mq_unlink)
SYSCALL (279, mq_timedsend)
SYSCALL (280, mq_timedreceive)
SYSCALL (281, mq_notify)
SYSCALL (282, mq_getsetattr)
SYSCALL (283, kexec_load)
SYSCALL (284, waitid)
SYSCALL (286, add_key)
SYSCALL (287, request_key)
SYSCALL (288, keyctl)
SYSCALL (289, ioprio_set)
SYSCALL (290, ioprio_get)
SYSCALL (291, inotify_init)
SYSCALL (292, inotify_add_watch)
SYSCALL (293, inotify_rm_watch)
SYSCALL (294, migrate_pages)
SYSCALL (295, openat)
SYSCALL (296, mkdirat)
SYSCALL (297, mknodat)
SYSCALL (298, fchownat)
SYSCALL (299, futimesat)
SYSCALL (300, fstatat64)
SYSCALL (301, unlinkat)
SYSCALL (302, renameat)
SYSCALL (303, linkat)
SYSCALL (304, symlinkat)
SYSCALL (305, readlinkat)
SYSCALL (306, fchmodat)
SYSCALL (307, faccessat)
SYSCALL (308, pselect6)
SYSCALL (309, ppoll)
SYSCALL (310, unshare)
SYSCALL (311, set_robust_list)
SYSCALL (312, get_robust_list)
SYSCALL (313, splice)
SYSCALL (314, sync_file_range)
SYSCALL (315, tee)
SYSCALL (316, vmsplice)
SYSCALL (317, move_pages)
SYSCALL (318, getcpu)
SYSCALL (319, epoll_pwait)
SYSCALL (320, utimensat)
SYSCALL (321, signalfd)
SYSCALL (322, timerfd_create)
SYSCALL (323, eventfd)
SYSCALL (324, fallocate)
SYSCALL (325, timerfd_settime)
SYSCALL (326, timerfd_gettime)
SYSCALL (327, signalfd4)
SYSCALL (328, eventfd2)
SYSCALL (329, epoll_create1)
SYSCALL (330, dup3)
SYSCALL (331, pipe2)
SYSCALL (332, inotify_init1)
SYSCALL (333, preadv)
SYSCALL (334, pwritev)
SYSCALL (335, rt_tgsigqueueinfo)
SYSCALL (336, perf_event_open)
SYSCALL (337, recvmmsg)
SYSCALL (338, fanotify_init)
SYSCALL (339, fanotify_mark)
SYSCALL (340, prlimit64)
SYSCALL (341, name_to_handle_at)
SYSCALL (342, open_by_handle_at)
SYSCALL (343, clock_adjtime)
SYSCALL (344, syncfs)
SYSCALL (345, sendmmsg)
SYSCALL (346, setns)
SYSCALL (347, process_vm_readv)
SYSCALL (348, process_vm_writev)
SYSCALL (349, kcmp)
SYSCALL (350, finit_module)
SYSCALL (351, sched_setattr)
SYSCALL (352, sched_getattr)
SYSCALL (353, renameat2)
SYSCALL (354, seccomp)
SYSCALL (355, getrandom)
SYSCALL (356, memfd_create)
SYSCALL (357, bpf)
SYSCALL (358, execveat)
SYSCALL (359, socket)
SYSCALL (360, socketpair)
SYSCALL (361, bind)
SYSCALL (362, connect)
SYSCALL (363, listen)
SYSCALL (364, accept4)
SYSCALL (365, getsockopt)
SYSCALL (366, setsockopt)
SYSCALL (367, getsockname)
SYSCALL (368, getpeername)
SYSCALL (369, sendto)
SYSCALL (370, sendmsg)
SYSCALL (371, recvfrom)
SYSCALL (372, recvmsg)
SYSCALL (373, shutdown)
SYSCALL (374, userfaultfd)
SYSCALL (375, membarrier)
SYSCALL (376, mlock2)
SYSCALL (377, copy_file_range)
SYSCALL (378, preadv2)
SYSCALL (379, pwritev2)
SYSCALL (380, pkey_mprotect)
SYSCALL (381, pkey_alloc)
SYSCALL (382, pkey_free)
SYSCALL (383, statx)
SYSCALL (384, arch_prctl)
SYSCALL (385, io_pgetevents)
SYSCALL (386, rseq)
SYSCALL (393, semget)
SYSCALL (394, semctl)
SYSCALL (395, shmget)
SYSCALL (396, shmctl)
SYSCALL (397, shmat)
SYSCALL (398, shmdt)
SYSCALL (399, msgget)
SYSCALL (400, msgsnd)
SYSCALL (401, msgrcv)
SYSCALL (402, msgctl)
SYSCALL (403, clock_gettime64)
SYSCALL (404, clock_settime64)
SYSCALL (405, clock_adjtime64)
SYSCALL (406, clock_getres_time64)
SYSCALL (407, clock_nanosleep_time64)
SYSCALL (408, timer_gettime64)
SYSCALL (409, timer_settime64)
SYSCALL (410, timerfd_gettime64)
SYSCALL (411, timerfd_settime64)
SYSCALL (412, utimensat_time64)
SYSCALL (413, pselect6_time64)
SYSCALL (414, ppoll_time64)
SYSCALL (416, io_pgetevents_time64)
SYSCALL (417, recvmmsg_time64)
SYSCALL (418, mq_timedsend_time64)
SYSCALL (419, mq_timedreceive_time64)
SYSCALL (420, semtimedop_time64)
SYSCALL (421, rt_sigtimedwait_time64)
SYSCALL (422, futex_time64)
SYSCALL (423, sched_rr_get_interval_time64)
SYSCALL (424, pidfd_send_signal)
SYSCALL (425, io_uring_setup)
SYSCALL (426, io_uring_enter)
SYSCALL (427, io_uring_register)
SYSCALL (428, open_tree)
SYSCALL (429, move_mount)
SYSCALL (430, fsopen)
SYSCALL (431, fsconfig)
SYSCALL (432, fsmount)
SYSCALL (433, fspick)
SYSCALL (434, pidfd_open)
SYSCALL (435, clone3)
SYSCALL (436, close_range)
SYSCALL (437, openat2)
SYSCALL (438, pidfd_getfd)
SYSCALL (439, faccessat2)
SYSCALL (440, process_madvise)
SYSCALL (441, epoll_pwait2)
SYSCALL (442, mount_setattr)
SYSCALL (443, quotactl_fd)
SYSCALL (444, landlock_create_ruleset)
SYSCALL (445, landlock_add_rule)
SYSCALL (446, landlock_restrict_self)
SYSCALL (447, memfd_secret)
SYSCALL (448, process_mrelease)
SYSCALL (449, futex_waitv)
SYSCALL (450, set_mempolicy_home_node)
SYSCALL (451, cachestat)
SYSCALL (452, fchmodat2)
SYSCALL (453, map_shadow_stack)
SYSCALL (454, futex_wake)
SYSCALL (455, futex_wait)
SYSCALL (456, futex_requeue)
SYSCALL (457, statmount)
SYSCALL (458, listmount)
SYSCALL (459, lsm_get_self_attr)
SYSCALL (460, lsm_set_self_attr)
SYSCALL (461, lsm_list_modules)
SYSCALL (462, mseal)
SYSCALL (463, setxattrat)
SYSCALL (464, getxattrat)
SYSCALL (465, listxattrat)
SYSCALL (466, removexattrat)