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

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

このコミットは、Goプロジェクトの内部で次期リリースにおけるAPIの変更を記録するために使用される api/next.txt ファイルを更新するものです。このファイルは、Goの標準ライブラリに追加される新しい型、定数、メソッドなどを追跡し、APIの互換性を維持するための重要な役割を担っています。

コミット

このコミットは、Goの標準ライブラリの複数のパッケージ(archive/tarcompress/gzipdebug/goobjdebug/pesyscall)にわたる新しいAPI要素の追加を記録しています。これにより、これらのパッケージの機能が拡張され、より多様なユースケースに対応できるようになります。

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

https://github.com/golang/go/commit/74fe67f22e41f06ab93fc5123964f144040191aa

元コミット内容

commit 74fe67f22e41f06ab93fc5123964f144040191aa
Author: Shenghou Ma <minux.ma@gmail.com>
Date:   Thu May 15 19:30:09 2014 -0400

    api: update next.txt
    
    LGTM=bradfitz
    R=golang-codereviews, bradfitz
    CC=golang-codereviews
    https://golang.org/cl/95490043
---
 api/next.txt | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\
 1 file changed, 76 insertions(+)

diff --git a/api/next.txt b/api/next.txt
index ec8d7b058e..84dc1f1628 100644
--- a/api/next.txt
+++ b/api/next.txt
@@ -1,4 +1,7 @@
+pkg archive/tar, const TypeGNUSparse = 83
+pkg archive/tar, const TypeGNUSparse ideal-char
 pkg archive/tar, type Header struct, Xattrs map[string]string
+pkg compress/gzip, method (*Reader) Reset(io.Reader) error
 pkg crypto/tls, const CurveP256 = 23
 pkg crypto/tls, const CurveP256 CurveID
 pkg crypto/tls, const CurveP384 = 24
@@ -126,6 +129,8 @@ pkg debug/goobj, type Func struct, Args int
 pkg debug/goobj, type Func struct, File []string
 pkg debug/goobj, type Func struct, Frame int
 pkg debug/goobj, type Func struct, FuncData []FuncData
+pkg debug/goobj, type Func struct, Leaf bool
+pkg debug/goobj, type Func struct, NoSplit bool
 pkg debug/goobj, type Func struct, PCData []Data
 pkg debug/goobj, type Func struct, PCFile Data
 pkg debug/goobj, type Func struct, PCLine Data
@@ -197,6 +202,73 @@ pkg debug/macho, type FatFile struct
 pkg debug/macho, type FatFile struct, Arches []FatArch
 pkg debug/macho, type FatFile struct, Magic uint32
 pkg debug/macho, var ErrNotFat *FormatError
