[インデックス 18000] ファイルの概要
このコミットは、Goランタイムのテストコードにおけるgo tool nm
コマンドの引数修正に関するものです。具体的には、nm
コマンドのオプションが-S
から-size
に変更されたことによるテストの修正を行っています。これは、以前の変更(nm CL
)で導入されるべきだった修正が漏れていたため、その修正を適用するものです。
コミット
commit a392cf4fd36728efe852d422d702cb23f5ba6d73
Author: Russ Cox <rsc@golang.org>
Date: Mon Dec 16 12:59:30 2013 -0500
runtime: fix test
Was supposed to be in the nm CL.
TBR=r
CC=golang-dev
https://golang.org/cl/42870043
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/a392cf4fd36728efe852d422d702cb23f5ba6d73
元コミット内容
このコミットの元々の意図は、「runtime: fix test
」(ランタイム:テストを修正)という簡潔なものです。コミットメッセージの本文には、「Was supposed to be in the nm CL.
」(nm CL
に含まれるべきだった)とあり、これは以前の変更セット(Change List、GoコミュニティではCLと呼ばれる)で導入されるべきだった修正が、何らかの理由で漏れてしまったことを示唆しています。nm CL
とは、go tool nm
コマンドに関連する変更を指していると考えられます。
変更の背景
この変更の背景には、go tool nm
コマンドのオプション変更があります。コミットメッセージにある「Was supposed to be in the nm CL.
」という記述から、go tool nm
コマンドの機能拡張または変更が行われ、その際に使用するオプション名が変更されたことが推測されます。
具体的には、以前はシンボルのサイズを表示するために-S
オプションが使用されていたものが、新しいnm CL
の変更によって-size
オプションに置き換えられたと考えられます。この変更に伴い、src/pkg/runtime/runtime_test.go
内のテストコードが古いオプション-S
を使用していたため、新しい-size
オプションに更新する必要が生じました。この更新がnm CL
に含められなかったため、このコミットで別途修正が行われたという経緯です。
前提知識の解説
go tool nm
コマンド
go tool nm
は、Go言語のツールチェインに含まれるユーティリティの一つで、Goのオブジェクトファイル、アーカイブ、または実行可能ファイルに含まれるシンボル(関数、グローバル変数など)をリスト表示するために使用されます。これはUnix系のnm
コマンドに似ていますが、Goバイナリに特化しています。
go tool nm
の出力は通常、シンボルのアドレス、タイプ(T: テキスト、D: データなど)、および名前の3つのフィールドで構成されます。
go tool nm
のオプション
-S
オプション (旧): このコミット以前に存在したオプションで、シンボルのサイズをアドレスとタイプの間に出力するために使用されていました。-size
オプション (新):-S
オプションに代わって導入された新しいオプションで、同様にシンボルのサイズをアドレスとタイプの間に出力します。この変更は、オプション名がより直感的で分かりやすくなるように行われた可能性があります。
Goのテストフレームワーク
Go言語には標準でtesting
パッケージが提供されており、これを用いてユニットテストやベンチマークテストを記述します。テストファイルは通常、テスト対象のGoファイルと同じディレクトリに_test.go
というサフィックスを付けて配置されます。テスト関数はTest
で始まり、*testing.T
型の引数を取ります。
このコミットで修正されているsrc/pkg/runtime/runtime_test.go
は、Goランタイムのテストコードであり、exec.Command
を使用して外部コマンド(この場合はgo tool nm
)を実行し、その出力を検証することでランタイムの特定の動作をテストしています。
技術的詳細
このコミットの技術的な核心は、go tool nm
コマンドのオプション変更への対応です。
src/pkg/runtime/runtime_test.go
内のTestRuntimeGogoBytes
関数は、Goプログラムをビルドし、そのバイナリに対してgo tool nm
を実行して、特定のシンボル情報(この場合はサイズ)を検証するテストです。
元のコードでは、exec.Command("go", "tool", "nm", "-S", dir+"/hello").CombinedOutput()
という形で-S
オプションを使用していました。しかし、nm CL
によってgo tool nm
のシンボルサイズ表示オプションが-S
から-size
に変更されたため、このテストコードもそれに合わせて更新する必要がありました。
この変更は、単にオプション名を置き換えるだけの単純な修正ですが、テストの正確性を保つ上で非常に重要です。もしこの修正が行われなければ、go tool nm
コマンドが新しいバージョンで実行された際に、古い-S
オプションが認識されず、テストが失敗する可能性がありました。これは、Goツールチェインの内部的な変更が、それをテストするコードにも影響を与える典型的な例です。
コアとなるコードの変更箇所
--- a/src/pkg/runtime/runtime_test.go
+++ b/src/pkg/runtime/runtime_test.go
@@ -104,7 +104,7 @@ func TestRuntimeGogoBytes(t *testing.T) {
t.Fatalf("building hello world: %v\n%s", err, out)
}
- out, err = exec.Command("go", "tool", "nm", "-S", dir+"/hello").CombinedOutput()
+ out, err = exec.Command("go", "tool", "nm", "-size", dir+"/hello").CombinedOutput()
if err != nil {
t.Fatalf("go tool nm: %v\n%s", err, out)
}
コアとなるコードの解説
変更された行はsrc/pkg/runtime/runtime_test.go
ファイルの106行目です。
-
変更前:
out, err = exec.Command("go", "tool", "nm", "-S", dir+"/hello").CombinedOutput()
この行では、
go tool nm
コマンドを-S
オプション付きで実行し、dir+"/hello"
で指定されたバイナリのシンボル情報を取得していました。-S
オプションはシンボルのサイズを表示するためのものでした。 -
変更後:
out, err = exec.Command("go", "tool", "nm", "-size", dir+"/hello").CombinedOutput()
この行では、
-S
オプションが新しい-size
オプションに置き換えられています。これにより、go tool nm
コマンドが正しくシンボルサイズ情報を出力し、テストが期待通りに動作するようになります。
この修正は、go tool nm
コマンドのインターフェース変更にテストコードを適応させるためのものであり、Goツールチェインの進化に伴うメンテナンス作業の一環です。
関連リンク
- 関連するChange List (CL):
https://golang.org/cl/42870043
このリンクは、このコミットが本来含まれるべきだったnm CL
を指していると考えられます。このCLを調査することで、go tool nm
コマンドの具体的な変更内容や、なぜ-S
が-size
に変わったのかといった詳細な背景を理解することができます。
参考にした情報源リンク
go tool nm
に関する情報:- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEMrxWvYNmD-l0I1tgXw0qFwp36_QjlcxpajIXDmk949hK0y8mWDnDsWnJEVbjXgkYZ23hCcWWkv-LTURP57n04a1h1pGhBRWO0ujqmzfY0klUXTw4lxD1z1fvCVPWHPudRoGNXGw==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQF3PWVimi-uT8kdOVWPXT4eI0sb5OIlHOwLkAO8DFfXcobzlgak_lujOIby-hxLGJK0bPPBZfreLY1I47ZXnoDZJjslT65IyTwaYvF6QskhiFG5p9I=
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQH1VKihsAumBUWJl0g2OCqrkP3Ym-YBUd4ayp7ulItkd4cJtFWQXWthndJ5yZ7M3vqFe9lHGSAuTIiBoV-KGqCIcdPF67ZqrL4QLSHVQZZlGZ3G9N1JTOll4Q8KhAnCGMBVPw==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEr8Q2ZjTLZEZ_798unG6tIAFsIdkwJKSqSbr9wWwtyHQ3JcB_puEhRNVSB0H_3MO9VJyasgFFPNwGS9SRS0DQYWDyTShCe_fDVJmHq9OCTiNnI1tiuHg9ux8JNirzJ1-k8hKsjKInYxHGAjIoXFmc=
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFHTfqBCHvhiesvPug2MmkCKMLJchLANcHZYc5qCrpCA2q__N463ceg4mrY0_dbIvE1TmEwgSiT1dDDopAwCVHpxoHkm23hkZOn0huIc0Lk3kwKipxncok40Vtk4MSh1_dKC0PJX98nBEA1aTo5
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEOi88Wnw78qwOJBTfO3UL5QCsqHeTHmJinr-rVROrAAfCnmr1aJoUCIeBxbAXp3ADizYFSd39sURV1dJgFnfU9WSnQ5XEyuYB6znoZZnUm0FjAFmyzE7WBwOtm0aK2enikuAADzn_-q-clikQkJjpnG9Fvgw==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGN3aEGf7vq6gVQ39AnzFJZRAeHzm41AkClF8HWjk_ejiM0bEuY-s1nbkXzhD1i4dfuij40RDss1M5PnAepvtxYSBQSpgpuD5cG5nJwabe0SU16ZpBqn2Byto8DSY3-V-KJgY7XXgb-TrozBnlWAAxfANSGMw==