Re: How are syscall functions defined?

From: Gary Jennejohn <garyj_at_gmx.de>
Date: Sat, 01 Jul 2023 15:58:22 UTC
On Sat, 01 Jul 2023 04:22:35 -0700
"Pat Maddox" <pat@patmaddox.com> wrote:

> On Sat, Jul 1, 2023, at 3:11 AM, Pat Maddox wrote:
> > jail_attach is defined in syscalls.master [1] which generates a
> > declaration in jail.h [2]. Try as I might, I can?t find any definition
> > of that specific syscall function (or any other).  I think the closest
> > I?ve found is sys_jail_attach in kern_jail.c [3]. I suspect there?s
> > some generation going on that defines jail_attach - but if that?s the
> > case, I haven?t been able to track it down.
> >
> > Can someone point me to how the C function gets defined?
> >
> > Thanks,
> > Pat
> >
> > [1]
> > https://github.com/freebsd/freebsd-src/blob/releng/13.2/sys/kern/syscalls.master#L2307
> > [2]
> > https://github.com/freebsd/freebsd-src/blob/releng/13.2/sys/sys/jail.h#L119
> > [3]
> > https://github.com/freebsd/freebsd-src/blob/releng/13.2/sys/kern/kern_jail.c#L2340
>
> Symbol.map [1] is used to produce a version map [2] which is then fed to the linker [3], which I assume maps the symbols in the resulting binary. I intend to experiment with that a bit, but I think that makes sense.
>
> Pat
>
> [1] https://github.com/freebsd/freebsd-src/blob/releng/13.2/lib/libc/sys/Symbol.map#L672
> [2] https://github.com/freebsd/freebsd-src/blob/releng/13.2/share/mk/bsd.symver.mk#L43
> [3] https://github.com/freebsd/freebsd-src/blob/releng/13.2/share/mk/bsd.lib.mk#L253
>

There's struct sysent sysent[] in /sys/kern/init_sysent.c which has all
the syscalls.  It's apparently indexed using the syscall number.

It's automatically generated, although I don't exactly know how.

--
Gary Jennejohn