On 6/4/25 19:03, Kyle Evans wrote:
On 6/4/25 17:55, Gleb Smirnoff wrote:
On Wed, Jun 04, 2025 at 01:51:14AM +0000, Kyle Evans wrote:
K> The branch main has been updated by kevans:
K>
K> URL:
https://cgit.FreeBSD.org/src/commit/?id=969f6380eb66f809eed3e5c38b6021824a4cc2bf
K>
K> commit 969f6380eb66f809eed3e5c38b6021824a4cc2bf
K> Author: Kyle Evans <kev...@freebsd.org>
K> AuthorDate: 2025-06-04 01:51:06 +0000
K> Commit: Kyle Evans <kev...@freebsd.org>
K> CommitDate: 2025-06-04 01:51:06 +0000
K>
K> kdump: nicer printing of kill(2) PID argument
K>
K> Similar to wait*(), kill(2) operates on a pid that currently gets output
K> as hex. Output it in decimal to make it a little easier to eyeball the
K> pid we're signalling.
K>
K> Reviewed by: markj
K> Differential Revision: https://reviews.freebsd.org/D50508
I didn't review if PIDs are always printed as decimals or not, but for
the file descriptors it is a mix of hex and decimals. :( Usually I go
with a sed script over kdump output to make it consistent.
To be fair, I'd like to fix that, too- I noticed close() the other day
for fd > 0, but paused when I:
1.) couldn't tell where we even output close args
close is probably handled by the default case where where all of the
arguments are just output as hex values. Note that for kdump, most
syscalls fall into this case including syscalls with pointer arguments.
You'd probably be a bit sad with 64-bit pointers printed as decimal
for many system calls.
truss is different as truss stores some rudimentary type information about
system call arguments and then defaults to printing certain types like
file descriptors and ids as decimal. truss also prints NULL for null
pointers IIRC.
A useful project perhaps would be to move the table describing system
call argument types out of syscalls.c in truss and into libsysdecode so
that kdump could also reuse it. Probably the API you would want is
something that returns an individual `struct syscall_decode` given
(ABI, number) input arguments.
I don't think you can generate this table automatically from makesyscalls.lua
as many of the "types" truss uses are synthetic types that aren't visible
in C, e.g. "OpenFlags" meaning O_* flags passed to open(2).
This would allow kdump's hand-written per-syscall-number rules to instead
be closer to truss where you instead just iterate over types. It would
also mean only having to update a single table in libsysdecode when adding
a new system call to add both truss and kdump support. Only when a new
argument type is added would one have to actually touch truss or kdump
directly.
--
John Baldwin