+pkg debug/pe, type DataDirectory struct
+pkg debug/pe, type DataDirectory struct, Size uint32
+pkg debug/pe, type DataDirectory struct, VirtualAddress uint32
+pkg debug/pe, type File struct, OptionalHeader interface{}
+pkg debug/pe, type OptionalHeader32 struct
+pkg debug/pe, type OptionalHeader32 struct, AddressOfEntryPoint uint32
+pkg debug/pe, type OptionalHeader32 struct, BaseOfCode uint32
+pkg debug/pe, type OptionalHeader32 struct, BaseOfData uint32
+pkg debug/pe, type OptionalHeader32 struct, CheckSum uint32
+pkg debug/pe, type OptionalHeader32 struct, DataDirectory [16]DataDirectory
+pkg debug/pe, type OptionalHeader32 struct, DllCharacteristics uint16
+pkg debug/pe, type OptionalHeader32 struct, FileAlignment uint32
+pkg debug/pe, type OptionalHeader32 struct, ImageBase uint32
+pkg debug/pe, type OptionalHeader32 struct, LoaderFlags uint32
+pkg debug/pe, type OptionalHeader32 struct, Magic uint16
+pkg debug/pe, type OptionalHeader32 struct, MajorImageVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, MajorLinkerVersion uint8
+pkg debug/pe, type OptionalHeader32 struct, MajorOperatingSystemVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, MajorSubsystemVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, MinorImageVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, MinorLinkerVersion uint8
+pkg debug/pe, type OptionalHeader32 struct, MinorOperatingSystemVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, MinorSubsystemVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, NumberOfRvaAndSizes uint32
+pkg debug/pe, type OptionalHeader32 struct, SectionAlignment uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfCode uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfHeaders uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfHeapCommit uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfHeapReserve uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfImage uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfInitializedData uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfStackCommit uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfStackReserve uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfUninitializedData uint32
+pkg debug/pe, type OptionalHeader32 struct, Subsystem uint16
+pkg debug/pe, type OptionalHeader32 struct, Win32VersionValue uint32
+pkg debug/pe, type OptionalHeader64 struct
+pkg debug/pe, type OptionalHeader64 struct, AddressOfEntryPoint uint32
+pkg debug/pe, type OptionalHeader64 struct, BaseOfCode uint32
+pkg debug/pe, type OptionalHeader64 struct, CheckSum uint32
+pkg debug/pe, type OptionalHeader64 struct, DataDirectory [16]DataDirectory
+pkg debug/pe, type OptionalHeader64 struct, DllCharacteristics uint16
+pkg debug/pe, type OptionalHeader64 struct, FileAlignment uint32
+pkg debug/pe, type OptionalHeader64 struct, ImageBase uint64
+pkg debug/pe, type OptionalHeader64 struct, LoaderFlags uint32
+pkg debug/pe, type OptionalHeader64 struct, Magic uint16
+pkg debug/pe, type OptionalHeader64 struct, MajorImageVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, MajorLinkerVersion uint8
+pkg debug/pe, type OptionalHeader64 struct, MajorOperatingSystemVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, MajorSubsystemVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, MinorImageVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, MinorLinkerVersion uint8
+pkg debug/pe, type OptionalHeader64 struct, MinorOperatingSystemVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, MinorSubsystemVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, NumberOfRvaAndSizes uint32
+pkg debug/pe, type OptionalHeader64 struct, SectionAlignment uint32
+pkg debug/pe, type OptionalHeader64 struct, SizeOfCode uint32
+pkg debug/pe, type OptionalHeader64 struct, SizeOfHeaders uint32
+pkg debug/pe, type OptionalHeader64 struct, SizeOfHeapCommit uint64
+pkg debug/pe, type OptionalHeader64 struct, SizeOfHeapReserve uint64
+pkg debug/pe, type OptionalHeader64 struct, SizeOfImage uint32
+pkg debug/pe, type OptionalHeader64 struct, SizeOfInitializedData uint32
+pkg debug/pe, type OptionalHeader64 struct, SizeOfStackCommit uint64
+pkg debug/pe, type OptionalHeader64 struct, SizeOfStackReserve uint64
+pkg debug/pe, type OptionalHeader64 struct, SizeOfUninitializedData uint32
+pkg debug/pe, type OptionalHeader64 struct, Subsystem uint16
+pkg debug/pe, type OptionalHeader64 struct, Win32VersionValue uint32
 pkg debug/plan9obj, func NewFile(io.ReaderAt) (*File, error)\n pkg debug/plan9obj, func Open(string) (*File, error)\n pkg debug/plan9obj, method (*File) Close() error\n@@ -1563,6 +1635,8 @@ pkg syscall (openbsd-386), const SizeofRtMetrics = 56\n pkg syscall (openbsd-386), const SizeofRtMsghdr = 96\n pkg syscall (openbsd-386), const TCP_NOPUSH = 16\n pkg syscall (openbsd-386), const TCP_NOPUSH ideal-int\n+pkg syscall (openbsd-386), const TIOCGSID = 1074033763\n+pkg syscall (openbsd-386), const TIOCGSID ideal-int\n pkg syscall (openbsd-386), const TIOCGTSTAMP = 1074558043\n pkg syscall (openbsd-386), func FcntlFlock(uintptr, int, *Flock_t) error\n pkg syscall (openbsd-386), func SendmsgN(int, []uint8, []uint8, Sockaddr, int) (int, error)\n@@ -1726,6 +1800,8 @@ pkg syscall (openbsd-386-cgo), const SizeofRtMetrics = 56\n pkg syscall (openbsd-386-cgo), const SizeofRtMsghdr = 96\n pkg syscall (openbsd-386-cgo), const TCP_NOPUSH = 16\n pkg syscall (openbsd-386-cgo), const TCP_NOPUSH ideal-int\n+pkg syscall (openbsd-386-cgo), const TIOCGSID = 1074033763\n+pkg syscall (openbsd-386-cgo), const TIOCGSID ideal-int\n pkg syscall (openbsd-386-cgo), const TIOCGTSTAMP = 1074558043\n pkg syscall (openbsd-386-cgo), func FcntlFlock(uintptr, int, *Flock_t) error\n pkg syscall (openbsd-386-cgo), func SendmsgN(int, []uint8, []uint8, Sockaddr, int) (int, error)\n```

## 変更の背景

Go言語は、後方互換性を非常に重視しており、既存のAPIを変更する際には厳格なポリシーを設けています。しかし、新しい機能の追加や既存の機能の改善のために、APIを拡張する必要が生じます。`api/next.txt`ファイルは、このような次期リリースで導入される予定のAPIの追加や変更を事前に記録するためのものです。

このファイルは、Goのツールチェインや開発者が、将来のAPI変更を把握し、それに対応するための情報源として機能します。例えば、`go vet`のようなツールは、このファイルを参照して、非推奨となるAPIの使用を警告したり、新しいAPIへの移行を促したりすることができます。

今回のコミットにおけるAPIの追加は、Goの標準ライブラリが進化し、より多くのプラットフォームやファイル形式、デバッグシナリオに対応するための継続的な取り組みの一環です。特に、Windowsの実行可能ファイル形式(PEファイル)の解析機能の強化や、特定のOS(OpenBSD)におけるシステムコールへの対応は、Goがより広範な環境で利用されるための基盤を固めるものです。

## 前提知識の解説

### GoのAPI互換性ポリシー

Go言語は、バージョン間の後方互換性を非常に重視しています。これは、既存のGoプログラムが新しいバージョンのGoコンパイラで問題なく動作することを保証するためです。Go 1のリリース以降、Goチームは「Go 1 Compatibility Promise」を掲げ、標準ライブラリのAPIに破壊的な変更を加えないことを約束しています。

しかし、このポリシーはAPIの「追加」を妨げるものではありません。新しい機能や改善は、既存のAPIを壊すことなく追加されます。`api/next.txt`は、このような追加されるAPIを事前にリストアップし、開発者が次期リリースで利用可能になるAPIを把握できるようにするためのメカニズムです。これにより、Goのエコシステム全体がスムーズに進化していくことが可能になります。

### `archive/tar`パッケージ

`archive/tar`パッケージは、TARアーカイブ(テープアーカイブ)の読み書きをサポートするGoの標準ライブラリです。TARファイルは、複数のファイルを一つのアーカイブにまとめるための一般的な形式であり、Unix系システムで広く利用されています。このパッケージは、ファイルのメタデータ(パーミッション、タイムスタンプ、所有者など)と内容を扱うための機能を提供します。

### `compress/gzip`パッケージ

`compress/gzip`パッケージは、GZIP圧縮形式のデータを読み書きするためのGoの標準ライブラリです。GZIPは、ファイルを圧縮するための一般的な形式であり、インターネット上でのデータ転送や、ディスクスペースの節約によく利用されます。このパッケージは、圧縮されたデータを透過的に読み書きするための`Reader`と`Writer`を提供します。

### `debug/goobj`パッケージ

`debug/goobj`パッケージは、Goのオブジェクトファイル形式(`.o`ファイル)を解析するためのパッケージです。Goコンパイラが生成するオブジェクトファイルには、コンパイルされたコード、シンボル情報、デバッグ情報などが含まれています。このパッケージは、これらの情報をプログラム的に読み取り、解析するために使用されます。主にデバッグツールやプロファイリングツール、あるいはGoの内部動作を理解するための低レベルなツールで利用されます。

### `debug/pe`パッケージ

`debug/pe`パッケージは、WindowsのPortable Executable (PE) ファイル形式を解析するためのパッケージです。PEファイルは、Windowsオペレーティングシステムにおける実行可能ファイル(.exe)、ダイナミックリンクライブラリ(.dll)、オブジェクトファイル(.obj)などの標準的なファイル形式です。このパッケージは、PEファイルのヘッダ、セクション、データディレクトリなどの構造を読み取り、プログラム的にアクセスするための機能を提供します。これにより、PEファイルの解析、情報抽出、あるいはセキュリティ分析などが可能になります。

### `syscall`パッケージ

`syscall`パッケージは、Goプログラムからオペレーティングシステムの低レベルなシステムコールに直接アクセスするためのパッケージです。システムコールは、ファイルI/O、ネットワーク通信、プロセス管理、メモリ管理など、OSが提供する基本的なサービスを利用するためのインターフェースです。このパッケージは、OSに依存する低レベルな操作を行う際に使用されますが、通常はより高レベルな標準ライブラリ(`os`、`net`など)を使用することが推奨されます。`syscall`パッケージは、特定のOS固有の機能にアクセスする必要がある場合や、パフォーマンスが非常に重要な場合に利用されます。

### スパースファイル (Sparse Files)

スパースファイルは、ファイル内に連続したゼロのブロック(「穴」と呼ばれる)が含まれる場合に、そのゼロのブロックを実際にディスク上に割り当てずに、論理的なサイズだけを記録することでディスクスペースを節約するファイル形式です。これにより、非常に大きなファイルを効率的に保存できます。`archive/tar`パッケージは、このようなスパースファイルをTARアーカイブ内で表現するためのメカニズムをサポートしています。

### 拡張属性 (Extended Attributes - Xattrs)

拡張属性(Extended Attributes、略してXattrs)は、ファイルシステムにおいて、通常のファイルデータや標準的なメタデータ(ファイル名、サイズ、タイムスタンプなど)に加えて、追加の任意のメタデータをファイルに関連付けるための機能です。例えば、ファイルの作成者、セキュリティ情報、アプリケーション固有のデータなどを保存するために使用されます。TARアーカイブでは、PAX (Portable Archive eXchange) 形式を使用して拡張属性を保存できます。

### `//go:nosplit`ディレクティブとリーフ関数

