github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/debug/gosym/symtab.go (about)

     1  // Copyright 2009 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // gosymパッケージは、gcコンパイラによって生成されたGoバイナリに埋め込まれた
     6  // Goのシンボルと行番号のテーブルへのアクセスを実装します。
     7  package gosym
     8  
     9  // Symは、単一のシンボルテーブルエントリを表します。
    10  type Sym struct {
    11  	Value  uint64
    12  	Type   byte
    13  	Name   string
    14  	GoType uint64
    15  	// このシンボルが関数シンボルである場合、対応するFunc
    16  	Func *Func
    17  
    18  	goVersion version
    19  }
    20  
    21  // Staticは、このシンボルが静的(ファイルの外部からは見えない)であるかどうかを報告します。
    22  func (s *Sym) Static() bool
    23  
    24  // PackageNameは、シンボル名のパッケージ部分を返します。
    25  // パッケージ部分がない場合は空の文字列を返します。
    26  func (s *Sym) PackageName() string
    27  
    28  // ReceiverNameは、このシンボルのレシーバタイプ名を返します。
    29  // レシーバ名がない場合は空の文字列を返します。レシーバ名は、
    30  // s.Nameがパッケージ名で完全に指定されている場合にのみ検出されます。
    31  func (s *Sym) ReceiverName() string
    32  
    33  // BaseNameは、パッケージ名やレシーバ名を除いたシンボル名を返します。
    34  func (s *Sym) BaseName() string
    35  
    36  // Funcは、単一の関数に関する情報を収集します。
    37  type Func struct {
    38  	Entry uint64
    39  	*Sym
    40  	End       uint64
    41  	Params    []*Sym
    42  	Locals    []*Sym
    43  	FrameSize int
    44  	LineTable *LineTable
    45  	Obj       *Obj
    46  }
    47  
    48  // Objは、シンボルテーブル内の一連の関数を表します。
    49  //
    50  // バイナリを別々のObjに分割する具体的な方法は、シンボルテーブル形式の内部詳細です。
    51  //
    52  // Goの初期のバージョンでは、各ソースファイルが異なるObjになりました。
    53  //
    54  // Go 1とGo 1.1では、各パッケージはすべてのGoソースに対して1つのObjを生成し、
    55  // Cソースファイルごとに1つのObjを生成しました。
    56  //
    57  // Go 1.2では、プログラム全体に対して単一のObjが存在します。
    58  type Obj struct {
    59  	// Funcsは、Obj内の関数のリストです。
    60  	Funcs []Func
    61  
    62  	// Go 1.1以前では、PathsはObjを生成したソースファイル名に対応するシンボルのリストです。
    63  	// Go 1.2では、Pathsはnilです。
    64  	// ソースファイルのリストを取得するには、Table.Filesのキーを使用します。
    65  	Paths []Sym
    66  }
    67  
    68  // TableはGoのシンボルテーブルを表します。プログラムからデコードされたすべての
    69  // シンボルを保存し、シンボル、名前、アドレス間の変換を行うメソッドを提供します。
    70  type Table struct {
    71  	Syms  []Sym
    72  	Funcs []Func
    73  	Files map[string]*Obj
    74  	Objs  []Obj
    75  
    76  	go12line *LineTable
    77  }
    78  
    79  // NewTableはGoのシンボルテーブル(ELFの".gosymtab"セクション)をデコードし、
    80  // メモリ内表現を返します。
    81  // Go 1.3以降、Goのシンボルテーブルにはシンボルデータが含まれなくなりました。
    82  func NewTable(symtab []byte, pcln *LineTable) (*Table, error)
    83  
    84  // PCToFuncは、プログラムカウンタpcを含む関数を返します。
    85  // そのような関数がない場合はnilを返します。
    86  func (t *Table) PCToFunc(pc uint64) *Func
    87  
    88  // PCToLineは、プログラムカウンタに対する行番号情報を検索します。
    89  // 情報がない場合は、fn == nilを返します。
    90  func (t *Table) PCToLine(pc uint64) (file string, line int, fn *Func)
    91  
    92  // LineToPCは、指定されたファイルの指定された行で最初のプログラムカウンタを検索します。
    93  // この行を検索中にエラーが発生した場合、[UnknownPathError] または [UnknownLineError] を返します。
    94  func (t *Table) LineToPC(file string, line int) (pc uint64, fn *Func, err error)
    95  
    96  // LookupSymは、指定された名前を持つテキスト、データ、またはbssシンボルを返します。
    97  // そのようなシンボルが見つからない場合はnilを返します。
    98  func (t *Table) LookupSym(name string) *Sym
    99  
   100  // LookupFuncは、指定された名前を持つテキスト、データ、またはbssシンボルを返します。
   101  // そのようなシンボルが見つからない場合はnilを返します。
   102  func (t *Table) LookupFunc(name string) *Func
   103  
   104  // SymByAddrは、指定されたアドレスで開始するテキスト、データ、またはbssシンボルを返します。
   105  func (t *Table) SymByAddr(addr uint64) *Sym
   106  
   107  // UnknownFileErrorは、シンボルテーブル内で特定のファイルを見つけることができなかったことを表すエラーです。
   108  type UnknownFileError string
   109  
   110  func (e UnknownFileError) Error() string
   111  
   112  // UnknownLineErrorは、行をプログラムカウンタにマッピングできなかったことを表すエラーです。
   113  // これは、行がファイルの範囲を超えているか、指定された行にコードがないためです。
   114  type UnknownLineError struct {
   115  	File string
   116  	Line int
   117  }
   118  
   119  func (e *UnknownLineError) Error() string
   120  
   121  // DecodingError represents an error during the decoding of
   122  // the symbol table.
   123  type DecodingError struct {
   124  	off int
   125  	msg string
   126  	val any
   127  }
   128  
   129  func (e *DecodingError) Error() string