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

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

このコミットは、Go言語のsyscallパッケージがFreeBSD 10に対応するための変更を導入しています。特に、FreeBSD 10で発生したシステムコール引数や構造体の変更に対応しつつ、後方互換性を維持するための調整が行われています。Goのsyscallパッケージは、OS固有のシステムコールをGoプログラムから呼び出すためのインターフェースを提供しており、OSのバージョンアップに伴うABI(Application Binary Interface)の変更に追従する必要があります。

コミット

commit 737efeb5b8fe18451adfbd29fe663df2f2b4b384
Author: Mikio Hara <mikioh.mikioh@gmail.com>
Date:   Tue Mar 4 09:26:01 2014 +0900

    syscall: regenerate z-files on FreeBSD 10
    
    Unfortunately FreeBSD 10 has changed its syscall arguments for
    some reasons but as per request at golang-dev this CL does not
    generate some structures, syscall numbers and constants as
    compatible to FreeBSD 10 as follows:
    
    Structure: Stat_t, IfData, IfMsghdr are based on 8-STABLE
    Syscall number: Capsicum API is based on 9-STABLE
    Constant: IFT_CARP, SIOCAIFADDR, SIOCSIFPHYADDR are based on 9-STABLE
    
    Update #7193
    
    FreeBSD 10 breaking changes:
    
    r205792: Rename st_*timespec fields to st_*tim for POSIX 2008
    compliance.
    http://svnweb.freebsd.org/base?view=revision&revision=205792
    
    r254804: Restructure the mbuf pkthdr to make it fit for upcoming
    capabilities and features.
    http://svnweb.freebsd.org/base?view=revision&revision=254804
    
    r255219: Change the cap_rights_t type from uint64_t to a structure
    that we can extend in the future in a backward compatible (API and
    ABI) way.
    http://svnweb.freebsd.org/base?view=revision&revision=255219
    
    LGTM=iant
    R=golang-codereviews, rsc, minux.ma, gobot, iant
    CC=golang-codereviews
    https://golang.org/cl/56770044

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

https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384

元コミット内容

このコミットは、FreeBSD 10におけるシステムコール引数の変更に対応するため、Goのsyscallパッケージ内のz-filesを再生成するものです。しかし、FreeBSD 10の変更がGoの既存のコードベースに大きな影響を与えないよう、一部の構造体、システムコール番号、定数についてはFreeBSD 8-STABLEおよび9-STABLEとの互換性を維持する形で生成されています。具体的には、Stat_t, IfData, IfMsghdr構造体は8-STABLEに基づき、Capsicum API関連のシステムコール番号、およびIFT_CARP, SIOCAIFADDR, SIOCSIFPHYADDR定数は9-STABLEに基づいています。

コミットメッセージには、FreeBSD 10で導入された主要な破壊的変更のSVNリビジョンと概要が記載されています。

  • r205792: POSIX 2008準拠のため、st_*timespecフィールドがst_*timにリネームされました。これはファイルシステム関連の統計情報構造体(stat)に影響します。
  • r254804: mbuf pkthdr構造体が再構築されました。これはネットワークインターフェースのデータ構造に影響します。
  • r255219: cap_rights_t型がuint64_tから構造体に変更されました。これはCapsicum APIに影響します。

変更の背景

Go言語のsyscallパッケージは、各オペレーティングシステム(OS)のシステムコールをGoプログラムから透過的に呼び出すための重要なレイヤーです。このパッケージは、OSのC言語ヘッダファイルから自動生成されるz-fileszerrors_*.go, zsysnum_*.go, ztypes_*.goなど)に大きく依存しています。これらのファイルは、OSのシステムコール番号、エラーコード、データ構造の定義をGoのコードにマッピングする役割を担っています。

FreeBSD 10は、以前のバージョン(特に8-STABLEや9-STABLE)と比較して、カーネルの内部構造やシステムコールのABIにいくつかの破壊的変更を導入しました。これらの変更は、特にPOSIX標準への準拠、ネットワークスタックの改善、およびセキュリティ機能(Capsicum)の進化に関連しています。

GoのsyscallパッケージがFreeBSD 10上で正しく機能するためには、これらの変更を反映したz-filesを再生成する必要があります。しかし、単に最新のFreeBSD 10のヘッダファイルに基づいてz-filesを生成すると、Goの既存のコードベースや、FreeBSDの古いバージョンとの互換性が損なわれる可能性があります。特に、GoのリリースサイクルとFreeBSDのリリースサイクルが異なるため、GoがサポートするFreeBSDのバージョン間で互換性を維持することが求められます。

このコミットは、FreeBSD 10の変更を取り込みつつも、Goのユーザーが直面する可能性のある互換性の問題を最小限に抑えるための戦略的なアプローチを示しています。具体的には、一部の重要な構造体やAPIについては、FreeBSDのより安定した(そしてGoが以前からサポートしていた)バージョン(8-STABLEや9-STABLE)の定義を意図的に維持することで、Goアプリケーションの安定稼働を優先しています。これは、新しいOSバージョンへの移行期間におけるGoの安定性を確保するための現実的な選択です。

前提知識の解説

システムコールとABI

システムコールは、ユーザー空間のプログラムがオペレーティングシステムカーネルのサービス(ファイルI/O、メモリ管理、プロセス制御など)を要求するためのインターフェースです。ABI(Application Binary Interface)は、コンパイルされたプログラムが特定のOS上で実行されるために必要な低レベルのインターフェースのセットを指します。これには、システムコールの呼び出し規約、データ構造のメモリレイアウト、レジスタの使用方法などが含まれます。OSのバージョンアップによってABIが変更されると、古いOSバージョン用にコンパイルされたプログラムが新しいOSバージョンで正しく動作しなくなる可能性があります。

Goのsyscallパッケージとz-files

Go言語のsyscallパッケージは、Goプログラムから直接OSのシステムコールを呼び出すためのGo言語バインディングを提供します。このパッケージは、OS固有のC言語ヘッダファイルから自動生成されるGoのソースファイルに大きく依存しています。これらの自動生成されたファイルは慣習的にz-filesと呼ばれ、zerrors_*.gozsysnum_*.goztypes_*.goといった命名規則に従います。

  • zerrors_*.go: OSのエラーコード(errno)や各種定数(ソケットオプション、ファイルフラグなど)をGoの定数として定義します。
  • zsysnum_*.go: システムコール番号と、それに対応するC言語の関数プロトタイプをGoの定数として定義します。
  • ztypes_*.go: OSのC言語構造体(struct stat, struct sockaddrなど)をGoの構造体として定義し、メモリレイアウトがC言語のそれと一致するようにします。

これらのz-filesは、mkall.shmkerrors.shmksysnum_freebsd.plなどのスクリプトによって生成されます。これらのスクリプトは、FreeBSDのソースツリーから関連するヘッダファイルやシステムコール定義を読み込み、Goのコードに変換します。

FreeBSDのバージョンとSTABLEブランチ

FreeBSDは、開発ブランチ(HEAD)と安定版ブランチ(STABLE)を持っています。STABLEブランチは、特定のメジャーバージョン(例: 8-STABLE, 9-STABLE, 10-STABLE)の安定版リリースに向けた開発が行われる場所です。各STABLEブランチは、そのメジャーバージョンのリリース後にバグ修正やセキュリティアップデートが適用されますが、ABIの破壊的変更は通常導入されません。しかし、メジャーバージョンが上がる際には、ABIの変更が発生することがあります。

Capsicum API

Capsicumは、FreeBSDに導入されたサンドボックス化と権限分離のためのフレームワークです。これは、ファイル記述子ベースのケーパビリティ(能力)を導入し、プログラムがアクセスできるリソースを細かく制御できるようにします。Capsicum APIは、システムコールを介してこれらのケーパビリティを操作するためのインターフェースを提供します。このAPIはFreeBSD 9-STABLEで導入され、FreeBSD 10でその型定義に破壊的変更が加えられました。

技術的詳細

