Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/share/man/man9 versioningsyscalls(9): markup fixes



details:   https://anonhg.NetBSD.org/src/rev/349029ab9ba9
branches:  trunk
changeset: 377366:349029ab9ba9
user:      uwe <uwe%NetBSD.org@localhost>
date:      Sun Jul 09 00:29:49 2023 +0000

description:
versioningsyscalls(9): markup fixes

While here, fix the pasto for the new ino_t and time_t size.

diffstat:

 share/man/man9/versioningsyscalls.9 |  130 ++++++++++++++++++++---------------
 1 files changed, 75 insertions(+), 55 deletions(-)

diffs (289 lines):

diff -r be9c91ae1d0e -r 349029ab9ba9 share/man/man9/versioningsyscalls.9
--- a/share/man/man9/versioningsyscalls.9       Sun Jul 09 00:01:55 2023 +0000
+++ b/share/man/man9/versioningsyscalls.9       Sun Jul 09 00:29:49 2023 +0000
@@ -1,4 +1,4 @@
-.\"    $NetBSD: versioningsyscalls.9,v 1.1 2023/07/08 16:14:11 christos Exp $
+.\"    $NetBSD: versioningsyscalls.9,v 1.2 2023/07/09 00:29:49 uwe Exp $
 .\"
 .\" Copyright (c) 2023 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -28,11 +28,13 @@
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
 .Dd June 23, 2023
-.Dt versioningsyscalls 9
+.Dt VERSIONINGSYSCALLS 9
 .Os
+.
 .Sh NAME
 .Nm versioningsyscalls
 .Nd guide on versioning syscalls
+.
 .Sh DESCRIPTION
 .Nx
 has the ability to change the ABI of a syscall whilst retaining backwards
@@ -45,18 +47,18 @@ to move from 16 bits to 32 bits,
 .Ft ino_t
 and
 .Ft time_t
-to move from 16 bits to 32 bits and
-adding fields to
+to move from 32 bits to 64 bits,
+and adding fields to
 .Ft struct kevent
 without disturbing existing binaries.
 To achieve this both kernel and userland changes are required.
 .Pp
 In the kernel, a new syscall is added with a new ABI, and the old syscall
 is retained and moved to a new location that holds the compatibility syscalls
-.Pa ( src/sys/compat ) .
+.Pq Pa src/sys/compat .
 Kernels can be compiled with or without backwards compatibility syscalls.
 See the
-.Li COMPAT_XX
+.Dv COMPAT_ Ns Ar XX
 options in
 .Xr options 4 .
 .Pp
@@ -76,18 +78,18 @@ emulated because of the cost and safety 
 .Pp
 To avoid confusion, the following words are used to disambiguate which version
 of the system call is being described.
-.Bl -tag -offset indent -width "current"
-.It old
+.Bl -tag -offset indent -width Em
+.It Em old
 Any previous versions of the syscall, which have already been versioned and
 superseded by the current version of the syscall.
-.It current
+.It Em current
 The version of the syscall currently in use.
-.It next
+.It Em next
 The version of the syscall that will become standard in the next release.
 .El
 .Pp
 Additionally,
-.Em XYZ
+.Ar XYZ
 always represents the last
 .Nx
 release where the current
@@ -96,63 +98,71 @@ leading zero.
 For example
 .Nx 0.9
 has
-.Li COMPAT_09
+.Dv COMPAT_09
 whereas
 .Nx 10.0
 has
-.Li COMPAT_100 .
+.Dv COMPAT_100 .
+.
 .Sh VERSIONING THE SYSCALL
 This section describes what needs to be modified to add the new version of the
 syscall.
 It assumes the current version of the syscall is
-.Fn my_syscall struct\ my_struct\ *ms
+.Fn my_syscall "struct my_struct *ms"
 and that
-.Li my_struct
+.Ft my_struct
 will be versioned.
 If not versioning a struct, passages that mention
-.Li my_struct
+.Ft my_struct
 can be ignored.
+.
 .Ss Versioning structs
 To version
-.Li struct my_struct ,
+.Ft struct my_struct ,
 first make a copy of
-.Li my_struct
+.Ft my_struct
 renamed to
-.Li my_structXYZ
+.Ft my_structXYZ
 in an equivalent header in
 .Pa sys/compat/sys .
 After that, you can freely modify
-.Li my_struct
+.Ft my_struct
 as desired.
+.
 .Ss Versioning the entry point
 The stub for the next version of the syscall will be
 .Fn __my_syscallXYZ ,
 and will have entry point
 .Fn sys___my_syscallXYZ .
+.
 .Ss Modifying syscalls.conf
 .Pa sys/kern/syscalls.conf
 may need to be modified to contain
 .Li compat_XYZ
 in the
-.Li compatopts
-field.
+.Va compatopts
+variable.
+.
 .Ss Modifying syscalls.master
 First, add the next syscall to
 .Pa sys/kern/syscalls.master
 keeping
-.Li my_syscall
-as the name, and set the (optional) compat field of the declaration to XYZ.
+.Fn my_syscall
+as the name, and set the (optional) compat field of the declaration to
+.Ar XYZ .
 .Pp
 Next, modify the current version of the syscall, and replace the type
