[インデックス 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のツールチェイン(特にcgo
とgodefs
)と同期していることを保証することです。これにより、GoプログラムがこれらのOS上で正しくシステムコールを実行し、OS固有のデータ構造を正確に扱えるようになります。
具体的な変更点としては、zerrors_openbsd_386.go
ファイルで負の値を持つ定数(例: BIOCGDLTLIST
)が、以前は符号なし整数として扱われていたために大きな正の値として表現されていたものが、正しい負の値として表現されるように修正されています。これは、cgo -godefs
がC言語の定数をGoの定数に変換する際の挙動が改善されたことを示唆しています。また、コメントの変更も行われており、ファイルの生成元がmkerrors.sh
やgodefs
からcgo -godefs
に統一されたことがわかります。
前提知識の解説
Go言語のsyscall
パッケージ
Go言語のsyscall
パッケージは、Goプログラムからオペレーティングシステム(OS)のシステムコールを直接呼び出すための低レベルなインターフェースを提供します。これにより、ファイル操作、ネットワーク通信、プロセス管理など、OSカーネルが提供する機能にアクセスできます。
z-files
(zerrors_.go, ztypes_.go)
Goのsyscall
パッケージには、zerrors_*.go
やztypes_*.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_*.go
やzerrors_*.go
ファイルを生成する役割を担います。このツールは、OSのABI(Application Binary Interface)に依存する低レベルな型定義をGoで表現するために不可欠です。
mkerrors.sh
mkerrors.sh
は、zerrors_*.go
ファイルを生成するためのシェルスクリプトです。このスクリプトは、C言語のヘッダーファイルからエラーコードやその他の定数を抽出し、Goの定数として定義します。
mkall.sh
mkall.sh
は、syscall
パッケージ内のすべてのz-files
を生成するためのスクリプトです。通常、mkerrors.sh
やgodefs
(またはcgo -godefs
)を呼び出して、各OS/アーキテクチャのz-files
をまとめて更新します。
技術的詳細
このコミットの主要な技術的変更は、z-files
の生成プロセスと、それに伴う定数表現の修正にあります。
-
生成コマンドの変更:
- 変更前:
// 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のビルドシステムがこれらのファイルをより一貫して生成できるようになります。 - 変更前:
-
定数表現の修正: OpenBSDの
zerrors_openbsd_386.go
ファイルにおいて、いくつかの定数の値が変更されています。特に注目すべきは、BIOCGDLTLIST
やBIOCIMMEDIATE
などの定数が、以前は大きな正の16進数(例:0xc008427b
)で表現されていたものが、負の16進数(例:-0x3ff7bd85
)に修正されている点です。これは、C言語のヘッダーファイルで定義されているこれらの定数が、実際には符号付き整数として負の値を持つべきであったことを示唆しています。以前の
godefs
のバージョンでは、これらの値を符号なし整数として解釈してしまい、結果としてGoのコードで誤った値が生成されていた可能性があります。cgo -godefs
の改善により、C言語の型システムとの整合性が向上し、正しい符号付きの値がGoの定数として生成されるようになったと考えられます。例えば、
0xc008427b
という32ビットの16進数は、符号なし整数としては3221633659
ですが、符号付き整数(2の補数表現)としては-1073333637
となります。このコミットでは、Goの定数定義がC言語の元の意図に沿うように修正されたことを意味します。 -
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
ファイルにおける変更の一部を示しています。
-
ヘッダーコメントの変更: ファイルの冒頭にあるコメントが変更され、生成元が
godefs
からcgo -godefs
に明確に示されています。これは、Goのツールチェインが進化し、cgo
がgodefs
の機能を統合したことを反映しています。 -
定数の値の修正:
BIOCGDLTLIST
,BIOCIMMEDIATE
,BIOCSBLEN
など、多くの定数の値が正の16進数から負の16進数に変わっています。これは、C言語のヘッダーファイルでこれらの定数が符号付き整数として定義されており、その負の値がGoのコードに正しく反映されるようになったことを意味します。例えば、BIOCGDLTLIST
は0xc008427b
から-0x3ff7bd85
に変更されています。これは、32ビット符号付き整数として解釈した場合の正しい値への修正です。 -
0
の表現の統一:AF_UNSPEC
,BPF_ADD
,BPF_IMM
など、値が0
の定数が0x0
と明示的に16進数で表現されるように統一されています。これは、コードのスタイルと一貫性を向上させるための変更です。 -
不要なコメントの削除:
// Constants
や// Types
といったセクションヘッダーのコメントが削除されています。これは、自動生成されるファイルにおいては冗長であり、cgo -godefs
の出力がより簡潔になったことを示唆しています。
これらの変更は、Goのsyscall
パッケージがOpenBSDのシステムコールインターフェースをより正確に表現し、Goプログラムがこれらの定数を正しく解釈して利用できるようにするために重要です。特に、負の値を持つ定数の正確な表現は、特定のシステムコールやioctl操作の正しい動作に不可欠です。
関連リンク
- Go言語の
syscall
パッケージのドキュメント: https://pkg.go.dev/syscall - Go言語の
cgo
ドキュメント: https://go.dev/blog/cgo (これはブログ記事ですが、cgo
の基本的な概念を理解するのに役立ちます)
参考にした情報源リンク
- 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のツールチェイン(特にcgo
とgodefs
)と同期していることを保証することです。これにより、GoプログラムがこれらのOS上で正しくシステムコールを実行し、OS固有のデータ構造を正確に扱えるようになります。
具体的な変更点としては、zerrors_openbsd_386.go
ファイルで負の値を持つ定数(例: BIOCGDLTLIST
)が、以前は符号なし整数として扱われていたために大きな正の値として表現されていたものが、正しい負の値として表現されるように修正されています。これは、cgo -godefs
がC言語の定数をGoの定数に変換する際の挙動が改善されたことを示唆しています。また、コメントの変更も行われており、ファイルの生成元がmkerrors.sh
やgodefs
からcgo -godefs
に統一されたことがわかります。
前提知識の解説
Go言語のsyscall
パッケージ
Go言語のsyscall
パッケージは、Goプログラムからオペレーティングシステム(OS)のシステムコールを直接呼び出すための低レベルなインターフェースを提供します。これにより、ファイル操作、ネットワーク通信、プロセス管理など、OSカーネルが提供する機能にアクセスできます。
z-files
(zerrors_.go, ztypes_.go)
Goのsyscall
パッケージには、zerrors_*.go
やztypes_*.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_*.go
やzerrors_*.go
ファイルを生成する役割を担います。このツールは、OSのABI(Application Binary Interface)に依存する低レベルな型定義をGoで表現するために不可欠です。
mkerrors.sh
mkerrors.sh
は、zerrors_*.go
ファイルを生成するためのシェルスクリプトです。このスクリプトは、C言語のヘッダーファイルからエラーコードやその他の定数を抽出し、Goの定数として定義します。
mkall.sh
mkall.sh
は、syscall
パッケージ内のすべてのz-files
を生成するためのスクリプトです。通常、mkerrors.sh
やgodefs
(またはcgo -godefs
)を呼び出して、各OS/アーキテクチャのz-files
をまとめて更新します。
技術的詳細
このコミットの主要な技術的変更は、z-files
の生成プロセスと、それに伴う定数表現の修正にあります。
-
生成コマンドの変更:
- 変更前:
// 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のビルドシステムがこれらのファイルをより一貫して生成できるようになります。 - 変更前:
-
定数表現の修正: OpenBSDの
zerrors_openbsd_386.go
ファイルにおいて、いくつかの定数の値が変更されています。特に注目すべきは、BIOCGDLTLIST
やBIOCIMMEDIATE
などの定数が、以前は大きな正の16進数(例:0xc008427b
)で表現されていたものが、負の16進数(例:-0x3ff7bd85
)に修正されている点です。これは、C言語のヘッダーファイルで定義されているこれらの定数が、実際には符号付き整数として負の値を持つべきであったことを示唆しています。以前の
godefs
のバージョンでは、これらの値を符号なし整数として解釈してしまい、結果としてGoのコードで誤った値が生成されていた可能性があります。cgo -godefs
の改善により、C言語の型システムとの整合性が向上し、正しい符号付きの値がGoの定数として生成されるようになったと考えられます。例えば、
0xc008427b
という32ビットの16進数は、符号なし整数としては3221633659
ですが、符号付き整数(2の補数表現)としては-1073333637
となります。このコミットでは、Goの定数定義がC言語の元の意図に沿うように修正されたことを意味します。 -
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
ファイルにおける変更の一部を示しています。
-
ヘッダーコメントの変更: ファイルの冒頭にあるコメントが変更され、生成元が
godefs
からcgo -godefs
に明確に示されています。これは、Goのツールチェインが進化し、cgo
がgodefs
の機能を統合したことを反映しています。 -
定数の値の修正:
BIOCGDLTLIST
,BIOCIMMEDIATE
,BIOCSBLEN
など、多くの定数の値が正の16進数から負の16進数に変わっています。これは、C言語のヘッダーファイルでこれらの定数が符号付き整数として定義されており、その負の値がGoのコードに正しく反映されるようになったことを意味します。例えば、BIOCGDLTLIST
は0xc008427b
から-0x3ff7bd85
に変更されています。これは、32ビット符号付き整数として解釈した場合の正しい値への修正です。 -
0
の表現の統一:AF_UNSPEC
,BPF_ADD
,BPF_IMM
など、値が0
の定数が0x0
と明示的に16進数で表現されるように統一されています。これは、コードのスタイルと一貫性を向上させるための変更です。 -
不要なコメントの削除:
// Constants
や// Types
といったセクションヘッダーのコメントが削除されています。これは、自動生成されるファイルにおいては冗長であり、cgo -godefs
の出力がより簡潔になったことを示唆しています。
これらの変更は、Goのsyscall
パッケージがOpenBSDのシステムコールインターフェースをより正確に表現し、Goプログラムがこれらの定数を正しく解釈して利用できるようにするために重要です。特に、負の値を持つ定数の正確な表現は、特定のシステムコールやioctl操作の正しい動作に不可欠です。
関連リンク
- Go言語の
syscall
パッケージのドキュメント: https://pkg.go.dev/syscall - Go言語の
cgo
ドキュメント: https://go.dev/blog/cgo (これはブログ記事ですが、cgo
の基本的な概念を理解するのに役立ちます)
参考にした情報源リンク
- Go言語のソースコード(
syscall
パッケージ) - Go言語の公式ドキュメント
cgo
およびgodefs
に関する一般的な情報(Web検索)- FreeBSDおよびOpenBSDのシステムプログラミングに関する一般的な情報(Web検索)
- 2の補数表現に関する情報(負の数の表現について)
- GitHubのコミット履歴と差分表示
- Go言語の
syscall
パッケージにおける「z-files」に関するWeb検索結果: