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

[インデックス 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 -godefsmkerrors.sh, mksyscall.sh などのスクリプト)によって再生成されます。これにより、Goの syscall パッケージは、様々なOSやアーキテクチャの最新のシステムインターフェースに追従することができます。

NetBSD

NetBSDは、オープンソースのUnix系オペレーティングシステムの一つです。その特徴は、非常に高い移植性(多くの異なるハードウェアアーキテクチャで動作する能力)にあります。サーバー、デスクトップ、組み込みシステムなど、幅広い用途で利用されています。NetBSDのカーネルやシステムライブラリのバージョンアップは、システムコールや各種定数の定義に影響を与えることがあり、それがGoの syscall パッケージの更新を必要とする理由となります。

DLT_ で始まる定数は、主にネットワークパケットキャプチャライブラリ(例: libpcapWinPcap)で使用されるデータリンク層のタイプ識別子です。これらの定数は、キャプチャされたパケットがどの種類のネットワークインターフェース(例: 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_: setsockoptgetsockopt システムコールでソケットのオプションを設定・取得する際に使用されるオプション名。

これらの定数も、OSの機能拡張や変更に伴い追加・更新されることがあります。

技術的詳細

このコミットは、NetBSD 6.0 RC1のリリースに合わせて、Goの syscall パッケージがNetBSDの最新のシステムインターフェースと同期するようにするためのものです。具体的には、以下の2種類のファイルが更新されています。

  1. 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でこれらの機能が導入または変更されたことを示唆しています。

  2. 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つのファイルです。

  1. 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 定数が追加されています。
  2. 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 定数が追加されています。
  3. 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
  4. 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プログラムの安定性と互換性を保証します。

関連リンク

参考にした情報源リンク

  • コミット情報: /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 -godefsmkerrors.sh, mksyscall.sh などのスクリプト)によって再生成されます。これにより、Goの syscall パッケージは、様々なOSやアーキテクチャの最新のシステムインターフェースに追従することができます。

NetBSD

NetBSDは、オープンソースのUnix系オペレーティングシステムの一つです。その特徴は、非常に高い移植性(多くの異なるハードウェアアーキテクチャで動作する能力)にあります。サーバー、デスクトップ、組み込みシステムなど、幅広い用途で利用されています。NetBSDのカーネルやシステムライブラリのバージョンアップは、システムコールや各種定数の定義に影響を与えることがあり、それがGoの syscall パッケージの更新を必要とする理由となります。

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_: setsockoptgetsockopt システムコールでソケットのオプションを設定・取得する際に使用されるオプション名。

これらの定数も、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種類のファイルが更新されています。

  1. 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プログラムがより細かくシグナル処理を制御できるようになったことを示唆しています。

  2. 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つのファイルです。

  1. 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 定数が追加されています。
  2. 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 定数が追加されています。
  3. 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
  4. 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プログラムの安定性と互換性を保証します。

関連リンク

参考にした情報源リンク