[インデックス 13759] ファイルの概要
このコミットは、Go言語の syscall
パッケージにおけるNetBSD固有の定数定義ファイル(いわゆる「z-files」)を更新するものです。具体的には、NetBSD 6.0 RC1のシステムコール番号とエラー定数に合わせるために、zerrors_netbsd_386.go
および zerrors_netbsd_amd64.go
に新しい定数を追加し、zsysnum_netbsd_386.go
および zsysnum_netbsd_amd64.go
から不要になったシステムコール番号を削除しています。これにより、GoプログラムがNetBSD 6.0 RC1環境で正確なシステムコールや定数を利用できるようになります。
コミット
commit 256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
Author: Joel Sing <jsing@google.com>
Date: Fri Sep 7 02:13:14 2012 +1000
syscall: regenerate/update netbsd z-files
Regenerate/update netbsd z-files on NetBSD 6.0 RC1.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6506062
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
元コミット内容
syscall: regenerate/update netbsd z-files
Regenerate/update netbsd z-files on NetBSD 6.0 RC1.
変更の背景
この変更の背景には、NetBSDオペレーティングシステムのバージョンアップがあります。具体的には、NetBSD 6.0 Release Candidate 1 (RC1) のリリースに伴い、そのカーネルやシステムライブラリで定義されているシステムコール番号や各種定数に変更があったため、Go言語の syscall
パッケージがこれらの新しい定義に追従する必要が生じました。
Go言語の syscall
パッケージは、OS固有のシステムコールや定数をGoプログラムから利用するためのインターフェースを提供します。これらの定数は通常、特定のOSバージョンやアーキテクチャに合わせて自動生成されることが多く、OSの更新があればそれに合わせてGo側の定義も更新される必要があります。このコミットは、NetBSD 6.0 RC1における変更をGoの syscall
パッケージに反映させるための定期的なメンテナンス作業の一環です。
前提知識の解説
Go言語の syscall
パッケージ
syscall
パッケージは、Goプログラムがオペレーティングシステム(OS)の低レベルな機能、すなわちシステムコールに直接アクセスするための機能を提供します。ファイル操作、ネットワーク通信、プロセス管理など、OSが提供する多くの機能はシステムコールを通じて行われます。Goの syscall
パッケージは、これらのシステムコールをGoの関数としてラップし、OS固有の定数(エラーコード、フラグ、モードなど)をGoの定数として提供します。これにより、GoプログラムはOSの機能を安全かつ効率的に利用できます。
「z-files」とは
Go言語の syscall
パッケージにおいて、「z-files」とは、特定のOSやアーキテクチャ向けに自動生成されるGoのソースファイルを指します。これらのファイルは、OSのヘッダーファイル(C言語のヘッダーファイルなど)からシステムコール番号、定数、構造体定義などを抽出し、Goのコードとして変換することで生成されます。ファイル名が z
で始まることが多いのは、慣習的に生成されたファイルであることを示すためです(例: zerrors_netbsd_386.go
, zsysnum_netbsd_amd64.go
)。
これらのファイルは手動で編集されることはほとんどなく、OSのAPIが変更された際に、専用のツール(例: go tool cgo -godefs
や mkerrors.sh
, mksyscall.sh
などのスクリプト)によって再生成されます。これにより、Goの syscall
パッケージは、様々なOSやアーキテクチャの最新のシステムインターフェースに追従することができます。
NetBSD
NetBSDは、オープンソースのUnix系オペレーティングシステムの一つです。その特徴は、非常に高い移植性(多くの異なるハードウェアアーキテクチャで動作する能力)にあります。サーバー、デスクトップ、組み込みシステムなど、幅広い用途で利用されています。NetBSDのカーネルやシステムライブラリのバージョンアップは、システムコールや各種定数の定義に影響を与えることがあり、それがGoの syscall
パッケージの更新を必要とする理由となります。
DLT_
定数 (Data Link Type)
DLT_
で始まる定数は、主にネットワークパケットキャプチャライブラリ(例: libpcap
や WinPcap
)で使用されるデータリンク層のタイプ識別子です。これらの定数は、キャプチャされたパケットがどの種類のネットワークインターフェース(例: Ethernet, Wi-Fi, PPPなど)から来たものか、またそのパケットのヘッダー形式がどうなっているかを示します。新しいネットワーク技術やプロトコルが導入されると、それに対応する DLT_
定数が追加されることがあります。
SYS_
定数 (System Call Number)
SYS_
で始まる定数は、オペレーティングシステムが提供する個々のシステムコールを一意に識別するための番号です。アプリケーションがOSの機能(例: ファイルの読み書き、プロセスの作成、メモリの割り当て)を利用する際には、対応するシステムコール番号を指定してカーネルに要求を送信します。OSのバージョンアップに伴い、新しいシステムコールが追加されたり、既存のシステムコールが変更・削除されたりすることがあり、それに伴い SYS_
定数も更新されます。
F_
, MSG_
, O_
, SOCK_
, SO_
定数
これらは、Unix系システムにおける様々な操作や設定に関連する定数です。
F_
:fcntl
(ファイル制御) システムコールで使用されるコマンドやフラグ。MSG_
: ソケット通信におけるメッセージの送受信オプション。O_
:open
システムコールなどでファイルを開く際のモードやフラグ。SOCK_
:socket
システムコールでソケットを作成する際のソケットタイプ(例:SOCK_STREAM
for TCP,SOCK_DGRAM
for UDP)。SO_
:setsockopt
やgetsockopt
システムコールでソケットのオプションを設定・取得する際に使用されるオプション名。
これらの定数も、OSの機能拡張や変更に伴い追加・更新されることがあります。
技術的詳細
このコミットは、NetBSD 6.0 RC1のリリースに合わせて、Goの syscall
パッケージがNetBSDの最新のシステムインターフェースと同期するようにするためのものです。具体的には、以下の2種類のファイルが更新されています。
-
zerrors_netbsd_386.go
およびzerrors_netbsd_amd64.go
: これらのファイルは、NetBSDの32ビット (i386) および 64ビット (amd64) アーキテクチャ向けのエラーコードや各種定数を定義しています。コミットの差分を見ると、多数の新しいDLT_
定数(ネットワークデータリンクタイプ)が追加されていることがわかります。これには、DLT_A429
,DLT_A653_ICM
,DLT_AOS
,DLT_AX25_KISS
,DLT_BLUETOOTH_HCI_H4
,DLT_CAN20B
,DLT_CAN_SOCKETCAN
など、多岐にわたるネットワーク技術やプロトコルに対応する識別子が含まれています。また、F_GETNOSIGPIPE
,F_SETNOSIGPIPE
(ファイル記述子操作におけるSIGPIPE
シグナル抑制関連)、MSG_NBIO
(非ブロッキングメッセージ)、O_NOSIGPIPE
(ファイルオープン時のSIGPIPE
抑制)、SOCK_NOSIGPIPE
(ソケット作成時のSIGPIPE
抑制)、SO_NOSIGPIPE
(ソケットオプションでのSIGPIPE
抑制) といった、SIGPIPE
シグナル関連の新しい定数も追加されています。これは、NetBSD 6.0 RC1でこれらの機能が導入または変更されたことを示唆しています。 -
zsysnum_netbsd_386.go
およびzsysnum_netbsd_amd64.go
: これらのファイルは、NetBSDの32ビットおよび64ビットアーキテクチャ向けのシステムコール番号を定義しています。コミットの差分を見ると、SYS_SA_REGISTER
からSYS_SA_PREEMPT
までのSA_
(Scheduler Activations) 関連のシステムコールと、SYS_QUOTACTL
(クォータ制御) のシステムコールが削除されています。これは、NetBSD 6.0 RC1においてこれらのシステムコールが廃止されたか、あるいはその番号が変更されたことを意味します。Goのsyscall
パッケージは、これらのシステムコールがもはや利用できないことを反映するために、対応する定数を削除しています。
これらの変更は、GoプログラムがNetBSD 6.0 RC1上で動作する際に、最新のOSインターフェースと互換性を保ち、正確なシステムコールや定数を利用できるようにするために不可欠です。特に、DLT_
定数の追加は、ネットワーク関連のアプリケーションがNetBSD上でより多様なデータリンクタイプを扱うことを可能にし、SIGPIPE
関連の定数追加は、シグナル処理のよりきめ細やかな制御を可能にします。システムコール番号の削除は、Goプログラムが廃止されたシステムコールを誤って呼び出すことを防ぎます。
コアとなるコードの変更箇所
このコミットにおけるコアとなるコードの変更箇所は、以下の4つのファイルです。
-
src/pkg/syscall/zerrors_netbsd_386.go
:- 多数の
DLT_
定数(DLT_A429
からDLT_X2E_XORAYA
まで)が追加されています。これらは主にネットワークデータリンクタイプに関連するものです。 F_GETNOSIGPIPE
,F_SETNOSIGPIPE
定数が追加されています。MSG_NBIO
定数が追加されています。O_NOSIGPIPE
定数が追加されています。SOCK_NOSIGPIPE
定数が追加されています。SO_NOSIGPIPE
定数が追加されています。
- 多数の
-
src/pkg/syscall/zerrors_netbsd_amd64.go
:src/pkg/syscall/zerrors_netbsd_386.go
と同様に、多数のDLT_
定数、F_GETNOSIGPIPE
,F_SETNOSIGPIPE
,MSG_NBIO
,O_NOSIGPIPE
,SOCK_NOSIGPIPE
,SO_NOSIGPIPE
定数が追加されています。
-
src/pkg/syscall/zsysnum_netbsd_386.go
:- 以下のシステムコール番号が削除されています。
SYS_SA_REGISTER
SYS_SA_STACKS
SYS_SA_ENABLE
SYS_SA_SETCONCURRENCY
SYS_SA_YIELD
SYS_SA_PREEMPT
SYS_QUOTACTL
- 以下のシステムコール番号が削除されています。
-
src/pkg/syscall/zsysnum_netbsd_amd64.go
:src/pkg/syscall/zsysnum_netbsd_386.go
と同様に、SYS_SA_REGISTER
からSYS_SA_PREEMPT
までとSYS_QUOTACTL
のシステムコール番号が削除されています。
コアとなるコードの解説
zerrors_netbsd_386.go
および zerrors_netbsd_amd64.go
の変更
これらのファイルは、NetBSDシステムにおける様々な定数をGo言語で利用できるように定義しています。追加された定数は、NetBSD 6.0 RC1で導入された新しい機能や、既存機能の拡張を反映しています。
-
DLT_
定数の追加:DLT_
(Data Link Type) 定数は、ネットワークパケットキャプチャの文脈で、データリンク層のプロトコルタイプを識別するために使用されます。例えば、DLT_BLUETOOTH_HCI_H4
はBluetooth HCI H4プロトコル、DLT_CAN_SOCKETCAN
はCANバスのSocketCANプロトコルを示します。これらの追加は、NetBSD 6.0 RC1がより多くのネットワーク技術やプロトコルをサポートするようになったことを意味し、Goのネットワーク関連アプリケーションがこれらの新しいデータリンクタイプを認識し、処理できるようになります。 -
F_GETNOSIGPIPE
,F_SETNOSIGPIPE
: これらはfcntl
システムコールで使用される定数で、ファイル記述子に対してSIGPIPE
シグナルの発生を抑制する機能に関連します。通常、クローズされたパイプやソケットに書き込もうとするとSIGPIPE
シグナルが発生し、デフォルトではプロセスが終了します。これらの定数により、Goプログラムは個々のファイル記述子に対してこの挙動を制御できるようになります。 -
MSG_NBIO
: ソケット通信において、メッセージの送受信操作を非ブロッキングで行うためのフラグです。これにより、データがすぐに利用可能でない場合でも、操作がブロックされずに即座に制御が戻るようになります。 -
O_NOSIGPIPE
:open
システムコールでファイルやソケットを開く際に指定できるフラグで、そのファイル記述子に対するSIGPIPE
シグナルの発生を抑制します。 -
SOCK_NOSIGPIPE
:socket
システムコールでソケットを作成する際に指定できるフラグで、作成されるソケットに対してSIGPIPE
シグナルの発生を抑制します。 -
SO_NOSIGPIPE
:setsockopt
システムコールでソケットオプションを設定する際に使用されるオプションで、ソケット全体に対してSIGPIPE
シグナルの発生を抑制します。
これらの SIGPIPE
関連の定数追加は、Goのネットワークプログラミングにおいて、より堅牢なエラーハンドリングとシグナル管理を可能にします。特に、Goの並行処理モデルにおいて、予期せぬ SIGPIPE
によるプログラム終了を防ぐ上で有用です。
zsysnum_netbsd_386.go
および zsysnum_netbsd_amd64.go
の変更
これらのファイルは、NetBSDシステムにおけるシステムコール番号を定義しています。削除されたシステムコール番号は、NetBSD 6.0 RC1でこれらのシステムコールが廃止されたか、あるいはその機能が別の方法で提供されるようになったことを示しています。
-
SYS_SA_REGISTER
からSYS_SA_PREEMPT
までの削除: これらは「Scheduler Activations (SA)」に関連するシステムコールです。Scheduler Activationsは、ユーザーレベルスレッドライブラリがカーネルと協調してスレッドのスケジューリングを効率的に行うためのメカニズムでした。これらのシステムコールが削除されたということは、NetBSD 6.0 RC1においてScheduler Activationsのサポートが廃止されたか、あるいはその実装が変更され、これらのシステムコールが不要になったことを意味します。Goのランタイムは、これらのシステムコールに依存しないように更新される必要があります。 -
SYS_QUOTACTL
の削除:quotactl
は、ファイルシステムのディスククォータを制御するためのシステムコールです。このシステムコールが削除されたということは、NetBSD 6.0 RC1でクォータ制御のインターフェースが変更されたか、あるいは別のシステムコールに統合された可能性を示唆しています。
これらのシステムコール番号の削除は、GoプログラムがNetBSD 6.0 RC1上で動作する際に、存在しないシステムコールを呼び出そうとするエラーを防ぐために重要です。Goの syscall
パッケージは、OSのAPIの変更に厳密に追従することで、Goプログラムの安定性と互換性を保証します。
関連リンク
- Go言語
syscall
パッケージのドキュメント: https://pkg.go.dev/syscall - NetBSD 公式サイト: https://www.netbsd.org/
libpcap
(DLT定数に関連): https://www.tcpdump.org/SIGPIPE
シグナルに関する一般的な情報: https://ja.wikipedia.org/wiki/SIGPIPE
参考にした情報源リンク
- コミット情報:
/home/orange/Project/comemo/commit_data/13759.txt
- GitHub上のコミットページ: https://github.com/golang/go/commit/256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
- NetBSD 6.0 RC1 リリースアナウンス (一般的な情報源として参照): 2012年のNetBSD公式ニュースリリースやメーリングリストアーカイブなどを参照。
- Go言語の
syscall
パッケージの生成メカニズムに関する一般的な知識。 - Unix/Linuxシステムプログラミングにおける
fcntl
,socket
,open
などのシステムコールと関連定数に関する一般的な知識。 - ネットワークプロトコルと
DLT
定数に関する一般的な知識。 - Scheduler Activationsに関する一般的な知識。
- ディスククォータと
quotactl
に関する一般的な知識。 SIGPIPE
シグナルに関する一般的な知識。
[インデックス 13759] ファイルの概要
このコミットは、Go言語の syscall
パッケージにおけるNetBSD固有の定数定義ファイル(いわゆる「z-files」)を更新するものです。具体的には、NetBSD 6.0 RC1のシステムコール番号とエラー定数に合わせるために、zerrors_netbsd_386.go
および zerrors_netbsd_amd64.go
に新しい定数を追加し、zsysnum_netbsd_386.go
および zsysnum_netbsd_amd64.go
から不要になったシステムコール番号を削除しています。これにより、GoプログラムがNetBSD 6.0 RC1環境で正確なシステムコールや定数を利用できるようになります。
コミット
commit 256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
Author: Joel Sing <jsing@google.com>
Date: Fri Sep 7 02:13:14 2012 +1000
syscall: regenerate/update netbsd z-files
Regenerate/update netbsd z-files on NetBSD 6.0 RC1.
R=golang-dev, r
CC=golang-dev
https://golang.org/cl/6506062
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
元コミット内容
syscall: regenerate/update netbsd z-files
Regenerate/update netbsd z-files on NetBSD 6.0 RC1.
変更の背景
この変更の背景には、NetBSDオペレーティングシステムのバージョンアップがあります。具体的には、NetBSD 6.0 Release Candidate 1 (RC1) のリリースに伴い、そのカーネルやシステムライブラリで定義されているシステムコール番号や各種定数に変更があったため、Go言語の syscall
パッケージがこれらの新しい定義に追従する必要が生じました。
Go言語の syscall
パッケージは、OS固有のシステムコールや定数をGoプログラムから利用するためのインターフェースを提供します。これらの定数は通常、特定のOSバージョンやアーキテクチャに合わせて自動生成されることが多く、OSの更新があればそれに合わせてGo側の定義も更新される必要があります。このコミットは、NetBSD 6.0 RC1における変更をGoの syscall
パッケージに反映させるための定期的なメンテナンス作業の一環です。特に、DLT_
定数の追加は、NetBSD 6.0 RC1で libpcap
ライブラリがバージョン1.1.1に更新されたことと関連しており、これにより新しいデータリンク層のヘッダータイプがサポートされるようになりました。また、NetBSD 6.0で導入された高性能パケットフィルターであるNetBSD Packet Filter (NPF) のような新しいカーネル機能も、DLT_
タイプの追加を必要とする場合があります。
前提知識の解説
Go言語の syscall
パッケージ
syscall
パッケージは、Goプログラムがオペレーティングシステム(OS)の低レベルな機能、すなわちシステムコールに直接アクセスするための機能を提供します。ファイル操作、ネットワーク通信、プロセス管理など、OSが提供する多くの機能はシステムコールを通じて行われます。Goの syscall
パッケージは、これらのシステムコールをGoの関数としてラップし、OS固有の定数(エラーコード、フラグ、モードなど)をGoの定数として提供します。これにより、GoプログラムはOSの機能を安全かつ効率的に利用できます。
「z-files」とは
Go言語の syscall
パッケージにおいて、「z-files」とは、特定のOSやアーキテクチャ向けに自動生成されるGoのソースファイルを指します。これらのファイルは、OSのヘッダーファイル(C言語のヘッダーファイルなど)からシステムコール番号、定数、構造体定義などを抽出し、Goのコードとして変換することで生成されます。ファイル名が z
で始まることが多いのは、慣習的に生成されたファイルであることを示すためです(例: zerrors_netbsd_386.go
, zsysnum_netbsd_amd64.go
)。
これらのファイルは手動で編集されることはほとんどなく、OSのAPIが変更された際に、専用のツール(例: go tool cgo -godefs
や mkerrors.sh
, mksyscall.sh
などのスクリプト)によって再生成されます。これにより、Goの syscall
パッケージは、様々なOSやアーキテクチャの最新のシステムインターフェースに追従することができます。
NetBSD
NetBSDは、オープンソースのUnix系オペレーティングシステムの一つです。その特徴は、非常に高い移植性(多くの異なるハードウェアアーキテクチャで動作する能力)にあります。サーバー、デスクトップ、組み込みシステムなど、幅広い用途で利用されています。NetBSDのカーネルやシステムライブラリのバージョンアップは、システムコールや各種定数の定義に影響を与えることがあり、それがGoの syscall
パッケージの更新を必要とする理由となります。
DLT_
定数 (Data Link Type)
DLT_
で始まる定数は、主にネットワークパケットキャプチャライブラリ(例: libpcap
)で使用されるデータリンク層のタイプ識別子です。これらの定数は、キャプチャされたパケットがどの種類のネットワークインターフェース(例: Ethernet, Wi-Fi, PPPなど)から来たものか、またそのパケットのヘッダー形式がどうなっているかを示します。新しいネットワーク技術やプロトコルが導入されると、それに対応する DLT_
定数が追加されることがあります。NetBSD 6.0 RC1では libpcap
が更新されたことにより、NFC Forum LLCP、NG40、MPEG-2トランスポートストリーム (DLT_MPEG_2_TS
)、IEEE 802.15.4インターフェース (DLT_IEEE802_15_4_NOFCS
) など、新たなリンク層ヘッダータイプが追加されました。
SYS_
定数 (System Call Number)
SYS_
で始まる定数は、オペレーティングシステムが提供する個々のシステムコールを一意に識別するための番号です。アプリケーションがOSの機能(例: ファイルの読み書き、プロセスの作成、メモリの割り当て)を利用する際には、対応するシステムコール番号を指定してカーネルに要求を送信します。OSのバージョンアップに伴い、新しいシステムコールが追加されたり、既存のシステムコールが変更・削除されたりすることがあり、それに伴い SYS_
定数も更新されます。
F_
, MSG_
, O_
, SOCK_
, SO_
定数
これらは、Unix系システムにおける様々な操作や設定に関連する定数です。
F_
:fcntl
(ファイル制御) システムコールで使用されるコマンドやフラグ。MSG_
: ソケット通信におけるメッセージの送受信オプション。O_
:open
システムコールなどでファイルを開く際のモードやフラグ。SOCK_
:socket
システムコールでソケットを作成する際のソケットタイプ(例:SOCK_STREAM
for TCP,SOCK_DGRAM
for UDP)。SO_
:setsockopt
やgetsockopt
システムコールでソケットのオプションを設定・取得する際に使用されるオプション名。
これらの定数も、OSの機能拡張や変更に伴い追加・更新されることがあります。特に、SIGPIPE
シグナルに関連する定数 (F_GETNOSIGPIPE
, F_SETNOSIGPIPE
, MSG_NBIO
, O_NOSIGPIPE
, SOCK_NOSIGPIPE
, SO_NOSIGPIPE
) の追加は、NetBSD 6.0 RC1でこれらのシグナル処理の制御がより細かく行えるようになったことを示唆しています。
技術的詳細
このコミットは、NetBSD 6.0 RC1のリリースに合わせて、Goの syscall
パッケージがNetBSDの最新のシステムインターフェースと同期するようにするためのものです。具体的には、以下の2種類のファイルが更新されています。
-
zerrors_netbsd_386.go
およびzerrors_netbsd_amd64.go
: これらのファイルは、NetBSDの32ビット (i386) および 64ビット (amd64) アーキテクチャ向けのエラーコードや各種定数を定義しています。コミットの差分を見ると、多数の新しいDLT_
定数(ネットワークデータリンクタイプ)が追加されていることがわかります。これには、DLT_A429
,DLT_A653_ICM
,DLT_AOS
,DLT_AX25_KISS
,DLT_BLUETOOTH_HCI_H4
,DLT_CAN20B
,DLT_CAN_SOCKETCAN
など、多岐にわたるネットワーク技術やプロトコルに対応する識別子が含まれています。これらの追加は、NetBSD 6.0 RC1がlibpcap
1.1.1への更新を通じて、より広範なネットワークプロトコルとフォーマットを識別・キャプチャできるようになったことを反映しています。 また、F_GETNOSIGPIPE
,F_SETNOSIGPIPE
(ファイル記述子操作におけるSIGPIPE
シグナル抑制関連)、MSG_NBIO
(非ブロッキングメッセージ)、O_NOSIGPIPE
(ファイルオープン時のSIGPIPE
抑制)、SOCK_NOSIGPIPE
(ソケット作成時のSIGPIPE
抑制)、SO_NOSIGPIPE
(ソケットオプションでのSIGPIPE
抑制) といった、SIGPIPE
シグナル関連の新しい定数も追加されています。これは、NetBSD 6.0 RC1でこれらの機能が導入または変更され、Goプログラムがより細かくシグナル処理を制御できるようになったことを示唆しています。 -
zsysnum_netbsd_386.go
およびzsysnum_netbsd_amd64.go
: これらのファイルは、NetBSDの32ビットおよび64ビットアーキテクチャ向けのシステムコール番号を定義しています。コミットの差分を見ると、SYS_SA_REGISTER
からSYS_SA_PREEMPT
までのSA_
(Scheduler Activations) 関連のシステムコールと、SYS_QUOTACTL
(クォータ制御) のシステムコールが削除されています。これは、NetBSD 6.0 RC1においてこれらのシステムコールが廃止されたか、あるいはその番号が変更されたことを意味します。Goのsyscall
パッケージは、これらのシステムコールがもはや利用できないことを反映するために、対応する定数を削除しています。Scheduler Activationsは、ユーザーレベルスレッドライブラリがカーネルと協調してスレッドのスケジューリングを効率的に行うためのメカニズムでしたが、NetBSD 6.0 RC1ではそのサポートが廃止されたか、別の実装に置き換えられたと考えられます。
これらの変更は、GoプログラムがNetBSD 6.0 RC1上で動作する際に、最新のOSインターフェースと互換性を保ち、正確なシステムコールや定数を利用できるようにするために不可欠です。特に、DLT_
定数の追加は、ネットワーク関連のアプリケーションがNetBSD上でより多様なデータリンクタイプを扱うことを可能にし、SIGPIPE
関連の定数追加は、シグナル処理のよりきめ細やかな制御を可能にします。システムコール番号の削除は、Goプログラムが廃止されたシステムコールを誤って呼び出すことを防ぎます。
コアとなるコードの変更箇所
このコミットにおけるコアとなるコードの変更箇所は、以下の4つのファイルです。
-
src/pkg/syscall/zerrors_netbsd_386.go
:- 多数の
DLT_
定数(DLT_A429
からDLT_X2E_XORAYA
まで)が追加されています。これらは主にネットワークデータリンクタイプに関連するものです。 F_GETNOSIGPIPE
,F_SETNOSIGPIPE
定数が追加されています。MSG_NBIO
定数が追加されています。O_NOSIGPIPE
定数が追加されています。SOCK_NOSIGPIPE
定数が追加されています。SO_NOSIGPIPE
定数が追加されています。
- 多数の
-
src/pkg/syscall/zerrors_netbsd_amd64.go
:src/pkg/syscall/zerrors_netbsd_386.go
と同様に、多数のDLT_
定数、F_GETNOSIGPIPE
,F_SETNOSIGPIPE
,MSG_NBIO
,O_NOSIGPIPE
,SOCK_NOSIGPIPE
,SO_NOSIGPIPE
定数が追加されています。
-
src/pkg/syscall/zsysnum_netbsd_386.go
:- 以下のシステムコール番号が削除されています。
SYS_SA_REGISTER
SYS_SA_STACKS
SYS_SA_ENABLE
SYS_SA_SETCONCURRENCY
SYS_SA_YIELD
SYS_SA_PREEMPT
SYS_QUOTACTL
- 以下のシステムコール番号が削除されています。
-
src/pkg/syscall/zsysnum_netbsd_amd64.go
:src/pkg/syscall/zsysnum_netbsd_386.go
と同様に、SYS_SA_REGISTER
からSYS_SA_PREEMPT
までとSYS_QUOTACTL
のシステムコール番号が削除されています。
コアとなるコードの解説
zerrors_netbsd_386.go
および zerrors_netbsd_amd64.go
の変更
これらのファイルは、NetBSDシステムにおける様々な定数をGo言語で利用できるように定義しています。追加された定数は、NetBSD 6.0 RC1で導入された新しい機能や、既存機能の拡張を反映しています。
-
DLT_
定数の追加:DLT_
(Data Link Type) 定数は、ネットワークパケットキャプチャの文脈で、データリンク層のプロトコルタイプを識別するために使用されます。例えば、DLT_BLUETOOTH_HCI_H4
はBluetooth HCI H4プロトコル、DLT_CAN_SOCKETCAN
はCANバスのSocketCANプロトコルを示します。これらの追加は、NetBSD 6.0 RC1がlibpcap
ライブラリの更新により、より多くのネットワーク技術やプロトコルをサポートするようになったことを意味し、Goのネットワーク関連アプリケーションがこれらの新しいデータリンクタイプを認識し、処理できるようになります。 -
F_GETNOSIGPIPE
,F_SETNOSIGPIPE
: これらはfcntl
システムコールで使用される定数で、ファイル記述子に対してSIGPIPE
シグナルの発生を抑制する機能に関連します。通常、クローズされたパイプやソケットに書き込もうとするとSIGPIPE
シグナルが発生し、デフォルトではプロセスが終了します。これらの定数により、Goプログラムは個々のファイル記述子に対してこの挙動を制御できるようになります。 -
MSG_NBIO
: ソケット通信において、メッセージの送受信操作を非ブロッキングで行うためのフラグです。これにより、データがすぐに利用可能でない場合でも、操作がブロックされずに即座に制御が戻るようになります。 -
O_NOSIGPIPE
:open
システムコールでファイルやソケットを開く際に指定できるフラグで、そのファイル記述子に対するSIGPIPE
シグナルの発生を抑制します。 -
SOCK_NOSIGPIPE
:socket
システムコールでソケットを作成する際に指定できるフラグで、作成されるソケットに対してSIGPIPE
シグナルの発生を抑制します。 -
SO_NOSIGPIPE
:setsockopt
システムコールでソケットオプションを設定する際に使用されるオプションで、ソケット全体に対してSIGPIPE
シグナルの発生を抑制します。
これらの SIGPIPE
関連の定数追加は、Goのネットワークプログラミングにおいて、より堅牢なエラーハンドリングとシグナル管理を可能にします。特に、Goの並行処理モデルにおいて、予期せぬ SIGPIPE
によるプログラム終了を防ぐ上で有用です。
zsysnum_netbsd_386.go
および zsysnum_netbsd_amd64.go
の変更
これらのファイルは、NetBSDシステムにおけるシステムコール番号を定義しています。削除されたシステムコール番号は、NetBSD 6.0 RC1でこれらのシステムコールが廃止されたか、あるいはその機能が別の方法で提供されるようになったことを示しています。
-
SYS_SA_REGISTER
からSYS_SA_PREEMPT
までの削除: これらは「Scheduler Activations (SA)」に関連するシステムコールです。Scheduler Activationsは、ユーザーレベルスレッドライブラリがカーネルと協調してスレッドのスケジューリングを効率的に行うためのメカニズムでした。これらのシステムコールが削除されたということは、NetBSD 6.0 RC1においてScheduler Activationsのサポートが廃止されたか、あるいはその実装が変更され、これらのシステムコールが不要になったことを意味します。Goのランタイムは、これらのシステムコールに依存しないように更新される必要があります。 -
SYS_QUOTACTL
の削除:quotactl
は、ファイルシステムのディスククォータを制御するためのシステムコールです。このシステムコールが削除されたということは、NetBSD 6.0 RC1でクォータ制御のインターフェースが変更されたか、あるいは別のシステムコールに統合された可能性を示唆しています。
これらのシステムコール番号の削除は、GoプログラムがNetBSD 6.0 RC1上で動作する際に、存在しないシステムコールを呼び出そうとするエラーを防ぐために重要です。Goの syscall
パッケージは、OSのAPIの変更に厳密に追従することで、Goプログラムの安定性と互換性を保証します。
関連リンク
- Go言語
syscall
パッケージのドキュメント: https://pkg.go.dev/syscall - NetBSD 公式サイト: https://www.netbsd.org/
libpcap
(DLT定数に関連): https://www.tcpdump.org/SIGPIPE
シグナルに関する一般的な情報: https://ja.wikipedia.org/wiki/SIGPIPE
参考にした情報源リンク
- コミット情報:
/home/orange/Project/comemo/commit_data/13759.txt
- GitHub上のコミットページ: https://github.com/golang/go/commit/256cd7e78eb0cc4cfd7ed472b9e11f22d34098b6
- NetBSD 6.0 RC1における
libpcap
の更新とDLT_
定数に関する情報:- https://www.debian.org/doc/manuals/developers-reference/ch05.en.html#s5.1.1 (Debianのドキュメントだが、
libpcap
のバージョンアップとDLT_
定数の関連について言及) - https://go.googlesource.com/go/+/refs/heads/master/src/pkg/syscall/zerrors_netbsd_amd64.go (Goのソースコード自体も
DLT_
定数の定義元として参照可能)
- https://www.debian.org/doc/manuals/developers-reference/ch05.en.html#s5.1.1 (Debianのドキュメントだが、
- NetBSD Packet Filter (NPF) に関する情報:
- https://www.netbsd.org/docs/guide/en/chap-npf.html (NetBSD公式ドキュメント)
- Unix/Linuxシステムプログラミングにおける
fcntl
,socket
,open
などのシステムコールと関連定数に関する一般的な知識。 - ネットワークプロトコルと
DLT
定数に関する一般的な知識。 - Scheduler Activationsに関する一般的な知識。
- ディスククォータと
quotactl
に関する一般的な知識。 SIGPIPE
シグナルに関する一般的な知識。