Goのランタイムは、ゴルーチン(goroutine)のスタックを動的に拡張する機能を持っています。関数が呼び出される際、Goコンパイラは通常、スタックオーバーフローチェックを挿入し、必要に応じてスタックを拡張します。しかし、`//go:nosplit`というコンパイラディレクティブを関数の前に記述することで、このスタックオーバーフローチェックを省略させることができます。

`//go:nosplit`は、主にGoランタイムの非常に低レベルなコードで使用され、ゴルーチンのプリエンプション(横取り)やスタックの動的拡張を避けたい場合に利用されます。これは、特定のクリティカルなセクションで、予測可能な実行時間とスタック使用量を保証するために重要です。ただし、`//go:nosplit`を誤って使用すると、スタックオーバーフローによるセグメンテーション違反を引き起こす可能性があるため、一般的なアプリケーションコードでの使用は推奨されません。

「リーフ関数(Leaf Function)」とは、他の関数を呼び出さない関数のことです。リーフ関数は、呼び出しスタックの最下層に位置するため、スタックの使用量が比較的少なく、予測可能です。`//go:nosplit`ディレクティブは、しばしばこのようなリーフ関数に適用されます。これは、リーフ関数がスタックを大幅に消費する可能性が低く、スタックオーバーフローのリスクが管理しやすいためです。

