History log of /freebsd-current/sys/tools/makesyscalls.lua
Revision Date Author Comments
# 79b758e3 16-Apr-2024 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: generate core libsys header

Create a header covering most of the "stable" libsys interfaces.
Specifically __sys_<foo> syscall stubs and __sys_<foo>_t typedefs for
those interfaces.

Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D44386


# 5d88a2aa 15-Apr-2024 Brooks Davis <brooks@FreeBSD.org>

sysproto.h: sys/acl.h -> sys/types.h

In sysproto.h, stop including sys/acl.h as syscall defintions now use
__acl* types from sys/_types.h. Add sys/types.h to provide types
previously provided by sys/param.h (via sys/acl.h).

Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D44467


# cc4ffc97 06-Mar-2024 Brooks Davis <brooks@FreeBSD.org>

libsys: don't try to expose yield

The undocumented yield system call has never been implemented via libc
or libsys (except accidentally for <15 minutes in 1998 between commits
abd529cebab9 and 0db2fac06ab7). Avoid trying to export it now to avoid
failures when linking with --no-undefined-version.

Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D44236


# 304cdac7 29-Feb-2024 Brooks Davis <brooks@FreeBSD.org>

lib{c,sys}: expose _getlogin consistently

Historically we exposed _getlogin as a private symbol on a per-arch basis
(except on aarch64 and riscv) for no obvious reason. We now need to
expose it for libc's use so remove the special case from
makesyscalls.lua and expose it in the generated syscalls.map.

Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D44116


# b71defdb 21-Nov-2023 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: generate private syscall symbols

For libsys we need to expose all the private symbols (_ and __sys_
prefixes) so libsys can replace the libc versions. Rather than trying
to maintain a table, teach makesyscalls to generate it.

There are a small number of "_" prefixed symbols that are exposed as
public interfaces rather than in the private symbol space. Since the
list is short, just hardcode it for now.

If doesn't appear that we need to export freebsd#_foo symbols for compat
system calls explicitly. If it turns out we do, there are probably few
enough of them to handle seperately.

Reviewed by: kib, emaste, imp
Pull Request: https://github.com/freebsd/freebsd-src/pull/908


# c1c8afd0 01-Dec-2023 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: add COMPAT14 support

Reviewed by: kevans, imp
Fixes: 84d12f887c91f Add a COMPAT_FREEBSD14 kernel option
Differential Revision: https://reviews.freebsd.org/D42861


# 2f68ae61 12-Oct-2023 Olivier Certner <olce.freebsd@certner.fr>

makesyscall: Simplify a bit emitting syscall declarations

Reviewed by: kevans, imp
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D42168


# 54d487c4 17-Nov-2023 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: don't make syscall.mk by default

We only want to produce syscall.mk for the main syscall table so default
to not producing it (send it to /dev/null) and add a syscalls.conf to
sys/kern to trigger the creation of sys/sys/syscall.mk. This eliminates
the need for entries in other syscalls.conf files and is a cleaner
pattern going forward.

Reviewed by: kevans, imp
Differential Revision: https://reviews.freebsd.org/D42663


# 8c99d94c 16-Aug-2023 Warner Losh <imp@FreeBSD.org>

sys: Remove $FreeBSD$: two-line lua tag

Remove /^--\n--\s*\$FreeBSD\$.*$\n/


# 61fe63f6 09-Jun-2023 Warner Losh <imp@FreeBSD.org>

makesyscall: Stop generating $FreeBSD$

With 14 coming, we no longer need to generate the $FreeBSD$. We can
likely MFC that to 13 as well.

MFC After: 2 weeks
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D39879


# 4d846d26 10-May-2023 Warner Losh <imp@FreeBSD.org>

spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD

The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch
up to that fact and revert to their recommended match of BSD-2-Clause.

Discussed with: pfg
MFC After: 3 days
Sponsored by: Netflix


# c1e987e0 20-Apr-2023 Warner Losh <imp@FreeBSD.org>

makesyscalls.lua: Minor fluff removal

luacheck pointed out two minor issues: line isn't declared as a global,
so declare it local. Also remove an unused parameter.

Suggested by: kevans
Sponsored by: Netflix


# 8341a74a 20-Apr-2023 Warner Losh <imp@FreeBSD.org>

makesyscalls.lua: Use "sysxxx" consistently

Find the few places where we use 'sysxxx' and use "sysxxx" instead to be
more consistent.

Sponsored by: Netflix


# 1dd350fc 20-Apr-2023 Warner Losh <imp@FreeBSD.org>

makesyscalls.lua: Make more luaish

x["y"] can be written as x.y, which looks better and is a more typical
lua idiom.

Sponsored by: Netflix
Reviewed by: kevans
Differential Revision: https://reviews.freebsd.org/D39709