-field (usually just STD) with
-.Li COMPAT_XYZ MODULAR compat_XYZ .
+field
+.Pq usually just Li STD
+with
+.Dv COMPAT_XYZ MODULAR compat_XYZ .
 .Pp
 The keyword
-.Li MODULAR
+.Dv MODULAR
 indicates that the system call can be part of a kernel module.
 Even if the system call was not part of a module before, now it will be part
 of the
-.Li COMPAT_XYZ
+.Dv COMPAT_XYZ
 module.
 .Pp
 Finally, if applicable, replace the types of the current and old versions of the
@@ -162,27 +172,29 @@ Overall, the final diff should look like
 .Bd -literal
 - 123 STD                           { int|sys||my_syscall(struct my_struct *ms); }
 + 123 COMPAT_XYZ MODULAR compat_XYZ { int|sys||my_syscall(struct my_structXYZ *ms); }
-\&.\&.\&.
+\&...
 + 456 STD                          { int|sys|XYZ|my_syscall(struct my_struct *ms); }
 .Ed
+.
 .Ss Modifying Makefile.rump
 If the current syscall is rump,
 .Pa sys/rump/Makefile.rump
 must contain
-.Li XYZ
+.Ar XYZ
 in the
-.Li RUMP_NBCOMPAT
+.Dv RUMP_NBCOMPAT
 variable.
+.
 .Ss Regenerating the system calls
 If versioning structs, then modify
 .Pa sys/kern/makesyscalls.sh
 by adding and entry for
-.Li struct my_structXYZ
+.Ft struct my_structXYZ
 type to
-.Li uncompattypes .
+.Va uncompattypes .
 .Pp
 The
-.Li uncompattypes
+.Va uncompattypes
 map is used in
 .Xr rump 7
 system call table generation, to map from the versioned types to the original
@@ -198,6 +210,7 @@ and then running
 .Pa sys/rump/makerumpsyscalls.sh
 passing it the path to the result of the build you just did as its first
 argument.
+.
 .Sh KERNEL COMPATIBILITY
 This section covers maintaining compatibility at the kernel level, by
 adding an entry point for the current syscall in an appropriate compat
@@ -207,6 +220,7 @@ syscall has entry point
 .Fn sys_my_syscall
 and lives inside
 .Pa sys/kern/my_file.c .
+.
 .Ss Creating the compat current syscall
 The compat version of the current syscall has entry point
 .Fn compat_XYZ_sys_my_syscall ,
@@ -215,6 +229,7 @@ and should be implemented in
 with the same semantics as the current syscall.
 Often this involves translating the arguments to the next syscall,
 and then calling that syscall's entry point.
+.
 .Ss Adding it to the compat module
 .Pa sys/compat/common/my_file_XYZ.c
 must contain an array of
@@ -239,24 +254,25 @@ The stubs for these functions should be 
 .Pp
 Overall,
 .Pa sys/compat/common/my_file_XYZ.c
-must at the minimum include
-.Bd -literal
-+ static const struct syscall_package my_file_XYZ_syscalls[] = {
-+      { SYS_compat_XYZ_my_syscall, 0, (sy_call_t *)compat_XYZ_sys_my_syscall },
-+      { 0, 0, NULL },
-+ };
-+
-+ int
-+ compat_XYZ_my_syscall(...)
-+ { /* Compat implementation goes here. */ }
-+
-+ int
-+ my_file_XYZ_init(void)
-+ { return syscall_establish(NULL, my_file_XYZ_syscalls); }
-+
-+ int
-+ my_file_XYZ_fini(void)
-+ { return syscall_disestablish(NULL, my_file_XYZ_syscalls); }
+must at the minimum contain
+.Bd -literal -offset indent
+static const struct syscall_package my_file_XYZ_syscalls[] = {
+        { SYS_compat_XYZ_my_syscall, 0,
+            (sy_call_t *)compat_XYZ_sys_my_syscall },
+        { 0, 0, NULL },
+};
+
+int
+compat_XYZ_my_syscall(...)
+{ /* Compat implementation goes here. */ }
+
+int
+my_file_XYZ_init(void)
+{ return syscall_establish(NULL, my_file_XYZ_syscalls); }
+
+int
+my_file_XYZ_fini(void)
+{ return syscall_disestablish(NULL, my_file_XYZ_syscalls); }
 .Ed
 .Pp
 Finally,
@@ -268,7 +284,9 @@ and
 functions call
 .Fn my_file_XYZ_init
 and
-.Fn my_file_XYZ_fini .
+.Fn my_file_XYZ_fini
+respectively.
+.
 .Ss Modifying old compat syscalls
 If the current syscall has already been versioned, you might need to
 modify the old compat syscalls in
@@ -277,9 +295,11 @@ to either use the next syscall or the cu
 Note that compat code can be made to depend on compat code for more
 recent releases.
 .Sh USERLAND COMPATIBILITY
-With the exception of the libraries described below, making the rest of userland
-work will just involve recompiling, and perhaps changing a constant or a
+With the exception of the libraries described below, making the rest
+of userland work will just involve recompiling, and perhaps changing a
+constant or a
 .Li #define .
+.
 .Ss libc
 A userland version of any old and current versions of the syscall should be
 implemented in terms of the next syscall in



Home | Main Index | Thread Index | Old Index