On Thu, Jun 5, 2025 at 6:14 AM John Baldwin <j...@freebsd.org> wrote:
>
> 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.

Yes. All this generation is why we did the lua project to make the
master system call table parsing into a library. We need it also for
qemu-bsd-user long-term: writing new system calls by hand is a pain
and error-prone.

> 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).

I think that we should, in the fullness of time, flag these so we can
do that. If we do add additional notations, we can not only have
better truss/trace output, as well as being able to generate the right
flag translations for running FreeBSD binaries on Linux (which people
are doing by hand right now...).

> 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.

I'd love for this to be generated as well...  It was certainly one of
the use cases that we had in mind for the GSOC project that did this.

Warner

Reply via email to