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

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

このコミットは、Go言語のsyscallパッケージにおけるFreeBSDおよびOpenBSD向けのzerrorsおよびztypesファイルの再生成に関するものです。これらのファイルは、Goプログラムが基盤となるオペレーティングシステム(OS)のシステムコールやデータ構造と連携するために必要な定数や型定義を含んでいます。

コミット

commit ca4708fa792ca14a97399933214cd0fefc547cd7
Author: Mikio Hara <mikioh.mikioh@gmail.com>
Date:   Sat Nov 12 00:22:22 2011 +0900

    syscall: regenerate z-files for freebsd, openbsd
    
    R=golang-dev, rsc
    CC=golang-dev
    https://golang.org/cl/5375057

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

https://github.com/golang/go/commit/ca4708fa792ca14a97399933214cd0fefc547cd7

元コミット内容

syscall: regenerate z-files for freebsd, openbsd

このコミットは、FreeBSDおよびOpenBSDプラットフォーム向けのsyscallパッケージ内のzerrorsおよびztypesファイルを再生成したものです。

変更の背景

Go言語のsyscallパッケージは、各オペレーティングシステム固有のシステムコールやデータ構造へのインターフェースを提供します。これらのインターフェースは、C言語のヘッダーファイルから自動生成されるGoのソースファイル(通称「z-files」)によって定義されます。

このコミットが行われた2011年11月時点では、Go言語はまだ活発に開発されており、基盤となるOSのAPIやGo自身のツールチェインに変更が加えられることが頻繁にありました。特に、cgoツールやgodefsユーティリティの進化、あるいはFreeBSDやOpenBSDのシステムヘッダーの変更に伴い、既存のz-filesが古くなることがありました。

このコミットの目的は、FreeBSDおよびOpenBSD環境におけるシステムコール関連の定数(zerrors)と型定義(ztypes)が、最新のOSヘッダーファイルおよびGoのツールチェイン(特にcgogodefs)と同期していることを保証することです。これにより、GoプログラムがこれらのOS上で正しくシステムコールを実行し、OS固有のデータ構造を正確に扱えるようになります。

具体的な変更点としては、zerrors_openbsd_386.goファイルで負の値を持つ定数(例: BIOCGDLTLIST)が、以前は符号なし整数として扱われていたために大きな正の値として表現されていたものが、正しい負の値として表現されるように修正されています。これは、cgo -godefsがC言語の定数をGoの定数に変換する際の挙動が改善されたことを示唆しています。また、コメントの変更も行われており、ファイルの生成元がmkerrors.shgodefsからcgo -godefsに統一されたことがわかります。

前提知識の解説

Go言語のsyscallパッケージ

Go言語のsyscallパッケージは、Goプログラムからオペレーティングシステム(OS)のシステムコールを直接呼び出すための低レベルなインターフェースを提供します。これにより、ファイル操作、ネットワーク通信、プロセス管理など、OSカーネルが提供する機能にアクセスできます。

z-files (zerrors_.go, ztypes_.go)

Goのsyscallパッケージには、zerrors_*.goztypes_*.goといった命名規則を持つファイル群が存在します。これらは「z-files」と呼ばれ、特定のOSアーキテクチャ(例: freebsd_386, openbsd_amd64)におけるシステムコール関連の定数(エラーコード、フラグなど)やデータ構造(struct)のGo言語での定義を含んでいます。

これらのファイルは手動で記述されるのではなく、C言語のシステムヘッダーファイルから自動生成されます。これは、OSごとにシステムコールの番号、定数の値、データ構造のレイアウトなどが異なるため、手動で管理するとエラーが発生しやすく、メンテナンスが困難になるためです。

cgo

cgoは、GoプログラムからC言語のコードを呼び出すためのGoツールチェインの一部です。Goのソースファイル内にC言語のコードを埋め込んだり、C言語のライブラリをリンクしたりする際に使用されます。z-filesの生成プロセスにおいても、C言語のヘッダーファイルを読み込み、そこからGoの定数や型定義を抽出するためにcgoが利用されます。

godefs

godefsは、C言語の構造体や定数定義をGo言語の対応する定義に変換するためのユーティリティです。cgoと連携して使用され、C言語のヘッダーファイルからOS固有の情報を抽出し、Goのztypes_*.gozerrors_*.goファイルを生成する役割を担います。このツールは、OSのABI(Application Binary Interface)に依存する低レベルな型定義をGoで表現するために不可欠です。

mkerrors.sh

mkerrors.shは、zerrors_*.goファイルを生成するためのシェルスクリプトです。このスクリプトは、C言語のヘッダーファイルからエラーコードやその他の定数を抽出し、Goの定数として定義します。

mkall.sh

mkall.shは、syscallパッケージ内のすべてのz-filesを生成するためのスクリプトです。通常、mkerrors.shgodefs(またはcgo -godefs)を呼び出して、各OS/アーキテクチャのz-filesをまとめて更新します。

技術的詳細

このコミットの主要な技術的変更は、z-filesの生成プロセスと、それに伴う定数表現の修正にあります。

  1. 生成コマンドの変更:

    • 変更前: // mkerrors.sh -f -m32// godefs -c gcc -f -m32 -gsyscall -f -m32 _const.c
    • 変更後: // mkerrors.sh -m32// Created by cgo -godefs - DO NOT EDIT および // cgo -godefs -- -m32 _const.go

    この変更は、z-filesの生成がより現代的なcgo -godefsコマンドに統一されたことを示しています。以前はgodefsが直接Cソースファイルを処理していましたが、cgoがその機能を統合し、より堅牢な生成プロセスを提供しています。これにより、Goのビルドシステムがこれらのファイルをより一貫して生成できるようになります。

  2. 定数表現の修正: OpenBSDのzerrors_openbsd_386.goファイルにおいて、いくつかの定数の値が変更されています。特に注目すべきは、BIOCGDLTLISTBIOCIMMEDIATEなどの定数が、以前は大きな正の16進数(例: 0xc008427b)で表現されていたものが、負の16進数(例: -0x3ff7bd85)に修正されている点です。

    これは、C言語のヘッダーファイルで定義されているこれらの定数が、実際には符号付き整数として負の値を持つべきであったことを示唆しています。以前のgodefsのバージョンでは、これらの値を符号なし整数として解釈してしまい、結果としてGoのコードで誤った値が生成されていた可能性があります。cgo -godefsの改善により、C言語の型システムとの整合性が向上し、正しい符号付きの値がGoの定数として生成されるようになったと考えられます。

    例えば、0xc008427bという32ビットの16進数は、符号なし整数としては3221633659ですが、符号付き整数(2の補数表現)としては-1073333637となります。このコミットでは、Goの定数定義がC言語の元の意図に沿うように修正されたことを意味します。

  3. ztypesファイルの変更: ztypes_*.goファイルでは、構造体のパディングに関するコメントがPad_godefs_0からPad_cgo_0に変更されています。これは、構造体のメモリレイアウトを調整するためにGoコンパイラが挿入するパディングバイトの命名規則が、godefsからcgoへの移行に伴い変更されたことを示しています。また、Stat_t構造体内のFsidフィールドが、以前は[8]byte /* fsid */とコメント付きで定義されていたものが、独立したFsid型(type Fsid struct { Val [2]int32 })として定義され、その型がStat_t内で使用されるように変更されています。これにより、コードの可読性と型安全性が向上しています。

これらの変更は、Goのsyscallパッケージが、各OSのシステムコールインターフェースをより正確かつ堅牢にGo言語にマッピングするための継続的な努力の一環です。特に、異なるOSやアーキテクチャ間での互換性と正確性を維持するために、自動生成ツールの改善が重要であることを示しています。

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

このコミットでは、以下のファイルが変更されています。

  • src/pkg/syscall/zerrors_freebsd_386.go
  • src/pkg/syscall/zerrors_freebsd_amd64.go
  • src/pkg/syscall/zerrors_openbsd_386.go
  • src/pkg/syscall/zerrors_openbsd_amd64.go
  • src/pkg/syscall/ztypes_freebsd_386.go
  • src/pkg/syscall/ztypes_freebsd_amd64.go
  • src/pkg/syscall/ztypes_openbsd_386.go
  • src/pkg/syscall/ztypes_openbsd_amd64.go

これらのファイルはすべて自動生成されたものであり、手動で編集されることはありません。変更内容は主に定数の値の修正、コメントの更新、および型定義の微調整です。

src/pkg/syscall/zerrors_openbsd_386.go の例

--- a/src/pkg/syscall/zerrors_openbsd_386.go
+++ b/src/pkg/syscall/zerrors_openbsd_386.go
@@ -1,13 +1,11 @@
-// mkerrors.sh -f -m32
+// mkerrors.sh -m32
 // MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
 
-// godefs -c gcc -f -m32 -gsyscall -f -m32 _const.c
-\
-// MACHINE GENERATED - DO NOT EDIT.
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs -- -m32 _const.go
 
 package syscall
 