# b1ad6a90 28-Mar-2022 Brooks Davis <brooks@FreeBSD.org>

syscallarg_t: Add a type for system call arguments

This more clearly differentiates system call arguments from integer
registers and return values. On current architectures it has no effect,
but on architectures where pointers are not integers (CHERI) and may
not even share registers (CHERI-MIPS) it is necessiary to differentiate
between system call arguments (syscallarg_t) and integer register values
(register_t).

Obtained from: CheriBSD

Reviewed by: imp, kib
Differential Revision: https://reviews.freebsd.org/D33780


# 0910a41e 12-Jan-2022 Brooks Davis <brooks@FreeBSD.org>

Revert "syscallarg_t: Add a type for system call arguments"

Missed issues in truss on at least armv7 and powerpcspe need to be
resolved before recommit.

This reverts commit 3889fb8af0b611e3126dc250ebffb01805152104.
This reverts commit 1544e0f5d1f1e3b8c10a64cb899a936976ca7ea4.


# 1544e0f5 12-Jan-2022 Brooks Davis <brooks@FreeBSD.org>

syscallarg_t: Add a type for system call arguments

This more clearly differentiates system call arguments from integer
registers and return values. On current architectures it has no effect,
but on architectures where pointers are not integers (CHERI) and may
not even share registers (CHERI-MIPS) it is necessiary to differentiate
between system call arguments (syscallarg_t) and integer register values
(register_t).

Obtained from: CheriBSD

Reviewed by: imp, kib
Differential Revision: https://reviews.freebsd.org/D33780


# 84946666 08-Dec-2021 Kyle Evans <kevans@FreeBSD.org>

sysent: move away from allowing all compat options for other ABIs

Notably, the current compat_options only makes sense for native and
freebsd32 ABIs. For the others, it just adds cruft. Switch to having
sets of compat options, and default to the native set. Setup the other
ABIs where it doesn't make sense to opt-out of the native set.

This removes some redundant COMPAT_FREEBSD* stuff from Linuxolator bits.

line_expr in makesyscalls.lua is fixed to allow empty strings to be
specified, since they're harmless.

Reviewed by: brooks, kib (both earlier version)
Differential Revision: https://reviews.freebsd.org/D33356


# c1a84727 08-Dec-2021 Konstantin Belousov <kib@FreeBSD.org>

syscalls: add COMPAT13

Reviewed by: brooks
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D33343


# d7f306c5 29-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: add a new SYSMUX type

This type is for system call multiplexers (syscall(2), __syscall(2))
that don't have a normal handler and instead are handled in the
machine-dependent syscall code.

Reviewed by: kib, imp


# f260a69d 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: strip _Contains_ argument annotations

Reviewed by: kevans


# 64cc9803 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: add override of ABI change detection

While we can detect most ABI changes through analysis of
syscalls.master with suitable annotations, to cases are handled
in the core implementation and others have changes that can not be
infered. Add two new config variables syscall_abi_change and
syscall_no_abi_change which override the detected value. Both are
space-seperated lists of syscall names.

Reviewed by: kevans


# 988e8db3 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: automate detection of ABI changes

Use pattern matching including matches of _Contains_*_ argument
annotations to (mostly) determine which system calls require
ABI-specific handling. Automatically treat syscalls as NOPROTO
if no ABI changes are present.

Reviewed by: kevans


# 804a84fb 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls.lua: Add the ABI function prefix reliably.

The previous code mostly worked, but ended up adding bogus sys_<foo>()
declerations.

Reviewed by: kevans


# 5e709311 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: allow config to force OBSOL and UNIMPL

The obsol and unimpl config variables are space-seperated lists of
syscalls that should treated as being declared OBSOL and UNIMPL.

The allows an ABI to exclude select system calls listed in
syscalls.master.

Reviewed by: kevans


# 64007b00 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: handle 64-bit args on 32-bit

On 32-bit architectures, 64-bit arguments are passed in pairs of
registers. On non-x86 architectures these arguments must be in evenly
aligned registers which necessiciates inserting a pad register into the
argument list. This has historically been supported by adding ifdefs
around padded and unpadded syscall defintions in syscalls.master.

In order to enable generation of 32-bit support files from the base
syscalls.master, pull this support in to makesyscalls.lua enabled by
adding pair_64bit to abi_flags.

The changes to sys_proto.h simply add #ifdef PAD64_REQUIRED
around pad arguments in struct <syscall>_args. In systrace_args(),
replace static syscall index values with post-incremented indexs
allowing a simple ifdef around the argument. Under -O1 or higher
code generation is identical. systrace_entry_setargdesc() is a bit
more complicated as we switch on argument indices. Solve this
with some use of define/undef pairs to compute the correct indices.

Reviewed by: kevans


# 79634eb9 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: handle arrays of pointers