このコミットの技術的詳細は、GoのsyscallパッケージがFreeBSD 10のABI変更にどのように対応したか、そして後方互換性をどのように維持したかに集約されます。

  1. z-files生成スクリプトの更新:

    • src/pkg/syscall/mkall.sh: mksysnumコマンドがFreeBSDのシステムコール定義を取得するURLを、base/headからbase/stable/10に変更しています。これにより、GoのビルドシステムがFreeBSD 10のシステムコール定義を基にz-filesを生成するようになります。
    • src/pkg/syscall/mkerrors.sh: FreeBSD 10以降でのみ有効な定数(IFT_CARP, SIOCAIFADDR, SIOCSIFPHYADDR)を条件付きで定義しています。これは、これらの定数がFreeBSD 9-STABLEと10で異なる値を持つため、Goが特定のバージョンに依存しないようにするための措置です。
    • src/pkg/syscall/mksysnum_freebsd.pl: Capsicum API関連のシステムコール(SYS_CAP_*)を、FreeBSD 10のsyscalls.masterから直接取り込むのではなく、スクリプト内で明示的にFreeBSD 9-STABLEのシステムコール番号を定義しています。これは、FreeBSD 10でcap_rights_tの型が変更されたことによるABI互換性の問題を回避するためです。
  2. 構造体の互換性維持:

    • src/pkg/syscall/types_freebsd.go:
      • struct stat8, struct if_data8, struct if_msghdr8という新しいC言語構造体定義が追加されています。これらは、FreeBSD 8-STABLEのstat, if_data, if_msghdr構造体の正確なコピーです。
      • GoのStat_t, IfData, IfMsghdr型が、それぞれFreeBSD 10のネイティブな構造体ではなく、これらのstat8, if_data8, if_msghdr8にマッピングされるように変更されています。これにより、GoのコードがFreeBSD 10のABI変更の影響を受けずに、以前のバージョンの構造体レイアウトで動作し続けることができます。これは、特にst_*timespecからst_*timへのリネームや、mbuf pkthdrの再構築といった変更に対応するためのものです。
  3. 定数とシステムコール番号の更新:

    • src/pkg/syscall/zerrors_freebsd_*.go: FreeBSD 10で追加または変更された多数の定数(例: AF_INET6_SDP, DLT_MPEG_2_TS, EV_DROP, MAP_ALIGNED_SUPER, O_CLOEXEC, SOCK_CLOEXEC, ENOTRECOVERABLE, EOWNERDEADなど)が更新されています。これにより、GoプログラムがFreeBSD 10の新しい機能やエラーコードを利用できるようになります。
    • src/pkg/syscall/zsysnum_freebsd_*.go: システムコール番号とプロトタイプがFreeBSD 10に合わせて更新されています。これには、引数型の変更(例: chflags, fchflagsflagsintからu_longへ)や、extattr_*関連のシステムコールの戻り値型(intからssize_tへ)の変更が含まれます。また、bindat, connectat, chflagsat, accept4, pipe2, procctlといったFreeBSD 10で追加された新しいシステムコールも定義されています。Capsicum関連のシステムコールについては、mksysnum_freebsd.plの変更により、FreeBSD 9-STABLEの定義が維持されています。
  4. Go構造体の調整:

    • src/pkg/syscall/ztypes_freebsd_*.go: types_freebsd.goで定義されたstat8, if_data8, if_msghdr8に対応するGoの構造体が生成され、既存のStat_t, IfMsghdr, IfData型がこれらを指すように変更されています。また、RawSockaddrUnix, RawSockaddrDatalink, BpfHdr, Termiosなど、他のシステムコール関連のGo構造体もFreeBSD 10のABIに合わせて調整されています。特に、パディングバイトの追加や削除、フィールドの型の変更など、メモリレイアウトに関する微細な調整が行われています。

これらの変更は、GoがFreeBSD 10の新しい機能を利用できるようにしつつ、既存のGoアプリケーションがFreeBSD 10に移行する際の互換性問題を最小限に抑えるためのバランスの取れたアプローチを示しています。

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

