Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 11887] ファイルの概要

このコミットは、Go言語のsyscallパッケージにおけるOpenBSD向けの自動生成ファイル(z-files)を更新し、OpenBSD 5.0 stableに対応させるものです。具体的には、システムコール番号、エラーコード、データ構造、シグナル定義などがOpenBSD 5.0の変更に合わせて再生成され、OpenBSD上でのGoのビルドが修正されています。

コミット

commit 7959960148c991cb50ee6893b78e9c7aa7b24054
Author: Mikio Hara <mikioh.mikioh@gmail.com>
Date:   Tue Feb 14 14:44:59 2012 +0900

    syscall: regenerate z-files for openbsd
    
    This CL provides regenerated z-files for OpenBSD 5.0 stable.
    Also fixes OpenBSD build.
    
    R=golang-dev, rsc
    CC=golang-dev
    https://golang.org/cl/5656052

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/7959960148c991cb50ee6893b78e9c7aa7b24054

元コミット内容

このコミットの元の内容は、OpenBSD 5.0 stableに対応するために、Goのsyscallパッケージ内のOpenBSD固有のz-filesを再生成することです。これにより、OpenBSD環境でのGoのビルドが正しく行われるようになります。

変更の背景

Go言語のsyscallパッケージは、オペレーティングシステム(OS)の低レベルな機能、特にシステムコールへのアクセスを提供します。異なるOSやアーキテクチャに対応するため、Goは各プラットフォーム固有の定数、構造体、関数などを自動生成するメカニズムを持っています。これらの自動生成されたファイルは慣習的にz-filesと呼ばれます(例: zerrors_openbsd_386.go, zsyscall_openbsd_amd64.go)。

OpenBSDは、セキュリティとコードの品質に重点を置いたUNIX系OSであり、定期的に新しいバージョンがリリースされます。OSのバージョンアップに伴い、システムコール番号、カーネルデータ構造、エラーコード、シグナル定義などが変更されることがあります。Goが特定のOSバージョンで正しく動作するためには、これらのOS固有の定義がGoのsyscallパッケージ内で最新の状態に保たれている必要があります。

このコミットは、OpenBSDがバージョン5.0に更新された際に、その変更にGoが追従できるようにするために行われました。OpenBSD 5.0では、特にネットワーク関連の構造体や一部のシステムコール定義に変更があったため、Goのsyscallパッケージがこれらの変更を反映しないと、GoプログラムがOpenBSD上でコンパイルエラーになったり、予期せぬ動作をしたりする可能性がありました。このコミットは、これらの互換性の問題を解決し、OpenBSD 5.0環境でのGoの安定した動作を保証することを目的としています。

前提知識の解説

  • syscallパッケージ: Go言語の標準ライブラリの一つで、OSの低レベルな機能(システムコール)に直接アクセスするためのインターフェースを提供します。ファイル操作、プロセス管理、ネットワーク通信など、OSカーネルが提供する多くの機能はシステムコールを通じて利用されます。Goのsyscallパッケージは、これらのシステムコールをGoの関数としてラップし、クロスプラットフォームな抽象化を提供しつつも、必要に応じてOS固有の機能にアクセスできるように設計されています。
  • z-files: Goのsyscallパッケージにおいて、特定のOSやアーキテクチャに依存する定数、構造体、システムコール関数などを自動生成したソースファイル群を指します。これらのファイルは、通常、mkall.shのようなスクリプトやgo generateコマンドによって、OSのヘッダーファイル(C言語の.hファイル)から情報を抽出して生成されます。これにより、GoはOSの変更に比較的容易に対応できるようになっています。ファイル名のプレフィックスzは、これらのファイルが自動生成されたものであり、手動で編集すべきではないことを示す慣習的なものです。
  • OpenBSD: セキュリティを最優先に開発されているUNIX系オペレーティングシステムです。厳格なコードレビューとセキュリティ監査が特徴で、多くのセキュリティ機能がデフォルトで有効になっています。OpenBSDは、その堅牢性から、ファイアウォールやルーターなどのネットワークインフラストラクチャで利用されることがあります。
  • システムコール (System Call): アプリケーションプログラムがOSカーネルのサービスを要求するためのインターフェースです。例えば、ファイルの読み書き、メモリの割り当て、プロセスの生成などは、システムコールを通じて行われます。各システムコールには固有の番号(システムコール番号)が割り当てられており、OSのバージョンによってこれらの番号や引数の構造が変更されることがあります。
  • シグナル (Signal): UNIX系OSにおいて、プロセスに対して非同期にイベントを通知するメカニズムです。例えば、Ctrl+Cを押すとSIGINTシグナルがプロセスに送られ、プロセスは通常終了します。シグナルにはそれぞれ固有の番号と意味があり、プロセスは特定のシグナルを受信した際の動作を定義できます。

技術的詳細

