From nobody Tue Feb 18 22:04:55 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4YyD8l5qQlz5pFsk; Tue, 18 Feb 2025 22:04:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4YyD8l4Zrlz3T8G; Tue, 18 Feb 2025 22:04:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1739916295; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CFfH4HoKRmtDBRXmlhK6pBFmuONwNdZwG/Ub7Vx0vzQ=; b=RFD4cIo65brdXGAzEKYVUinfpsP0DqrGc9SuciCCgbGNFuqeHx++o9wHoWQHHKjoFyOfYy gn9w3KTiPr2+sPGSo0z0ACfEF2WLe2wgC4IcTj1vA0/YpDnZOTea4nQUVL8JsMLTRbd8+Q 9+y46K4dbK345leeFb6aXn8c+9PkCRzjWz1YxAvfx6uJqq+nOQclxYktMEit+PY9Vxs5nc kCtSB3gVjSz6yh1KAqMxpEOg3uSzDHFvVVtM4xIVtVlJX5CBGOZ+Xf4Kj0weo9xX8+BGNp XMjfplji5PKM6Q/80KuAq9BCRolyLS/0IYtXUHriQkIDu9uf+SBpm3M/qDRFyA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1739916295; a=rsa-sha256; cv=none; b=l7avam22N0oOP2T9fhpv0FnqwHjrcfrkLydf8q3adj+HmlBN8rbPo9r80KJ070N+1UCoj3 20fWnM2ybSUgHPvRx3yFTIsY1oG/70nNCfc9+mz3PW+K5JdZ9/oAwH8QFKZpFTfZCQql5o UzfzqNpcUQau6eXtSbmVRf04SFOMgMEJueqL63L9/ITiAe3B/oPlq+znT6sUc9tfC16sz7 0FlMbpyrnQBwAUUVM9vFWT4UH/689lySqSQ+IcCcxtgw0ggh321WRJDzgs+IUMF9W5t3KK edw6HMpKGeNSEGIm5lQeZgwrzx4NQgAI1Fa7XBTYKdJNl6ZbtxDi0WYiqTQKAQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1739916295; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CFfH4HoKRmtDBRXmlhK6pBFmuONwNdZwG/Ub7Vx0vzQ=; b=sgc2R/u6kp4iJDBm0eIT8ZX74fKNwJZaQ1NIG0cKlFddwQbGunI2+jE2FJ2EmylfCVwFgp +0+kzlQssinM9f6finew7meVUfrHg12VmmAHm9GIpqhJ2QHREQ8l8eQeWg1R/I41MC+CaW 2JElpjQO5yneC+KcmdYWsWYu3HvGgPlvX+EdL+Y68J1CyateXzFL6CIx0HIQ5kRsExD5KC w6q6m0zU9bgLFtH6Z0gEQhWajbQj2tnIaQjO1mcz6iBnuoEO5LpnZokZwtbmiJ18KUgPhh u0WdaqO/sIcuZ5ZWVOhXE/AE2TduCkK42u38if4hY4iwFbIgw3evShfIUVvXLQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4YyD8l3rNyzfLH; Tue, 18 Feb 2025 22:04:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 51IM4tlQ009374; Tue, 18 Feb 2025 22:04:55 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51IM4tZ0009371; Tue, 18 Feb 2025 22:04:55 GMT (envelope-from git) Date: Tue, 18 Feb 2025 22:04:55 GMT Message-Id: <202502182204.51IM4tZ0009371@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Brooks Davis Subject: git: 53fae788f229 - main - sys: syscalls: add a test syscall definition file List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: brooks X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 53fae788f229903df04b2963399afb0dce03b78b Auto-Submitted: auto-generated The branch main has been updated by brooks: URL: https://cgit.FreeBSD.org/src/commit/?id=53fae788f229903df04b2963399afb0dce03b78b commit 53fae788f229903df04b2963399afb0dce03b78b Author: Kyle Evans AuthorDate: 2025-02-18 22:02:19 +0000 Commit: Brooks Davis CommitDate: 2025-02-18 22:02:19 +0000 sys: syscalls: add a test syscall definition file This exercises some subset of the preprocessor that would be nice to still support. Pull Request: https://github.com/freebsd/freebsd-src/pull/1575 --- Makefile.inc1 | 3 +- sys/tools/syscalls/examples/cpp/Makefile | 3 + sys/tools/syscalls/examples/cpp/syscalls.conf | 10 +++ sys/tools/syscalls/examples/cpp/syscalls.master | 26 +++++++ sys/tools/syscalls/examples/cpp/test_proto.h | 63 +++++++++++++++ sys/tools/syscalls/examples/cpp/test_syscall.h | 10 +++ sys/tools/syscalls/examples/cpp/test_syscalls.c | 19 +++++ sys/tools/syscalls/examples/cpp/test_sysent.c | 26 +++++++ .../syscalls/examples/cpp/test_systrace_args.c | 91 ++++++++++++++++++++++ 9 files changed, 250 insertions(+), 1 deletion(-) diff --git a/Makefile.inc1 b/Makefile.inc1 index 4383b4bfe30a..c9a4fee236aa 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -1604,7 +1604,8 @@ _sysent_dirs+= sys/compat/freebsd32 _sysent_dirs+= sys/amd64/linux \ sys/amd64/linux32 \ sys/arm64/linux \ - sys/i386/linux + sys/i386/linux \ + sys/tools/syscalls/examples/cpp sysent: .PHONY .for _dir in ${_sysent_dirs} diff --git a/sys/tools/syscalls/examples/cpp/Makefile b/sys/tools/syscalls/examples/cpp/Makefile new file mode 100644 index 000000000000..cc691a1e2f85 --- /dev/null +++ b/sys/tools/syscalls/examples/cpp/Makefile @@ -0,0 +1,3 @@ +GENERATED_PREFIX= test_ + +.include "../../../../conf/sysent.mk" diff --git a/sys/tools/syscalls/examples/cpp/syscalls.conf b/sys/tools/syscalls/examples/cpp/syscalls.conf new file mode 100644 index 000000000000..7fc15b6bb01f --- /dev/null +++ b/sys/tools/syscalls/examples/cpp/syscalls.conf @@ -0,0 +1,10 @@ +sysnames="test_syscalls.c" +sysproto="test_proto.h" +sysproto_h=_TEST_SYSPROTO_H_ +syshdr="test_syscall.h" +syssw="test_sysent.c" +syscallprefix="TEST_SYS_" +switchname="test_sysent" +namesname="test_syscallnames" +systrace="test_systrace_args.c" +compat_set="" diff --git a/sys/tools/syscalls/examples/cpp/syscalls.master b/sys/tools/syscalls/examples/cpp/syscalls.master new file mode 100644 index 000000000000..4986ad41fc6a --- /dev/null +++ b/sys/tools/syscalls/examples/cpp/syscalls.master @@ -0,0 +1,26 @@ +#include +#include +#include + +0 AUE_NULL UNIMPL unimpl_syscall0 + +; Scenario #1: Vendor uses a reserved slot on just a single platform +#ifdef PLATFORM_FOO +1 AUE_NULL STD { + int syscall1( + int arg1 + ); + } +#else +1 AUE_NULL RESERVED +#endif + +; Scenario #2: The other way around; vendor obsoletes a syscall on newer +; platforms +#ifdef PLATFORM_FOO +2 AUE_NULL OBSOL syscall2 +#else +2 AUE_NULL STD { + int syscall2(void); + } +#endif diff --git a/sys/tools/syscalls/examples/cpp/test_proto.h b/sys/tools/syscalls/examples/cpp/test_proto.h new file mode 100644 index 000000000000..db1f507b8be0 --- /dev/null +++ b/sys/tools/syscalls/examples/cpp/test_proto.h @@ -0,0 +1,63 @@ +/* + * System call prototypes. + * + * DO NOT EDIT-- this file is automatically @generated. + */ + +#ifndef _TEST_SYSPROTO_H_ +#define _TEST_SYSPROTO_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +struct proc; + +struct thread; + +#define PAD_(t) (sizeof(syscallarg_t) <= sizeof(t) ? \ + 0 : sizeof(syscallarg_t) - sizeof(t)) + +#if BYTE_ORDER == LITTLE_ENDIAN +#define PADL_(t) 0 +#define PADR_(t) PAD_(t) +#else +#define PADL_(t) PAD_(t) +#define PADR_(t) 0 +#endif + +#ifdef PLATFORM_FOO +struct syscall1_args { + char arg1_l_[PADL_(int)]; int arg1; char arg1_r_[PADR_(int)]; +}; +#else +#endif +#ifdef PLATFORM_FOO +#else +struct syscall2_args { + syscallarg_t dummy; +}; +#endif +#ifdef PLATFORM_FOO +int sys_syscall1(struct thread *, struct syscall1_args *); +#else +#endif +#ifdef PLATFORM_FOO +#else +int sys_syscall2(struct thread *, struct syscall2_args *); +#endif +#define TEST_SYS_AUE_syscall1 AUE_NULL +#define TEST_SYS_AUE_syscall2 AUE_NULL + +#undef PAD_ +#undef PADL_ +#undef PADR_ + +#endif /* !_TEST_SYSPROTO_H_ */ diff --git a/sys/tools/syscalls/examples/cpp/test_syscall.h b/sys/tools/syscalls/examples/cpp/test_syscall.h new file mode 100644 index 000000000000..026e82d9ac62 --- /dev/null +++ b/sys/tools/syscalls/examples/cpp/test_syscall.h @@ -0,0 +1,10 @@ +/* + * System call numbers. + * + * DO NOT EDIT-- this file is automatically @generated. + */ + +#define TEST_SYS_syscall1 1 + /* 2 is obsolete syscall2 */ +#define TEST_SYS_syscall2 2 +#define TEST_SYS_MAXSYSCALL 3 diff --git a/sys/tools/syscalls/examples/cpp/test_syscalls.c b/sys/tools/syscalls/examples/cpp/test_syscalls.c new file mode 100644 index 000000000000..0e73c8223507 --- /dev/null +++ b/sys/tools/syscalls/examples/cpp/test_syscalls.c @@ -0,0 +1,19 @@ +/* + * System call names. + * + * DO NOT EDIT-- this file is automatically @generated. + */ + +const char *test_syscallnames[] = { + "#0", /* 0 = unimpl_syscall0 */ +#ifdef PLATFORM_FOO + "syscall1", /* 1 = syscall1 */ +#else + "#1", /* 1 = reserved for local use */ +#endif +#ifdef PLATFORM_FOO + "obs_syscall2", /* 2 = obsolete syscall2 */ +#else + "syscall2", /* 2 = syscall2 */ +#endif +}; diff --git a/sys/tools/syscalls/examples/cpp/test_sysent.c b/sys/tools/syscalls/examples/cpp/test_sysent.c new file mode 100644 index 000000000000..18d2b0fd9712 --- /dev/null +++ b/sys/tools/syscalls/examples/cpp/test_sysent.c @@ -0,0 +1,26 @@ +/* + * System call switch table. + * + * DO NOT EDIT-- this file is automatically @generated. + */ + +#include +#include +#include + +#define AS(name) (sizeof(struct name) / sizeof(syscallarg_t)) + +/* The casts are bogus but will do for now. */ +struct sysent test_sysent[] = { + { .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_ABSENT }, /* 0 = unimpl_syscall0 */ +#ifdef PLATFORM_FOO + { .sy_narg = AS(syscall1_args), .sy_call = (sy_call_t *)sys_syscall1, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 1 = syscall1 */ +#else + { .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_ABSENT }, /* 1 = reserved for local use */ +#endif +#ifdef PLATFORM_FOO + { .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_ABSENT }, /* 2 = obsolete syscall2 */ +#else + { .sy_narg = 0, .sy_call = (sy_call_t *)sys_syscall2, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 2 = syscall2 */ +#endif +}; diff --git a/sys/tools/syscalls/examples/cpp/test_systrace_args.c b/sys/tools/syscalls/examples/cpp/test_systrace_args.c new file mode 100644 index 000000000000..74d0aa0ee862 --- /dev/null +++ b/sys/tools/syscalls/examples/cpp/test_systrace_args.c @@ -0,0 +1,91 @@ +/* + * System call argument to DTrace register array conversion. + * + * This file is part of the DTrace syscall provider. + * + * DO NOT EDIT-- this file is automatically @generated. + */ + +static void +systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args) +{ + int64_t *iarg = (int64_t *)uarg; + int a = 0; + switch (sysnum) { +#ifdef PLATFORM_FOO + /* syscall1 */ + case 1: { + struct syscall1_args *p = params; + iarg[a++] = p->arg1; /* int */ + *n_args = 1; + break; + } +#else +#endif +#ifdef PLATFORM_FOO +#else + /* syscall2 */ + case 2: { + *n_args = 0; + break; + } +#endif + default: + *n_args = 0; + break; + }; +} +static void +systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz) +{ + const char *p = NULL; + switch (sysnum) { +#ifdef PLATFORM_FOO + /* syscall1 */ + case 1: + switch (ndx) { + case 0: + p = "int"; + break; + default: + break; + }; + break; +#else +#endif +#ifdef PLATFORM_FOO +#else + /* syscall2 */ + case 2: + break; +#endif + default: + break; + }; + if (p != NULL) + strlcpy(desc, p, descsz); +} +static void +systrace_return_setargdesc(int sysnum, int ndx, char *desc, size_t descsz) +{ + const char *p = NULL; + switch (sysnum) { +#ifdef PLATFORM_FOO + /* syscall1 */ + case 1: + if (ndx == 0 || ndx == 1) + p = "int"; + break; +#else +#endif +#ifdef PLATFORM_FOO +#else + /* syscall2 */ + case 2: +#endif + default: + break; + }; + if (p != NULL) + strlcpy(desc, p, descsz); +}