git: b71defdbd871 - main - makesyscalls: generate private syscall symbols

From: Brooks Davis <brooks_at_FreeBSD.org>
Date: Mon, 05 Feb 2024 20:38:42 UTC
The branch main has been updated by brooks:

URL: https://cgit.FreeBSD.org/src/commit/?id=b71defdbd8715c1a778ebf8195e41b1c6db90d6c

commit b71defdbd8715c1a778ebf8195e41b1c6db90d6c
Author:     Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2023-11-21 16:55:06 +0000
Commit:     Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2024-02-05 20:34:56 +0000

    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
---
 sys/tools/makesyscalls.lua | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/sys/tools/makesyscalls.lua b/sys/tools/makesyscalls.lua
index 393fe57713aa..1c80aa44c1a7 100644
--- a/sys/tools/makesyscalls.lua
+++ b/sys/tools/makesyscalls.lua
@@ -42,6 +42,7 @@ local generated_tag = "@" .. "generated"
 local config = {
 	os_id_keyword = "FreeBSD",		-- obsolete, ignored on input, not generated
 	abi_func_prefix = "",
+	libsysmap = "/dev/null",
 	sysnames = "syscalls.c",
 	sysproto = "../sys/sysproto.h",
 	sysproto_h = "_SYS_SYSPROTO_H_",
@@ -85,6 +86,7 @@ local output_files = {
 	"sysnames",
 	"syshdr",
 	"sysmk",
+	"libsysmap",
 	"syssw",
 	"systrace",
 	"sysproto",
@@ -922,6 +924,12 @@ local function handle_noncompat(sysnum, thr_flag, flags, sysflags, rettype,
 		    config.syscallprefix, funcalias, sysnum))
 		write_line("sysmk", string.format(" \\\n\t%s.o",
 		    funcalias))
+		if funcalias ~= "exit" and funcalias ~= "getlogin" and funcalias ~= "vfork" then
+			write_line("libsysmap", string.format("\t_%s;\n",
+			    funcalias))
+		end
+		write_line("libsysmap", string.format("\t__sys_%s;\n",
+		    funcalias))
 	end
 end
 
@@ -1485,6 +1493,13 @@ write_line("sysmk", string.format([[# FreeBSD system call object files.
 # DO NOT EDIT-- this file is automatically %s.
 MIASM = ]], generated_tag))
 
+write_line("libsysmap", string.format([[/*
+ * FreeBSD system call symbols.
+ *  DO NOT EDIT-- this file is automatically %s.
+ */
+FBSDprivate_1.0 {
+]], generated_tag))
+
 write_line("systrace", string.format([[/*
  * System call argument to DTrace register array converstion.
  *
@@ -1548,6 +1563,7 @@ write_line("sysprotoend", string.format([[
 ]], config.sysproto_h))
 
 write_line("sysmk", "\n")
+write_line("libsysmap", "};\n")
 write_line("sysent", "};\n")
 write_line("sysnames", "};\n")
 -- maxsyscall is the highest seen; MAXSYSCALL should be one higher