aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link
diff options
context:
space:
mode:
authorThan McIntosh <thanm@google.com>2020-03-24 09:23:09 -0400
committerThan McIntosh <thanm@google.com>2020-03-28 23:59:16 +0000
commit912e64ba46eb3d130d2fb3ccaa7e7f4ac4d38991 (patch)
treee3e6054a4ef02daf7aec77af72d0db4f83a424cd /src/cmd/link
parenta9fb2e5155041615df59b5e3db9b546e723d0ff1 (diff)
downloadgo-912e64ba46eb3d130d2fb3ccaa7e7f4ac4d38991.tar.xz
[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 <thanm@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/cmd/link')
-rw-r--r--src/cmd/link/internal/loader/loader.go24
1 files changed, 20 insertions, 4 deletions
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)