### PEファイル形式

Portable Executable (PE) は、Microsoft Windowsオペレーティングシステムで使用される実行可能ファイル、DLL、オブジェクトファイルなどのファイル形式です。PEファイルは、ヘッダ、セクション、データディレクトリなどの構造で構成されており、OSがプログラムをメモリにロードし、実行するために必要なすべての情報を含んでいます。

*   **PEヘッダ**: ファイルの基本的な情報(CPUアーキテクチャ、タイムスタンプなど)を含みます。
*   **Optional Header**: PEヘッダの一部であり、プログラムのメモリレイアウト、エントリポイント、データディレクトリの場所など、OSローダーがプログラムを実行するために必要な詳細情報を含みます。32ビットPEファイル用と64ビットPEファイル用で構造が異なります(`OptionalHeader32`と`OptionalHeader64`)。
*   **データディレクトリ (Data Directory)**: `Optional Header`内に含まれる構造体の配列で、PEファイル内の様々な重要なデータテーブル(インポートテーブル、エクスポートテーブル、リソーステーブルなど)へのポインタとサイズを保持します。

### `ioctl`システムコールと`TIOCGSID`

`ioctl`(Input/Output Control)は、Unix系オペレーティングシステムにおいて、デバイスドライバに対して特定の操作を実行するための汎用的なシステムコールです。これは、通常の読み書き操作では実現できない、デバイス固有の制御機能を提供します。例えば、端末のモード設定、ネットワークインターフェースの設定、ディスクドライブの制御などに使用されます。

`TIOCGSID`は、`ioctl`システムコールで使用される定数の一つで、端末のセッションID(Session ID)を取得するために使用されます。セッションIDは、プロセスグループの集合であるセッションを一意に識別するためのIDです。これは、プロセス管理やジョブ制御において重要な役割を果たします。この定数は、特にOpenBSDのような特定のUnix系OS環境で利用されます。

## 技術的詳細

このコミットによって`api/next.txt`に追加されたAPI要素は、Goの標準ライブラリの機能拡張と、特定のプラットフォームやファイル形式への対応強化を目的としています。

### `archive/tar`パッケージの拡張

*   **`const TypeGNUSparse = 83`**:
    *   この定数は、GNU tar形式におけるスパースファイル(Sparse File)を示す新しいエントリタイプを定義します。スパースファイルは、ファイル内のゼロのブロックを物理的に保存せず、論理的なサイズのみを記録することでディスクスペースを節約します。
    *   `TypeGNUSparse ideal-char`は、この定数が文字リテラルとしても扱えることを示唆しています。
    *   これにより、`archive/tar`パッケージは、GNU tar形式で作成されたスパースファイルを正しく識別し、処理できるようになります。これは、特に大きなログファイルやデータベースファイルなど、多くのゼロバイトを含むファイルを扱う際に有用です。

*   **`type Header struct, Xattrs map[string]string`**:
    *   `archive/tar.Header`構造体に`Xattrs`という新しいフィールドが追加されました。これは`map[string]string`型で、ファイルの拡張属性(Extended Attributes)をキーと値のペアで保持します。
    *   拡張属性は、ファイルシステムが提供する追加のメタデータであり、ファイルの作成者、セキュリティ情報、カスタムプロパティなどを保存するために使用されます。
    *   この追加により、Goの`archive/tar`パッケージは、TARアーカイブ内の拡張属性を読み書きできるようになり、より豊富なファイルメタデータを扱うことが可能になります。これにより、ファイルのバックアップや転送時に、より多くの情報を保持できるようになります。

### `compress/gzip`パッケージの拡張

*   **`method (*Reader) Reset(io.Reader) error`**:
    *   `compress/gzip.Reader`型に`Reset`メソッドが追加されました。このメソッドは、既存の`gzip.Reader`インスタンスを新しい`io.Reader`で再初期化するために使用されます。
    *   通常、新しいGZIPストリームを読み込むには、`gzip.NewReader`を呼び出して新しい`Reader`インスタンスを作成する必要があります。しかし、`Reset`メソッドを使用することで、既存の`Reader`オブジェクトを再利用できるため、オブジェクトの再割り当てによるガベージコレクションのオーバーヘッドを削減し、パフォーマンスを向上させることができます。
    *   これは、特に複数のGZIP圧縮ストリームを連続して処理する場合や、リソースの再利用が重要なサーバーアプリケーションなどで非常に有用です。

### `debug/goobj`パッケージの拡張

*   **`type Func struct, Leaf bool`**:
    *   `debug/goobj.Func`構造体に`Leaf`というブール型フィールドが追加されました。このフィールドは、その関数が「リーフ関数」であるかどうかを示します。
    *   リーフ関数とは、他の関数を呼び出さない関数のことです。Goコンパイラは、リーフ関数に対して特定の最適化を適用することがあります。この情報がオブジェクトファイルに記録されることで、デバッグツールやプロファイリングツールが関数の特性をより正確に把握できるようになります。

*   **`type Func struct, NoSplit bool`**:
    *   `debug/goobj.Func`構造体に`NoSplit`というブール型フィールドが追加されました。このフィールドは、その関数が`//go:nosplit`ディレクティブでマークされているかどうかを示します。
    *   `//go:nosplit`ディレクティブは、Goランタイムが関数のスタックオーバーフローチェックを省略し、スタックを動的に拡張しないように指示するものです。この情報がオブジェクトファイルに記録されることで、デバッグツールが関数のスタック管理特性を理解し、潜在的なスタックオーバーフローの問題を特定するのに役立ちます。

### `debug/pe`パッケージの拡張

`debug/pe`パッケージには、WindowsのPEファイル形式をより詳細に解析するための多数の構造体とフィールドが追加されました。これは、GoがWindowsプラットフォームでのデバッグや解析ツール開発において、より強力な機能を提供することを示しています。

*   **`type DataDirectory struct`**:
    *   PEファイルのデータディレクトリを表す構造体です。`VirtualAddress`(仮想アドレス)と`Size`(サイズ)の2つのフィールドを持ちます。
    *   PEファイルには、インポートテーブル、エクスポートテーブル、リソーステーブルなど、様々な種類のデータディレクトリが存在し、それぞれがこの`DataDirectory`構造体で表現されます。

*   **`type File struct, OptionalHeader interface{}`**:
    *   `debug/pe.File`構造体に`OptionalHeader`というフィールドが追加されました。これは`interface{}`型であり、PEファイルのOptional Headerを表します。
    *   PEファイルは32ビットと64ビットでOptional Headerの構造が異なるため、`interface{}`型として定義され、実行時に適切な型(`OptionalHeader32`または`OptionalHeader64`)に型アサーションして使用されます。

*   **`type OptionalHeader32 struct` および `type OptionalHeader64 struct`**:
    *   これらは、それぞれ32ビットPEファイルと64ビットPEファイルのOptional Headerを表す構造体です。PEファイルのロードと実行に必要な重要な情報が多数含まれています。
    *   追加されたフィールドには、以下のようなものがあります(一部抜粋):
        *   `AddressOfEntryPoint`: プログラムのエントリポイントの仮想アドレス。
        *   `BaseOfCode`, `BaseOfData`: コードセクションとデータセクションのベースアドレス。
        *   `CheckSum`: ファイルのチェックサム。
        *   `DataDirectory [16]DataDirectory`: 16個のデータディレクトリのエントリを保持する配列。
        *   `DllCharacteristics`: DLLの特性を示すフラグ。
        *   `FileAlignment`, `SectionAlignment`: ファイルとメモリにおけるセクションのアライメント。
        *   `ImageBase`: プログラムがメモリにロードされる推奨ベースアドレス。
        *   `Magic`: Optional Headerのタイプを示すマジックナンバー(32ビットか64ビットか)。
        *   `MajorImageVersion`, `MinorImageVersion`: イメージのメジャー/マイナーバージョン。
        *   `SizeOfCode`, `SizeOfHeaders`, `SizeOfImage`: コード、ヘッダ、イメージ全体のサイズ。
        *   `SizeOfHeapCommit`, `SizeOfHeapReserve`, `SizeOfStackCommit`, `SizeOfStackReserve`: ヒープとスタックのコミット/リザーブサイズ。
    *   これらのフィールドの追加により、`debug/pe`パッケージは、PEファイルの内部構造をより詳細に解析し、Windows実行可能ファイルの挙動を深く理解するための情報を提供できるようになります。これは、マルウェア解析、システムユーティリティ、あるいはカスタムローダーの開発などにおいて非常に有用です。

### `syscall`パッケージの拡張 (OpenBSD/386)

*   **`const TIOCGSID = 1074033763`**:
    *   OpenBSD/386アーキテクチャ向けの`syscall`パッケージに`TIOCGSID`定数が追加されました。
    *   `TIOCGSID`は、`ioctl`システムコールで使用される定数で、端末のセッションIDを取得するために使用されます。
    *   `TIOCGSID ideal-int`は、この定数が整数リテラルとしても扱えることを示唆しています。
    *   この追加により、GoプログラムがOpenBSD/386環境で端末のセッション管理に関連する低レベルな操作を実行できるようになります。これは、シェルや端末エミュレータのようなアプリケーションの開発において重要です。

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