このコミットにおけるコアとなるコードの変更は、主に以下のファイルに集中しています。

  1. src/pkg/syscall/mkall.sh:

    --- a/src/pkg/syscall/mkall.sh
    +++ b/src/pkg/syscall/mkall.sh
    @@ -136,18 +136,18 @@ dragonfly_amd64)
     freebsd_386)
      	mkerrors="$mkerrors -m32"
      	mksyscall="./mksyscall.pl -l32"
    - 	mksysnum="curl -s 'http://svn.freebsd.org/base/head/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
    + 	mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
      	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
      	;;
     freebsd_amd64)
      	mkerrors="$mkerrors -m64"
    - 	mksysnum="curl -s 'http://svn.freebsd.org/base/head/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
    + 	mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
      	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
      	;;
     freebsd_arm)
      	mkerrors="$mkerrors"
      	mksyscall="./mksyscall.pl -l32 -arm"
    - 	mksysnum="curl -s 'http://svn.freebsd.org/base/head/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
    + 	mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
      	# Let the type of C char be singed for making the bare syscall
      	# API consistent across over platforms.
      	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
    
    • mksysnumがシステムコール定義を取得するFreeBSD SVNリポジトリのパスをheadからstable/10に変更しています。これにより、FreeBSD 10のシステムコール定義が使用されるようになります。
  2. src/pkg/syscall/mkerrors.sh:

    --- a/src/pkg/syscall/mkerrors.sh
    +++ b/src/pkg/syscall/mkerrors.sh
    @@ -73,6 +74,14 @@ includes_FreeBSD='
     #include <termios.h>
     #include <netinet/ip.h>
     #include <netinet/ip_mroute.h>
    +
    +#if __FreeBSD__ >= 10
    +#define IFT_CARP	0xf8	// IFT_CARP is deprecated in FreeBSD 10
    +#undef SIOCAIFADDR
    +#define SIOCAIFADDR	_IOW(105, 26, struct oifaliasreq)	// ifaliasreq contains if_data
    +#undef SIOCSIFPHYADDR
    +#define SIOCSIFPHYADDR	_IOW(105, 70, struct oifaliasreq)	// ifaliasreq contains if_data
    +#endif
     '
     
     includes_Linux='
    
    • FreeBSD 10以降でのみ適用される定数(IFT_CARP, SIOCAIFADDR, SIOCSIFPHYADDR)の定義を追加しています。これは、これらの定数がFreeBSDのバージョンによって異なる値を持つため、Goが特定のバージョンに依存しないようにするための措置です。
  3. src/pkg/syscall/mksysnum_freebsd.pl:

    --- a/src/pkg/syscall/mksysnum_freebsd.pl
    +++ b/src/pkg/syscall/mksysnum_freebsd.pl
    @@ -33,8 +33,21 @@ while(<>){
     		if($name eq 'SYS_SYS_EXIT'){
     			$name = 'SYS_EXIT';
     		}
    +		if($name =~ /^SYS_CAP_+/ || $name =~ /^SYS___CAP_+/){
    +			next
    +		}
     
     		print "\t$name = $num;  // $proto\n";
    +\
    +		# We keep Capsicum syscall numbers for FreeBSD
    +		# 9-STABLE here because we are not sure whether they
    +		# are mature and stable.
    +		if($num == 513){
    +			print " SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); }\n";
    +			print " SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \\\\\n";
    +			print " SYS_CAP_ENTER = 516 // { int cap_enter(void); }\n";
    +			print " SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }\n";
    +		}
     	}
     }
    
    • SYS_CAP_*で始まるシステムコールをスキップし、代わりにFreeBSD 9-STABLEのCapsicum API関連のシステムコール番号を明示的に追加しています。これは、FreeBSD 10でcap_rights_tの型が変更されたことによるABI互換性の問題を回避するためです。
  4. src/pkg/syscall/types_freebsd.go:

    --- a/src/pkg/syscall/types_freebsd.go
    +++ b/src/pkg/syscall/types_freebsd.go
    @@ -60,6 +60,91 @@ struct sockaddr_any {
      	char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];
      };
      
    +// This structure is a duplicate of stat on FreeBSD 8-STABLE.
    +// See /usr/include/sys/stat.h.
    +struct stat8 {
    +#undef st_atimespec	st_atim
    +#undef st_mtimespec	st_mtim
    +#undef st_ctimespec	st_ctim
    +#undef st_birthtimespec	st_birthtim
    +	__dev_t   st_dev;
    +	ino_t     st_ino;
    +	mode_t    st_mode;
    +	nlink_t   st_nlink;
    +	uid_t     st_uid;
    +	gid_t     st_gid;
    +	__dev_t   st_rdev;
    +#if __BSD_VISIBLE
    +	struct  timespec st_atimespec;
    +	struct  timespec st_mtimespec;
    +	struct  timespec st_ctimespec;
    +#else
    +	time_t    st_atime;
    +	long      __st_atimensec;
    +	time_t    st_mtime;
    +	long      __st_mtimensec;
    +	time_t    st_ctime;
    +	long      __st_ctimensec;
    +#endif
    +	off_t     st_size;
    +	blkcnt_t st_blocks;
    +	blksize_t st_blksize;
    +	fflags_t  st_flags;
    +	__uint32_t st_gen;
    +	__int32_t st_lspare;
    +#if __BSD_VISIBLE
    +	struct timespec st_birthtimespec;
    +	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec));
    +	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec));
    +#else
    +	time_t    st_birthtime;
    +	long      st_birthtimensec;
    +	unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec));
    +	unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec));
    +#endif
    +};
    +
    +// This structure is a duplicate of if_data on FreeBSD 8-STABLE.
    +// See /usr/include/net/if.h.
    +struct if_data8 {
    +	u_char  ifi_type;
    +	u_char  ifi_physical;
    +	u_char  ifi_addrlen;
    +	u_char  ifi_hdrlen;
    +	u_char  ifi_link_state;
    +	u_char  ifi_spare_char1;
    +	u_char  ifi_spare_char2;
    +	u_char  ifi_datalen;
    +	u_long  ifi_mtu;
    +	u_long  ifi_metric;
    +	u_long  ifi_baudrate;
    +	u_long  ifi_ipackets;
    +	u_long  ifi_ierrors;
    +	u_long  ifi_opackets;
    +	u_long  ifi_oerrors;
    +	u_long  ifi_collisions;
    +	u_long  ifi_ibytes;
    +	u_long  ifi_obytes;
    +	u_long  ifi_imcasts;
    +	u_long  ifi_omcasts;
    +	u_long  ifi_iqdrops;
    +	u_long  ifi_noproto;
    +	u_long  ifi_hwassist;
    +	time_t  ifi_epoch;
    +	struct  timeval ifi_lastchange;
    +};
    +
    +// This structure is a duplicate of if_msghdr on FreeBSD 8-STABLE.
    +// See /usr/include/net/if.h.
    +struct if_msghdr8 {
    +	u_short ifm_msglen;
    +	u_char  ifm_version;
    +	u_char  ifm_type;
    +	int     ifm_addrs;
    +	int     ifm_flags;
    +	u_short ifm_index;
    +	struct  if_data8 ifm_data;
    +};
      */
     import "C"
      
    @@ -98,10 +183,6 @@ type _Gid_t C.gid_t
      
      // Files
      
    -const (
    -	O_CLOEXEC = 0 // not supported
    -)
    -
      const ( // Directory mode bits
      	S_IFMT   = C.S_IFMT
      	S_IFIFO  = C.S_IFIFO
    @@ -119,7 +200,7 @@ const ( // Directory mode bits
      	S_IXUSR  = C.S_IXUSR
      )
      
    -type Stat_t C.struct_stat
    +type Stat_t C.struct_stat8
      
      type Statfs_t C.struct_statfs
      
    @@ -201,8 +282,10 @@ type FdSet C.fd_set
      // Routing and interface messages
      
      const (
    -	SizeofIfMsghdr         = C.sizeof_struct_if_msghdr
    -	SizeofIfData           = C.sizeof_struct_if_data
    +	sizeofIfMsghdr         = C.sizeof_struct_if_msghdr
    +	SizeofIfMsghdr         = C.sizeof_struct_if_msghdr8
    +	sizeofIfData           = C.sizeof_struct_if_data
    +	SizeofIfData           = C.sizeof_struct_if_data8
      	SizeofIfaMsghdr        = C.sizeof_struct_ifa_msghdr
      	SizeofIfmaMsghdr       = C.sizeof_struct_ifma_msghdr
      	SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr
    @@ -210,9 +293,13 @@ const (
      	SizeofRtMetrics        = C.sizeof_struct_rt_metrics
      )
      
    -type IfMsghdr C.struct_if_msghdr
    +type ifMsghdr C.struct_if_msghdr
    +
    +type IfMsghdr C.struct_if_msghdr8
    +
    +type ifData C.struct_if_data
      
    -type IfData C.struct_if_data
    +type IfData C.struct_if_data8
      
      type IfaMsghdr C.struct_ifa_msghdr
      
    
    • FreeBSD 8-STABLEのstat, if_data, if_msghdr構造体を模倣したstat8, if_data8, if_msghdr8構造体をCコメントブロック内に定義しています。
    • GoのStat_t, IfMsghdr, IfData型が、これらのstat8, if_msghdr8, if_data8を参照するように変更されています。これにより、GoのコードはFreeBSD 10のABI変更の影響を受けずに、以前のバージョンの構造体レイアウトで動作し続けることができます。
  5. src/pkg/syscall/zerrors_freebsd_*.go (例: zerrors_freebsd_386.go):

    • 多数の定数定義がFreeBSD 10に合わせて更新されています。これには、新しいアドレスファミリー(AF_INET6_SDP)、データリンクタイプ(DLT_MPEG_2_TS)、イベントフラグ(EV_DROP)、IPプロトコル(IPPROTO_MPLS)、メモリマップフラグ(MAP_ALIGNED_SUPER)、ファイルオープンフラグ(O_CLOEXEC)、ソケットフラグ(SOCK_CLOEXEC, SOCK_NONBLOCK)、エラーコード(ENOTRECOVERABLE, EOWNERDEAD)、シグナル(SIGLIBRT)などが含まれます。
  6. src/pkg/syscall/zsysnum_freebsd_*.go (例: zsysnum_freebsd_386.go):

    • 既存のシステムコールのプロトタイプがFreeBSD 10に合わせて変更されています(例: chflags, fchflags, extattr_set_fileなど)。
    • FreeBSD 10で追加された新しいシステムコール(SYS_BINDAT, SYS_CONNECTAT, SYS_CHFLAGSAT, SYS_ACCEPT4, SYS_PIPE2, SYS_PROCCTL)が追加されています。
    • Capsicum関連のシステムコール(SYS_CAP_RIGHTS_GETSYS_CAP_GETRIGHTSにリネームされるなど)の定義が調整されています。
  7. src/pkg/syscall/ztypes_freebsd_*.go (例: ztypes_freebsd_386.go):

    • Stat_t, IfMsghdr, IfDataのGo構造体定義が、types_freebsd.goで定義されたstat8, if_msghdr8, if_data8に対応するように変更されています。
    • RawSockaddrUnix, RawSockaddrDatalink, BpfHdr, Termiosなど、他のシステムコール関連のGo構造体もFreeBSD 10のABIに合わせて調整されています。これには、構造体のサイズ、フィールドの型、パディングバイトの変更が含まれます。

コアとなるコードの解説

このコミットの核心は、GoのsyscallパッケージがFreeBSD 10のABI変更に柔軟に対応し、かつ後方互換性を維持するための「ハイブリッド」なアプローチを採用している点にあります。

  1. mkall.shの変更: これは、GoのビルドプロセスがFreeBSD 10のシステムコール定義を「参照する」ように指示するものです。しかし、単に参照するだけでは互換性の問題が生じるため、他のスクリプトやGoのコードで調整が行われます。

  2. mkerrors.shmksysnum_freebsd.plの変更: これらのスクリプトは、FreeBSD 10の新しい定数やシステムコール番号を取り込みつつも、特定のAPI(特にCapsicum API)については、FreeBSD 9-STABLEの定義を「固定」しています。これは、FreeBSD 10でCapsicum APIの基盤となるcap_rights_tの型がuint64_tから構造体に変更されたため、Goの既存のコードがこの変更に直接対応すると複雑になることを避けるためです。Goは、より安定していると判断された9-STABLEのABIを維持することで、GoアプリケーションがCapsicum機能を利用する際の安定性を確保しています。

  3. types_freebsd.goの変更: これは最も重要な変更の一つです。Goのsyscallパッケージは、C言語の構造体をGoの構造体にマッピングする際に、go tool cgo -godefsを使用します。通常、これはOSの最新のヘッダファイルに基づいて行われます。しかし、FreeBSD 10ではstat構造体のタイムスタンプフィールド名が変更されたり、ネットワーク関連の構造体(if_data, if_msghdr)が再構築されたりしました。 このコミットでは、GoのStat_t, IfData, IfMsghdr型を、FreeBSD 10のネイティブな構造体ではなく、FreeBSD 8-STABLEの構造体を模倣して定義されたstat8, if_data8, if_msghdr8にマッピングしています。これにより、GoのコードはFreeBSD 10のABI変更の影響を受けずに、以前のバージョンの構造体レイアウトで動作し続けることができます。これは、Goのコードベースがこれらの構造体の特定のフィールド名やオフセットに依存している場合に、既存のコードを大幅に書き換えることなくFreeBSD 10をサポートするための巧妙な解決策です。

  4. zerrors_freebsd_*.go, zsysnum_freebsd_*.go, ztypes_freebsd_*.goの変更: これらのファイルは、上記のスクリプトとtypes_freebsd.goの変更に基づいて自動生成されます。

    • zerrors_freebsd_*.goは、FreeBSD 10で導入された新しい定数やエラーコードをGoの定数として公開します。これにより、GoプログラムはFreeBSD 10の新しい機能やより詳細なエラー情報にアクセスできるようになります。
    • zsysnum_freebsd_*.goは、FreeBSD 10の新しいシステムコールや変更されたシステムコールのプロトタイプをGoにマッピングします。これにより、GoプログラムはFreeBSD 10の新しいシステムコールを呼び出すことができるようになります。
    • ztypes_freebsd_*.goは、types_freebsd.goで定義された互換性レイヤーの構造体や、その他のFreeBSD 10のABIに合わせたGoの構造体を生成します。これにより、Goの型システムがFreeBSD 10の低レベルのデータ構造と正しく連携できるようになります。

全体として、このコミットは、Goが新しいOSバージョンに対応する際に、単に最新のABIに追従するだけでなく、既存のGoアプリケーションの互換性と安定性を考慮した実用的なアプローチを採用していることを示しています。これは、Goが多様なプラットフォームで安定して動作するための重要な側面です。

関連リンク

参考にした情報源リンク

  • FreeBSD SVN Web Viewer (r205792): http://svnweb.freebsd.org/base?view=revision&revision=205792
  • FreeBSD SVN Web Viewer (r254804): http://svnweb.freebsd.org/base?view=revision&revision=254804
  • FreeBSD SVN Web Viewer (r255219): http://svnweb.freebsd.org/base?view=revision&revision=255219
  • Go syscall package documentation: https://pkg.go.dev/syscall
  • Go cmd/cgo documentation: https://pkg.go.dev/cmd/cgo
  • golang-devメーリングリストアーカイブ (関連する議論がある可能性): https://groups.google.com/g/golang-dev
  • Goのz-filesに関する一般的な情報 (例: "Go z-files syscall"): https://go.dev/doc/articles/go-syscall-package (これは一般的な情報源であり、特定の記事を指すものではありませんが、Goのsyscallパッケージの内部動作を理解する上で役立ちます。)
  • POSIX.1-2008 (IEEE Std 1003.1-2008) (st_timespecからst_timへの変更の背景): https://pubs.opengroup.org/onlinepubs/9699919799/
  • FreeBSDのmbuf構造体に関する情報 (r254804の背景): https://www.freebsd.org/cgi/man.cgi?query=mbuf&sektion=9&format=html
  • FreeBSDのcap_rights_tに関する情報 (r255219の背景): https://www.freebsd.org/cgi/man.cgi?query=cap_rights_t&sektion=9&format=html
  • GoのO_CLOEXECに関する議論 (Goのファイルディスクリプタの扱い): https://go.dev/issue/587 (このコミットでO_CLOEXEC = 0が削除された背景に関連する可能性のある一般的な議論)
  • Goのmkall.shスクリプトの役割: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh (スクリプト自体の内容)
  • Goのmksysnum_freebsd.plスクリプトの役割: https://github.com/golang/go/blob/master/src/pkg/syscall/mksysnum_freebsd.pl (スクリプト自体の内容)
  • Goのmkerrors.shスクリプトの役割: https://github.com/golang/go/blob/master/src/pkg/syscall/mkerrors.sh (スクリプト自体の内容)
  • Goのtypes_freebsd.goファイルの役割: https://github.com/golang/go/blob/master/src/pkg/syscall/types_freebsd.go (ファイル自体の内容)
  • Goのzerrors_freebsd_*.goファイルの役割: https://github.com/golang/go/blob/master/src/pkg/syscall/zerrors_freebsd_amd64.go (ファイル自体の内容)
  • Goのzsysnum_freebsd_*.goファイルの役割: https://github.com/golang/go/blob/master/src/pkg/syscall/zsysnum_freebsd_amd64.go (ファイル自体の内容)
  • Goのztypes_freebsd_*.goファイルの役割: https://github.com/golang/go/blob/master/src/pkg/syscall/ztypes_freebsd_amd64.go (ファイル自体の内容)
  • Goのgo tool cgoコマンドの役割: https://pkg.go.dev/cmd/cgo (Cgoツールの詳細)
  • Goのgo tool cgo -godefsオプションの役割: https://pkg.go.dev/cmd/cgo#hdr-Generating_Go_code_from_C_headers (CヘッダからGoコードを生成する方法)
  • Goのgo tool cgo -- -fsigned-charオプションの役割: https://pkg.go.dev/cmd/cgo#hdr-Passing_options_to_the_C_compiler (Cコンパイラにオプションを渡す方法)
  • Goのgo tool cgo -godefs-- -fsigned-charの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOARCHの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L140 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L137 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCHの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L137 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-charの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewsの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiosの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio Haraの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384[インデックス 18717] ファイルの概要の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384[インデックス 18717] ファイルの概要コミットの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384[インデックス 18717] ファイルの概要コミットGitHub上でのコミットページへのリンクの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384[インデックス 18717] ファイルの概要コミットGitHub上でのコミットページへのリンク元コミット内容の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384[インデックス 18717] ファイルの概要コミットGitHub上でのコミットページへのリンク元コミット内容変更の背景の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384[インデックス 18717] ファイルの概要コミットGitHub上でのコミットページへのリンク元コミット内容変更の背景前提知識の解説の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384[インデックス 18717] ファイルの概要コミットGitHub上でのコミットページへのリンク元コミット内容変更の背景前提知識の解説技術的詳細の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384[インデックス 18717] ファイルの概要コミットGitHub上でのコミットページへのリンク元コミット内容変更の背景前提知識の解説技術的詳細コアとなるコードの変更箇所の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384[インデックス 18717] ファイルの概要コミットGitHub上でのコミットページへのリンク元コミット内容変更の背景前提知識の解説技術的詳細コアとなるコードの変更箇所コアとなるコードの解説の組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384[インデックス 18717] ファイルの概要コミットGitHub上でのコミットページへのリンク元コミット内容変更の背景前提知識の解説技術的詳細コアとなるコードの変更箇所コアとなるコードの解説関連リンクの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
  • Goのgo tool cgo -godefsGOOSGOARCH-- -fsigned-chartypes_freebsd.goztypes_freebsd_*.gozerrors_freebsd_*.gozsysnum_freebsd_*.gomkall.shmkerrors.shmksysnum_freebsd.plcommit 737efeb5b8fe18451adfbd29fe663df2f2b4b384FreeBSD 10 breaking changesr205792r254804r255219Stat_tIfDataIfMsghdrCapsicum APIIFT_CARPSIOCAIFADDRSIOCSIFPHYADDRUpdate #7193LGTM=iantR=golang-codereviews, rsc, minux.ma, gobot, iantCC=golang-codereviewshttps://golang.org/cl/56770044src/pkg/syscall/mkall.shsrc/pkg/syscall/mkerrors.shsrc/pkg/syscall/mksysnum_freebsd.plsrc/pkg/syscall/types_freebsd.gosrc/pkg/syscall/zerrors_freebsd_386.gosrc/pkg/syscall/zerrors_freebsd_amd64.gosrc/pkg/syscall/zerrors_freebsd_arm.gosrc/pkg/syscall/zsysnum_freebsd_386.gosrc/pkg/syscall/zsysnum_freebsd_amd64.gosrc/pkg/syscall/zsysnum_freebsd_arm.gosrc/pkg/syscall/ztypes_freebsd_386.gosrc/pkg/syscall/ztypes_freebsd_amd64.gosrc/pkg/syscall/ztypes_freebsd_arm.goO_CLOEXEC = 0SizeofIfMsghdrSizeofIfDataifMsghdrifDataRawSockaddrUnixRawSockaddrDatalinkBpfHdrTermiossyscall: regenerate z-files on FreeBSD 10Mikio HaraTue Mar 4 09:26:01 2014 +0900737efeb5b8fe18451adfbd29fe663df2f2b4b384https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384[インデックス 18717] ファイルの概要コミットGitHub上でのコミットページへのリンク元コミット内容変更の背景前提知識の解説技術的詳細コアとなるコードの変更箇所コアとなるコードの解説関連リンク参考にした情報源リンクの組み合わせ: https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154 (mkall.shでの使用例)
# [インデックス 18717] ファイルの概要

このコミットは、Go言語の`syscall`パッケージがFreeBSD 10に対応するための変更を導入しています。特に、FreeBSD 10で発生したシステムコール引数や構造体の変更に対応しつつ、後方互換性を維持するための調整が行われています。Goの`syscall`パッケージは、OS固有のシステムコールをGoプログラムから呼び出すためのインターフェースを提供しており、OSのバージョンアップに伴うABI(Application Binary Interface)の変更に追従する必要があります。

## コミット

commit 737efeb5b8fe18451adfbd29fe663df2f2b4b384 Author: Mikio Hara mikioh.mikioh@gmail.com Date: Tue Mar 4 09:26:01 2014 +0900

syscall: regenerate z-files on FreeBSD 10

Unfortunately FreeBSD 10 has changed its syscall arguments for
some reasons but as per request at golang-dev this CL does not
generate some structures, syscall numbers and constants as
compatible to FreeBSD 10 as follows:

Structure: Stat_t, IfData, IfMsghdr are based on 8-STABLE
Syscall number: Capsicum API is based on 9-STABLE
Constant: IFT_CARP, SIOCAIFADDR, SIOCSIFPHYADDR are based on 9-STABLE

Update #7193

FreeBSD 10 breaking changes:

r205792: Rename st_*timespec fields to st_*tim for POSIX 2008
compliance.
http://svnweb.freebsd.org/base?view=revision&revision=205792

r254804: Restructure the mbuf pkthdr to make it fit for upcoming
capabilities and features.
http://svnweb.freebsd.org/base?view=revision&revision=254804

r255219: Change the cap_rights_t type from uint64_t to a structure
that we can extend in the future in a backward compatible (API and
ABI) way.
http://svnweb.freebsd.org/base?view=revision&revision=255219

LGTM=iant
R=golang-codereviews, rsc, minux.ma, gobot, iant
CC=golang-codereviews
https://golang.org/cl/56770044

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

[https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384](https://github.com/golang.com/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384)

## 元コミット内容

このコミットは、FreeBSD 10におけるシステムコール引数の変更に対応するため、Goの`syscall`パッケージ内の`z-files`を再生成するものです。しかし、FreeBSD 10の変更がGoの既存のコードベースに大きな影響を与えないよう、一部の構造体、システムコール番号、定数についてはFreeBSD 8-STABLEおよび9-STABLEとの互換性を維持する形で生成されています。具体的には、`Stat_t`, `IfData`, `IfMsghdr`構造体は8-STABLEに基づき、Capsicum API関連のシステムコール番号、および`IFT_CARP`, `SIOCAIFADDR`, `SIOCSIFPHYADDR`定数は9-STABLEに基づいています。

コミットメッセージには、FreeBSD 10で導入された主要な破壊的変更のSVNリビジョンと概要が記載されています。

-   **r205792**: POSIX 2008準拠のため、`st_*timespec`フィールドが`st_*tim`にリネームされました。これはファイルシステム関連の統計情報構造体(`stat`)に影響します。
-   **r254804**: `mbuf pkthdr`構造体が再構築されました。これはネットワークインターフェースのデータ構造に影響します。
-   **r255219**: `cap_rights_t`型が`uint64_t`から構造体に変更されました。これはCapsicum APIに影響します。

## 変更の背景

Go言語の`syscall`パッケージは、各オペレーティングシステム(OS)のシステムコールをGoプログラムから透過的に呼び出すための重要なレイヤーです。このパッケージは、OS固有のC言語ヘッダファイルから自動生成される`z-files`(`zerrors_*.go`, `zsysnum_*.go`, `ztypes_*.go`など)に大きく依存しています。これらのファイルは、OSのシステムコール番号、エラーコード、データ構造の定義をGoのコードにマッピングする役割を担っています。

FreeBSD 10は、以前のバージョン(特に8-STABLEや9-STABLE)と比較して、カーネルの内部構造やシステムコールのABIにいくつかの破壊的変更を導入しました。これらの変更は、特にPOSIX標準への準拠、ネットワークスタックの改善、およびセキュリティ機能(Capsicum)の進化に関連しています。

Goの`syscall`パッケージがFreeBSD 10上で正しく機能するためには、これらの変更を反映した`z-files`を再生成する必要があります。しかし、単に最新のFreeBSD 10のヘッダファイルに基づいて`z-files`を生成すると、Goの既存のコードベースや、FreeBSDの古いバージョンとの互換性が損なわれる可能性があります。特に、GoのリリースサイクルとFreeBSDのリリースサイクルが異なるため、GoがサポートするFreeBSDのバージョン間で互換性を維持することが求められます。

このコミットは、FreeBSD 10の変更を取り込みつつも、Goのユーザーが直面する可能性のある互換性の問題を最小限に抑えるための戦略的なアプローチを示しています。具体的には、一部の重要な構造体やAPIについては、FreeBSDのより安定した(そしてGoが以前からサポートしていた)バージョン(8-STABLEや9-STABLE)の定義を意図的に維持することで、Goアプリケーションの安定稼働を優先しています。これは、新しいOSバージョンへの移行期間におけるGoの安定性を確保するための現実的な選択です。

## 前提知識の解説

### システムコールとABI

システムコールは、ユーザー空間のプログラムがオペレーティングシステムカーネルのサービス(ファイルI/O、メモリ管理、プロセス制御など)を要求するためのインターフェースです。ABI(Application Binary Interface)は、コンパイルされたプログラムが特定のOS上で実行されるために必要な低レベルのインターフェースのセットを指します。これには、システムコールの呼び出し規約、データ構造のメモリレイアウト、レジスタの使用方法などが含まれます。OSのバージョンアップによってABIが変更されると、古いOSバージョン用にコンパイルされたプログラムが新しいOSバージョンで正しく動作しなくなる可能性があります。

### Goの`syscall`パッケージと`z-files`

Go言語の`syscall`パッケージは、Goプログラムから直接OSのシステムコールを呼び出すためのGo言語バインディングを提供します。このパッケージは、OS固有のC言語ヘッダファイルから自動生成されるGoのソースファイルに大きく依存しています。これらの自動生成されたファイルは慣習的に`z-files`と呼ばれ、`zerrors_*.go`、`zsysnum_*.go`、`ztypes_*.go`といった命名規則に従います。

-   `zerrors_*.go`: OSのエラーコード(`errno`)や各種定数(ソケットオプション、ファイルフラグなど)をGoの定数として定義します。
-   `zsysnum_*.go`: システムコール番号と、それに対応するC言語の関数プロトタイプをGoの定数として定義します。
-   `ztypes_*.go`: OSのC言語構造体(`struct stat`, `struct sockaddr`など)をGoの構造体として定義し、メモリレイアウトがC言語のそれと一致するようにします。

これらの`z-files`は、`mkall.sh`、`mkerrors.sh`、`mksysnum_freebsd.pl`などのスクリプトによって生成されます。これらのスクリプトは、FreeBSDのソースツリーから関連するヘッダファイルやシステムコール定義を読み込み、Goのコードに変換します。

### FreeBSDのバージョンとSTABLEブランチ

FreeBSDは、開発ブランチ(`HEAD`)と安定版ブランチ(`STABLE`)を持っています。`STABLE`ブランチは、特定のメジャーバージョン(例: 8-STABLE, 9-STABLE, 10-STABLE)の安定版リリースに向けた開発が行われる場所です。各`STABLE`ブランチは、そのメジャーバージョンのリリース後にバグ修正やセキュリティアップデートが適用されますが、ABIの破壊的変更は通常導入されません。しかし、メジャーバージョンが上がる際には、ABIの変更が発生することがあります。

### Capsicum API

Capsicumは、FreeBSDに導入されたサンドボックス化と権限分離のためのフレームワークです。これは、ファイル記述子ベースのケーパビリティ(能力)を導入し、プログラムがアクセスできるリソースを細かく制御できるようにします。Capsicum APIは、システムコールを介してこれらのケーパビリティを操作するためのインターフェースを提供します。このAPIはFreeBSD 9-STABLEで導入され、FreeBSD 10でその型定義に破壊的変更が加えられました。

## 技術的詳細

このコミットの技術的詳細は、Goの`syscall`パッケージがFreeBSD 10のABI変更にどのように対応したか、そして後方互換性をどのように維持したかに集約されます。

1.  **`z-files`生成スクリプトの更新**:
    -   `src/pkg/syscall/mkall.sh`: `mksysnum`コマンドがFreeBSDのシステムコール定義を取得するURLを、`base/head`から`base/stable/10`に変更しています。これにより、GoのビルドシステムがFreeBSD 10のシステムコール定義を基に`z-files`を生成するようになります。
    -   `src/pkg/syscall/mkerrors.sh`: FreeBSD 10以降でのみ有効な定数(`IFT_CARP`, `SIOCAIFADDR`, `SIOCSIFPHYADDR`)を条件付きで定義しています。これは、これらの定数がFreeBSD 9-STABLEと10で異なる値を持つため、Goが特定のバージョンに依存しないようにするための措置です。
    -   `src/pkg/syscall/mksysnum_freebsd.pl`: Capsicum API関連のシステムコール(`SYS_CAP_*`)を、FreeBSD 10の`syscalls.master`から直接取り込むのではなく、スクリプト内で明示的にFreeBSD 9-STABLEのシステムコール番号を定義しています。これは、FreeBSD 10で`cap_rights_t`の型が変更されたことによるABI互換性の問題を回避するためです。

2.  **構造体の互換性維持**:
    -   `src/pkg/syscall/types_freebsd.go`:
        -   `struct stat8`, `struct if_data8`, `struct if_msghdr8`という新しいC言語構造体定義が追加されています。これらは、FreeBSD 8-STABLEの`stat`, `if_data`, `if_msghdr`構造体の正確なコピーです。
        -   Goの`Stat_t`, `IfData`, `IfMsghdr`型が、それぞれFreeBSD 10のネイティブな構造体ではなく、これらの`stat8`, `if_data8`, `if_msghdr8`にマッピングされるように変更されています。これにより、GoのコードがFreeBSD 10のABI変更の影響を受けずに、以前のバージョンの構造体レイアウトで動作し続けることができます。これは、特に`st_*timespec`から`st_*tim`へのリネームや、`mbuf pkthdr`の再構築といった変更に対応するためのものです。

3.  **定数とシステムコール番号の更新**:
    -   `src/pkg/syscall/zerrors_freebsd_*.go`: FreeBSD 10で追加または変更された多数の定数(例: `AF_INET6_SDP`, `DLT_MPEG_2_TS`, `EV_DROP`, `MAP_ALIGNED_SUPER`, `O_CLOEXEC`, `SOCK_CLOEXEC`, `ENOTRECOVERABLE`, `EOWNERDEAD`など)が更新されています。これにより、GoプログラムがFreeBSD 10の新しい機能やエラーコードを利用できるようになります。
    -   `src/pkg/syscall/zsysnum_freebsd_*.go`: システムコール番号とプロトタイプがFreeBSD 10に合わせて更新されています。これには、引数型の変更(例: `chflags`, `fchflags`の`flags`が`int`から`u_long`へ)や、`extattr_*`関連のシステムコールの戻り値型(`int`から`ssize_t`へ)の変更が含まれます。また、`bindat`, `connectat`, `chflagsat`, `accept4`, `pipe2`, `procctl`といったFreeBSD 10で追加された新しいシステムコールも定義されています。Capsicum関連のシステムコールについては、`mksysnum_freebsd.pl`の変更により、FreeBSD 9-STABLEの定義が維持されています。

4.  **Go構造体の調整**:
    -   `src/pkg/syscall/ztypes_freebsd_*.go`: `types_freebsd.go`で定義された`stat8`, `if_data8`, `if_msghdr8`に対応するGoの構造体が生成され、既存の`Stat_t`, `IfMsghdr`, `IfData`型がこれらを指すように変更されています。また、`RawSockaddrUnix`, `RawSockaddrDatalink`, `BpfHdr`, `Termios`など、他のシステムコール関連のGo構造体もFreeBSD 10のABIに合わせて調整されています。特に、パディングバイトの追加や削除、フィールドの型の変更など、メモリレイアウトに関する微細な調整が行われています。

これらの変更は、GoがFreeBSD 10の新しい機能を利用できるようにしつつ、既存のGoアプリケーションがFreeBSD 10に移行する際の互換性問題を最小限に抑えるためのバランスの取れたアプローチを示しています。

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

このコミットにおけるコアとなるコードの変更は、主に以下のファイルに集中しています。

1.  **`src/pkg/syscall/mkall.sh`**:
    ```diff
    --- a/src/pkg/syscall/mkall.sh
    +++ b/src/pkg/syscall/mkall.sh
    @@ -136,18 +136,18 @@ dragonfly_amd64)
     freebsd_386)
      	mkerrors="$mkerrors -m32"
      	mksyscall="./mksyscall.pl -l32"
    - 	mksysnum="curl -s 'http://svn.freebsd.org/base/head/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
    + 	mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
      	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
      	;;
     freebsd_amd64)
      	mkerrors="$mkerrors -m64"
    - 	mksysnum="curl -s 'http://svn.freebsd.org/base/head/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
    + 	mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
      	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
      	;;
     freebsd_arm)
      	mkerrors="$mkerrors"
      	mksyscall="./mksyscall.pl -l32 -arm"
    - 	mksysnum="curl -s 'http://svn.freebsd.org/base/head/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
    + 	mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl"
      	# Let the type of C char be singed for making the bare syscall
      	# API consistent across over platforms.
      	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
    ```
    -   `mksysnum`がシステムコール定義を取得するFreeBSD SVNリポジトリのパスを`head`から`stable/10`に変更しています。これにより、FreeBSD 10のシステムコール定義が使用されるようになります。

2.  **`src/pkg/syscall/mkerrors.sh`**:
    ```diff
    --- a/src/pkg/syscall/mkerrors.sh
    +++ b/src/pkg/syscall/mkerrors.sh
    @@ -73,6 +74,14 @@ includes_FreeBSD='
     #include <termios.h>
     #include <netinet/ip.h>
     #include <netinet/ip_mroute.h>
    +
    +#if __FreeBSD__ >= 10
    +#define IFT_CARP	0xf8	// IFT_CARP is deprecated in FreeBSD 10
    +#undef SIOCAIFADDR
    +#define SIOCAIFADDR	_IOW(105, 26, struct oifaliasreq)	// ifaliasreq contains if_data
    +#undef SIOCSIFPHYADDR
    +#define SIOCSIFPHYADDR	_IOW(105, 70, struct oifaliasreq)	// ifaliasreq contains if_data
    +#endif
     '
     
     includes_Linux='
    ```
    -   FreeBSD 10以降でのみ適用される定数(`IFT_CARP`, `SIOCAIFADDR`, `SIOCSIFPHYADDR`)の定義を追加しています。これは、これらの定数がFreeBSDのバージョンによって異なる値を持つため、Goが特定のバージョンに依存しないようにするための措置です。

3.  **`src/pkg/syscall/mksysnum_freebsd.pl`**:
    ```diff
    --- a/src/pkg/syscall/mksysnum_freebsd.pl
    +++ b/src/pkg/syscall/mksysnum_freebsd.pl
    @@ -33,8 +33,21 @@ while(<>){
     		if($name eq 'SYS_SYS_EXIT'){
     			$name = 'SYS_EXIT';
     		}
    +		if($name =~ /^SYS_CAP_+/ || $name =~ /^SYS___CAP_+/){
    +			next
    +		}
     
     		print "\t$name = $num;  // $proto\n";
    +\
    +		# We keep Capsicum syscall numbers for FreeBSD
    +		# 9-STABLE here because we are not sure whether they
    +		# are mature and stable.
    +		if($num == 513){
    +			print " SYS_CAP_NEW = 514 // { int cap_new(int fd, uint64_t rights); }\n";
    +			print " SYS_CAP_GETRIGHTS = 515 // { int cap_getrights(int fd, \\\\\n";
    +			print " SYS_CAP_ENTER = 516 // { int cap_enter(void); }\n";
    +			print " SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); }\n";
    +		}
     	}
     }
     ```
    -   `SYS_CAP_*`で始まるシステムコールをスキップし、代わりにFreeBSD 9-STABLEのCapsicum API関連のシステムコール番号を明示的に追加しています。これは、FreeBSD 10で`cap_rights_t`の型が変更されたことによるABI互換性の問題を回避するためです。

4.  **`src/pkg/syscall/types_freebsd.go`**:
    ```diff
    --- a/src/pkg/syscall/types_freebsd.go
    +++ b/src/pkg/syscall/types_freebsd.go
    @@ -60,6 +60,91 @@ struct sockaddr_any {
      	char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];
      };
      
    +// This structure is a duplicate of stat on FreeBSD 8-STABLE.
    +// See /usr/include/sys/stat.h.
    +struct stat8 {
    +#undef st_atimespec	st_atim
    +#undef st_mtimespec	st_mtim
    +#undef st_ctimespec	st_ctim
    +#undef st_birthtimespec	st_birthtim
    +	__dev_t   st_dev;
    +	ino_t     st_ino;
    +	mode_t    st_mode;
    +	nlink_t   st_nlink;
    +	uid_t     st_uid;
    +	gid_t     st_gid;
    +	__dev_t   st_rdev;
    +#if __BSD_VISIBLE
    +	struct  timespec st_atimespec;
    +	struct  timespec st_mtimespec;
    +	struct  timespec st_ctimespec;
    +#else
    +	time_t    st_atime;
    +	long      __st_atimensec;
    +	time_t    st_mtime;
    +	long      __st_mtimensec;
    +	time_t    st_ctime;
    +	long      __st_ctimensec;
    +#endif
    +	off_t     st_size;
    +	blkcnt_t st_blocks;
    +	blksize_t st_blksize;
    +	fflags_t  st_flags;
    +	__uint32_t st_gen;
    +	__int32_t st_lspare;
    +#if __BSD_VISIBLE
    +	struct timespec st_birthtimespec;
    +	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec));
    +	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec));
    +#else
    +	time_t    st_birthtime;
    +	long      st_birthtimensec;
    +	unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec));
    +	unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec));
    +#endif
    +};
    +
    +// This structure is a duplicate of if_data on FreeBSD 8-STABLE.
    +// See /usr/include/net/if.h.
    +struct if_data8 {
    +	u_char  ifi_type;
    +	u_char  ifi_physical;
    +	u_char  ifi_addrlen;
    +	u_char  ifi_hdrlen;
    +	u_char  ifi_link_state;
    +	u_char  ifi_spare_char1;
    +	u_char  ifi_spare_char2;
    +	u_char  ifi_datalen;
    +	u_long  ifi_mtu;
    +	u_long  ifi_metric;
    +	u_long  ifi_baudrate;
    +	u_long  ifi_ipackets;
    +	u_long  ifi_ierrors;
    +	u_long  ifi_opackets;
    +	u_long  ifi_oerrors;
    +	u_long  ifi_collisions;
    +	u_long  ifi_ibytes;
    +	u_long  ifi_obytes;
    +	u_long  ifi_imcasts;
    +	u_long  ifi_omcasts;
    +	u_long  ifi_iqdrops;
    +	u_long  ifi_noproto;
    +	u_long  ifi_hwassist;
    +	time_t  ifi_epoch;
    +	struct  timeval ifi_lastchange;
    +};
    +
    +// This structure is a duplicate of if_msghdr on FreeBSD 8-STABLE.
    +// See /usr/include/net/if.h.
    +struct if_msghdr8 {
    +	u_short ifm_msglen;
    +	u_char  ifm_version;
    +	u_char  ifm_type;
    +	int     ifm_addrs;
    +	int     ifm_flags;
    +	u_short ifm_index;
    +	struct  if_data8 ifm_data;
    +};
      */
     import "C"
      
    @@ -98,10 +183,6 @@ type _Gid_t C.gid_t
      
      // Files
      
    -const (
    -	O_CLOEXEC = 0 // not supported
    -)
    -
      const ( // Directory mode bits
      	S_IFMT   = C.S_IFMT
      	S_IFIFO  = C.S_IFIFO
    @@ -119,7 +200,7 @@ const ( // Directory mode bits
      	S_IXUSR  = C.S_IXUSR
      )
      
    -type Stat_t C.struct_stat
    +type Stat_t C.struct_stat8
      
      type Statfs_t C.struct_statfs
      
    @@ -201,8 +282,10 @@ type FdSet C.fd_set
      // Routing and interface messages
      
      const (
    -	SizeofIfMsghdr         = C.sizeof_struct_if_msghdr
    -	SizeofIfData           = C.sizeof_struct_if_data
    +	sizeofIfMsghdr         = C.sizeof_struct_if_msghdr
    +	SizeofIfMsghdr         = C.sizeof_struct_if_msghdr8
    +	sizeofIfData           = C.sizeof_struct_if_data
    +	SizeofIfData           = C.sizeof_struct_if_data8
      	SizeofIfaMsghdr        = C.sizeof_struct_ifa_msghdr
      	SizeofIfmaMsghdr       = C.sizeof_struct_ifma_msghdr
      	SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr
    @@ -210,9 +293,13 @@ const (
      	SizeofRtMetrics        = C.sizeof_struct_rt_metrics
      )
      
    -type IfMsghdr C.struct_if_msghdr
    +type ifMsghdr C.struct_if_msghdr
    +
    +type IfMsghdr C.struct_if_msghdr8
    +
    +type ifData C.struct_if_data
      
    -type IfData C.struct_if_data
    +type IfData C.struct_if_data8
      
      type IfaMsghdr C.struct_ifa_msghdr
      
    ```
    -   FreeBSD 8-STABLEの`stat`, `if_data`, `if_msghdr`構造体を模倣した`stat8`, `if_data8`, `if_msghdr8`構造体をCコメントブロック内に定義しています。
    -   Goの`Stat_t`, `IfMsghdr`, `IfData`型が、これらの`stat8`, `if_msghdr8`, `if_data8`を参照するように変更されています。これにより、GoのコードはFreeBSD 10のABI変更の影響を受けずに、以前のバージョンの構造体レイアウトで動作し続けることができます。

5.  **`src/pkg/syscall/zerrors_freebsd_*.go` (例: `zerrors_freebsd_386.go`)**:
    -   多数の定数定義がFreeBSD 10に合わせて更新されています。これには、新しいアドレスファミリー(`AF_INET6_SDP`)、データリンクタイプ(`DLT_MPEG_2_TS`)、イベントフラグ(`EV_DROP`)、IPプロトコル(`IPPROTO_MPLS`)、メモリマップフラグ(`MAP_ALIGNED_SUPER`)、ファイルオープンフラグ(`O_CLOEXEC`)、ソケットフラグ(`SOCK_CLOEXEC`, `SOCK_NONBLOCK`)、エラーコード(`ENOTRECOVERABLE`, `EOWNERDEAD`)、シグナル(`SIGLIBRT`)などが含まれます。

6.  **`src/pkg/syscall/zsysnum_freebsd_*.go` (例: `zsysnum_freebsd_386.go`)**:
    -   既存のシステムコールのプロトタイプがFreeBSD 10に合わせて変更されています(例: `chflags`, `fchflags`, `extattr_set_file`など)。
    -   FreeBSD 10で追加された新しいシステムコール(`SYS_BINDAT`, `SYS_CONNECTAT`, `SYS_CHFLAGSAT`, `SYS_ACCEPT4`, `SYS_PIPE2`, `SYS_PROCCTL`)が追加されています。
    -   Capsicum関連のシステムコール(`SYS_CAP_RIGHTS_GET`が`SYS_CAP_GETRIGHTS`にリネームされるなど)の定義が調整されています。

7.  **`src/pkg/syscall/ztypes_freebsd_*.go` (例: `ztypes_freebsd_386.go`)**:
    -   `Stat_t`, `IfMsghdr`, `IfData`のGo構造体定義が、`types_freebsd.go`で定義された`stat8`, `if_msghdr8`, `if_data8`に対応するように変更されています。
    -   `RawSockaddrUnix`, `RawSockaddrDatalink`, `BpfHdr`, `Termios`など、他のシステムコール関連のGo構造体もFreeBSD 10のABIに合わせて調整されています。これには、構造体のサイズ、フィールドの型、パディングバイトの変更が含まれます。

## コアとなるコードの解説

このコミットの核心は、Goの`syscall`パッケージがFreeBSD 10のABI変更に柔軟に対応し、かつ後方互換性を維持するための「ハイブリッド」なアプローチを採用している点にあります。

1.  **`mkall.sh`の変更**: これは、GoのビルドプロセスがFreeBSD 10のシステムコール定義を「参照する」ように指示するものです。しかし、単に参照するだけでは互換性の問題が生じるため、他のスクリプトやGoのコードで調整が行われます。

2.  **`mkerrors.sh`と`mksysnum_freebsd.pl`の変更**: これらのスクリプトは、FreeBSD 10の新しい定数やシステムコール番号を取り込みつつも、特定のAPI(特にCapsicum API)については、FreeBSD 9-STABLEの定義を「固定」しています。これは、FreeBSD 10でCapsicum APIの基盤となる`cap_rights_t`の型が`uint64_t`から構造体に変更されたため、Goの既存のコードがこの変更に直接対応すると複雑になることを避けるためです。Goは、より安定していると判断された9-STABLEのABIを維持することで、GoアプリケーションがCapsicum機能を利用する際の安定性を確保しています。

3.  **`types_freebsd.go`の変更**: これは最も重要な変更の一つです。Goの`syscall`パッケージは、C言語の構造体をGoの構造体にマッピングする際に、`go tool cgo -godefs`を使用します。通常、これはOSの最新のヘッダファイルに基づいて行われます。しかし、FreeBSD 10では`stat`構造体のタイムスタンプフィールド名が変更されたり、ネットワーク関連の構造体(`if_data`, `if_msghdr`)が再構築されたりしました。
    このコミットでは、Goの`Stat_t`, `IfData`, `IfMsghdr`型を、FreeBSD 10のネイティブな構造体ではなく、FreeBSD 8-STABLEの構造体を模倣して定義された`stat8`, `if_data8`, `if_msghdr8`にマッピングしています。これにより、GoのコードはFreeBSD 10のABI変更の影響を受けずに、以前のバージョンの構造体レイアウトで動作し続けることができます。これは、Goのコードベースがこれらの構造体の特定のフィールド名やオフセットに依存している場合に、既存のコードを大幅に書き換えることなくFreeBSD 10をサポートするための巧妙な解決策です。

4.  **`zerrors_freebsd_*.go`, `zsysnum_freebsd_*.go`, `ztypes_freebsd_*.go`の変更**: これらのファイルは、上記のスクリプトと`types_freebsd.go`の変更に基づいて自動生成されます。
    -   `zerrors_freebsd_*.go`は、FreeBSD 10で導入された新しい定数やエラーコードをGoの定数として公開します。これにより、GoプログラムはFreeBSD 10の新しい機能やより詳細なエラー情報にアクセスできるようになります。
    -   `zsysnum_freebsd_*.go`は、FreeBSD 10の新しいシステムコールや変更されたシステムコールのプロトタイプをGoにマッピングします。これにより、GoプログラムはFreeBSD 10の新しいシステムコールを呼び出すことができるようになります。
    -   `ztypes_freebsd_*.go`は、`types_freebsd.go`で定義された互換性レイヤーの構造体や、その他のFreeBSD 10のABIに合わせたGoの構造体を生成します。これにより、Goの型システムがFreeBSD 10の低レベルのデータ構造と正しく連携できるようになります。

全体として、このコミットは、Goが新しいOSバージョンに対応する際に、単に最新のABIに追従するだけでなく、既存のGoアプリケーションの互換性と安定性を考慮した実用的なアプローチを採用していることを示しています。これは、Goが多様なプラットフォームで安定して動作するための重要な側面です。

## 関連リンク

-   Go Issue #7193: [https://github.com/golang/go/issues/7193](https://github.com/golang.com/go/issues/7193)
-   FreeBSD 10.0-RELEASE Announcement: [https://www.freebsd.org/releases/10.0R/announce/](https://www.freebsd.org/releases/10.0R/announce/)
-   FreeBSD Handbook - Chapter 13. The FreeBSD Ports Collection (for general context on FreeBSD development): [https://docs.freebsd.org/en/books/handbook/ports/](https://docs.freebsd.org/en/books/handbook/ports/)
-   FreeBSD Capsicum Framework: [https://www.freebsd.org/cgi/man.cgi?query=capsicum&sektion=4&format=html](https://www.freebsd.org/cgi/man.cgi?query=capsicum&sektion=4&format=html)

## 参考にした情報源リンク

-   FreeBSD SVN Web Viewer (r205792): [http://svnweb.freebsd.org/base?view=revision&revision=205792](http://svnweb.freebsd.org/base?view=revision&revision=205792)
-   FreeBSD SVN Web Viewer (r254804): [http://svnweb.freebsd.org/base?view=revision&revision=254804](http://svnweb.freebsd.org/base?view=revision&revision=254804)
-   FreeBSD SVN Web Viewer (r255219): [http://svnweb.freebsd.org/base?view=revision&revision=255219](http://svnweb.freebsd.org/base?view=revision&revision=255219)
-   Go `syscall` package documentation: [https://pkg.go.dev/syscall](https://pkg.go.dev/syscall)
-   Go `cmd/cgo` documentation: [https://pkg.go.dev/cmd/cgo](https://pkg.go.dev/cmd/cgo)
-   golang-devメーリングリストアーカイブ (関連する議論がある可能性): [https://groups.google.com/g/golang-dev](https://groups.google.com/g/golang-dev)
-   Goの`z-files`に関する一般的な情報 (例: "Go z-files syscall"): [https://go.dev/doc/articles/go-syscall-package](https://go.dev/doc/articles/go-syscall-package) (これは一般的な情報源であり、特定の記事を指すものではありませんが、Goのsyscallパッケージの内部動作を理解する上で役立ちます。)
-   POSIX.1-2008 (IEEE Std 1003.1-2008) (st_timespecからst_timへの変更の背景): [https://pubs.opengroup.org/onlinepubs/9699919799/](https://pubs.opengroup.org/onlinepubs/9699919799/)
-   FreeBSDの`mbuf`構造体に関する情報 (r254804の背景): [https://www.freebsd.org/cgi/man.cgi?query=mbuf&sektion=9&format=html](https://www.freebsd.org/cgi/man.cgi?query=mbuf&sektion=9&format=html)
-   FreeBSDの`cap_rights_t`に関する情報 (r255219の背景): [https://www.freebsd.org/cgi/man.cgi?query=cap_rights_t&sektion=9&format=html](https://www.freebsd.org/cgi/man.cgi?query=cap_rights_t&sektion=9&format=html)
-   Goの`O_CLOEXEC`に関する議論 (Goのファイルディスクリプタの扱い): [https://go.dev/issue/587](https://go.dev/issue/587) (このコミットで`O_CLOEXEC = 0`が削除された背景に関連する可能性のある一般的な議論)
-   Goの`mkall.sh`スクリプトの役割: [https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh](https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh) (スクリプト自体の内容)
-   Goの`mksysnum_freebsd.pl`スクリプトの役割: [https://github.com/golang/go/blob/master/src/pkg/syscall/mksysnum_freebsd.pl](https://github.com/golang/go/blob/master/src/pkg/syscall/mksysnum_freebsd.pl) (スクリプト自体の内容)
-   Goの`mkerrors.sh`スクリプトの役割: [https://github.com/golang/go/blob/master/src/pkg/syscall/mkerrors.sh](https://github.com/golang/go/blob/master/src/pkg/syscall/mkerrors.sh) (スクリプト自体の内容)
-   Goの`types_freebsd.go`ファイルの役割: [https://github.com/golang/go/blob/master/src/pkg/syscall/types_freebsd.go](https://github.com/golang/go/blob/master/src/pkg/syscall/types_freebsd.go) (ファイル自体の内容)
-   Goの`zerrors_freebsd_*.go`ファイルの役割: [https://github.com/golang/go/blob/master/src/pkg/syscall/zerrors_freebsd_amd64.go](https://github.com/golang/go/blob/master/src/pkg/syscall/zerrors_freebsd_amd64.go) (ファイル自体の内容)
-   Goの`zsysnum_freebsd_*.go`ファイルの役割: [https://github.com/golang/go/blob/master/src/pkg/syscall/zsysnum_freebsd_amd64.go](https://github.com/golang/go/blob/master/src/pkg/syscall/zsysnum_freebsd_amd64.go) (ファイル自体の内容)
-   Goの`ztypes_freebsd_*.go`ファイルの役割: [https://github.com/golang/go/blob/master/src/pkg/syscall/ztypes_freebsd_amd64.go](https://github.com/golang/go/blob/master/src/pkg/syscall/ztypes_freebsd_amd64.go) (ファイル自体の内容)
-   Goの`go tool cgo`コマンドの役割: [https://pkg.go.dev/cmd/cgo](https://pkg.go.dev/cmd/cgo) (Cgoツールの詳細)
-   Goの`go tool cgo -godefs`オプションの役割: [https://pkg.go.dev/cmd/cgo#hdr-Generating_Go_code_from_C_headers](https://pkg.go.dev/cmd/cgo#hdr-Generating_Go_code_from_C_headers) (CヘッダからGoコードを生成する方法)
-   Goの`go tool cgo -- -fsigned-char`オプションの役割: [https://pkg.go.dev/cmd/cgo#hdr-Passing_options_to_the_C_compiler](https://pkg.go.dev/cmd/cgo#hdr-Passing_options_to_the_C_compiler) (Cコンパイラにオプションを渡す方法)
-   Goの`mkall.sh`スクリプトでの`go tool cgo`の使用例: [https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154](https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154)
-   Goの`mkall.sh`スクリプトでの`GOARCH`と`GOOS`の使用例: [https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L137](https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L137)
-   Goの`mkall.sh`スクリプトでの`types_freebsd.go`と`ztypes_freebsd_*.go`の関連性: [https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154](https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154)
-   Goの`mkall.sh`スクリプトでの`zerrors_freebsd_*.go`と`zsysnum_freebsd_*.go`の生成: [https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154](https://github.com/golang/go/blob/master/src/pkg/syscall/mkall.sh#L154)
-   Goの`O_CLOEXEC`定数の削除に関する一般的な背景: [https://go.dev/issue/587](https://go.dev/issue/587)
-   Goの`SizeofIfMsghdr`と`SizeofIfData`の変更に関する一般的な背景: [https://github.com/golang/go/blob/master/src/pkg/syscall/types_freebsd.go#L201](https://github.com/golang/go/blob/master/src/pkg/syscall/types_freebsd.go#L201)
-   Goの`ifMsghdr`と`ifData`の変更に関する一般的な背景: [https://github.com/golang/go/blob/master/src/pkg/syscall/types_freebsd.go#L293](https://github.com/golang/go/blob/master/src/pkg/syscall/types_freebsd.go#L293)
-   Goの`RawSockaddrUnix`と`RawSockaddrDatalink`の変更に関する一般的な背景: [https://github.com/golang/go/blob/master/src/pkg/syscall/ztypes_freebsd_arm.go#L162](https://github.com/golang/go/blob/master/src/pkg/syscall/ztypes_freebsd_arm.go#L162)
-   Goの`BpfHdr`と`Termios`の変更に関する一般的な背景: [https://github.com/golang/go/blob/master/src/pkg/syscall/ztypes_freebsd_arm.go#L438](https://github.com/golang/go/blob/master/src/pkg/syscall/ztypes_freebsd_arm.go#L438)
-   Goの`syscall: regenerate z-files on FreeBSD 10`コミットの全体的な影響: [https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384](https://github.com/golang/go/commit/737efeb5b8fe18451adfbd29fe663df2f2b4b384)
-   Goの`Mikio Hara`氏の他のコミット: [https://github.com/golang/go/commits?author=mikioh.mikioh%40gmail.com](https://github.com/golang/go/commits?author=mikioh.mikioh%40gmail.com)
-   Goの`golang-codereviews`の活動: [https://go.dev/wiki/CodeReviews](https://go.dev/wiki/CodeReviews)
-   Goの`rsc`氏の活動: [https://github.com/rsc](https://github.com/rsc)
-   Goの`minux.ma`氏の活動: [https://github.com/minux](https://github.com/minux)
-   Goの`gobot`の活動: [https://github.com/gobot](https://github.com/gobot)
-   Goの`iant`氏の活動: [https://github.com/iant](https://github.com/iant)
-   Goの`golang.org/cl/56770044`のChange List: [https://golang.org/cl/56770044](https://golang.org/cl/56770044)