When the config variable abi_intptr_t is not "", transform arrays of
pointers to arrays of abi_intptr_t.

Reviewed by: kevans


# 0a4e1644 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: handle longs in ABI compat

Replace long-derived types with their abi equivalent where
required by the target ABI. There are two cases:
- All pointers to types that go from 64-bit to 32-bit between the
default ABI and the target ABI.
- Signed arguments that go from 64-bit to 32-bit (these require
sign-extension before passing to general kernel ABIs).

This adds four new config variables: abi_long, semid_t, abi_size_t,
and abi_u_long which default to long, size_t, and u_long respectively.

Reviewed by: kevans


# b85fb390 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls.lua: Allow translation of intptr_t arguments

Translate instances of intptr_t to the config value abi_intptr_t
(defaults to "intptr_t"). Used in CheriABI to translate intptr_t
to intcap_t for hybrid kernels.

Reviewed by: kevans


# 37b425bd 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: intptr_t arguments are pointers

Match intptr_t arguments as pointers. Currently this is a no-op
change to systrace_args.c.

Reviewed by: kevans


# 3f8f46a0 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: Add a way to include per-ABI headers

When the string %%ABI_HEADERS%% is found in syscalls.master, replace
it with the contents of the abi_headers config variable. This allows
an ABI-specific syscalls.conf to add lines like:

#include <compat/freebsd32/freebsd32.h>

when working from a shared syscalls.master.

Reviewed by: kevans


# ed8a4423 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: allow multiple expressions for each abi change

Limitations in lua patterns means we need to be able to match more
than one possible expression.

Reviewed by: kevans


# 818aa954 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: Fix expression for time_t_size

Reviewed by: kevans


# 5203efea 22-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: Remove _native suffix handling

This supported a hack we used in CheriBSD which has been removed.

Reviewed by: kevans


# 1739de97 17-Nov-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls: make strip_abi_prefix more robust

Allow strip_abi_prefix() to be called with nil and return nil in that
case. This simplifies handling of RESERVED entries.

Reviewed by: kevans


# 6687410a 26-Jan-2021 Kyle Evans <kevans@FreeBSD.org>

makesyscalls: sprinkle some assert() on standard function calls

Improves our error reporting, ensuring that we aren't just ignoring
errors in the common case.

Note specifically the boundary where we have to change up our error
handling approach. It's fine to error() out up until we create the
tempdir, then the rest should try to handle it gracefully and abort().
A future change will clean this up further by pcall'ing all of the bits
that cannot currently error() without cleaning up.


# e12a0ffe 23-Sep-2021 Kyle Evans <kevans@FreeBSD.org>

makesyscalls: rip out arbitrary command execution

This was previously needed only for CloudABI, which used it to generate
its capenabled from syscalls.master. CloudABI was removed in
cf0ee8738e31, so we don't need to support this anymore. Others looking
to do similar things should come up with a more integrated technique,
such as a .conf flag or pattern/glob support. brooks suggests that it
could be done in modern makesyscalls.lua by adding a config flag to
specify always-on/initial flags (CAPENABLED).

Reviewed by: brooks, imp
MFC after: never
Differential Revision: https://reviews.freebsd.org/D32095


# 340e009e 27-Jan-2021 Kyle Evans <kevans@FreeBSD.org>

makesyscalls: stop trying to remove . and .. in cleanup

lfs.dir() will include these entries, but os.remove() cannot remove them
for obvious reasons.


# cf0ee873 12-Sep-2021 Konstantin Belousov <kib@FreeBSD.org>

Drop cloudabi

According to https://github.com/NuxiNL/cloudlibc:
CloudABI is no longer being maintained. It was an awesome experiment,
but it never got enough traction to be sustainable.

There is no reason to keep it in FreeBSD.

Approved by: ed (private mail)
Reviewed by: emaste
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D31923


# 6945df3f 01-Sep-2021 Brooks Davis <brooks@FreeBSD.org>

makesyscalls.lua: add a CAPENABLED flag

The CAPENABLED flag indicates that the syscall can be used in capsicum
capability mode. It is intended to replace capabilities.conf.

Reviewed by: kevans, emaste
MFC after: 1 week
Sponsored by: DARPA
Differential Revision: https://reviews.freebsd.org/D31349


# ad385f7b 12-May-2021 Ed Maste <emaste@FreeBSD.org>

makesyscalls.lua: improve generated file style(9) compliance

We generally like to avoid style changes when other changes are not
planned. In this case there are some makesyscalls.lua changes in the
pipeline, and this cleans up style nits in generated files that were
highlighted by experiments with clang-format.

Reviewed by: brooks, kevans
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D30235


# 119fa6ee 26-Jan-2021 Brooks Davis <brooks@FreeBSD.org>

syscalls.master: Add a new syscall type: RESERVED

RESERVED syscall number are reserved for local/vendor use. RESERVED is
identical to UNIMPL except that comments are ignored.

Reviewed by: kevans
Sponsored by: DARPA
Differential Revision: https://reviews.freebsd.org/D27988


# 586bd2de 25-Sep-2020 Edward Tomasz Napierala <trasz@FreeBSD.org>

Make makesyscalls.lua initialize 'struct sysent' entries using c99
designated initializers. This makes it easier to modify 'struct sysent'
layout.

Reviewed by: kevans
Sponsored by: DARPA
Differential Revision: https://reviews.freebsd.org/D26530


# 0bc1c078 04-Aug-2020 Kyle Evans <kevans@FreeBSD.org>

makesyscalls.lua: improve syscall ordering validation

There were two separate issues here:

1.) #if/#else wasn't taken into account at all for maxsyscall figures, but
2.) We didn't validate contiguous syscall numbers anyways...

This kind of inconsistency is bad as we don't currently ensure explicit
indexing of, e.g., the sysent array if one syscall is unimplemented/missing.
This could be fixed and might be more robust, but it's also good to have the
"documentation" that comes from being explicit as to what the missing
syscalls are.

The new version looks much like the awk version; stash off the current
'last highest syscall seen' if we hit an #if, restore to that if we hit an
#else, and make sure that we're explicitly always defining the next syscall.

The logic at the tail end of process_syscall_def that moves maxsyscall has
been 'cleaned up' a little since we're now ensuring that it's monotonically
increasing earlier in the function. At the moment I think it's unlikely we'd
see range-definitions that are not UNIMPL, but there's no reason to
specifically handle that case for bumping maxsyscall there.

This change was provoked by reading the commit message for r363832 and
realizing that this validation hadn't been included in the initial rewrite
to lua.

Reviewed by: brooks
Differential Revision: https://reviews.freebsd.org/D25945


# 554f71e2 10-Jan-2020 Kyle Evans <kevans@FreeBSD.org>

makesyscalls.lua: generate all files in /tmp, write into place at the end

This makes makesyscalls.lua more parallel-friendly, or at least not as
hostile to the idea. We get into situations where we're running parallel if
we end up with MAKE_JOBS>1 entering any of the sysent targets, since each
output file is recognized a distinct build step that needs to be executed.

Another commit will add some .ORDER to further improve the situation.

Reported by: jhb
Reviewed by: brooks
Differential Revision: https://reviews.freebsd.org/D23098


# 0d80770c 11-Dec-2019 Kyle Evans <kevans@FreeBSD.org>

makesyscalls.lua: trim trailing spaces/commas from args

These are insignificant as far as declarations go, and we've historically
allowed it. fhlinkat in ^/sys/kern/syscalls.master, for example, currently
has a trailing comma after its final argument that this version of
makesyscalls is ignoring (not by conscious decision).

Fix it for now by actively stripping off trailing whitespace/commas until
we decide to actively prohibit it.


# 0d9048c3 06-Dec-2019 Kyle Evans <kevans@FreeBSD.org>

makesyscalls.lua: improve config processing

The current version will strip out #include directives appearing inside strings, which is clearly wrong. Improve the processing entirely in the following ways:

- Strip only whole-line comments on every single iteration
- Abort if we see a malformed line that doesn't match the key=value format
- For quoted (backtick or double quote) strings, we'll advance to the end of
the key=value pair and make sure there's not extra stuff left over
- For unquoted key=value pairs, we'll strip any trailing comments and verify
there's no internal whitespace

This has revealed the caveat that key/value pairs can't even include escaped quotes (and haven't been able to). I don't know if this is actually problematic, as we're usually looking at cases like "#include <foo>" or raw identifiers.The current version will strip out #include directives appearing inside strings, which is clearly wrong. Improve the processing entirely in the following ways:

Reviewed and noticed by: brooks
Differential Revision: https://reviews.freebsd.org/D22698


# d3276301 17-Nov-2019 Kyle Evans <kevans@FreeBSD.org>

Add makesyscalls.lua, a rewrite of makesyscalls.sh

This currently requires a suitable lua + luafilesystem + luaposix from the
ports tree to build. Discussion is underway in D21893 to add a suitable lua
to the base system, cleverly disguised and out of the way of normal
consumers.

makesyscalls.sh is a good target for rewrite into lua as it's currently a
sh+sed+awk script that can be difficult to add on to, at times. For
instance, adding a new COMPAT* option (that mimicks the behaivor of most
other COMPAT* options) requires a fairly substantial amount of copy/paste;
see r352693 for instance. Attempts to generate part of the awk script for
COMPAT* handling was (very kindly) rejected with a desire to just rewrite
the script in a single language that can handle all of it.

Reviewed by: brooks
Differential Revision: https://reviews.freebsd.org/D21775