このコミットの主要な技術的側面は、OpenBSD 5.0の変更に合わせたz-filesの再生成です。具体的には以下の点が挙げられます。

  1. システムコール番号の更新 (zsysnum_openbsd_386.go, zsysnum_openbsd_amd64.go): OpenBSD 5.0では、一部のシステムコール番号が変更されたか、新しいシステムコールが追加された可能性があります。zsysnum_openbsd_*.goファイルは、Goがシステムコールを呼び出す際に使用するシステムコール番号の定数を定義しています。差分を見ると、SYS_THRSLEEP, SYS_THRWAKEUP, SYS_THREXIT, SYS_THRSIGDIVERTなどのシステムコール名に__プレフィックスが追加されています。これは、OpenBSDの内部的なシステムコール定義が変更されたことを示唆しており、Goがこれに合わせて定義を更新したことを意味します。このような変更は、OSのABI(Application Binary Interface)の互換性に影響を与えるため、Goが正しくシステムコールを呼び出すためには必須の更新です。

  2. エラーコードとシグナル定義の更新 (zerrors_openbsd_386.go, zerrors_openbsd_amd64.go):

    • シグナル定義の型安全性の向上: 以前は単なるconstとして定義されていたシグナル定数(SIGABRT, SIGALRMなど)が、Signalという新しい型にキャストされる形で再定義されています。これにより、Killシステムコールなどのシグナルを引数にとる関数で、より厳密な型チェックが可能になり、Goコードの堅牢性が向上します。
    • シグナル名テーブルの追加: var signals = [...]string{...}として、シグナル番号に対応するシグナル名の文字列テーブルが追加されています。これは、デバッグやログ出力の際に、シグナル番号だけでなく、その意味を人間が理解しやすい形で表示するために利用されます。
    • kqueueイベントフラグの追加: NOTE_ATTRIB, NOTE_CHILD, NOTE_DELETEなどの新しい定数が追加されています。これらはOpenBSDのkqueue(カーネルイベントキュー)メカニズムで使用されるイベントフラグであり、ファイルシステムイベントやプロセスイベントなどを監視するために利用されます。OpenBSD 5.0でこれらのフラグが導入または変更されたことに対応しています。
  3. データ構造のサイズとフィールドの変更 (ztypes_openbsd_386.go):

    • SizeofIfMsghdrSizeofIfDataという定数の値が変更されています。これらは、ネットワークインターフェースに関する情報(if_msghdrif_data構造体)のサイズを示すものです。OSのバージョンアップに伴い、これらの構造体の内部レイアウトやフィールドが変更されることがあり、それに伴ってサイズも変わります。Goがこれらの構造体を正しくメモリ上で扱うためには、正確なサイズ情報が必要です。
    • IfData構造体からCapabilities uint32フィールドが削除されています。これは、OpenBSD 5.0でネットワークインターフェースの機能に関する情報が、この構造体から別の場所へ移動したか、あるいはその表現方法が変更されたことを示しています。Goは、OSの実際の構造体定義に合わせて、Go側の構造体定義も更新する必要があります。

これらの変更は、GoがOpenBSD 5.0のカーネルインターフェースと完全に互換性を持つようにするために不可欠です。z-filesの再生成は、OSのヘッダーファイルから直接情報を取得するため、手動での変更に比べて正確性と保守性が高いという利点があります。

コアとなるコードの変更箇所

このコミットでは、主に以下のファイルが変更されています。これらはすべてsrc/pkg/syscall/ディレクトリ下にあり、OpenBSD固有のz-filesです。

  • src/pkg/syscall/zerrors_openbsd_386.go
  • src/pkg/syscall/zerrors_openbsd_amd64.go
  • src/pkg/syscall/zsyscall_openbsd_386.go
  • src/pkg/syscall/zsyscall_openbsd_amd64.go
  • src/pkg/syscall/zsysnum_openbsd_386.go
  • src/pkg/syscall/zsysnum_openbsd_amd64.go
  • src/pkg/syscall/ztypes_openbsd_386.go

具体的な変更内容の例を以下に示します。

src/pkg/syscall/zerrors_openbsd_386.go (および amd64 版)

