From: Than McIntosh Date: Tue, 24 Mar 2020 13:23:09 +0000 (-0400) Subject: [dev.link] cmd/link/internal/loader: add Loader plt/got access methods X-Git-Tag: go1.15beta1~679^2~25 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=912e64ba46eb3d130d2fb3ccaa7e7f4ac4d38991;p=gostls13.git [dev.link] cmd/link/internal/loader: add Loader plt/got access methods Add accessor methods to get at the symbol {plt,got} value for PE symbols. Fix a bug in the loaders SetPlt/SetGot methods. Change-Id: I975bd6b86122622b206487c8798f8290ecd25a57 Reviewed-on: https://go-review.googlesource.com/c/go/+/225199 Run-TryBot: Than McIntosh TryBot-Result: Gobot Gobot Reviewed-by: Cherry Zhang --- diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go index e342fbe680..3b77a4bff3 100644 --- a/src/cmd/link/internal/loader/loader.go +++ b/src/cmd/link/internal/loader/loader.go @@ -1133,24 +1133,40 @@ func (l *Loader) SetSymElfType(i Sym, et elf.SymType) { } } +// SymPlt returns the plt value for pe symbols. +func (l *Loader) SymPlt(s Sym) int32 { + if v, ok := l.plt[s]; ok { + return v + } + return -1 +} + // SetPlt sets the plt value for pe symbols. func (l *Loader) SetPlt(i Sym, v int32) { if i >= Sym(len(l.objSyms)) || i == 0 { panic("bad symbol for SetPlt") } - if v == 0 { + if v == -1 { delete(l.plt, i) } else { l.plt[i] = v } } +// SymGot returns the got value for pe symbols. +func (l *Loader) SymGot(s Sym) int32 { + if v, ok := l.got[s]; ok { + return v + } + return -1 +} + // SetGot sets the got value for pe symbols. func (l *Loader) SetGot(i Sym, v int32) { if i >= Sym(len(l.objSyms)) || i == 0 { panic("bad symbol for SetGot") } - if v == 0 { + if v == -1 { delete(l.got, i) } else { l.got[i] = v @@ -1257,11 +1273,11 @@ func (l *Loader) SymLocalentry(i Sym) uint8 { return l.localentry[i] } -// SetSymExtname sets the "extname" attribute for a symbol. +// SetSymLocalentry sets the "local entry" attribute for a symbol. func (l *Loader) SetSymLocalentry(i Sym, value uint8) { // reject bad symbols if i >= Sym(len(l.objSyms)) || i == 0 { - panic("bad symbol index in SetExtname") + panic("bad symbol index in SetSymLocalentry") } if value == 0 { delete(l.localentry, i)