-// Constants
 const (
 	AF_APPLETALK                      = 0x10
 	AF_BLUETOOTH                      = 0x20
@@ -42,7 +40,7 @@ const (
 	AF_SIP                            = 0x1d
 	AF_SNA                            = 0xb
 	AF_UNIX                           = 0x1
-	AF_UNSPEC                         = 0
+	AF_UNSPEC                         = 0x0
 	ARPHRD_ETHER                      = 0x1
 	ARPHRD_FRELAY                     = 0xf
 	ARPHRD_IEEE1394                   = 0x18
@@ -51,30 +49,30 @@ const (
 	BIOCGBLEN                         = 0x40044266
 	BIOCGDIRFILT                      = 0x4004427c
 	BIOCGDLT                          = 0x4004426a
-	BIOCGDLTLIST                      = 0xc008427b
+	BIOCGDLTLIST                      = -0x3ff7bd85
 	BIOCGETIF                         = 0x4020426b
 	BIOCGFILDROP                      = 0x40044278
 	BIOCGHDRCMPLT                     = 0x40044274
 	BIOCGRSIG                         = 0x40044273
 	BIOCGRTIMEOUT                     = 0x4008426e
 	BIOCGSTATS                        = 0x4008426f
-	BIOCIMMEDIATE                     = 0x80044270
+	BIOCIMMEDIATE                     = -0x7ffbbd90
 	BIOCLOCK                          = 0x20004276
 	BIOCPROMISC                       = 0x20004269
-	BIOCSBLEN                         = 0xc0044266
-	BIOCSDIRFILT                      = 0x8004427d
-	BIOCSDLT                          = 0x8004427a
-	BIOCSETF                          = 0x80084267
-	BIOCSETIF                         = 0x8020426c
-	BIOCSETWF                         = 0x80084277
-	BIOCSFILDROP                      = 0x80044279
-	BIOCSHDRCMPLT                     = 0x80044275
-	BIOCSRSIG                         = 0x80044272
-	BIOCSRTIMEOUT                     = 0x8008426d
+	BIOCSBLEN                         = -0x3ffbbd9a
+	BIOCSDIRFILT                      = -0x7ffbbd83
+	BIOCSDLT                          = -0x7ffbbd86
+	BIOCSETF                          = -0x7ff7bd99
+	BIOCSETIF                         = -0x7fdfbd94
+	BIOCSETWF                         = -0x7ff7bd89
+	BIOCSFILDROP                      = -0x7ffbbd87
+	BIOCSHDRCMPLT                     = -0x7ffbbd8b
+	BIOCSRSIG                         = -0x7ffbbd8e
+	BIOCSRTIMEOUT                     = -0x7ff7bd93
 	BIOCVERSION                       = 0x40044271
 	BPF_A                             = 0x10
 	BPF_ABS                           = 0x20
-	BPF_ADD                           = 0
+	BPF_ADD                           = 0x0
 	BPF_ALIGNMENT                     = 0x4
 	BPF_ALU                           = 0x4
 	BPF_AND                           = 0x50
@@ -83,16 +81,16 @@ const (
 	BPF_DIRECTION_OUT                 = 0x2
 	BPF_DIV                           = 0x30
 	BPF_H                             = 0x8
-	BPF_IMM                           = 0
+	BPF_IMM                           = 0x0
 	BPF_IND                           = 0x40
-	BPF_JA                            = 0
+	BPF_JA                            = 0x0
 	BPF_JEQ                           = 0x10
 	BPF_JGE                           = 0x30
 	BPF_JGT                           = 0x20
 	BPF_JMP                           = 0x5
 	BPF_JSET                          = 0x40
-	BPF_K                             = 0
-	BPF_LD                            = 0
+	BPF_K                             = 0x0
+	BPF_LD                            = 0x0
 	BPF_LDX                           = 0x1
 	BPF_LEN                           = 0x80
 	BPF_LSH                           = 0x60
@@ -114,9 +112,9 @@ const (
 	BPF_ST                            = 0x2
 	BPF_STX                           = 0x3
 	BPF_SUB                           = 0x10
-	BPF_TAX                           = 0
+	BPF_TAX                           = 0x0
 	BPF_TXA                           = 0x80
-	BPF_W                             = 0
+	BPF_W                             = 0x0
 	BPF_X                             = 0x8
 	CTL_MAXNAME                       = 0xc
 	CTL_NET                           = 0x4
@@ -133,7 +131,7 @@ const (
 	DLT_IEEE802_11_RADIO              = 0x7f
 	DLT_LOOP                          = 0xc
 	DLT_MPLS                          = 0xdb
-	DLT_NULL                          = 0
+	DLT_NULL                          = 0x0
 	DLT_PFLOG                         = 0x75
 	DLT_PFSYNC                        = 0x12
 	DLT_PPP                           = 0x9
@@ -150,7 +148,7 @@ const (
 	DT_LNK                            = 0xa
 	DT_REG                            = 0x8
 	DT_SOCK                           = 0xc
-	DT_UNKNOWN                        = 0
+	DT_UNKNOWN                        = 0x0
 	E2BIG                             = 0x7
 	EACCES                            = 0xd
 	EADDRINUSE                        = 0x30
@@ -181,10 +179,6 @@ const (
 	EEXIST                            = 0x11
 	EFAULT                            = 0xe
 	EFBIG                             = 0x1b
-	EFER_LMA                          = 0x400
-	EFER_LME                          = 0x100
-	EFER_NXE                          = 0x800
-	EFER_SCE                          = 0x1
 	EFTYPE                            = 0x4f
 	EHOSTDOWN                         = 0x40
 	EHOSTUNREACH                      = 0x41
@@ -444,7 +438,7 @@ const (
 	ETHER_ALIGN                       = 0x2
 	ETHER_CRC_LEN                     = 0x4
 	ETHER_CRC_POLY_BE                 = 0x4c11db6
-	ETHER_CRC_POLY_LE                 = 0xedb88320
+	ETHER_CRC_POLY_LE                 = -0x12477ce0
 	ETHER_HDR_LEN                     = 0xe
 	ETHER_MAX_DIX_LEN                 = 0x600
 	ETHER_MAX_LEN                     = 0x5ee
@@ -480,7 +474,7 @@ const (
 	EXTPROC                           = 0x800
 	FD_CLOEXEC                        = 0x1
 	FD_SETSIZE                        = 0x400
-	F_DUPFD                           = 0
+	F_DUPFD                           = 0x0
 	F_DUPFD_CLOEXEC                   = 0xa
 	F_GETFD                           = 0x1
 	F_GETFL                           = 0x3
@@ -738,21 +732,21 @@ const (
 	IFT_XETHER                        = 0x1a
 	IN_CLASSA_HOST                    = 0xffffff
 	IN_CLASSA_MAX                     = 0x80
-	IN_CLASSA_NET                     = 0xff000000
+	IN_CLASSA_NET                     = -0x1000000
 	IN_CLASSA_NSHIFT                  = 0x18
 	IN_CLASSB_HOST                    = 0xffff
 	IN_CLASSB_MAX                     = 0x10000
-	IN_CLASSB_NET                     = 0xffff0000
+	IN_CLASSB_NET                     = -0x10000
 	IN_CLASSB_NSHIFT                  = 0x10
 	IN_CLASSC_HOST                    = 0xff
-	IN_CLASSC_NET                     = 0xffffff00
+	IN_CLASSC_NET                     = -0x100
 	IN_CLASSC_NSHIFT                  = 0x8
 	IN_CLASSD_HOST                    = 0xfffffff
-	IN_CLASSD_NET                     = 0xf0000000
+	IN_CLASSD_NET                     = -0x10000000
 	IN_CLASSD_NSHIFT                  = 0x1c
 	IN_LOOPBACKNET                    = 0x7f
 	IN_RFC3021_HOST                   = 0x1
-	IN_RFC3021_NET                    = 0xfffffffe
+	IN_RFC3021_NET                    = -0x2
 	IN_RFC3021_NSHIFT                 = 0x1f
 	IPPROTO_AH                        = 0x33
 	IPPROTO_CARP                      = 0x70
@@ -767,12 +761,12 @@ const (
 	IPPROTO_FRAGMENT                  = 0x2c
 	IPPROTO_GGP                       = 0x3
 	IPPROTO_GRE                       = 0x2f
-	IPPROTO_HOPOPTS                   = 0
+	IPPROTO_HOPOPTS                   = 0x0
 	IPPROTO_ICMP                      = 0x1
 	IPPROTO_ICMPV6                    = 0x3a
 	IPPROTO_IDP                       = 0x16
 	IPPROTO_IGMP                      = 0x2
-	IPPROTO_IP                        = 0
+	IPPROTO_IP                        = 0x0
 	IPPROTO_IPCOMP                    = 0x6c
 	IPPROTO_IPIP                      = 0x4
 	IPPROTO_IPV4                      = 0x4
@@ -802,8 +796,8 @@ const (
 	IPV6_ESP_NETWORK_LEVEL            = 0x37
 	IPV6_ESP_TRANS_LEVEL              = 0x36
 	IPV6_FAITH                        = 0x1d
-	IPV6_FLOWINFO_MASK                = 0xffffff0f
-	IPV6_FLOWLABEL_MASK               = 0xffff0f00
+	IPV6_FLOWINFO_MASK                = -0xf1
+	IPV6_FLOWLABEL_MASK               = -0xf100
 	IPV6_FRAGTTL                      = 0x78
 	IPV6_HLIMDEC                      = 0x1
 	IPV6_HOPLIMIT                     = 0x2f
@@ -823,7 +817,7 @@ const (
 	IPV6_PIPEX                        = 0x3f
 	IPV6_PKTINFO                      = 0x2e
 	IPV6_PORTRANGE                    = 0xe
-	IPV6_PORTRANGE_DEFAULT            = 0
+	IPV6_PORTRANGE_DEFAULT            = 0x0
 	IPV6_PORTRANGE_HIGH               = 0x1
 	IPV6_PORTRANGE_LOW                = 0x2
 	IPV6_RECVDSTOPTS                  = 0x28
@@ -836,9 +830,9 @@ const (
 	IPV6_RTABLE                       = 0x1021
 	IPV6_RTHDR                        = 0x33
 	IPV6_RTHDRDSTOPTS                 = 0x23
-	IPV6_RTHDR_LOOSE                  = 0
+	IPV6_RTHDR_LOOSE                  = 0x0
 	IPV6_RTHDR_STRICT                 = 0x1
-	IPV6_RTHDR_TYPE_0                 = 0
+	IPV6_RTHDR_TYPE_0                 = 0x0
 	IPV6_SOCKOPT_RESERVED1            = 0x3
 	IPV6_TCLASS                       = 0x3d
 	IPV6_UNICAST_HOPS                 = 0x4
@@ -875,7 +869,7 @@ const (
 	IP_OPTIONS                        = 0x1
 	IP_PIPEX                          = 0x22
 	IP_PORTRANGE                      = 0x13
-	IP_PORTRANGE_DEFAULT              = 0
+	IP_PORTRANGE_DEFAULT              = 0x0
 	IP_PORTRANGE_HIGH                 = 0x1
 	IP_PORTRANGE_LOW                  = 0x2
 	IP_RECVDSTADDR                    = 0x7
@@ -922,16 +916,17 @@ const (
 	O_NOCTTY                          = 0x8000
 	O_NOFOLLOW                        = 0x100
 	O_NONBLOCK                        = 0x4
-	O_RDONLY                          = 0
+	O_RDONLY                          = 0x0
 	O_RDWR                            = 0x2
 	O_RSYNC                           = 0x80
 	O_SHLOCK                          = 0x10
 	O_SYNC                            = 0x80
 	O_TRUNC                           = 0x400
 	O_WRONLY                          = 0x1
+	PT_MASK                           = 0x3ff000
 	RTAX_AUTHOR                       = 0x6
 	RTAX_BRD                          = 0x7
-	RTAX_DST                          = 0
+	RTAX_DST                          = 0x0
 	RTAX_GATEWAY                      = 0x1
 	RTAX_GENMASK                      = 0x3
 	RTAX_IFA                          = 0x5
@@ -1003,10 +998,11 @@ const (
 	RTV_RTTVAR                        = 0x80
 	RTV_SPIPE                         = 0x10
 	RTV_SSTHRESH                      = 0x20
+	RT_TABLEID_MAX                    = 0xff
 	SCM_CREDS                         = 0x2
 	SCM_RIGHTS                        = 0x1
 	SCM_TIMESTAMP                     = 0x4
-	SHUT_RD                           = 0
+	SHUT_RD                           = 0x0
 	SHUT_RDWR                         = 0x2
 	SHUT_WR                           = 0x1
 	SIGABRT                           = 0x6
@@ -1042,118 +1038,118 @@ const (
 	SIGWINCH                          = 0x1c
 	SIGXCPU                           = 0x18
 	SIGXFSZ                           = 0x19
-	SIOCADDMULTI                      = 0x80206931
-	SIOCAIFADDR                       = 0x8040691a
-	SIOCAIFGROUP                      = 0x80246987
-	SIOCALIFADDR                      = 0x8218691c
+	SIOCADDMULTI                      = -0x7fdf96cf
+	SIOCAIFADDR                       = -0x7fbf96e6
+	SIOCAIFGROUP                      = -0x7fdb9679
+	SIOCALIFADDR                      = -0x7de796e4
 	SIOCATMARK                        = 0x40047307
-	SIOCBRDGADD                       = 0x8054693c
-	SIOCBRDGADDS                      = 0x80546941
-	SIOCBRDGARL                       = 0x806e694d
-	SIOCBRDGDADDR                     = 0x80286947
-	SIOCBRDGDEL                       = 0x8054693d
-	SIOCBRDGDELS                      = 0x80546942
-	SIOCBRDGFLUSH                     = 0x80546948
-	SIOCBRDGFRL                       = 0x806e694e
-	SIOCBRDGGCACHE                    = 0xc0146941
-	SIOCBRDGGGFD                      = 0xc0146952
-	SIOCBRDGGHT                       = 0xc0146951
-	SIOCBRDGGIFFLGS                   = 0xc054693e
-	SIOCBRDGGMA                       = 0xc0146953
-	SIOCBRDGGPARAM                    = 0xc0386958
-	SIOCBRDGGPRI                      = 0xc0146950
-	SIOCBRDGGRL                       = 0xc028694f
-	SIOCBRDGGSIFS                     = 0xc054693c
-	SIOCBRDGGTO                       = 0xc0146946
-	SIOCBRDGIFS                       = 0xc0546942
-	SIOCBRDGRTS                       = 0xc0186943
-	SIOCBRDGSADDR                     = 0xc0286944
-	SIOCBRDGSCACHE                    = 0x80146940
-	SIOCBRDGSFD                       = 0x80146952
-	SIOCBRDGSHT                       = 0x80146951
-	SIOCBRDGSIFCOST                   = 0x80546955
-	SIOCBRDGSIFFLGS                   = 0x8054693f
-	SIOCBRDGSIFPRIO                   = 0x80546954
-	SIOCBRDGSMA                       = 0x80146953
-	SIOCBRDGSPRI                      = 0x80146950
-	SIOCBRDGSPROTO                    = 0x8014695a
-	SIOCBRDGSTO                       = 0x80146945
-	SIOCBRDGSTXHC                     = 0x80146959
-	SIOCDELMULTI                      = 0x80206932
-	SIOCDIFADDR                       = 0x80206919
-	SIOCDIFGROUP                      = 0x80246989
-	SIOCDIFPHYADDR                    = 0x80206949
-	SIOCDLIFADDR                      = 0x8218691e
-	SIOCGETKALIVE                     = 0xc01869a4
-	SIOCGETLABEL                      = 0x8020699a
-	SIOCGETPFLOW                      = 0xc02069fe
-	SIOCGETPFSYNC                     = 0xc02069f8
-	SIOCGETSGCNT                      = 0xc0147534
-	SIOCGETVIFCNT                     = 0xc0147533
-	SIOCGETVLANPRIO                   = 0xc0206990
+	SIOCBRDGADD                       = -0x7fab96c4
+	SIOCBRDGADDS                      = -0x7fab96bf
+	SIOCBRDGARL                       = -0x7f9196b3
+	SIOCBRDGDADDR                     = -0x7fd796b9
+	SIOCBRDGDEL                       = -0x7fab96c3
+	SIOCBRDGDELS                      = -0x7fab96be
+	SIOCBRDGFLUSH                     = -0x7fab96b8
+	SIOCBRDGFRL                       = -0x7f9196b2
+	SIOCBRDGGCACHE                    = -0x3feb96bf
+	SIOCBRDGGFD                       = -0x3feb96ae
+	SIOCBRDGGHT                       = -0x3feb96af
+	SIOCBRDGGIFFLGS                   = -0x3fab96c2
+	SIOCBRDGGMA                       = -0x3feb96ad
+	SIOCBRDGGPARAM                    = -0x3fc796a8
+	SIOCBRDGGPRI                      = -0x3feb96b0
+	SIOCBRDGGRL                       = -0x3fd796b1
+	SIOCBRDGGSIFS                     = -0x3fab96c4
+	SIOCBRDGGTO                       = -0x3feb96ba
+	SIOCBRDGIFS                       = -0x3fab96be
+	SIOCBRDGRTS                       = -0x3fe796bd
+	SIOCBRDGSADDR                     = -0x3fd796bc
+	SIOCBRDGSCACHE                    = -0x7feb96c0
+	SIOCBRDGSFD                       = -0x7feb96ae
+	SIOCBRDGSHT                       = -0x7feb96af
+	SIOCBRDGSIFCOST                   = -0x7fab96ab
+	SIOCBRDGSIFFLGS                   = -0x7fab96c1
+	SIOCBRDGSIFPRIO                   = -0x7fab96ac
+	SIOCBRDGSMA                       = -0x7feb96ad
+	SIOCBRDGSPRI                      = -0x7feb96b0
+	SIOCBRDGSPROTO                    = -0x7feb96a6
+	SIOCBRDGSTO                       = -0x7feb96bb
+	SIOCBRDGSTXHC                     = -0x7feb96a7
+	SIOCDELMULTI                      = -0x7fdf96ce
+	SIOCDIFADDR                       = -0x7fdf96e7
+	SIOCDIFGROUP                      = -0x7fdb9677
+	SIOCDIFPHYADDR                    = -0x7fdf96b7
+	SIOCDLIFADDR                      = -0x7de796e2
+	SIOCGETKALIVE                     = -0x3fe7965c
+	SIOCGETLABEL                      = -0x7fdf9666
+	SIOCGETPFLOW                      = -0x3fdf9602
+	SIOCGETPFSYNC                     = -0x3fdf9608
+	SIOCGETSGCNT                      = -0x3feb8acc
+	SIOCGETVIFCNT                     = -0x3feb8acd
+	SIOCGETVLANPRIO                   = -0x3fdf9670
 	SIOCGHIWAT                        = 0x40047301
-	SIOCGIFADDR                       = 0xc0206921
-	SIOCGIFASYNCMAP                   = 0xc020697c
-	SIOCGIFBRDADDR                    = 0xc0206923
-	SIOCGIFCONF                       = 0xc0086924
-	SIOCGIFDATA                       = 0xc020691b
-	SIOCGIFDESCR                      = 0xc0206981
-	SIOCGIFDSTADDR                    = 0xc0206922
-	SIOCGIFFLAGS                      = 0xc0206911
-	SIOCGIFGATTR                      = 0xc024698b
-	SIOCGIFGENERIC                    = 0xc020693a
-	SIOCGIFGMEMB                      = 0xc024698a
-	SIOCGIFGROUP                      = 0xc0246988
-	SIOCGIFMEDIA                      = 0xc0286936
-	SIOCGIFMETRIC                     = 0xc0206917
-	SIOCGIFMTU                        = 0xc020697e
-	SIOCGIFNETMASK                    = 0xc0206925
-	SIOCGIFPDSTADDR                   = 0xc0206948
-	SIOCGIFPRIORITY                   = 0xc020699c
-	SIOCGIFPSRCADDR                   = 0xc0206947
-	SIOCGIFRDOMAIN                    = 0xc02069a0
-	SIOCGIFRTLABEL                    = 0xc0206983
-	SIOCGIFTIMESLOT                   = 0xc0206986
-	SIOCGIFXFLAGS                     = 0xc020699e
-	SIOCGLIFADDR                      = 0xc218691d
-	SIOCGLIFPHYADDR                   = 0xc218694b
-	SIOCGLIFPHYRTABLE                 = 0xc02069a2
+	SIOCGIFADDR                       = -0x3fdf96df
+	SIOCGIFASYNCMAP                   = -0x3fdf9684
+	SIOCGIFBRDADDR                    = -0x3fdf96dd
+	SIOCGIFCONF                       = -0x3ff796dc
+	SIOCGIFDATA                       = -0x3fdf96e5
+	SIOCGIFDESCR                      = -0x3fdf967f
+	SIOCGIFDSTADDR                    = -0x3fdf96de
+	SIOCGIFFLAGS                      = -0x3fdf96ef
+	SIOCGIFGATTR                      = -0x3fdb9675
+	SIOCGIFGENERIC                    = -0x3fdf96c6
+	SIOCGIFGMEMB                      = -0x3fdb9676
+	SIOCGIFGROUP                      = -0x3fdb9678
+	SIOCGIFMEDIA                      = -0x3fd796ca
+	SIOCGIFMETRIC                     = -0x3fdf96e9
+	SIOCGIFMTU                        = -0x3fdf9682
+	SIOCGIFNETMASK                    = -0x3fdf96db
+	SIOCGIFPDSTADDR                   = -0x3fdf96b8
+	SIOCGIFPRIORITY                   = -0x3fdf9664
+	SIOCGIFPSRCADDR                   = -0x3fdf96b9
+	SIOCGIFRDOMAIN                    = -0x3fdf9660
+	SIOCGIFRTLABEL                    = -0x3fdf967d
+	SIOCGIFTIMESLOT                   = -0x3fdf967a
+	SIOCGIFXFLAGS                     = -0x3fdf9662
+	SIOCGLIFADDR                      = -0x3de796e3
+	SIOCGLIFPHYADDR                   = -0x3de796b5
+	SIOCGLIFPHYRTABLE                 = -0x3fdf965e
 	SIOCGLOWAT                        = 0x40047303
 	SIOCGPGRP                         = 0x40047409
-	SIOCGVH                           = 0xc02069f6
-	SIOCIFCREATE                      = 0x8020697a
-	SIOCIFDESTROY                     = 0x80206979
-	SIOCIFGCLONERS                    = 0xc00c6978
-	SIOCSETKALIVE                     = 0x801869a3
-	SIOCSETLABEL                      = 0x80206999
-	SIOCSETPFLOW                      = 0x802069fd
-	SIOCSETPFSYNC                     = 0x802069f7
-	SIOCSETVLANPRIO                   = 0x8020698f
-	SIOCSHIWAT                        = 0x80047300
-	SIOCSIFADDR                       = 0x8020690c
-	SIOCSIFASYNCMAP                   = 0x8020697d
-	SIOCSIFBRDADDR                    = 0x80206913
-	SIOCSIFDESCR                      = 0x80206980
-	SIOCSIFDSTADDR                    = 0x8020690e
-	SIOCSIFFLAGS                      = 0x80206910
-	SIOCSIFGATTR                      = 0x8024698c
-	SIOCSIFGENERIC                    = 0x80206939
-	SIOCSIFLLADDR                     = 0x8020691f
-	SIOCSIFMEDIA                      = 0xc0206935
-	SIOCSIFMETRIC                     = 0x80206918
-	SIOCSIFMTU                        = 0x8020697f
-	SIOCSIFNETMASK                    = 0x80206916
-	SIOCSIFPHYADDR                    = 0x80406946
-	SIOCSIFPRIORITY                   = 0x8020699b
-	SIOCSIFRDOMAIN                    = 0x8020699f
-	SIOCSIFRTLABEL                    = 0x80206982
-	SIOCSIFTIMESLOT                   = 0x80206985
-	SIOCSIFXFLAGS                     = 0x8020699d
-	SIOCSLIFPHYADDR                   = 0x8218694a
-	SIOCSLIFPHYRTABLE                 = 0x802069a1
-	SIOCSLOWAT                        = 0x80047302
-	SIOCSPGRP                         = 0x80047308
-	SIOCSVH                           = 0xc02069f5
+	SIOCGVH                           = -0x3fdf960a
+	SIOCIFCREATE                      = -0x7fdf9686
+	SIOCIFDESTROY                     = -0x7fdf9687
+	SIOCIFGCLONERS                    = -0x3ff39688
+	SIOCSETKALIVE                     = -0x7fe7965d
+	SIOCSETLABEL                      = -0x7fdf9667
+	SIOCSETPFLOW                      = -0x7fdf9603
+	SIOCSETPFSYNC                     = -0x7fdf9609
+	SIOCSETVLANPRIO                   = -0x7fdf9671
+	SIOCSHIWAT                        = -0x7ffb8d00
+	SIOCSIFADDR                       = -0x7fdf96f4
+	SIOCSIFASYNCMAP                   = -0x7fdf9683
+	SIOCSIFBRDADDR                    = -0x7fdf96ed
+	SIOCSIFDESCR                      = -0x7fdf9680
+	SIOCSIFDSTADDR                    = -0x7fdf96f2
+	SIOCSIFFLAGS                      = -0x7fdf96f0
+	SIOCSIFGATTR                      = -0x7fdb9674
+	SIOCSIFGENERIC                    = -0x7fdf96c7
+	SIOCSIFLLADDR                     = -0x7fdf96e1
+	SIOCSIFMEDIA                      = -0x3fdf96cb
+	SIOCSIFMETRIC                     = -0x7fdf96e8
+	SIOCSIFMTU                        = -0x7fdf9681
+	SIOCSIFNETMASK                    = -0x7fdf96ea
+	SIOCSIFPHYADDR                    = -0x7fbf96ba
+	SIOCSIFPRIORITY                   = -0x7fdf9665
+	SIOCSIFRDOMAIN                    = -0x7fdf9661
+	SIOCSIFRTLABEL                    = -0x7fdf967e
+	SIOCSIFTIMESLOT                   = -0x7fdf967b
+	SIOCSIFXFLAGS                     = -0x7fdf9663
+	SIOCSLIFPHYADDR                   = -0x7de796b6
+	SIOCSLIFPHYRTABLE                 = -0x7fdf965f
+	SIOCSLOWAT                        = -0x7ffb8cfe
+	SIOCSPGRP                         = -0x7ffb8cf8
+	SIOCSVH                           = -0x3fdf960b
 	SOCK_DGRAM                        = 0x2
 	SOCK_RAW                          = 0x3
 	SOCK_RDM                          = 0x4
@@ -1198,28 +1194,28 @@ const (
 	TCP_SACK_ENABLE                   = 0x8
 	TIOCCBRK                          = 0x2000747a
 	TIOCCDTR                          = 0x20007478
-	TIOCCONS                          = 0x80047462
+	TIOCCONS                          = -0x7ffb8b9e
 	TIOCDRAIN                         = 0x2000745e
 	TIOCEXCL                          = 0x2000740d
-	TIOCEXT                           = 0x80047460
+	TIOCEXT                           = -0x7ffb8b9e
 	TIOCFLAG_CLOCAL                   = 0x2
 	TIOCFLAG_CRTSCTS                  = 0x4
 	TIOCFLAG_MDMBUF                   = 0x8
 	TIOCFLAG_PPS                      = 0x10
 	TIOCFLAG_SOFTCAR                  = 0x1
-	TIOCFLUSH                         = 0x80047410
+	TIOCFLUSH                         = -0x7ffb8bf0
 	TIOCGETA                          = 0x402c7413
 	TIOCGETD                          = 0x4004741a
 	TIOCGFLAGS                        = 0x4004745d
 	TIOCGPGRP                         = 0x40047477
 	TIOCGTSTAMP                       = 0x4008745b
 	TIOCGWINSZ                        = 0x40087468
-	TIOCMBIC                          = 0x8004746b
-	TIOCMBIS                          = 0x8004746c
+	TIOCMBIC                          = -0x7ffb8b95
+	TIOCMBIS                          = -0x7ffb8b94
 	TIOCMGET                          = 0x4004746a
 	TIOCMODG                          = 0x4004746a
-	TIOCMODS                          = 0x8004746d
-	TIOCMSET                          = 0x8004746d
+	TIOCMODS                          = -0x7ffb8b93
+	TIOCMSET                          = -0x7ffb8b93
 	TIOCM_CAR                         = 0x40
 	TIOCM_CD                          = 0x40
 	TIOCM_CTS                         = 0x20
@@ -1234,8 +1230,8 @@ const (
 	TIOCNOTTY                         = 0x20007471
 	TIOCNXCL                          = 0x2000740e
 	TIOCOUTQ                          = 0x40047473
-	TIOCPKT                           = 0x80047470
-	TIOCPKT_DATA                      = 0
+	TIOCPKT                           = -0x7ffb8b90
+	TIOCPKT_DATA                      = 0x0
 	TIOCPKT_DOSTOP                    = 0x20
 	TIOCPKT_FLUSHREAD                 = 0x1
 	TIOCPKT_FLUSHWRITE                = 0x2
@@ -1243,24 +1239,24 @@ const (
 	TIOCPKT_NOSTOP                    = 0x10
 	TIOCPKT_START                     = 0x8
 	TIOCPKT_STOP                      = 0x4
-	TIOCREMOTE                        = 0x80047469
+	TIOCREMOTE                        = -0x7ffb8b97
 	TIOCSBRK                          = 0x2000747b
 	TIOCSCTTY                         = 0x20007461
 	TIOCSDTR                          = 0x20007479
-	TIOCSETA                          = 0x802c7414
-	TIOCSETAF                         = 0x802c7416
-	TIOCSETAW                         = 0x802c7415
-	TIOCSETD                          = 0x8004741b
-	TIOCSFLAGS                        = 0x8004745c
-	TIOCSIG                           = 0x8004745f
-	TIOCSPGRP                         = 0x80047476
+	TIOCSETA                          = -0x7fd38bec
+	TIOCSETAF                         = -0x7fd38bea
+	TIOCSETAW                         = -0x7fd38beb
+	TIOCSETD                          = -0x7ffb8be5
+	TIOCSFLAGS                        = -0x7ffb8ba4
+	TIOCSIG                           = -0x7ffb8ba1
+	TIOCSPGRP                         = -0x7ffb8b8a
 	TIOCSTART                         = 0x2000746e
-	TIOCSTAT                          = 0x80047465
-	TIOCSTI                           = 0x80017472
+	TIOCSTAT                          = -0x7ffb8b9b
+	TIOCSTI                           = -0x7ffe8b8e
 	TIOCSTOP                          = 0x2000746f
-	TIOCSTSTAMP                       = 0x8008745a
-	TIOCSWINSZ                        = 0x80087467
-	TIOCUCNTL                         = 0x80047466
+	TIOCSTSTAMP                       = -0x7ff78ba6
+	TIOCSWINSZ                        = -0x7ff78b99
+	TIOCUCNTL                         = -0x7ffb8b9a
 	WALTSIG                           = 0x4
 	WCONTINUED                        = 0x8
 	WCOREFLAG                         = 0x80

コアとなるコードの解説

上記の差分は、zerrors_openbsd_386.goファイルにおける変更の一部を示しています。

  1. ヘッダーコメントの変更: ファイルの冒頭にあるコメントが変更され、生成元がgodefsからcgo -godefsに明確に示されています。これは、Goのツールチェインが進化し、cgogodefsの機能を統合したことを反映しています。

  2. 定数の値の修正: BIOCGDLTLIST, BIOCIMMEDIATE, BIOCSBLENなど、多くの定数の値が正の16進数から負の16進数に変わっています。これは、C言語のヘッダーファイルでこれらの定数が符号付き整数として定義されており、その負の値がGoのコードに正しく反映されるようになったことを意味します。例えば、BIOCGDLTLIST0xc008427bから-0x3ff7bd85に変更されています。これは、32ビット符号付き整数として解釈した場合の正しい値への修正です。

  3. 0の表現の統一: AF_UNSPEC, BPF_ADD, BPF_IMMなど、値が0の定数が0x0と明示的に16進数で表現されるように統一されています。これは、コードのスタイルと一貫性を向上させるための変更です。

  4. 不要なコメントの削除: // Constants// Typesといったセクションヘッダーのコメントが削除されています。これは、自動生成されるファイルにおいては冗長であり、cgo -godefsの出力がより簡潔になったことを示唆しています。

これらの変更は、GoのsyscallパッケージがOpenBSDのシステムコールインターフェースをより正確に表現し、Goプログラムがこれらの定数を正しく解釈して利用できるようにするために重要です。特に、負の値を持つ定数の正確な表現は、特定のシステムコールやioctl操作の正しい動作に不可欠です。

関連リンク

参考にした情報源リンク

  • Go言語のソースコード(syscallパッケージ)
  • Go言語の公式ドキュメント
  • cgoおよびgodefsに関する一般的な情報(Web検索)
  • FreeBSDおよびOpenBSDのシステムプログラミングに関する一般的な情報(Web検索)
  • 2の補数表現に関する情報(負の数の表現について)
  • GitHubのコミット履歴と差分表示

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

このコミットは、Go言語のsyscallパッケージにおけるFreeBSDおよびOpenBSD向けのzerrorsおよびztypesファイルの再生成に関するものです。これらのファイルは、Goプログラムが基盤となるオペレーティングシステム(OS)のシステムコールやデータ構造と連携するために必要な定数や型定義を含んでいます。

コミット

commit ca4708fa792ca14a97399933214cd0fefc547cd7
Author: Mikio Hara <mikioh.mikioh@gmail.com>
Date:   Sat Nov 12 00:22:22 2011 +0900

    syscall: regenerate z-files for freebsd, openbsd
    
    R=golang-dev, rsc
    CC=golang-dev
    https://golang.org/cl/5375057

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

https://github.com/golang/go/commit/ca4708fa792ca14a97399933214cd0fefc547cd7

元コミット内容

syscall: regenerate z-files for freebsd, openbsd

このコミットは、FreeBSDおよびOpenBSDプラットフォーム向けのsyscallパッケージ内のzerrorsおよびztypesファイルを再生成したものです。

変更の背景

Go言語のsyscallパッケージは、各オペレーティングシステム固有のシステムコールやデータ構造へのインターフェースを提供します。これらのインターフェースは、C言語のヘッダーファイルから自動生成されるGoのソースファイル(通称「z-files」)によって定義されます。

このコミットが行われた2011年11月時点では、Go言語はまだ活発に開発されており、基盤となるOSのAPIやGo自身のツールチェインに変更が加えられることが頻繁にありました。特に、cgoツールやgodefsユーティリティの進化、あるいはFreeBSDやOpenBSDのシステムヘッダーの変更に伴い、既存のz-filesが古くなることがありました。

このコミットの目的は、FreeBSDおよびOpenBSD環境におけるシステムコール関連の定数(zerrors)と型定義(ztypes)が、最新のOSヘッダーファイルおよびGoのツールチェイン(特にcgogodefs)と同期していることを保証することです。これにより、GoプログラムがこれらのOS上で正しくシステムコールを実行し、OS固有のデータ構造を正確に扱えるようになります。

具体的な変更点としては、zerrors_openbsd_386.goファイルで負の値を持つ定数(例: BIOCGDLTLIST)が、以前は符号なし整数として扱われていたために大きな正の値として表現されていたものが、正しい負の値として表現されるように修正されています。これは、cgo -godefsがC言語の定数をGoの定数に変換する際の挙動が改善されたことを示唆しています。また、コメントの変更も行われており、ファイルの生成元がmkerrors.shgodefsからcgo -godefsに統一されたことがわかります。

前提知識の解説

Go言語のsyscallパッケージ

Go言語のsyscallパッケージは、Goプログラムからオペレーティングシステム(OS)のシステムコールを直接呼び出すための低レベルなインターフェースを提供します。これにより、ファイル操作、ネットワーク通信、プロセス管理など、OSカーネルが提供する機能にアクセスできます。

z-files (zerrors_.go, ztypes_.go)

Goのsyscallパッケージには、zerrors_*.goztypes_*.goといった命名規則を持つファイル群が存在します。これらは「z-files」と呼ばれ、特定のOSアーキテクチャ(例: freebsd_386, openbsd_amd64)におけるシステムコール関連の定数(エラーコード、フラグなど)やデータ構造(struct)のGo言語での定義を含んでいます。

これらのファイルは手動で記述されるのではなく、C言語のシステムヘッダーファイルから自動生成されます。これは、OSごとにシステムコールの番号、定数の値、データ構造のレイアウトなどが異なるため、手動で管理するとエラーが発生しやすく、メンテナンスが困難になるためです。

cgo

cgoは、GoプログラムからC言語のコードを呼び出すためのGoツールチェインの一部です。Goのソースファイル内にC言語のコードを埋め込んだり、C言語のライブラリをリンクしたりする際に使用されます。z-filesの生成プロセスにおいても、C言語のヘッダーファイルを読み込み、そこからGoの定数や型定義を抽出するためにcgoが利用されます。

godefs

godefsは、C言語の構造体や定数定義をGo言語の対応する定義に変換するためのユーティリティです。cgoと連携して使用され、C言語のヘッダーファイルからOS固有の情報を抽出し、Goのztypes_*.gozerrors_*.goファイルを生成する役割を担います。このツールは、OSのABI(Application Binary Interface)に依存する低レベルな型定義をGoで表現するために不可欠です。

mkerrors.sh

mkerrors.shは、zerrors_*.goファイルを生成するためのシェルスクリプトです。このスクリプトは、C言語のヘッダーファイルからエラーコードやその他の定数を抽出し、Goの定数として定義します。

mkall.sh

mkall.shは、syscallパッケージ内のすべてのz-filesを生成するためのスクリプトです。通常、mkerrors.shgodefs(またはcgo -godefs)を呼び出して、各OS/アーキテクチャのz-filesをまとめて更新します。

技術的詳細

このコミットの主要な技術的変更は、z-filesの生成プロセスと、それに伴う定数表現の修正にあります。

  1. 生成コマンドの変更:

    • 変更前: // mkerrors.sh -f -m32// godefs -c gcc -f -m32 -gsyscall -f -m32 _const.c
    • 変更後: // mkerrors.sh -m32// Created by cgo -godefs - DO NOT EDIT および // cgo -godefs -- -m32 _const.go

    この変更は、z-filesの生成がより現代的なcgo -godefsコマンドに統一されたことを示しています。以前はgodefsが直接Cソースファイルを処理していましたが、cgoがその機能を統合し、より堅牢な生成プロセスを提供しています。これにより、Goのビルドシステムがこれらのファイルをより一貫して生成できるようになります。

  2. 定数表現の修正: OpenBSDのzerrors_openbsd_386.goファイルにおいて、いくつかの定数の値が変更されています。特に注目すべきは、BIOCGDLTLISTBIOCIMMEDIATEなどの定数が、以前は大きな正の16進数(例: 0xc008427b)で表現されていたものが、負の16進数(例: -0x3ff7bd85)に修正されている点です。

    これは、C言語のヘッダーファイルで定義されているこれらの定数が、実際には符号付き整数として負の値を持つべきであったことを示唆しています。以前のgodefsのバージョンでは、これらの値を符号なし整数として解釈してしまい、結果としてGoのコードで誤った値が生成されていた可能性があります。cgo -godefsの改善により、C言語の型システムとの整合性が向上し、正しい符号付きの値がGoの定数として生成されるようになったと考えられます。

    例えば、0xc008427bという32ビットの16進数は、符号なし整数としては3221633659ですが、符号付き整数(2の補数表現)としては-1073333637となります。このコミットでは、Goの定数定義がC言語の元の意図に沿うように修正されたことを意味します。

  3. ztypesファイルの変更: ztypes_*.goファイルでは、構造体のパディングに関するコメントがPad_godefs_0からPad_cgo_0に変更されています。これは、構造体のメモリレイアウトを調整するためにGoコンパイラが挿入するパディングバイトの命名規則が、godefsからcgoへの移行に伴い変更されたことを示しています。また、Stat_t構造体内のFsidフィールドが、以前は[8]byte /* fsid */とコメント付きで定義されていたものが、独立したFsid型(type Fsid struct { Val [2]int32 })として定義され、その型がStat_t内で使用されるように変更されています。これにより、コードの可読性と型安全性が向上しています。

これらの変更は、Goのsyscallパッケージが、各OSのシステムコールインターフェースをより正確かつ堅牢にGo言語にマッピングするための継続的な努力の一環です。特に、異なるOSやアーキテクチャ間での互換性と正確性を維持するために、自動生成ツールの改善が重要であることを示しています。

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

このコミットでは、以下のファイルが変更されています。

  • src/pkg/syscall/zerrors_freebsd_386.go
  • src/pkg/syscall/zerrors_freebsd_amd64.go
  • src/pkg/syscall/zerrors_openbsd_386.go
  • src/pkg/syscall/zerrors_openbsd_amd64.go
  • src/pkg/syscall/ztypes_freebsd_386.go
  • src/pkg/syscall/ztypes_freebsd_amd64.go
  • src/pkg/syscall/ztypes_openbsd_386.go
  • src/pkg/syscall/ztypes_openbsd_amd64.go

これらのファイルはすべて自動生成されたものであり、手動で編集されることはありません。変更内容は主に定数の値の修正、コメントの更新、および型定義の微調整です。

src/pkg/syscall/zerrors_openbsd_386.go の例

--- a/src/pkg/syscall/zerrors_openbsd_386.go
+++ b/src/pkg/syscall/zerrors_openbsd_386.go
@@ -1,13 +1,11 @@
-// mkerrors.sh -f -m32
+// mkerrors.sh -m32
 // MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
 
-// godefs -c gcc -f -m32 -gsyscall -f -m32 _const.c
-\
-// MACHINE GENERATED - DO NOT EDIT.
+// Created by cgo -godefs - DO NOT EDIT
+// cgo -godefs -- -m32 _const.go
 
 package syscall
 
-// Constants
 const (
 	AF_APPLETALK                      = 0x10
 	AF_BLUETOOTH                      = 0x20
@@ -42,7 +40,7 @@ const (
 	AF_SIP                            = 0x1d
 	AF_SNA                            = 0xb
 	AF_UNIX                           = 0x1
-	AF_UNSPEC                         = 0
+	AF_UNSPEC                         = 0x0
 	ARPHRD_ETHER                      = 0x1
 	ARPHRD_FRELAY                     = 0xf
 	ARPHRD_IEEE13994                   = 0x18
@@ -51,30 +49,30 @@ const (
 	BIOCGBLEN                         = 0x40044266
 	BIOCGDIRFILT                      = 0x4004427c
 	BIOCGDLT                          = 0x4004426a
-	BIOCGDLTLIST                      = 0xc008427b
+	BIOCGDLTLIST                      = -0x3ff7bd85
 	BIOCGETIF                         = 0x4020426b
 	BIOCGFILDROP                      = 0x40044278
 	BIOCGHDRCMPLT                     = 0x40044274
 	BIOCGRSIG                         = 0x40044273
 	BIOCGRTIMEOUT                     = 0x4008426e
 	BIOCGSTATS                        = 0x4008426f
-	BIOCIMMEDIATE                     = 0x80044270
+	BIOCIMMEDIATE                     = -0x7ffbbd90
 	BIOCLOCK                          = 0x20004276
 	BIOCPROMISC                       = 0x20004269
-	BIOCSBLEN                         = 0xc0044266
-	BIOCSDIRFILT                      = 0x8004427d
-	BIOCSDLT                          = 0x8004427a
-	BIOCSETF                          = 0x80084267
-	BIOCSETIF                         = 0x8020426c
-	BIOCSETWF                         = 0x80084277
-	BIOCSFILDROP                      = 0x80044279
-	BIOCSHDRCMPLT                     = 0x80044275
-	BIOCSRSIG                         = 0x80044272
-	BIOCSRTIMEOUT                     = 0x8008426d
+	BIOCSBLEN                         = -0x3ffbbd9a
+	BIOCSDIRFILT                      = -0x7ffbbd83
+	BIOCSDLT                          = -0x7ffbbd86
+	BIOCSETF                          = -0x7ff7bd99
+	BIOCSETIF                         = -0x7fdfbd94
+	BIOCSETWF                         = -0x7ff7bd89
+	BIOCSFILDROP                      = -0x7ffbbd87
+	BIOCSHDRCMPLT                     = -0x7ffbbd8b
+	BIOCSRSIG                         = -0x7ffbbd8e
+	BIOCSRTIMEOUT                     = -0x7ff7bd93
 	BIOCVERSION                       = 0x40044271
 	BPF_A                             = 0x10
 	BPF_ABS                           = 0x20
-	BPF_ADD                           = 0
+	BPF_ADD                           = 0x0
 	BPF_ALIGNMENT                     = 0x4
 	BPF_ALU                           = 0x4
 	BPF_AND                           = 0x50
@@ -83,16 +81,16 @@ const (
 	BPF_DIRECTION_OUT                 = 0x2
 	BPF_DIV                           = 0x30
 	BPF_H                             = 0x8
-	BPF_IMM                           = 0
+	BPF_IMM                           = 0x0
 	BPF_IND                           = 0x40
-	BPF_JA                            = 0
+	BPF_JA                            = 0x0
 	BPF_JEQ                           = 0x10
 	BPF_JGE                           = 0x30
 	BPF_JGT                           = 0x20
 	BPF_JMP                           = 0x5
 	BPF_JSET                          = 0x40
-	BPF_K                             = 0
-	BPF_LD                            = 0
+	BPF_K                             = 0x0
+	BPF_LD                            = 0x0
 	BPF_LDX                           = 0x1
 	BPF_LEN                           = 0x80
 	BPF_LSH                           = 0x60
@@ -114,9 +112,9 @@ const (
 	BPF_ST                            = 0x2
 	BPF_STX                           = 0x3
 	BPF_SUB                           = 0x10
-	BPF_TAX                           = 0
+	BPF_TAX                           = 0x0
 	BPF_TXA                           = 0x80
-	BPF_W                             = 0
+	BPF_W                             = 0x0
 	BPF_X                             = 0x8
 	CTL_MAXNAME                       = 0xc
 	CTL_NET                           = 0x4
@@ -133,7 +131,7 @@ const (
 	DLT_IEEE802_11_RADIO              = 0x7f
 	DLT_LOOP                          = 0xc
 	DLT_MPLS                          = 0xdb
-	DLT_NULL                          = 0
+	DLT_NULL                          = 0x0
 	DLT_PFLOG                         = 0x75
 	DLT_PFSYNC                        = 0x12
 	DLT_PPP                           = 0x9
@@ -150,7 +148,7 @@ const (
 	DT_LNK                            = 0xa
 	DT_REG                            = 0x8
 	DT_SOCK                           = 0xc
-	DT_UNKNOWN                        = 0
+	DT_UNKNOWN                        = 0x0
 	E2BIG                             = 0x7
 	EACCES                            = 0xd
 	EADDRINUSE                        = 0x30
@@ -181,10 +179,6 @@ const (
 	EEXIST                            = 0x11
 	EFAULT                            = 0xe
 	EFBIG                             = 0x1b
-	EFER_LMA                          = 0x400
-	EFER_LME                          = 0x100
-	EFER_NXE                          = 0x800
-	EFER_SCE                          = 0x1
 	EFTYPE                            = 0x4f
 	EHOSTDOWN                         = 0x40
 	EHOSTUNREACH                      = 0x41
@@ -444,7 +438,7 @@ const (
 	ETHER_ALIGN                       = 0x2
 	ETHER_CRC_LEN                     = 0x4
 	ETHER_CRC_POLY_BE                 = 0x4c11db6
-	ETHER_CRC_POLY_LE                 = 0xedb88320
+	ETHER_CRC_POLY_LE                 = -0x12477ce0
 	ETHER_HDR_LEN                     = 0xe
 	ETHER_MAX_DIX_LEN                 = 0x600
 	ETHER_MAX_LEN                     = 0x5ee
@@ -480,7 +474,7 @@ const (
 	EXTPROC                           = 0x800
 	FD_CLOEXEC                        = 0x1
 	FD_SETSIZE                        = 0x400
-	F_DUPFD                           = 0
+	F_DUPFD                           = 0x0
 	F_DUPFD_CLOEXEC                   = 0xa
 	F_GETFD                           = 0x1
 	F_GETFL                           = 0x3
@@ -738,21 +732,21 @@ const (
 	IFT_XETHER                        = 0x1a
 	IN_CLASSA_HOST                    = 0xffffff
 	IN_CLASSA_MAX                     = 0x80
-	IN_CLASSA_NET                     = 0xff000000
+	IN_CLASSA_NET                     = -0x1000000
 	IN_CLASSA_NSHIFT                  = 0x18
 	IN_CLASSB_HOST                    = 0xffff
 	IN_CLASSB_MAX                     = 0x10000
-	IN_CLASSB_NET                     = 0xffff0000
+	IN_CLASSB_NET                     = -0x10000
 	IN_CLASSB_NSHIFT                  = 0x10
 	IN_CLASSC_HOST                    = 0xff
-	IN_CLASSC_NET                     = 0xffffff00
+	IN_CLASSC_NET                     = -0x100
 	IN_CLASSC_NSHIFT                  = 0x8
 	IN_CLASSD_HOST                    = 0xfffffff
-	IN_CLASSD_NET                     = 0xf0000000
+	IN_CLASSD_NET                     = -0x10000000
 	IN_CLASSD_NSHIFT                  = 0x1c
 	IN_LOOPBACKNET                    = 0x7f
 	IN_RFC3021_HOST                   = 0x1
-	IN_RFC3021_NET                    = 0xfffffffe
+	IN_RFC3021_NET                    = -0x2
 	IN_RFC3021_NSHIFT                 = 0x1f
 	IPPROTO_AH                        = 0x33
 	IPPROTO_CARP                      = 0x70
@@ -767,12 +761,12 @@ const (
 	IPPROTO_FRAGMENT                  = 0x2c
 	IPPROTO_GGP                       = 0x3
 	IPPROTO_GRE                       = 0x2f
-	IPPROTO_HOPOPTS                   = 0
+	IPPROTO_HOPOPTS                   = 0x0
 	IPPROTO_ICMP                      = 0x1
 	IPPROTO_ICMPV6                    = 0x3a
 	IPPROTO_IDP                       = 0x16
 	IPPROTO_IGMP                      = 0x2
-	IPPROTO_IP                        = 0
+	IPPROTO_IP                        = 0x0
 	IPPROTO_IPCOMP                    = 0x6c
 	IPPROTO_IPIP                      = 0x4
 	IPPROTO_IPV4                      = 0x4
@@ -802,8 +796,8 @@ const (
 	IPV6_ESP_NETWORK_LEVEL            = 0x37
 	IPV6_ESP_TRANS_LEVEL              = 0x36
 	IPV6_FAITH                        = 0x1d
-	IPV6_FLOWINFO_MASK                = 0xffffff0f
-	IPV6_FLOWLABEL_MASK               = 0xffff0f00
+	IPV6_FLOWINFO_MASK                = -0xf1
+	IPV6_FLOWLABEL_MASK               = -0xf100
 	IPV6_FRAGTTL                      = 0x78
 	IPV6_HLIMDEC                      = 0x1
 	IPV6_HOPLIMIT                     = 0x2f
@@ -823,7 +817,7 @@ const (
 	IPV6_PIPEX                        = 0x3f
 	IPV6_PKTINFO                      = 0x2e
 	IPV6_PORTRANGE                    = 0xe
-	IPV6_PORTRANGE_DEFAULT            = 0
+	IPV6_PORTRANGE_DEFAULT            = 0x0
 	IPV6_PORTRANGE_HIGH               = 0x1
 	IPV6_PORTRANGE_LOW                = 0x2
 	IPV6_RECVDSTOPTS                  = 0x28
@@ -836,9 +830,9 @@ const (
 	IPV6_RTABLE                       = 0x1021
 	IPV6_RTHDR                        = 0x33
 	IPV6_RTHDRDSTOPTS                 = 0x23
-	IPV6_RTHDR_LOOSE                  = 0
+	IPV6_RTHDR_LOOSE                  = 0x0
 	IPV6_RTHDR_STRICT                 = 0x1
-	IPV6_RTHDR_TYPE_0                 = 0
+	IPV6_RTHDR_TYPE_0                 = 0x0
 	IPV6_SOCKOPT_RESERVED1            = 0x3
 	IPV6_TCLASS                       = 0x3d
 	IPV6_UNICAST_HOPS                 = 0x4
@@ -875,7 +869,7 @@ const (
 	IP_OPTIONS                        = 0x1
 	IP_PIPEX                          = 0x22
 	IP_PORTRANGE                      = 0x13
-	IP_PORTRANGE_DEFAULT              = 0
+	IP_PORTRANGE_DEFAULT              = 0x0
 	IP_PORTRANGE_HIGH                 = 0x1
 	IP_PORTRANGE_LOW                  = 0x2
 	IP_RECVDSTADDR                    = 0x7
@@ -922,16 +916,17 @@ const (
 	O_NOCTTY                          = 0x8000
 	O_NOFOLLOW                        = 0x100
 	O_NONBLOCK                        = 0x4
-	O_RDONLY                          = 0
+	O_RDONLY                          = 0x0
 	O_RDWR                            = 0x2
 	O_RSYNC                           = 0x80
 	O_SHLOCK                          = 0x10
 	O_SYNC                            = 0x80
 	O_TRUNC                           = 0x400
 	O_WRONLY                          = 0x1
+	PT_MASK                           = 0x3ff000
 	RTAX_AUTHOR                       = 0x6
 	RTAX_BRD                          = 0x7
-	RTAX_DST                          = 0
+	RTAX_DST                          = 0x0
 	RTAX_GATEWAY                      = 0x1
 	RTAX_GENMASK                      = 0x3
 	RTAX_IFA                          = 0x5
@@ -1003,10 +998,11 @@ const (
 	RTV_RTTVAR                        = 0x80
 	RTV_SPIPE                         = 0x10
 	RTV_SSTHRESH                      = 0x20
+	RT_TABLEID_MAX                    = 0xff
 	SCM_CREDS                         = 0x2
 	SCM_RIGHTS                        = 0x1
 	SCM_TIMESTAMP                     = 0x4
-	SHUT_RD                           = 0
+	SHUT_RD                           = 0x0
 	SHUT_RDWR                         = 0x2
 	SHUT_WR                           = 0x1
 	SIGABRT                           = 0x6
@@ -1042,118 +1038,118 @@ const (
 	SIGWINCH                          = 0x1c
 	SIGXCPU                           = 0x18
 	SIGXFSZ                           = 0x19
-	SIOCADDMULTI                      = 0x80206931
-	SIOCAIFADDR                       = 0x8040691a
-	SIOCAIFGROUP                      = 0x80246987
-	SIOCALIFADDR                      = 0x8218691c
+	SIOCADDMULTI                      = -0x7fdf96cf
+	SIOCAIFADDR                       = -0x7fbf96e6
+	SIOCAIFGROUP                      = -0x7fdb9679
+	SIOCALIFADDR                      = -0x7de796e4
 	SIOCATMARK                        = 0x40047307
-	SIOCBRDGADD                       = 0x8054693c
-	SIOCBRDGADDS                      = 0x80546941
-	SIOCBRDGARL                       = 0x806e694d
-	SIOCBRDGDADDR                     = 0x80286947
-	SIOCBRDGDEL                       = 0x8054693d
-	SIOCBRDGDELS                      = 0x80546942
-	SIOCBRDGFLUSH                     = 0x80546948
-	SIOCBRDGFRL                       = 0x806e694e
-	SIOCBRDGGCACHE                    = 0xc0146941
-	SIOCBRDGGGFD                      = 0xc0146952
-	SIOCBRDGGHT                       = 0xc0146951
-	SIOCBRDGGIFFLGS                   = 0xc054693e
-	SIOCBRDGGMA                       = 0xc0146953
-	SIOCBRDGGPARAM                    = 0xc0386958
-	SIOCBRDGGPRI                      = 0xc0146950
-	SIOCBRDGGRL                       = 0xc028694f
-	SIOCBRDGGSIFS                     = 0xc054693c
-	SIOCBRDGGTO                       = 0xc0146946
-	SIOCBRDGIFS                       = 0xc0546942
-	SIOCBRDGRTS                       = 0xc0186943
-	SIOCBRDGSADDR                     = 0xc0286944
-	SIOCBRDGSCACHE                    = 0x80146940
-	SIOCBRDGSFD                       = 0x80146952
-	SIOCBRDGSHT                       = 0x80146951
-	SIOCBRDGSIFCOST                   = 0x80546955
-	SIOCBRDGSIFFLGS                   = 0x8054693f
-	SIOCBRDGSIFPRIO                   = 0x80546954
-	SIOCBRDGSMA                       = 0x80146953
-	SIOCBRDGSPRI                      = 0x80146950
-	SIOCBRDGSPROTO                    = 0x8014695a
-	SIOCBRDGSTO                       = 0x80146945
-	SIOCBRDGSTXHC                     = 0x80146959
-	SIOCDELMULTI                      = 0x80206932
-	SIOCDIFADDR                       = 0x80206919
-	SIOCDIFGROUP                      = 0x80246989
-	SIOCDIFPHYADDR                    = 0x80206949
-	SIOCDLIFADDR                      = 0x8218691e
-	SIOCGETKALIVE                     = 0xc01869a4
-	SIOCGETLABEL                      = 0x8020699a
-	SIOCGETPFLOW                      = 0xc02069fe
-	SIOCGETPFSYNC                     = 0xc02069f8
-	SIOCGETSGCNT                      = 0xc0147534
-	SIOCGETVIFCNT                     = 0xc0147533
-	SIOCGETVLANPRIO                   = 0xc0206990
+	SIOCBRDGADD                       = -0x7fab96c4
+	SIOCBRDGADDS                      = -0x7fab96bf
+	SIOCBRDGARL                       = -0x7f9196b3
+	SIOCBRDGDADDR                     = -0x7fd796b9
+	SIOCBRDGDEL                       = -0x7fab96c3
+	SIOCBRDGDELS                      = -0x7fab96be
+	SIOCBRDGFLUSH                     = -0x7fab96b8
+	SIOCBRDGFRL                       = -0x7f9196b2
+	SIOCBRDGGCACHE                    = -0x3feb96bf
+	SIOCBRDGGFD                       = -0x3feb96ae
+	SIOCBRDGGHT                       = -0x3feb96af
+	SIOCBRDGGIFFLGS                   = -0x3fab96c2
+	SIOCBRDGGMA                       = -0x3feb96ad
+	SIOCBRDGGPARAM                    = -0x3fc796a8
+	SIOCBRDGGPRI                      = -0x3feb96b0
+	SIOCBRDGGRL                       = -0x3fd796b1
+	SIOCBRDGGSIFS                     = -0x3fab96c4
+	SIOCBRDGGTO                       = -0x3feb96ba
+	SIOCBRDGIFS                       = -0x3fab96be
+	SIOCBRDGRTS                       = -0x3fe796bd
+	SIOCBRDGSADDR                     = -0x3fd796bc
+	SIOCBRDGSCACHE                    = -0x7feb96c0
+	SIOCBRDGSFD                       = -0x7feb96ae
+	SIOCBRDGSHT                       = -0x7feb96af
+	SIOCBRDGSIFCOST                   = -0x7fab96ab
+	SIOCBRDGSIFFLGS                   = -0x7fab96c1
+	SIOCBRDGSIFPRIO                   = -0x7fab96ac
+	SIOCBRDGSMA                       = -0x7feb96ad
+	SIOCBRDGSPRI                      = -0x7feb96b0
+	SIOCBRDGSPROTO                    = -0x7feb96a6
+	SIOCBRDGSTO                       = -0x7feb96bb
+	SIOCBRDGSTXHC                     = -0x7feb96a7
+	SIOCDELMULTI                      = -0x7fdf96ce
+	SIOCDIFADDR                       = -0x7fdf96e7
+	SIOCDIFGROUP                      = -0x7fdb9677
+	SIOCDIFPHYADDR                    = -0x7fdf96b7
+	SIOCDLIFADDR                      = -0x7de796e2
+	SIOCGETKALIVE                     = -0x3fe7965c
+	SIOCGETLABEL                      = -0x7fdf9666
+	SIOCGETPFLOW                      = -0x3fdf9602
+	SIOCGETPFSYNC                      = -0x3fdf9608
+	SIOCGETSGCNT                      = -0x3feb8acc
+	SIOCGETVIFCNT                     = -0x3feb8acd
+	SIOCGETVLANPRIO                   = -0x3fdf9670
 	SIOCGHIWAT                        = 0x40047301
-	SIOCGIFADDR                       = 0xc0206921
-	SIOCGIFASYNCMAP                   = 0xc020697c
-	SIOCGIFBRDADDR                    = 0xc0206923
-	SIOCGIFCONF                       = 0xc0086924
-	SIOCGIFDATA                       = 0xc020691b
-	SIOCGIFDESCR                      = 0xc0206981
-	SIOCGIFDSTADDR                    = 0xc0206922
-	SIOCGIFFLAGS                      = 0xc0206911
-	SIOCGIFGATTR                      = 0xc024698b
-	SIOCGIFGENERIC                    = 0xc020693a
-	SIOCGIFGMEMB                      = 0xc024698a
-	SIOCGIFGROUP                      = 0xc0246988
-	SIOCGIFMEDIA                      = 0xc0286936
-	SIOCGIFMETRIC                     = 0xc0206917
-	SIOCGIFMTU                        = 0xc020697e
-	SIOCGIFNETMASK                    = 0xc0206925
-	SIOCGIFPDSTADDR                   = 0xc0206948
-	SIOCGIFPRIORITY                   = 0xc020699c
-	SIOCGIFPSRCADDR                   = 0xc0206947
-	SIOCGIFRDOMAIN                    = 0xc02069a0
-	SIOCGIFRTLABEL                    = 0xc0206983
-	SIOCGIFTIMESLOT                   = 0xc0206986
-	SIOCGIFXFLAGS                     = 0xc020699e
-	SIOCGLIFADDR                      = 0xc218691d
-	SIOCGLIFPHYADDR                   = 0xc218694b
-	SIOCGLIFPHYRTABLE                 = 0xc02069a2
+	SIOCGIFADDR                       = -0x3fdf96df
+	SIOCGIFASYNCMAP                   = -0x3fdf9684
+	SIOCGIFBRDADDR                    = -0x3fdf96dd
+	SIOCGIFCONF                       = -0x3ff796dc
+	SIOCGIFDATA                       = -0x3fdf96e5
+	SIOCGIFDESCR                      = -0x3fdf967f
+	SIOCGIFDSTADDR                    = -0x3fdf96de
+	SIOCGIFFLAGS                      = -0x3fdf96ef
+	SIOCGIFGATTR                      = -0x3fdb9675
+	SIOCGIFGENERIC                    = -0x3fdf96c6
+	SIOCGIFGMEMB                      = -0x3fdb9676
+	SIOCGIFGROUP                      = -0x3fdb9678
+	SIOCGIFMEDIA                      = -0x3fd796ca
+	SIOCGIFMETRIC                     = -0x3fdf96e9
+	SIOCGIFMTU                        = -0x3fdf9682
+	SIOCGIFNETMASK                    = -0x3fdf96db
+	SIOCGIFPDSTADDR                   = -0x3fdf96b8
+	SIOCGIFPRIORITY                   = -0x3fdf9664
+	SIOCGIFPSRCADDR                   = -0x3fdf96b9
+	SIOCGIFRDOMAIN                    = -0x3fdf9660
+	SIOCGIFRTLABEL                    = -0x3fdf967d
+	SIOCGIFTIMESLOT                   = -0x3fdf967a
+	SIOCGIFXFLAGS                     = -0x3fdf9662
+	SIOCGLIFADDR                      = -0x3de796e3
+	SIOCGLIFPHYADDR                   = -0x3de796b5
+	SIOCGLIFPHYRTABLE                 = -0x3fdf965e
 	SIOCGLOWAT                        = 0x40047303
 	SIOCGPGRP                         = 0x40047409
-	SIOCGVH                           = 0xc02069f6
-	SIOCIFCREATE                      = 0x8020697a
-	SIOCIFDESTROY                     = 0x80206979
-	SIOCIFGCLONERS                    = 0xc00c6978
-	SIOCSETKALIVE                     = 0x801869a3
-	SIOCSETLABEL                      = 0x80206999
-	SIOCSETPFLOW                      = 0x802069fd
-	SIOCSETPFSYNC                     = 0x802069f7
-	SIOCSETVLANPRIO                   = 0x8020698f
-	SIOCSHIWAT                        = 0x80047300
-	SIOCSIFADDR                       = 0x8020690c
-	SIOCSIFASYNCMAP                   = 0x8020697d
-	SIOCSIFBRDADDR                    = 0x80206913
-	SIOCSIFDESCR                      = 0x80206980
-	SIOCSIFDSTADDR                    = 0x8020690e
-	SIOCSIFFLAGS                      = 0x80206910
-	SIOCSIFGATTR                      = 0x8024698c
-	SIOCSIFGENERIC                    = 0x80206939
-	SIOCSIFLLADDR                     = 0x8020691f
-	SIOCSIFMEDIA                      = 0xc0206935
-	SIOCSIFMETRIC                     = 0x80206918
-	SIOCSIFMTU                        = 0x8020697f
-	SIOCSIFNETMASK                    = 0x80206916
-	SIOCSIFPHYADDR                    = 0x80406946
-	SIOCSIFPRIORITY                   = 0x8020699b
-	SIOCSIFRDOMAIN                    = 0x8020699f
-	SIOCSIFRTLABEL                    = 0x80206982
-	SIOCSIFTIMESLOT                   = 0x80206985
-	SIOCSIFXFLAGS                     = 0x8020699d
-	SIOCSLIFPHYADDR                   = 0x8218694a
-	SIOCSLIFPHYRTABLE                 = 0x802069a1
-	SIOCSLOWAT                        = 0x80047302
-	SIOCSPGRP                         = 0x80047308
-	SIOCSVH                           = 0xc02069f5
+	SIOCGVH                           = -0x3fdf960a
+	SIOCIFCREATE                      = -0x7fdf9686
+	SIOCIFDESTROY                     = -0x7fdf9687
+	SIOCIFGCLONERS                    = -0x3ff39688
+	SIOCSETKALIVE                     = -0x7fe7965d
+	SIOCSETLABEL                      = -0x7fdf9667
+	SIOCSETPFLOW                      = -0x7fdf9603
+	SIOCSETPFSYNC                      = -0x7fdf9609
+	SIOCSETVLANPRIO                   = -0x7fdf9671
+	SIOCSHIWAT                        = -0x7ffb8d00
+	SIOCSIFADDR                       = -0x7fdf96f4
+	SIOCSIFASYNCMAP                   = -0x7fdf9683
+	SIOCSIFBRDADDR                    = -0x7fdf96ed
+	SIOCSIFDESCR                      = -0x7fdf9680
+	SIOCSIFDSTADDR                    = -0x7fdf96f2
+	SIOCSIFFLAGS                      = -0x7fdf96f0
+	SIOCSIFGATTR                      = -0x3fdb9674
+	SIOCSIFGENERIC                    = -0x7fdf96c7
+	SIOCSIFLLADDR                     = -0x7fdf96e1
+	SIOCSIFMEDIA                      = -0x3fdf96cb
+	SIOCSIFMETRIC                     = -0x7fdf96e8
+	SIOCSIFMTU                        = -0x3fdf9681
+	SIOCSIFNETMASK                    = -0x7fdf96ea
+	SIOCSIFPHYADDR                    = -0x7fbf96ba
+	SIOCSIFPRIORITY                   = -0x7fdf9665
+	SIOCSIFRDOMAIN                    = -0x7fdf9661
+	SIOCSIFRTLABEL                    = -0x7fdf967e
+	SIOCSIFTIMESLOT                   = -0x7fdf967b
+	SIOCSIFXFLAGS                     = -0x7fdf9663
+	SIOCSLIFPHYADDR                   = -0x7de796b6
+	SIOCSLIFPHYRTABLE                 = -0x7fdf965f
+	SIOCSLOWAT                        = -0x7ffb8cfe
+	SIOCSPGRP                         = -0x7ffb8cf8
+	SIOCSVH                           = -0x3fdf960b
 	SOCK_DGRAM                        = 0x2
 	SOCK_RAW                          = 0x3
 	SOCK_RDM                          = 0x4
@@ -1198,28 +1194,28 @@ const (
 	TCP_SACK_ENABLE                   = 0x8
 	TIOCCBRK                          = 0x2000747a
 	TIOCCDTR                          = 0x20007478
-	TIOCCONS                          = 0x80047462
+	TIOCCONS                          = -0x7ffb8b9e
 	TIOCDRAIN                         = 0x2000745e
 	TIOCEXCL                          = 0x2000740d
-	TIOCEXT                           = 0x80047460
+	TIOCEXT                           = -0x7ffb8b9e
 	TIOCFLAG_CLOCAL                   = 0x2
 	TIOCFLAG_CRTSCTS                  = 0x4
 	TIOCFLAG_MDMBUF                   = 0x8
 	TIOCFLAG_PPS                      = 0x10
 	TIOCFLAG_SOFTCAR                  = 0x1
-	TIOCFLUSH                         = 0x80047410
+	TIOCFLUSH                         = -0x7ffb8bf0
 	TIOCGETA                          = 0x402c7413
 	TIOCGETD                          = 0x4004741a
 	TIOCGFLAGS                        = 0x4004745d
 	TIOCGPGRP                         = 0x40047477
 	TIOCGTSTAMP                       = 0x4008745b
 	TIOCGWINSZ                        = 0x40087468
-	TIOCMBIC                          = 0x8004746b
-	TIOCMBIS                          = 0x8004746c
+	TIOCMBIC                          = -0x7ffb8b95
+	TIOCMBIS                          = -0x7ffb8b94
 	TIOCMGET                          = 0x4004746a
 	TIOCMODG                          = 0x4004746a
-	TIOCMODS                          = 0x8004746d
-	TIOCMSET                          = 0x8004746d
+	TIOCMODS                          = -0x7ffb8b93
+	TIOCMSET                          = -0x7ffb8b93
 	TIOCM_CAR                         = 0x40
 	TIOCM_CD                          = 0x40
 	TIOCM_CTS                         = 0x20
@@ -1234,8 +1230,8 @@ const (
 	TIOCNOTTY                         = 0x20007471
 	TIOCNXCL                          = 0x2000740e
 	TIOCOUTQ                          = 0x40047473
-	TIOCPKT                           = 0x80047470
-	TIOCPKT_DATA                      = 0
+	TIOCPKT                           = -0x7ffb8b90
+	TIOCPKT_DATA                      = 0x0
 	TIOCPKT_DOSTOP                    = 0x20
 	TIOCPKT_FLUSHREAD                 = 0x1
 	TIOCPKT_FLUSHWRITE                 = 0x2
@@ -1243,24 +1239,24 @@ const (
 	TIOCPKT_NOSTOP                    = 0x10
 	TIOCPKT_START                     = 0x8
 	TIOCPKT_STOP                      = 0x4
-	TIOCREMOTE                        = 0x80047469
+	TIOCREMOTE                        = -0x7ffb8b97
 	TIOCSBRK                          = 0x2000747b
 	TIOCSCTTY                         = 0x20007461
 	TIOCSDTR                          = 0x20007479
-	TIOCSETA                          = 0x802c7414
-	TIOCSETAF                         = 0x802c7416
-	TIOCSETAW                         = 0x802c7415
-	TIOCSETD                          = 0x8004741b
-	TIOCSFLAGS                        = 0x8004745c
-	TIOCSIG                           = 0x8004745f
-	TIOCSPGRP                         = 0x80047476
+	TIOCSETA                          = -0x7fd38bec
+	TIOCSETAF                         = -0x7fd38bea
+	TIOCSETAW                         = -0x7fd38beb
+	TIOCSETD                          = -0x7ffb8be5
+	TIOCSFLAGS                        = -0x7ffb8ba4
+	TIOCSIG                           = -0x7ffb8ba1
+	TIOCSPGRP                         = -0x7ffb8b8a
 	TIOCSTART                         = 0x2000746e
-	TIOCSTAT                          = 0x80047465
-	TIOCSTI                           = 0x80017472
+	TIOCSTAT                          = -0x7ffb8b9b
+	TIOCSTI                           = -0x7ffe8b8e
 	TIOCSTOP                          = 0x2000746f
-	TIOCSTSTAMP                       = 0x8008745a
-	TIOCSWINSZ                        = 0x80087467
-	TIOCUCNTL                         = 0x80047466
+	TIOCSTSTAMP                       = -0x7ff78ba6
+	TIOCSWINSZ                        = -0x7ff78b99
+	TIOCUCNTL                         = -0x7ffb8b9a
 	WALTSIG                           = 0x4
 	WCONTINUED                        = 0x8
 	WCOREFLAG                         = 0x80

コアとなるコードの解説

上記の差分は、zerrors_openbsd_386.goファイルにおける変更の一部を示しています。

  1. ヘッダーコメントの変更: ファイルの冒頭にあるコメントが変更され、生成元がgodefsからcgo -godefsに明確に示されています。これは、Goのツールチェインが進化し、cgogodefsの機能を統合したことを反映しています。

  2. 定数の値の修正: BIOCGDLTLIST, BIOCIMMEDIATE, BIOCSBLENなど、多くの定数の値が正の16進数から負の16進数に変わっています。これは、C言語のヘッダーファイルでこれらの定数が符号付き整数として定義されており、その負の値がGoのコードに正しく反映されるようになったことを意味します。例えば、BIOCGDLTLIST0xc008427bから-0x3ff7bd85に変更されています。これは、32ビット符号付き整数として解釈した場合の正しい値への修正です。

  3. 0の表現の統一: AF_UNSPEC, BPF_ADD, BPF_IMMなど、値が0の定数が0x0と明示的に16進数で表現されるように統一されています。これは、コードのスタイルと一貫性を向上させるための変更です。

  4. 不要なコメントの削除: // Constants// Typesといったセクションヘッダーのコメントが削除されています。これは、自動生成されるファイルにおいては冗長であり、cgo -godefsの出力がより簡潔になったことを示唆しています。

これらの変更は、GoのsyscallパッケージがOpenBSDのシステムコールインターフェースをより正確に表現し、Goプログラムがこれらの定数を正しく解釈して利用できるようにするために重要です。特に、負の値を持つ定数の正確な表現は、特定のシステムコールやioctl操作の正しい動作に不可欠です。

関連リンク

参考にした情報源リンク