--- a/src/pkg/syscall/zerrors_openbsd_386.go
+++ b/src/pkg/syscall/zerrors_openbsd_386.go
@@ -818,6 +818,24 @@ const (
 	NET_RT_MAXID                      = 0x6
 	NET_RT_STATS                      = 0x4
 	NET_RT_TABLE                      = 0x5
+	NOTE_ATTRIB                       = 0x8
+	NOTE_CHILD                        = 0x4
+	NOTE_DELETE                       = 0x1
+	NOTE_EOF                          = 0x2
+	NOTE_EXEC                         = 0x20000000
+	NOTE_EXIT                         = 0x80000000
+	NOTE_EXTEND                       = 0x4
+	NOTE_FORK                         = 0x40000000
+	NOTE_LINK                         = 0x10
+	NOTE_LOWAT                        = 0x1
+	NOTE_PCTRLMASK                    = 0xf0000000
+	NOTE_PDATAMASK                    = 0xfffff
+	NOTE_RENAME                       = 0x20
+	NOTE_REVOKE                       = 0x40
+	NOTE_TRACK                        = 0x1
+	NOTE_TRACKERR                     = 0x2
+	NOTE_TRUNCATE                     = 0x80
+	NOTE_WRITE                        = 0x2
 	O_ACCMODE                         = 0x3
 	O_APPEND                          = 0x8
 	O_ASYNC                           = 0x40
@@ -930,39 +948,6 @@ const (
 	SHUT_RD                           = 0x0
 	SHUT_RDWR                         = 0x2
 	SHUT_WR                           = 0x1
--	SIGABRT                           = 0x6
--	SIGALRM                           = 0xe
--	SIGBUS                            = 0xa
--	SIGCHLD                           = 0x14
--	SIGCONT                           = 0x13
--	SIGEMT                            = 0x7
--	SIGFPE                            = 0x8
--	SIGHUP                            = 0x1
--	SIGILL                            = 0x4
--	SIGINFO                           = 0x1d
--	SIGINT                            = 0x2
--	SIGIO                             = 0x17
--	SIGIOT                            = 0x6
--	SIGKILL                           = 0x9
--	SIGPIPE                           = 0xd
--	SIGPROF                           = 0x1b
--	SIGQUIT                           = 0x3
--	SIGSEGV                           = 0xb
--	SIGSTOP                           = 0x11
--	SIGSYS                            = 0xc
--	SIGTERM                           = 0xf
--	SIGTHR                            = 0x20
--	SIGTRAP                           = 0x5
--	SIGTSTP                           = 0x12
--	SIGTTIN                           = 0x15
--	SIGTTOU                           = 0x16
--	SIGURG                            = 0x10
--	SIGUSR1                           = 0x1e
--	SIGUSR2                           = 0x1f
--	SIGVTALRM                         = 0x1a
--	SIGWINCH                          = 0x1c
--	SIGXCPU                           = 0x18
--	SIGXFSZ                           = 0x19
  	SIOCADDMULTI                      = 0x80206931
  	SIOCAIFADDR                       = 0x8040691a
  	SIOCAIFGROUP                      = 0x80246987
@@ -1287,6 +1272,43 @@ const (
 	EXDEV           = Errno(0x12)
 )
 
+// Signals
+const (
+	SIGABRT   = Signal(0x6)
+	SIGALRM   = Signal(0xe)
+	SIGBUS    = Signal(0xa)
+	SIGCHLD   = Signal(0x14)
+	SIGCONT   = Signal(0x13)
+	SIGEMT    = Signal(0x7)
+	SIGFPE    = Signal(0x8)
+	SIGHUP    = Signal(0x1)
+	SIGILL    = Signal(0x4)
+	SIGINFO   = Signal(0x1d)
+	SIGINT    = Signal(0x2)
+	SIGIO     = Signal(0x17)
+	SIGIOT    = Signal(0x6)
+	SIGKILL   = Signal(0x9)
+	SIGPIPE   = Signal(0xd)
+	SIGPROF   = Signal(0x1b)
+	SIGQUIT   = Signal(0x3)
+	SIGSEGV   = Signal(0xb)
+	SIGSTOP   = Signal(0x11)
+	SIGSYS    = Signal(0xc)
+	SIGTERM   = Signal(0xf)
+	SIGTHR    = Signal(0x20)
+	SIGTRAP   = Signal(0x5)
+	SIGTSTP   = Signal(0x12)
+	SIGTTIN   = Signal(0x15)
+	SIGTTOU   = Signal(0x16)
+	SIGURG    = Signal(0x10)
+	SIGUSR1   = Signal(0x1e)
+	SIGUSR2   = Signal(0x1f)
+	SIGVTALRM = Signal(0x1a)
+	SIGWINCH  = Signal(0x1c)
+	SIGXCPU   = Signal(0x18)
+	SIGXFSZ   = Signal(0x19)
+)
+
 // Error table
 var errors = [...]string{
 	1:  "operation not permitted",
@@ -1381,3 +1403,39 @@ var errors = [...]string{
 	90: "no message of desired type",
 	91: "not supported",
 }
+
+// Signal table
+var signals = [...]string{
+	1:  "hangup",
+	2:  "interrupt",
+	3:  "quit",
+	4:  "illegal instruction",
+	5:  "trace/BPT trap",
+	6:  "abort trap",
+	7:  "EMT trap",
+	8:  "floating point exception",
+	9:  "killed",
+	10: "bus error",
+	11: "segmentation fault",
+	12: "bad system call",
+	13: "broken pipe",
+	14: "alarm clock",
+	15: "terminated",
+	16: "urgent I/O condition",
+	17: "stopped (signal)",
+	18: "stopped",
+	19: "continued",
+	20: "child exited",
+	21: "stopped (tty input)",
+	22: "stopped (tty output)",
+	23: "I/O possible",
+	24: "cputime limit exceeded",
+	25: "filesize limit exceeded",
+	26: "virtual timer expired",
+	27: "profiling timer expired",
+	28: "window size changes",
+	29: "information request",
+	30: "user defined signal 1",
+	31: "user defined signal 2",
+	32: "thread AST",
+}

src/pkg/syscall/zsyscall_openbsd_386.go (および amd64 版)

--- a/src/pkg/syscall/zsyscall_openbsd_386.go
+++ b/src/pkg/syscall/zsyscall_openbsd_386.go
@@ -633,7 +633,7 @@ func Issetugid() (tainted bool) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Kill(pid int, signum int) (err error) {
+func Kill(pid int, signum Signal) (err error) {
 	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
 	if e1 != 0 {
 		err = e1

src/pkg/syscall/zsysnum_openbsd_386.go (および amd64 版)

--- a/src/pkg/syscall/zsysnum_openbsd_386.go
+++ b/src/pkg/syscall/zsysnum_openbsd_386.go
@@ -4,204 +4,204 @@
 package syscall
 
 const (
-	SYS_EXIT          = 1   // { void sys_exit(int rval); }
-	SYS_FORK          = 2   // { int sys_fork(void); }
-	SYS_READ          = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
-	SYS_WRITE         = 4   // { ssize_t sys_write(int fd, const void *buf, \
-	SYS_OPEN          = 5   // { int sys_open(const char *path, \
-	SYS_CLOSE         = 6   // { int sys_close(int fd); }
-	SYS_WAIT4         = 7   // { pid_t sys_wait4(pid_t pid, int *status, int options, \
-	SYS_LINK          = 9   // { int sys_link(const char *path, const char *link); }
-	SYS_UNLINK        = 10  // { int sys_unlink(const char *path); }
-	SYS_CHDIR         = 12  // { int sys_chdir(const char *path); }
-	SYS_FCHDIR        = 13  // { int sys_fchdir(int fd); }
-	SYS_MKNOD         = 14  // { int sys_mknod(const char *path, mode_t mode, \
-	SYS_CHMOD         = 15  // { int sys_chmod(const char *path, mode_t mode); }
-	SYS_CHOWN         = 16  // { int sys_chown(const char *path, uid_t uid, \
-	SYS_OBREAK        = 17  // { int sys_obreak(char *nsize); } break
-	SYS_GETPID        = 20  // { pid_t sys_getpid(void); }
-	SYS_MOUNT         = 21  // { int sys_mount(const char *type, const char *path, \
-	SYS_UNMOUNT       = 22  // { int sys_unmount(const char *path, int flags); }
-	SYS_SETUID        = 23  // { int sys_setuid(uid_t uid); }
-	SYS_GETUID        = 24  // { uid_t sys_getuid(void); }
-	SYS_GETEUID       = 25  // { uid_t sys_geteuid(void); }
-	SYS_PTRACE        = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \
-	SYS_RECVMSG       = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \
-	SYS_SENDMSG       = 28  // { ssize_t sys_sendmsg(int s, \
-	SYS_RECVFROM      = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \
-	SYS_ACCEPT        = 30  // { int sys_accept(int s, struct sockaddr *name, \
-	SYS_GETPEERNAME   = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, \
-	SYS_GETSOCKNAME   = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, \
-	SYS_ACCESS        = 33  // { int sys_access(const char *path, int flags); }
-	SYS_CHFLAGS       = 34  // { int sys_chflags(const char *path, u_int flags); }
-	SYS_FCHFLAGS      = 35  // { int sys_fchflags(int fd, u_int flags); }
-	SYS_SYNC          = 36  // { void sys_sync(void); }
-	SYS_KILL          = 37  // { int sys_kill(int pid, int signum); }
-	SYS_GETPPID       = 39  // { pid_t sys_getppid(void); }
-	SYS_DUP           = 41  // { int sys_dup(int fd); }
-	SYS_GETEGID       = 43  // { gid_t sys_getegid(void); }
-	SYS_PROFIL        = 44  // { int sys_profil(caddr_t samples, size_t size, \
-	SYS_KTRACE        = 45  // { int sys_ktrace(const char *fname, int ops, \
-	SYS_SIGACTION     = 46  // { int sys_sigaction(int signum, \
-	SYS_GETGID        = 47  // { gid_t sys_getgid(void); }
-	SYS_SIGPROCMASK   = 48  // { int sys_sigprocmask(int how, sigset_t mask); }
-	SYS_GETLOGIN      = 49  // { int sys_getlogin(char *namebuf, u_int namelen); }
-	SYS_SETLOGIN      = 50  // { int sys_setlogin(const char *namebuf); }
-	SYS_ACCT          = 51  // { int sys_acct(const char *path); }
-	SYS_SIGPENDING    = 52  // { int sys_sigpending(void); }
-	SYS_IOCTL         = 54  // { int sys_ioctl(int fd, \
-	SYS_REBOOT        = 55  // { int sys_reboot(int opt); }
-	SYS_REVOKE        = 56  // { int sys_revoke(const char *path); }
-	SYS_SYMLINK       = 57  // { int sys_symlink(const char *path, \
-	SYS_READLINK      = 58  // { int sys_readlink(const char *path, char *buf, \
-	SYS_EXECVE        = 59  // { int sys_execve(const char *path, \
-	SYS_UMASK         = 60  // { mode_t sys_umask(mode_t newmask); }
-	SYS_CHROOT        = 61  // { int sys_chroot(const char *path); }
-	SYS_VFORK         = 66  // { int sys_vfork(void); }
-	SYS_MUNMAP        = 73  // { int sys_munmap(void *addr, size_t len); }
-	SYS_MPROTECT      = 74  // { int sys_mprotect(void *addr, size_t len, \
-	SYS_MADVISE       = 75  // { int sys_madvise(void *addr, size_t len, \
-	SYS_MINCORE       = 78  // { int sys_mincore(void *addr, size_t len, \
-	SYS_GETGROUPS     = 79  // { int sys_getgroups(int gidsetsize, \
-	SYS_SETGROUPS     = 80  // { int sys_setgroups(int gidsetsize, \
-	SYS_GETPGRP       = 81  // { int sys_getpgrp(void); }
-	SYS_SETPGID       = 82  // { int sys_setpgid(pid_t pid, int pgid); }
-	SYS_SETITIMER     = 83  // { int sys_setitimer(int which, \
-	SYS_GETITIMER     = 86  // { int sys_getitimer(int which, \
-	SYS_DUP2          = 90  // { int sys_dup2(int from, int to); }
-	SYS_FCNTL         = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }
-	SYS_SELECT        = 93  // { int sys_select(int nd, fd_set *in, fd_set *ou, \
-	SYS_FSYNC         = 95  // { int sys_fsync(int fd); }
-	SYS_SETPRIORITY   = 96  // { int sys_setpriority(int which, id_t who, int prio); }
-	SYS_SOCKET        = 97  // { int sys_socket(int domain, int type, int protocol); }
-	SYS_CONNECT       = 98  // { int sys_connect(int s, const struct sockaddr *name, \
-	SYS_GETPRIORITY   = 100 // { int sys_getpriority(int which, id_t who); }
-	SYS_SIGRETURN     = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
-	SYS_BIND          = 104 // { int sys_bind(int s, const struct sockaddr *name, \
-	SYS_SETSOCKOPT    = 105 // { int sys_setsockopt(int s, int level, int name, \
-	SYS_LISTEN        = 106 // { int sys_listen(int s, int backlog); }
-	SYS_SIGSUSPEND    = 111 // { int sys_sigsuspend(int mask); }
-	SYS_GETTIMEOFDAY  = 116 // { int sys_gettimeofday(struct timeval *tp, \
-	SYS_GETRUSAGE     = 117 // { int sys_getrusage(int who, struct rusage *rusage); }
-	SYS_GETSOCKOPT    = 118 // { int sys_getsockopt(int s, int level, int name, \
-	SYS_READV         = 120 // { ssize_t sys_readv(int fd, \
-	SYS_WRITEV        = 121 // { ssize_t sys_writev(int fd, \
-	SYS_SETTIMEOFDAY  = 122 // { int sys_settimeofday(const struct timeval *tv, \
-	SYS_FCHOWN        = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
-	SYS_FCHMOD        = 124 // { int sys_fchmod(int fd, mode_t mode); }
-	SYS_SETREUID      = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
-	SYS_SETREGID      = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }
-	SYS_RENAME        = 128 // { int sys_rename(const char *from, const char *to); }
-	SYS_FLOCK         = 131 // { int sys_flock(int fd, int how); }
-	SYS_MKFIFO        = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
-	SYS_SENDTO        = 133 // { ssize_t sys_sendto(int s, const void *buf, \
-	SYS_SHUTDOWN      = 134 // { int sys_shutdown(int s, int how); }
-	SYS_SOCKETPAIR    = 135 // { int sys_socketpair(int domain, int type, \
-	SYS_MKDIR         = 136 // { int sys_mkdir(const char *path, mode_t mode); }
-	SYS_RMDIR         = 137 // { int sys_rmdir(const char *path); }
-	SYS_UTIMES        = 138 // { int sys_utimes(const char *path, \
-	SYS_ADJTIME       = 140 // { int sys_adjtime(const struct timeval *delta, \
-	SYS_SETSID        = 147 // { int sys_setsid(void); }
-	SYS_QUOTACTL      = 148 // { int sys_quotactl(const char *path, int cmd, \
-	SYS_NFSSVC        = 155 // { int sys_nfssvc(int flag, void *argp); }
-	SYS_GETFH         = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
-	SYS_SYSARCH       = 165 // { int sys_sysarch(int op, void *parms); }
-	SYS_PREAD         = 173 // { ssize_t sys_pread(int fd, void *buf, \
-	SYS_PWRITE        = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \
-	SYS_SETGID        = 181 // { int sys_setgid(gid_t gid); }
-	SYS_SETEGID       = 182 // { int sys_setegid(gid_t egid); }
-	SYS_SETEUID       = 183 // { int sys_seteuid(uid_t euid); }
-	LFS_BMAPV         = 184 // { int lfs_bmapv(fsid_t *fsidp, \
-	LFS_MARKV         = 185 // { int lfs_markv(fsid_t *fsidp, \
-	LFS_SEGCLEAN      = 186 // { int lfs_segclean(fsid_t *fsidp, u_long segment); }
-	LFS_SEGWAIT       = 187 // { int lfs_segwait(fsid_t *fsidp, struct timeval *tv); }
-	SYS_PATHCONF      = 191 // { long sys_pathconf(const char *path, int name); }
-	SYS_FPATHCONF     = 192 // { long sys_fpathconf(int fd, int name); }
-	SYS_SWAPCTL       = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
-	SYS_GETRLIMIT     = 194 // { int sys_getrlimit(int which, \
-	SYS_SETRLIMIT     = 195 // { int sys_setrlimit(int which, \
-	SYS_MMAP          = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \
-	SYS_LSEEK         = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \
-	SYS_TRUNCATE      = 200 // { int sys_truncate(const char *path, int pad, \
-	SYS_FTRUNCATE     = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
-	SYS___SYSCTL      = 202 // { int sys___sysctl(int *name, u_int namelen, \
-	SYS_MLOCK         = 203 // { int sys_mlock(const void *addr, size_t len); }
-	SYS_MUNLOCK       = 204 // { int sys_munlock(const void *addr, size_t len); }
-	SYS_FUTIMES       = 206 // { int sys_futimes(int fd, \
-	SYS_GETPGID       = 207 // { pid_t sys_getpgid(pid_t pid); }
-	SYS_NNPFSPIOCTL   = 208 // { int sys_nnpfspioctl(int operation, char *a_pathP, \
-	SYS_SEMGET        = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
-	SYS_MSGGET        = 225 // { int sys_msgget(key_t key, int msgflg); }
-	SYS_MSGSND        = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \
-	SYS_MSGRCV        = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \
-	SYS_SHMAT         = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \
-	SYS_SHMDT         = 230 // { int sys_shmdt(const void *shmaddr); }
-	SYS_CLOCK_GETTIME = 232 // { int sys_clock_gettime(clockid_t clock_id, \
-	SYS_CLOCK_SETTIME = 233 // { int sys_clock_settime(clockid_t clock_id, \
-	SYS_CLOCK_GETRES  = 234 // { int sys_clock_getres(clockid_t clock_id, \
-	SYS_NANOSLEEP     = 240 // { int sys_nanosleep(const struct timespec *rqtp, \
-	SYS_MINHERIT      = 250 // { int sys_minherit(void *addr, size_t len, \
-	SYS_RFORK         = 251 // { int sys_rfork(int flags); }
-	SYS_POLL          = 252 // { int sys_poll(struct pollfd *fds, \
-	SYS_ISSETUGID     = 253 // { int sys_issetugid(void); }
-	SYS_LCHOWN        = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
-	SYS_GETSID        = 255 // { pid_t sys_getsid(pid_t pid); }
-	SYS_MSYNC         = 256 // { int sys_msync(void *addr, size_t len, int flags); }
-	SYS_PIPE          = 263 // { int sys_pipe(int *fdp); }
-	SYS_FHOPEN        = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
-	SYS_PREADV        = 267 // { ssize_t sys_preadv(int fd, \
-	SYS_PWRITEV       = 268 // { ssize_t sys_pwritev(int fd, \
-	SYS_KQUEUE        = 269 // { int sys_kqueue(void); }
-	SYS_KEVENT        = 270 // { int sys_kevent(int fd, \
-	SYS_MLOCKALL      = 271 // { int sys_mlockall(int flags); }
-	SYS_MUNLOCKALL    = 272 // { int sys_munlockall(void); }
-	SYS_GETRESUID     = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \
-	SYS_SETRESUID     = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \
-	SYS_GETRESGID     = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \
-	SYS_SETRESGID     = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \
-	SYS_MQUERY        = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \
-	SYS_CLOSEFROM     = 287 // { int sys_closefrom(int fd); }
-	SYS_SIGALTSTACK   = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \
-	SYS_SHMGET        = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
-	SYS_SEMOP         = 290 // { int sys_semop(int semid, struct sembuf *sops, \
-	SYS_STAT          = 291 // { int sys_stat(const char *path, struct stat *ub); }
-	SYS_FSTAT         = 292 // { int sys_fstat(int fd, struct stat *sb); }
-	SYS_LSTAT         = 293 // { int sys_lstat(const char *path, struct stat *ub); }
-	SYS_FHSTAT        = 294 // { int sys_fhstat(const fhandle_t *fhp, \
-	SYS___SEMCTL      = 295 // { int sys___semctl(int semid, int semnum, int cmd, \
-	SYS_SHMCTL        = 296 // { int sys_shmctl(int shmid, int cmd, \
-	SYS_MSGCTL        = 297 // { int sys_msgctl(int msqid, int cmd, \
-	SYS_SCHED_YIELD   = 298 // { int sys_sched_yield(void); }
-	SYS_GETTHRID      = 299 // { pid_t sys_getthrid(void); }
-	SYS_THRSLEEP      = 300 // { int sys_thrsleep(void *ident, clockid_t clock_id, \
-	SYS_THRWAKEUP     = 301 // { int sys_thrwakeup(void *ident, int n); }
-	SYS_THREXIT       = 302 // { void sys_threxit(pid_t *notdead); }
-	SYS_THRSIGDIVERT  = 303 // { int sys_thrsigdivert(sigset_t sigmask, \
-	SYS___GETCWD      = 304 // { int sys___getcwd(char *buf, size_t len); }
-	SYS_ADJFREQ       = 305 // { int sys_adjfreq(const int64_t *freq, \
-	SYS_GETFSSTAT     = 306 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \
-	SYS_STATFS        = 307 // { int sys_statfs(const char *path, \
-	SYS_FSTATFS       = 308 // { int sys_fstatfs(int fd, struct statfs *buf); }
-	SYS_FHSTATFS      = 309 // { int sys_fhstatfs(const fhandle_t *fhp, \
-	SYS_SETRTABLE     = 310 // { int sys_setrtable(int rtableid); }
-	SYS_GETRTABLE     = 311 // { int sys_getrtable(void); }
-	SYS_GETDIRENTRIES = 312 // { int sys_getdirentries(int fd, char *buf, \
-	SYS_FACCESSAT     = 313 // { int sys_faccessat(int fd, const char *path, \
-	SYS_FCHMODAT      = 314 // { int sys_fchmodat(int fd, const char *path, \
-	SYS_FCHOWNAT      = 315 // { int sys_fchownat(int fd, const char *path, \
-	SYS_FSTATAT       = 316 // { int sys_fstatat(int fd, const char *path, \
-	SYS_LINKAT        = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \
-	SYS_MKDIRAT       = 318 // { int sys_mkdirat(int fd, const char *path, \
-	SYS_MKFIFOAT      = 319 // { int sys_mkfifoat(int fd, const char *path, \
-	SYS_MKNODAT       = 320 // { int sys_mknodat(int fd, const char *path, \
-	SYS_OPENAT        = 321 // { int sys_openat(int fd, const char *path, int flags, \
-	SYS_READLINKAT    = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \
-	SYS_RENAMEAT      = 323 // { int sys_renameat(int fromfd, const char *from, \
-	SYS_SYMLINKAT     = 324 // { int sys_symlinkat(const char *path, int fd, \
-	SYS_UNLINKAT      = 325 // { int sys_unlinkat(int fd, const char *path, \
-	SYS_UTIMENSAT     = 326 // { int sys_utimensat(int fd, const char *path, \
-	SYS_FUTIMENS      = 327 // { int sys_futimens(int fd, \
-	SYS___TFORK       = 328 // { int sys___tfork(struct __tfork *param); }
-	SYS___SET_TCB     = 329 // { void sys___set_tcb(void *tcb); }
-	SYS___GET_TCB     = 330 // { void *sys___get_tcb(void); }
+	SYS_EXIT           = 1   // { void sys_exit(int rval); }
+	SYS_FORK           = 2   // { int sys_fork(void); }
+	SYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
+	SYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, \
+	SYS_OPEN           = 5   // { int sys_open(const char *path, \
+	SYS_CLOSE          = 6   // { int sys_close(int fd); }
+	SYS_WAIT4          = 7   // { pid_t sys_wait4(pid_t pid, int *status, int options, \
+	SYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }
+	SYS_UNLINK         = 10  // { int sys_unlink(const char *path); }
+	SYS_CHDIR          = 12  // { int sys_chdir(const char *path); }
+	SYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }
+	SYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, \
+	SYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }
+	SYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, \
+	SYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break
+	SYS_GETPID         = 20  // { pid_t sys_getpid(void); }
+	SYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, \
+	SYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }
+	SYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }
+	SYS_GETUID         = 24  // { uid_t sys_getuid(void); }
+	SYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }
+	SYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \
+	SYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \
+	SYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, \
+	SYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \
+	SYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, \
+	SYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, \
+	SYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, \
+	SYS_ACCESS         = 33  // { int sys_access(const char *path, int flags); }
+	SYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }
+	SYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }
+	SYS_SYNC           = 36  // { void sys_sync(void); }
+	SYS_KILL           = 37  // { int sys_kill(int pid, int signum); }
+	SYS_GETPPID        = 39  // { pid_t sys_getppid(void); }
+	SYS_DUP            = 41  // { int sys_dup(int fd); }
+	SYS_GETEGID        = 43  // { gid_t sys_getegid(void); }
+	SYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, \
+	SYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, \
+	SYS_SIGACTION      = 46  // { int sys_sigaction(int signum, \
+	SYS_GETGID         = 47  // { gid_t sys_getgid(void); }
+	SYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }
+	SYS_GETLOGIN       = 49  // { int sys_getlogin(char *namebuf, u_int namelen); }
+	SYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }
+	SYS_ACCT           = 51  // { int sys_acct(const char *path); }
+	SYS_SIGPENDING     = 52  // { int sys_sigpending(void); }
+	SYS_IOCTL          = 54  // { int sys_ioctl(int fd, \
+	SYS_REBOOT         = 55  // { int sys_reboot(int opt); }
+	SYS_REVOKE         = 56  // { int sys_revoke(const char *path); }
+	SYS_SYMLINK        = 57  // { int sys_symlink(const char *path, \
+	SYS_READLINK       = 58  // { int sys_readlink(const char *path, char *buf, \
+	SYS_EXECVE         = 59  // { int sys_execve(const char *path, \
+	SYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }
+	SYS_CHROOT         = 61  // { int sys_chroot(const char *path); }
+	SYS_VFORK          = 66  // { int sys_vfork(void); }
+	SYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }
+	SYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, \
+	SYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, \
+	SYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, \
+	SYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, \
+	SYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, \
+	SYS_GETPGRP        = 81  // { int sys_getpgrp(void); }
+	SYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, int pgid); }
+	SYS_SETITIMER      = 83  // { int sys_setitimer(int which, \
+	SYS_GETITIMER      = 86  // { int sys_getitimer(int which, \
+	SYS_DUP2           = 90  // { int sys_dup2(int from, int to); }
+	SYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }
+	SYS_SELECT         = 93  // { int sys_select(int nd, fd_set *in, fd_set *ou, \
+	SYS_FSYNC          = 95  // { int sys_fsync(int fd); }
+	SYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }
+	SYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }
+	SYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, \
+	SYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }
+	SYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
+	SYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, \
+	SYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, \
+	SYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }
+	SYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }
+	SYS_GETTIMEOFDAY   = 116 // { int sys_gettimeofday(struct timeval *tp, \
+	SYS_GETRUSAGE      = 117 // { int sys_getrusage(int who, struct rusage *rusage); }
+	SYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, \
+	SYS_READV          = 120 // { ssize_t sys_readv(int fd, \
+	SYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, \
+	SYS_SETTIMEOFDAY   = 122 // { int sys_settimeofday(const struct timeval *tv, \
+	SYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
+	SYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }
+	SYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
+	SYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }
+	SYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }
+	SYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }
+	SYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
+	SYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, \
+	SYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }
+	SYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, \
+	SYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }
+	SYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }
+	SYS_UTIMES         = 138 // { int sys_utimes(const char *path, \
+	SYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, \
+	SYS_SETSID         = 147 // { int sys_setsid(void); }
+	SYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, \
+	SYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }
+	SYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
+	SYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }
+	SYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, \
+	SYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \
+	SYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }
+	SYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }
+	SYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }
+	LFS_BMAPV          = 184 // { int lfs_bmapv(fsid_t *fsidp, \
+	LFS_MARKV          = 185 // { int lfs_markv(fsid_t *fsidp, \
+	LFS_SEGCLEAN       = 186 // { int lfs_segclean(fsid_t *fsidp, u_long segment); }
+	LFS_SEGWAIT        = 187 // { int lfs_segwait(fsid_t *fsidp, struct timeval *tv); }
+	SYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }
+	SYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }
+	SYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
+	SYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, \
+	SYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, \
+	SYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \
+	SYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \
+	SYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, \
+	SYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }
+	SYS___SYSCTL       = 202 // { int sys___sysctl(int *name, u_int namelen, \
+	SYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }
+	SYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }
+	SYS_FUTIMES        = 206 // { int sys_futimes(int fd, \
+	SYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }
+	SYS_NNPFSPIOCTL    = 208 // { int sys_nnpfspioctl(int operation, char *a_pathP, \
+	SYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
+	SYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }
+	SYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \
+	SYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \
+	SYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \
+	SYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }
+	SYS_CLOCK_GETTIME  = 232 // { int sys_clock_gettime(clockid_t clock_id, \
+	SYS_CLOCK_SETTIME  = 233 // { int sys_clock_settime(clockid_t clock_id, \
+	SYS_CLOCK_GETRES   = 234 // { int sys_clock_getres(clockid_t clock_id, \
+	SYS_NANOSLEEP      = 240 // { int sys_nanosleep(const struct timespec *rqtp, \
+	SYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, \
+	SYS_RFORK          = 251 // { int sys_rfork(int flags); }
+	SYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, \
+	SYS_ISSETUGID      = 253 // { int sys_issetugid(void); }
+	SYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
+	SYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }
+	SYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }
+	SYS_PIPE           = 263 // { int sys_pipe(int *fdp); }
+	SYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
+	SYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, \
+	SYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, \
+	SYS_KQUEUE         = 269 // { int sys_kqueue(void); }
+	SYS_KEVENT         = 270 // { int sys_kevent(int fd, \
+	SYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }
+	SYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }
+	SYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \
+	SYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \
+	SYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \
+	SYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \
+	SYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \
+	SYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }
+	SYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \
+	SYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
+	SYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, \
+	SYS_STAT           = 291 // { int sys_stat(const char *path, struct stat *ub); }
+	SYS_FSTAT          = 292 // { int sys_fstat(int fd, struct stat *sb); }
+	SYS_LSTAT          = 293 // { int sys_lstat(const char *path, struct stat *ub); }
+	SYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, \
+	SYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, \
+	SYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, \
+	SYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, \
+	SYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }
+	SYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }
+	SYS___THRSLEEP     = 300 // { int sys___thrsleep(const volatile void *ident, \
+	SYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, \
+	SYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }
+	SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \
+	SYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }
+	SYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, \
+	SYS_GETFSSTAT      = 306 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \
+	SYS_STATFS         = 307 // { int sys_statfs(const char *path, \
+	SYS_FSTATFS        = 308 // { int sys_fstatfs(int fd, struct statfs *buf); }
+	SYS_FHSTATFS       = 309 // { int sys_fhstatfs(const fhandle_t *fhp, \
+	SYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }
+	SYS_GETRTABLE      = 311 // { int sys_getrtable(void); }
+	SYS_GETDIRENTRIES  = 312 // { int sys_getdirentries(int fd, char *buf, \
+	SYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, \
+	SYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, \
+	SYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, \
+	SYS_FSTATAT        = 316 // { int sys_fstatat(int fd, const char *path, \
+	SYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \
+	SYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, \
+	SYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, \
+	SYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, \
+	SYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, \
+	SYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \
+	SYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, \
+	SYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, \
+	SYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, \
+	SYS_UTIMENSAT      = 326 // { int sys_utimensat(int fd, const char *path, \
+	SYS_FUTIMENS       = 327 // { int sys_futimens(int fd, \
+	SYS___TFORK        = 328 // { int sys___tfork(struct __tfork *param); }
+	SYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }
+	SYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }

