From nobody Fri Apr 17 04:45:38 2026 X-Original-To: dev-commits-src-all@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 4fxj4M2W43z6bKsr for ; Fri, 17 Apr 2026 04:45:39 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fxj4M0lpqz45w4 for ; Fri, 17 Apr 2026 04:45:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776401139; 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=3p3q6Mm27LOZPvTOyDL4owtcCf0CCn+EsgG9ltsTUU4=; b=vqR1972J25aNJ+V0tWsH41mJiKDYRAhLRqRZcXzGSFXPiA/JSz9o1zrnGP6QVwvSEaXC6x v/kEKV2/SlKIumR8kKKEsNGXy12BfG/j6THjw0Ys9KBZ/u1kmrMAf4nGAytyzF2vrK66e1 F5t7eUvGAveqJ4iQT89lB3nuKH4J7/qCO/76PPk02e/akNJw4OL6lsERu7dyAjZOVbKffJ AIJ612pCOSVljUEk89zShS9pU+dLA3Ryah4z2Rh5XFWtJ+TzXZKlPWzOu4zRu+qOwxxVak Un1yCMnrTWRivgoDrc0DgoQKvx9i09Vgjno3G0Hz51Ew/7VQVCaw0fPdOGE8XQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776401139; a=rsa-sha256; cv=none; b=cbYJPXe0agEZwszmUIeAeDygCXC1db/rP03fWyDjZYlyLL1/tRQ5Iyg7WiE3WAB5ONdaFO wbWricARvOZkQ+S1IoShkSNKIGN2I1KrplnP7Of/x8/rE+GGDyC+u6bZ8wj9Y8MAXjf92N yoFPwFCyKVsuJoTyhE+Fux7J4txx7xNSCdWfnR0DnGupTGkKHEAW51RLaa3s6xn2sXlA5M WQ/0QQ9nhoQqjRlKoyk60BLvX+Xk28OGArk/vDzH972IHu79GTNbQC33/qSzSCfwy/UFOY hvFceySUbx7OtHY9YqYXLUzRXNq0KrAGJMkuugyiK9c+eWVwGg6TaStzswMWxw== 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=1776401139; 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=3p3q6Mm27LOZPvTOyDL4owtcCf0CCn+EsgG9ltsTUU4=; b=CLQEa44h27+GYrTDC9BmgnsJLbrEkfrTBOLnqd4jiQ+xBauSadC4jyYIUTzbK1W6uNlki1 QZHXPDZ7ZNm4tYlhuYyfZREU9/v87qJfY/uaClxBKEkp6eCCrvro5swujJGyVIfhwOX4tP CY6n76+un5mnIOCRBbQWB0uDsThI8Hv+E2kK+vjWYgS2r/FvuxUPPZo7DeH7fedMFjSt0m 09Ta8Ed2jUsrvjlRKpX0/+17DIQd8n1NiCx3jKtpy5LLa3B50xyZc+3bOj4yHaiUCw+aiy tsGXMnx4AgVOyeae5FmK8pHgvCwxW6VtcsLtVEwSgr3dIQikWd5muV+q/m98/w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fxj4L6LWRzfVj for ; Fri, 17 Apr 2026 04:45:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 348a7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 17 Apr 2026 04:45:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: b3b23f284a67 - main - syscall: Create a script to export the data as json List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b3b23f284a67317309af7c30bb70d5f461f3f02f Auto-Submitted: auto-generated Date: Fri, 17 Apr 2026 04:45:38 +0000 Message-Id: <69e1baf2.348a7.18453e25@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=b3b23f284a67317309af7c30bb70d5f461f3f02f commit b3b23f284a67317309af7c30bb70d5f461f3f02f Author: Warner Losh AuthorDate: 2026-04-17 04:42:10 +0000 Commit: Warner Losh CommitDate: 2026-04-17 04:44:19 +0000 syscall: Create a script to export the data as json Create a script to export the parsed data as json. Include the annotations for the system call arguments, since they are helpful to downstream uses. Sponsored by: Netflix Reviewed by: brooks Differential Revision: https://reviews.freebsd.org/D56408 --- sys/tools/syscalls/scripts/syscall_json.lua | 126 ++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/sys/tools/syscalls/scripts/syscall_json.lua b/sys/tools/syscalls/scripts/syscall_json.lua new file mode 100644 index 000000000000..a29510a9c4c9 --- /dev/null +++ b/sys/tools/syscalls/scripts/syscall_json.lua @@ -0,0 +1,126 @@ +#!/usr/libexec/flua +-- +-- SPDX-License-Identifier: BSD-2-Clause +-- +-- Copyright (c) 2026 Warner Losh +-- + +-- Setup to be a module, or ran as its own script. +local syscall_json = {} +local script = not pcall(debug.getlocal, 4, 1) -- TRUE if script. +if script then + -- Add library root to the package path. + local path = arg[0]:gsub("/[^/]+.lua$", "") + package.path = package.path .. ";" .. path .. "/../?.lua" +end + +local FreeBSDSyscall = require("core.freebsd-syscall") +local ucl = require("ucl") + +-- Convert the type flags set (table with flag=true entries) to a sorted list. +local function flagsToList(typetbl) + local flags = {} + for k, _ in pairs(typetbl) do + table.insert(flags, k) + end + table.sort(flags) + return flags +end + +-- Convert a single syscall object to a plain table suitable for JSON export. +-- Much of the data is available only as a method call. +local function syscallToTable(v) + local entry = { + num = v.num, + name = v.name or "", + alias = v.alias or "", + audit = v.audit or "", + flags = flagsToList(v.type), + compat_level = v:compatLevel(), + compat_prefix = v:compatPrefix(), + symbol = v:symbol(), + rettype = v.rettype or "int", + cap = v.cap or "0", + thr = v.thr or "SY_THR_STATIC", + changes_abi = v.changes_abi or false, + noproto = v.noproto or false, + args_size = v.args_size or "0", + arg_alias = v.arg_alias or "", + } + + -- Export arguments with annotations. + local args = {} + if v.args ~= nil then + for _, a in ipairs(v.args) do + arg = { + type = a.type, + name = a.name, + } + if a.annotation ~= nil and a.annotation ~= "" then + arg.annotation = a.annotation + end + table.insert(args, arg) + end + end + entry.args = args + + -- Export altname/alttag/rettype if present (loadable syscalls). + if v.altname ~= nil then + entry.altname = v.altname + end + if v.alttag ~= nil then + entry.alttag = v.alttag + end + + return entry +end + +function syscall_json.generate(tbl, config) + -- Build the syscalls array. + local syscalls = {} + for _, v in pairs(tbl.syscalls) do + table.insert(syscalls, syscallToTable(v)) + end + + -- Build the structs data into a nicer structure + local structs = {} + if tbl.structs ~= nil then + for k, _ in pairs(tbl.structs) do + table.insert(structs, k) + end + table.sort(structs) + end + + local root = { + syscalls = syscalls, + structs = structs, + } + + local json = ucl.to_json(root) + + -- Write to stdout. + io.write(json) + io.write("\n") +end + +-- Entry of script: +if script then + local config = require("config") + + if #arg < 1 or #arg > 2 then + error("usage: " .. arg[0] .. " syscall.master [config]") + end + + local sysfile, configfile = arg[1], arg[2] + + config.merge(configfile) + config.mergeCompat() + + -- The parsed system call table. + local tbl = FreeBSDSyscall:new{sysfile = sysfile, config = config} + + syscall_json.generate(tbl, config) +end + +-- Return the module. +return syscall_json