```diff
diff --git a/api/next.txt b/api/next.txt
index ec8d7b058e..84dc1f1628 100644
--- a/api/next.txt
+++ b/api/next.txt
@@ -1,4 +1,7 @@
+pkg archive/tar, const TypeGNUSparse = 83
+pkg archive/tar, const TypeGNUSparse ideal-char
 pkg archive/tar, type Header struct, Xattrs map[string]string
+pkg compress/gzip, method (*Reader) Reset(io.Reader) error
 pkg crypto/tls, const CurveP256 = 23
 pkg crypto/tls, const CurveP256 CurveID
 pkg crypto/tls, const CurveP384 = 24
@@ -126,6 +129,8 @@ pkg debug/goobj, type Func struct, Args int
 pkg debug/goobj, type Func struct, File []string
 pkg debug/goobj, type Func struct, Frame int
 pkg debug/goobj, type Func struct, FuncData []FuncData
+pkg debug/goobj, type Func struct, Leaf bool
+pkg debug/goobj, type Func struct, NoSplit bool
 pkg debug/goobj, type Func struct, PCData []Data
 pkg debug/goobj, type Func struct, PCFile Data
 pkg debug/goobj, type Func struct, PCLine Data
@@ -197,6 +202,73 @@ pkg debug/macho, type FatFile struct
 pkg debug/macho, type FatFile struct, Arches []FatArch
 pkg debug/macho, type FatFile struct, Magic uint32
 pkg debug/macho, var ErrNotFat *FormatError
+pkg debug/pe, type DataDirectory struct
+pkg debug/pe, type DataDirectory struct, Size uint32
+pkg debug/pe, type DataDirectory struct, VirtualAddress uint32
+pkg debug/pe, type File struct, OptionalHeader interface{}
+pkg debug/pe, type OptionalHeader32 struct
+pkg debug/pe, type OptionalHeader32 struct, AddressOfEntryPoint uint32
+pkg debug/pe, type OptionalHeader32 struct, BaseOfCode uint32
+pkg debug/pe, type OptionalHeader32 struct, BaseOfData uint32
+pkg debug/pe, type OptionalHeader32 struct, CheckSum uint32
+pkg debug/pe, type OptionalHeader32 struct, DataDirectory [16]DataDirectory
+pkg debug/pe, type OptionalHeader32 struct, DllCharacteristics uint16
+pkg debug/pe, type OptionalHeader32 struct, FileAlignment uint32
+pkg debug/pe, type OptionalHeader32 struct, ImageBase uint32
+pkg debug/pe, type OptionalHeader32 struct, LoaderFlags uint32
+pkg debug/pe, type OptionalHeader32 struct, Magic uint16
+pkg debug/pe, type OptionalHeader32 struct, MajorImageVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, MajorLinkerVersion uint8
+pkg debug/pe, type OptionalHeader32 struct, MajorOperatingSystemVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, MajorSubsystemVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, MinorImageVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, MinorLinkerVersion uint8
+pkg debug/pe, type OptionalHeader32 struct, MinorOperatingSystemVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, MinorSubsystemVersion uint16
+pkg debug/pe, type OptionalHeader32 struct, NumberOfRvaAndSizes uint32
+pkg debug/pe, type OptionalHeader32 struct, SectionAlignment uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfCode uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfHeaders uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfHeapCommit uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfHeapReserve uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfImage uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfInitializedData uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfStackCommit uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfStackReserve uint32
+pkg debug/pe, type OptionalHeader32 struct, SizeOfUninitializedData uint32
+pkg debug/pe, type OptionalHeader32 struct, Subsystem uint16
+pkg debug/pe, type OptionalHeader32 struct, Win32VersionValue uint32
+pkg debug/pe, type OptionalHeader64 struct
+pkg debug/pe, type OptionalHeader64 struct, AddressOfEntryPoint uint32
+pkg debug/pe, type OptionalHeader64 struct, BaseOfCode uint32
+pkg debug/pe, type OptionalHeader64 struct, CheckSum uint32
+pkg debug/pe, type OptionalHeader64 struct, DataDirectory [16]DataDirectory
+pkg debug/pe, type OptionalHeader64 struct, DllCharacteristics uint16
+pkg debug/pe, type OptionalHeader64 struct, FileAlignment uint32
+pkg debug/pe, type OptionalHeader64 struct, ImageBase uint64
+pkg debug/pe, type OptionalHeader64 struct, LoaderFlags uint32
+pkg debug/pe, type OptionalHeader64 struct, Magic uint16
+pkg debug/pe, type OptionalHeader64 struct, MajorImageVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, MajorLinkerVersion uint8
+pkg debug/pe, type OptionalHeader64 struct, MajorOperatingSystemVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, MajorSubsystemVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, MinorImageVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, MinorLinkerVersion uint8
+pkg debug/pe, type OptionalHeader64 struct, MinorOperatingSystemVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, MinorSubsystemVersion uint16
+pkg debug/pe, type OptionalHeader64 struct, NumberOfRvaAndSizes uint32
+pkg debug/pe, type OptionalHeader64 struct, SectionAlignment uint32
+pkg debug/pe, type OptionalHeader64 struct, SizeOfCode uint32
+pkg debug/pe, type OptionalHeader64 struct, SizeOfHeaders uint32
+pkg debug/pe, type OptionalHeader64 struct, SizeOfHeapCommit uint64
+pkg debug/pe, type OptionalHeader64 struct, SizeOfHeapReserve uint64
+pkg debug/pe, type OptionalHeader64 struct, SizeOfImage uint32
+pkg debug/pe, type OptionalHeader64 struct, SizeOfInitializedData uint32
+pkg debug/pe, type OptionalHeader64 struct, SizeOfStackCommit uint64
+pkg debug/pe, type OptionalHeader64 struct, SizeOfStackReserve uint64
+pkg debug/pe, type OptionalHeader64 struct, SizeOfUninitializedData uint32
+pkg debug/pe, type OptionalHeader64 struct, Subsystem uint16
+pkg debug/pe, type OptionalHeader64 struct, Win32VersionValue uint32
 pkg debug/plan9obj, func NewFile(io.ReaderAt) (*File, error)\n pkg debug/plan9obj, func Open(string) (*File, error)\n pkg debug/plan9obj, method (*File) Close() error\n@@ -1563,6 +1635,8 @@ pkg syscall (openbsd-386), const SizeofRtMetrics = 56\n pkg syscall (openbsd-386), const SizeofRtMsghdr = 96\n pkg syscall (openbsd-386), const TCP_NOPUSH = 16\n pkg syscall (openbsd-386), const TCP_NOPUSH ideal-int\n+pkg syscall (openbsd-386), const TIOCGSID = 1074033763\n+pkg syscall (openbsd-386), const TIOCGSID ideal-int\n pkg syscall (openbsd-386), const TIOCGTSTAMP = 1074558043\n pkg syscall (openbsd-386), func FcntlFlock(uintptr, int, *Flock_t) error\n pkg syscall (openbsd-386), func SendmsgN(int, []uint8, []uint8, Sockaddr, int) (int, error)\n@@ -1726,6 +1800,8 @@ pkg syscall (openbsd-386-cgo), const SizeofRtMetrics = 56\n pkg syscall (openbsd-386-cgo), const SizeofRtMsghdr = 96\n pkg syscall (openbsd-386-cgo), const TCP_NOPUSH = 16\n pkg syscall (openbsd-386-cgo), const TCP_NOPUSH ideal-int\n+pkg syscall (openbsd-386-cgo), const TIOCGSID = 1074033763\n+pkg syscall (openbsd-386-cgo), const TIOCGSID ideal-int\n pkg syscall (openbsd-386-cgo), const TIOCGTSTAMP = 1074558043\n pkg syscall (openbsd-386-cgo), func FcntlFlock(uintptr, int, *Flock_t) error\n pkg syscall (openbsd-386-cgo), func SendmsgN(int, []uint8, []uint8, Sockaddr, int) (int, error)\n```

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