src/pkg/syscall/ztypes_openbsd_386.go

--- a/src/pkg/syscall/ztypes_openbsd_386.go
+++ b/src/pkg/syscall/ztypes_openbsd_386.go
@@ -260,8 +260,8 @@ type FdSet struct {
 }
 
 const (
-	SizeofIfMsghdr  = 0xe8
-	SizeofIfData    = 0xd0
+	SizeofIfMsghdr  = 0xe4
+	SizeofIfData    = 0xcc
 	SizeofIfaMsghdr = 0x18
 	SizeofRtMsghdr  = 0x58
 	SizeofRtMetrics = 0x30
@@ -283,28 +283,27 @@ type IfMsghdr struct {
 }
 
 type IfData struct {
-	Type         uint8
-	Addrlen      uint8
-	Hdrlen       uint8
-	Link_state   uint8
-	Mtu          uint32
-	Metric       uint32
-	Pad          uint32
-	Baudrate     uint64
-	Ipackets     uint64
-	Ierrors      uint64
-	Opackets     uint64
-	Oerrors      uint64
-	Collisions   uint64
-	Ibytes       uint64
-	Obytes       uint64
-	Imcasts      uint64
-	Omcasts      uint64
-	Iqdrops      uint64
-	Noproto      uint64
-	Capabilities uint32
-	Lastchange   Timeval
-	Mclpool      [7]Mclpool
+	Type       uint8
+	Addrlen    uint8
+	Hdrlen     uint8
+	Link_state uint8
+	Mtu        uint32
+	Metric     uint32
+	Pad        uint32
+	Baudrate   uint64
+	Ipackets   uint64
+	Ierrors    uint64
+	Opackets   uint64
+	Oerrors    uint64
+	Collisions uint64
+	Ibytes     uint64
+	Obytes     uint64
+	Imcasts    uint64
+	Omcasts    uint64
+	Iqdrops    uint64
+	Noproto    uint64
+	Lastchange Timeval
+	Mclpool    [7]Mclpool
 }
 
 type IfaMsghdr struct {

コアとなるコードの解説

このコミットにおけるコアとなるコードの変更は、GoのsyscallパッケージがOpenBSD 5.0のシステムインターフェースと正確に同期するようにするためのものです。

  1. zerrors_openbsd_*.go の変更:

    • シグナル定数の再定義と型付け: 以前は単なるint型の定数として扱われていたシグナル(SIGABRTなど)が、Signalというカスタム型に明示的にキャストされるようになりました。これは、Goがシグナルをより型安全に扱うための改善です。Signal型を導入することで、シグナル番号を期待する関数(例: Kill)の引数に誤った型の値が渡されることをコンパイル時に検出できるようになります。
    • シグナル名テーブルの追加: signalsというstring配列が追加され、シグナル番号に対応する人間が読める形式のシグナル名が格納されています。これは、デバッグ時やエラーメッセージの生成時に、シグナル番号だけでは分かりにくい情報を補完するために利用されます。例えば、fmt.Println(syscall.signals[syscall.SIGSEGV])とすることで、"segmentation fault"という文字列を得られるようになります。
    • kqueueイベントフラグの追加: NOTE_ATTRIBなどの定数は、OpenBSDのkqueue APIで使用されるイベントフィルタリングのためのフラグです。kqueueは、ファイル変更、ソケットイベント、プロセス状態変化など、様々なカーネルイベントを効率的に監視するためのメカニズムです。これらのフラグが追加されたことで、GoプログラムはOpenBSD 5.0で利用可能になった新しいkqueueイベントを監視できるようになります。
  2. zsyscall_openbsd_*.go の変更:

    • Kill関数のシグナル引数の型がintからSignalに変更されました。これは、zerrors_openbsd_*.goで導入されたSignal型と連携し、Killシステムコールを呼び出す際に、引数が正しいシグナル型であることを保証します。これにより、Goのコンパイラがより厳密な型チェックを行い、潜在的なバグを早期に発見できるようになります。
  3. zsysnum_openbsd_*.go の変更:

    • システムコール番号の定数定義が更新されています。特に、SYS_THRSLEEPなどがSYS___THRSLEEPのように__プレフィックスを持つ形に変更されているのは、OpenBSD 5.0でこれらのシステムコールの内部的な名前や定義が変更されたことを反映しています。Goのsyscallパッケージは、OSが提供するシステムコールと1対1で対応するように設計されているため、OS側の変更に追従する必要があります。これらの定数は、GoがSyscall関数を通じてカーネルに直接システムコールを要求する際に使用されます。
  4. ztypes_openbsd_386.go の変更:

    • SizeofIfMsghdrSizeofIfDataの定数値が変更され、IfData構造体からCapabilitiesフィールドが削除されました。これは、OpenBSD 5.0でネットワークインターフェース関連のカーネルデータ構造のレイアウトが変更されたことを直接反映しています。Goは、C言語で定義されたカーネル構造体とメモリレイアウトを一致させる必要があるため、これらのサイズやフィールドの変更はGoの構造体定義にも反映されなければなりません。これにより、Goプログラムがネットワークインターフェース情報を正しく読み書きできるようになります。

これらの変更は、GoがOpenBSD 5.0の新しいAPIとABIに適合し、その上で安定して動作するための基盤を固めるものです。自動生成されたファイルであるため、これらの変更は手動で記述されたものではなく、OpenBSDのヘッダーファイルからツールによって自動的に抽出・変換された結果です。

関連リンク

  • Go言語 syscall パッケージのドキュメント: https://pkg.go.dev/syscall
  • OpenBSD 公式サイト: https://www.openbsd.org/
  • OpenBSD 5.0 リリース情報 (当時の情報源を探す必要がありますが、一般的なリリースノートの場所): https://www.openbsd.org/50.html (これは一般的なURLであり、当時の正確なリリースノートへのリンクではない可能性があります)
  • GoのChange List (CL) 5656052: https://golang.org/cl/5656052 (これはGoのコードレビューシステムGerritのCLへのリンクです。コミットメッセージに記載されています。)

参考にした情報源リンク

  • Go言語のsyscallパッケージの設計と自動生成に関する一般的な情報 (Goのソースコード内のmkall.shスクリプトや関連するz*ファイルのコメント)
  • OpenBSDのリリースノートやmanページ(特にsyscall(2)や関連するネットワーク構造体、kqueueに関するドキュメント)
  • GoのGerritコードレビューシステム (CL 5656052)
  • GoのメーリングリストやIssueトラッカーでの関連議論 (当時の情報)
  • UNIX系OSにおけるシステムコール、シグナル、kqueueに関する一般的な知識
  • Goのgo generateコマンドとコード生成の概念