From: Guinevere Larsen <guinevere@redhat.com>
To: Tom de Vries <tdevries@suse.de>, gdb-patches@sourceware.org
Subject: Re: [PATCH] [gdb/tdep] Backport i386_canonicalize_syscall rewrite to gdb-16-branch
Date: Thu, 13 Mar 2025 09:40:45 -0300 [thread overview]
Message-ID: <6cab43c6-85c9-4834-9f44-9cc1267621b7@redhat.com> (raw)
In-Reply-To: <20250313095325.23876-1-tdevries@suse.de>
On 3/13/25 6:53 AM, Tom de Vries wrote:
> Commit fbfb29b304e ("[gdb/tdep] Rewrite i386_canonicalize_syscall") fixes
> PR32770, which reproduces on the gdb-16-branch, but the commit is not ideal
> for backporting because it completely rewrites i386_canonicalize_syscall.
>
> Instead, this is a version of the patch that adds a single line entry for each
> syscall value for which i386_canonicalize_syscall gives a different result
> with and without the patch.
>
> Consequently, the two versions give identical results. I've checked this for
> syscalls 0 to 466.
>
> Tested on x86_64-linux with target board unix/-m32, on top of gdb-16-branch.
>
> PR tdep/32770
> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32770
> ---
Hi!
I looked over all the special cases, and it mostly looks ok. There are
quite a few syscalls where we have an older or similar enough version,
like execveat and execve, or faccessat and faccessat2, but I can see
from the accept4 patch why you wouldn't have done that... however, for
the semtimedop_time64 syscall, you just converted to the semtimedop
version. What is special about that one?
--
Cheers,
Guinevere Larsen
She/Her/Hers
> gdb/i386-linux-tdep.c | 153 +++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 152 insertions(+), 1 deletion(-)
>
> diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c
> index 9dec83ac753..c2cd594cebe 100644
> --- a/gdb/i386-linux-tdep.c
> +++ b/gdb/i386-linux-tdep.c
> @@ -378,7 +378,158 @@ i386_all_but_ip_registers_record (struct regcache *regcache)
> static enum gdb_syscall
> i386_canonicalize_syscall (int syscall)
> {
> - enum { i386_syscall_max = 499 };
> + enum { i386_syscall_max = 466 };
> +
> + switch (syscall)
> + {
> + case 359 /* socket */: return gdb_sys_socket;
> + case 360 /* socketpair */: return gdb_sys_socketpair;
> + case 361 /* bind */: return gdb_sys_bind;
> + case 362 /* connect */: return gdb_sys_connect;
> + case 363 /* listen */: return gdb_sys_listen;
> + case 365 /* getsockopt */: return gdb_sys_getsockopt;
> + case 366 /* setsockopt */: return gdb_sys_setsockopt;
> + case 367 /* getsockname */: return gdb_sys_getsockname;
> + case 368 /* getpeername */: return gdb_sys_getpeername;
> + case 369 /* sendto */: return gdb_sys_sendto;
> + case 370 /* sendmsg */: return gdb_sys_sendmsg;
> + case 371 /* recvfrom */: return gdb_sys_recvfrom;
> + case 372 /* recvmsg */: return gdb_sys_recvmsg;
> + case 373 /* shutdown */: return gdb_sys_shutdown;
> + case 393 /* semget */: return gdb_sys_semget;
> + case 394 /* semctl */: return gdb_sys_semctl;
> + case 395 /* shmget */: return gdb_sys_shmget;
> + case 396 /* shmctl */: return gdb_sys_shmctl;
> + case 397 /* shmat */: return gdb_sys_shmat;
> + case 398 /* shmdt */: return gdb_sys_shmdt;
> + case 399 /* msgget */: return gdb_sys_msgget;
> + case 400 /* msgsnd */: return gdb_sys_msgsnd;
> + case 401 /* msgrcv */: return gdb_sys_msgrcv;
> + case 402 /* msgctl */: return gdb_sys_msgctl;
> + case 420 /* semtimedop_time64 */: return gdb_sys_semtimedop;
> +
> + case 320 /* utimensat */: return gdb_sys_no_syscall;
> + case 321 /* signalfd */: return gdb_sys_no_syscall;
> + case 322 /* timerfd_create */: return gdb_sys_no_syscall;
> + case 323 /* eventfd */: return gdb_sys_no_syscall;
> + case 325 /* timerfd_settime */: return gdb_sys_no_syscall;
> + case 326 /* timerfd_gettime */: return gdb_sys_no_syscall;
> + case 327 /* signalfd4 */: return gdb_sys_no_syscall;
> + case 333 /* preadv */: return gdb_sys_no_syscall;
> + case 334 /* pwritev */: return gdb_sys_no_syscall;
> + case 335 /* rt_tgsigqueueinfo */: return gdb_sys_no_syscall;
> + case 336 /* perf_event_open */: return gdb_sys_no_syscall;
> + case 337 /* recvmmsg */: return gdb_sys_no_syscall;
> + case 338 /* fanotify_init */: return gdb_sys_no_syscall;
> + case 339 /* fanotify_mark */: return gdb_sys_no_syscall;
> + case 340 /* prlimit64 */: return gdb_sys_no_syscall;
> + case 341 /* name_to_handle_at */: return gdb_sys_no_syscall;
> + case 342 /* open_by_handle_at */: return gdb_sys_no_syscall;
> + case 343 /* clock_adjtime */: return gdb_sys_no_syscall;
> + case 344 /* syncfs */: return gdb_sys_no_syscall;
> + case 345 /* sendmmsg */: return gdb_sys_no_syscall;
> + case 346 /* setns */: return gdb_sys_no_syscall;
> + case 347 /* process_vm_readv */: return gdb_sys_no_syscall;
> + case 348 /* process_vm_writev */: return gdb_sys_no_syscall;
> + case 349 /* kcmp */: return gdb_sys_no_syscall;
> + case 350 /* finit_module */: return gdb_sys_no_syscall;
> + case 351 /* sched_setattr */: return gdb_sys_no_syscall;
> + case 352 /* sched_getattr */: return gdb_sys_no_syscall;
> + case 353 /* renameat2 */: return gdb_sys_no_syscall;
> + case 354 /* seccomp */: return gdb_sys_no_syscall;
> + case 356 /* memfd_create */: return gdb_sys_no_syscall;
> + case 357 /* bpf */: return gdb_sys_no_syscall;
> + case 358 /* execveat */: return gdb_sys_no_syscall;
> + case 364 /* accept4 */: return gdb_sys_no_syscall;
> + case 374 /* userfaultfd */: return gdb_sys_no_syscall;
> + case 375 /* membarrier */: return gdb_sys_no_syscall;
> + case 376 /* mlock2 */: return gdb_sys_no_syscall;
> + case 377 /* copy_file_range */: return gdb_sys_no_syscall;
> + case 378 /* preadv2 */: return gdb_sys_no_syscall;
> + case 379 /* pwritev2 */: return gdb_sys_no_syscall;
> + case 380 /* pkey_mprotect */: return gdb_sys_no_syscall;
> + case 381 /* pkey_alloc */: return gdb_sys_no_syscall;
> + case 382 /* pkey_free */: return gdb_sys_no_syscall;
> + case 384 /* arch_prctl */: return gdb_sys_no_syscall;
> + case 385 /* io_pgetevents */: return gdb_sys_no_syscall;
> + case 386 /* rseq */: return gdb_sys_no_syscall;
> + case 404 /* clock_settime64 */: return gdb_sys_no_syscall;
> + case 405 /* clock_adjtime64 */: return gdb_sys_no_syscall;
> + case 406 /* clock_getres_time64 */: return gdb_sys_no_syscall;
> + case 407 /* clock_nanosleep_time64 */: return gdb_sys_no_syscall;
> + case 408 /* timer_gettime64 */: return gdb_sys_no_syscall;
> + case 409 /* timer_settime64 */: return gdb_sys_no_syscall;
> + case 410 /* timerfd_gettime64 */: return gdb_sys_no_syscall;
> + case 411 /* timerfd_settime64 */: return gdb_sys_no_syscall;
> + case 412 /* utimensat_time64 */: return gdb_sys_no_syscall;
> + case 413 /* pselect6_time64 */: return gdb_sys_no_syscall;
> + case 414 /* ppoll_time64 */: return gdb_sys_no_syscall;
> + case 416 /* io_pgetevents_time64 */: return gdb_sys_no_syscall;
> + case 417 /* recvmmsg_time64 */: return gdb_sys_no_syscall;
> + case 418 /* mq_timedsend_time64 */: return gdb_sys_no_syscall;
> + case 419 /* mq_timedreceive_time64 */: return gdb_sys_no_syscall;
> + case 421 /* rt_sigtimedwait_time64 */: return gdb_sys_no_syscall;
> + case 422 /* futex_time64 */: return gdb_sys_no_syscall;
> + case 423 /* sched_rr_get_interval_time64 */: return gdb_sys_no_syscall;
> + case 424 /* pidfd_send_signal */: return gdb_sys_no_syscall;
> + case 425 /* io_uring_setup */: return gdb_sys_no_syscall;
> + case 426 /* io_uring_enter */: return gdb_sys_no_syscall;
> + case 427 /* io_uring_register */: return gdb_sys_no_syscall;
> + case 428 /* open_tree */: return gdb_sys_no_syscall;
> + case 429 /* move_mount */: return gdb_sys_no_syscall;
> + case 430 /* fsopen */: return gdb_sys_no_syscall;
> + case 431 /* fsconfig */: return gdb_sys_no_syscall;
> + case 432 /* fsmount */: return gdb_sys_no_syscall;
> + case 433 /* fspick */: return gdb_sys_no_syscall;
> + case 434 /* pidfd_open */: return gdb_sys_no_syscall;
> + case 435 /* clone3 */: return gdb_sys_no_syscall;
> + case 436 /* close_range */: return gdb_sys_no_syscall;
> + case 437 /* openat2 */: return gdb_sys_no_syscall;
> + case 438 /* pidfd_getfd */: return gdb_sys_no_syscall;
> + case 439 /* faccessat2 */: return gdb_sys_no_syscall;
> + case 440 /* process_madvise */: return gdb_sys_no_syscall;
> + case 441 /* epoll_pwait2 */: return gdb_sys_no_syscall;
> + case 442 /* mount_setattr */: return gdb_sys_no_syscall;
> + case 443 /* quotactl_fd */: return gdb_sys_no_syscall;
> + case 444 /* landlock_create_ruleset */: return gdb_sys_no_syscall;
> + case 445 /* landlock_add_rule */: return gdb_sys_no_syscall;
> + case 446 /* landlock_restrict_self */: return gdb_sys_no_syscall;
> + case 447 /* memfd_secret */: return gdb_sys_no_syscall;
> + case 448 /* process_mrelease */: return gdb_sys_no_syscall;
> + case 449 /* futex_waitv */: return gdb_sys_no_syscall;
> + case 450 /* set_mempolicy_home_node */: return gdb_sys_no_syscall;
> + case 451 /* cachestat */: return gdb_sys_no_syscall;
> + case 452 /* fchmodat2 */: return gdb_sys_no_syscall;
> + case 453 /* map_shadow_stack */: return gdb_sys_no_syscall;
> + case 454 /* futex_wake */: return gdb_sys_no_syscall;
> + case 455 /* futex_wait */: return gdb_sys_no_syscall;
> + case 456 /* futex_requeue */: return gdb_sys_no_syscall;
> + case 457 /* statmount */: return gdb_sys_no_syscall;
> + case 458 /* listmount */: return gdb_sys_no_syscall;
> + case 459 /* lsm_get_self_attr */: return gdb_sys_no_syscall;
> + case 460 /* lsm_set_self_attr */: return gdb_sys_no_syscall;
> + case 461 /* lsm_list_modules */: return gdb_sys_no_syscall;
> + case 462 /* mseal */: return gdb_sys_no_syscall;
> + case 463 /* setxattrat */: return gdb_sys_no_syscall;
> + case 464 /* getxattrat */: return gdb_sys_no_syscall;
> + case 465 /* listxattrat */: return gdb_sys_no_syscall;
> + case 466 /* removexattrat */: return gdb_sys_no_syscall;
> +
> + case 222 /* unused */: return gdb_sys_no_syscall;
> + case 223 /* unused */: return gdb_sys_no_syscall;
> + case 251 /* unused */: return gdb_sys_no_syscall;
> + case 285 /* unused */: return gdb_sys_no_syscall;
> + case 387 /* unused */: return gdb_sys_no_syscall;
> + case 388 /* unused */: return gdb_sys_no_syscall;
> + case 389 /* unused */: return gdb_sys_no_syscall;
> + case 390 /* unused */: return gdb_sys_no_syscall;
> + case 391 /* unused */: return gdb_sys_no_syscall;
> + case 392 /* unused */: return gdb_sys_no_syscall;
> + case 415 /* unused */: return gdb_sys_no_syscall;
> +
> + default:
> + break;
> + }
>
> if (syscall <= i386_syscall_max)
> return (enum gdb_syscall) syscall;
>
> base-commit: 465465ce9ca4f3e6e29aeaf33f6a2220693f4e62
next prev parent reply other threads:[~2025-03-13 12:41 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-13 9:53 Tom de Vries
2025-03-13 12:40 ` Guinevere Larsen [this message]
2025-03-13 13:06 ` Tom de Vries
2025-03-13 15:20 ` Guinevere Larsen
2025-03-13 15:35 ` Tom de Vries
2025-03-13 15:09 ` Andrew Burgess
2025-03-14 15:46 ` Tom de Vries
2025-03-14 15:50 ` Guinevere Larsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6cab43c6-85c9-4834-9f44-9cc1267621b7@redhat.com \
--to=guinevere@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=tdevries@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox