diff options
| author | Cherry Zhang <cherryyz@google.com> | 2020-05-21 14:08:32 -0400 |
|---|---|---|
| committer | Cherry Zhang <cherryyz@google.com> | 2020-05-21 14:08:32 -0400 |
| commit | 6097f7cf7a9a9bf877f6f49112ffcc2d0f0e7e75 (patch) | |
| tree | c42265e0cfb4ac2bbcf4a9ed9432748997d2362a /src/cmd/link/internal/loader/loader.go | |
| parent | 8e4ab9cb4c28649be36f82a02d04eb1cb31d02c9 (diff) | |
| parent | c847589ad06a1acfcceaac7b230c0d5a826caab8 (diff) | |
| download | go-6097f7cf7a9a9bf877f6f49112ffcc2d0f0e7e75.tar.xz | |
[dev.link] all: merge branch 'master' into dev.link
Change-Id: I85b653b621ad8cb2ef27886210ea2c4b7409b60d
Diffstat (limited to 'src/cmd/link/internal/loader/loader.go')
| -rw-r--r-- | src/cmd/link/internal/loader/loader.go | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go index b9e063288a..e340506978 100644 --- a/src/cmd/link/internal/loader/loader.go +++ b/src/cmd/link/internal/loader/loader.go @@ -229,7 +229,8 @@ type Loader struct { outdata [][]byte // symbol's data in the output buffer extRelocs [][]ExtReloc // symbol's external relocations - itablink map[Sym]struct{} // itablink[j] defined if j is go.itablink.* + itablink map[Sym]struct{} // itablink[j] defined if j is go.itablink.* + deferReturnTramp map[Sym]bool // whether the symbol is a trampoline of a deferreturn call objByPkg map[string]*oReader // map package path to its Go object reader @@ -354,6 +355,7 @@ func NewLoader(flags uint32, elfsetstring elfsetstringFunc, reporter *ErrorRepor attrCgoExportDynamic: make(map[Sym]struct{}), attrCgoExportStatic: make(map[Sym]struct{}), itablink: make(map[Sym]struct{}), + deferReturnTramp: make(map[Sym]bool), extStaticSyms: make(map[nameVer]Sym), builtinSyms: make([]Sym, nbuiltin), flags: flags, @@ -1050,6 +1052,16 @@ func (l *Loader) IsItabLink(i Sym) bool { return false } +// Return whether this is a trampoline of a deferreturn call. +func (l *Loader) IsDeferReturnTramp(i Sym) bool { + return l.deferReturnTramp[i] +} + +// Set that i is a trampoline of a deferreturn call. +func (l *Loader) SetIsDeferReturnTramp(i Sym, v bool) { + l.deferReturnTramp[i] = v +} + // growValues grows the slice used to store symbol values. func (l *Loader) growValues(reqLen int) { curLen := len(l.values) |