`api/next.txt`ファイルは、Goの標準ライブラリに追加されるAPI要素を、`pkg <パッケージ名>, <要素の種類> <要素名> ...`という形式で記述しています。

*   **`pkg archive/tar, const TypeGNUSparse = 83`**:
    *   `archive/tar`パッケージに、定数`TypeGNUSparse`が値`83`で追加されることを示します。これはGNU tar形式のスパースファイルタイプです。
*   **`pkg archive/tar, const TypeGNUSparse ideal-char`**:
    *   `TypeGNUSparse`が`ideal-char`(理想的な文字)として扱えることを示します。
*   **`pkg archive/tar, type Header struct, Xattrs map[string]string`**:
    *   `archive/tar`パッケージの`Header`構造体に、`Xattrs`という`map[string]string`型のフィールドが追加されることを示します。これは拡張属性を格納します。
*   **`pkg compress/gzip, method (*Reader) Reset(io.Reader) error`**:
    *   `compress/gzip`パッケージの`Reader`型に、`Reset(io.Reader) error`というメソッドが追加されることを示します。これは`gzip.Reader`を再利用するためのものです。
*   **`pkg debug/goobj, type Func struct, Leaf bool`**:
    *   `debug/goobj`パッケージの`Func`構造体に、`Leaf`という`bool`型のフィールドが追加されることを示します。これは関数がリーフ関数であるかを示します。
*   **`pkg debug/goobj, type Func struct, NoSplit bool`**:
    *   `debug/goobj`パッケージの`Func`構造体に、`NoSplit`という`bool`型のフィールドが追加されることを示します。これは関数が`//go:nosplit`ディレクティブでマークされているかを示します。
*   **`pkg debug/pe, type DataDirectory struct`**:
    *   `debug/pe`パッケージに、`DataDirectory`という新しい型が追加されることを示します。これはPEファイルのデータディレクトリを表します。
*   **`pkg debug/pe, type DataDirectory struct, Size uint32`**:
    *   `DataDirectory`構造体に`Size`という`uint32`型のフィールドが追加されることを示します。
*   **`pkg debug/pe, type DataDirectory struct, VirtualAddress uint32`**:
    *   `DataDirectory`構造体に`VirtualAddress`という`uint32`型のフィールドが追加されることを示します。
*   **`pkg debug/pe, type File struct, OptionalHeader interface{}`**:
    *   `debug/pe`パッケージの`File`構造体に、`OptionalHeader`という`interface{}`型のフィールドが追加されることを示します。これはPEファイルのOptional Headerを表します。
*   **`pkg debug/pe, type OptionalHeader32 struct`**:
    *   `debug/pe`パッケージに、`OptionalHeader32`という新しい型が追加されることを示します。これは32ビットPEファイルのOptional Headerを表します。
*   **`pkg debug/pe, type OptionalHeader32 struct, ...`**:
    *   `OptionalHeader32`構造体に多数のフィールドが追加されることを示します。これらはPEファイルの様々なメタデータを含みます。
*   **`pkg debug/pe, type OptionalHeader64 struct`**:
    *   `debug/pe`パッケージに、`OptionalHeader64`という新しい型が追加されることを示します。これは64ビットPEファイルのOptional Headerを表します。
*   **`pkg debug/pe, type OptionalHeader64 struct, ...`**:
    *   `OptionalHeader64`構造体に多数のフィールドが追加されることを示します。これらは64ビットPEファイルの様々なメタデータを含みます。
*   **`pkg syscall (openbsd-386), const TIOCGSID = 1074033763`**:
    *   `syscall`パッケージのOpenBSD/386アーキテクチャ向けに、定数`TIOCGSID`が値`1074033763`で追加されることを示します。これは端末のセッションIDを取得するための定数です。
*   **`pkg syscall (openbsd-386), const TIOCGSID ideal-int`**:
    *   `TIOCGSID`が`ideal-int`(理想的な整数)として扱えることを示します。
*   **`pkg syscall (openbsd-386-cgo), const TIOCGSID = 1074033763`**:
    *   `syscall`パッケージのOpenBSD/386アーキテクチャ(CGO有効)向けに、定数`TIOCGSID`が値`1074033763`で追加されることを示します。
*   **`pkg syscall (openbsd-386-cgo), const TIOCGSID ideal-int`**:
    *   `TIOCGSID`が`ideal-int`(理想的な整数)として扱えることを示します。

これらの変更は、Goの標準ライブラリが継続的に進化し、より多くの機能とプラットフォームサポートを提供していることを示しています。

## 関連リンク

*   Go言語公式ドキュメント: [https://go.dev/doc/](https://go.dev/doc/)
*   Go 1 Compatibility Promise: [https://go.dev/doc/go1compat](https://go.dev/doc/go1compat)
*   `archive/tar`パッケージ: [https://pkg.go.dev/archive/tar](https://pkg.go.dev/archive/tar)
*   `compress/gzip`パッケージ: [https://pkg.go.dev/compress/gzip](https://pkg.go.dev/compress/gzip)
*   `debug/goobj`パッケージ: [https://pkg.go.dev/debug/goobj](https://pkg.go.dev/debug/goobj)
*   `debug/pe`パッケージ: [https://pkg.go.dev/debug/pe](https://pkg.go.dev/debug/pe)
*   `syscall`パッケージ: [https://pkg.go.dev/syscall](https://pkg.go.dev/syscall)

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

*   Go `archive/tar` `TypeGNUSparse` `Header` `Xattrs`に関する情報:
    *   [https://go.dev/src/archive/tar/tar.go](https://go.dev/src/archive/tar/tar.go)
    *   [https://go101.org/article/go-package-archive-tar.html](https://go101.org/article/go-package-archive-tar.html)
*   Go `compress/gzip` `Reader` `Reset`メソッドに関する情報:
    *   [https://go.dev/src/compress/gzip/gzip.go](https://go.dev/src/compress/gzip/gzip.go)
    *   [https://go.dev/play/p/example_gzip_Reset](https://go.dev/play/p/example_gzip_Reset)
*   Go `debug/goobj` `Func` `Leaf` `NoSplit`に関する情報:
    *   [https://go.dev/src/cmd/compile/internal/gc/go.go](https://go.dev/src/cmd/compile/internal/gc/go.go) (Goコンパイラのソースコード)
    *   [https://go.dev/src/cmd/internal/obj/func.go](https://go.dev/src/cmd/internal/obj/func.go) (Goオブジェクトファイルの関数情報)
*   Go `debug/pe` `DataDirectory` `OptionalHeader32` `OptionalHeader64`に関する情報:
    *   [https://go.dev/src/debug/pe/pe.go](https://go.dev/src/debug/pe/pe.go)
    *   [https://learn.microsoft.com/ja-jp/windows/win32/debug/pe-format](https://learn.microsoft.com/ja-jp/windows/win32/debug/pe-format) (PEファイル形式の公式ドキュメント)
*   Go `syscall` `TIOCGSID`に関する情報:
    *   [https://go.dev/src/syscall/syscall_openbsd_386.go](https://go.dev/src/syscall/syscall_openbsd_386.go)
    *   [https://man.openbsd.org/ioctl.2](https://man.openbsd.org/ioctl.2) (OpenBSDのioctlマニュアルページ)