From: Than McIntosh Date: Wed, 8 Apr 2020 11:35:58 +0000 (-0400) Subject: [dev.link] cmd/link/internal/loader: add another symbolbuilder method X-Git-Tag: go1.15beta1~556^2^2~19 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=2599c175cbf595fcb165e8957b94afc0102a6b36;p=gostls13.git [dev.link] cmd/link/internal/loader: add another symbolbuilder method Introduce SetAddrPlus method for use with SymbolBuilder. Change-Id: Ieb2986b2fc1675b7a3a71c84b7219b3d564ac122 Reviewed-on: https://go-review.googlesource.com/c/go/+/227757 Reviewed-by: Cherry Zhang Reviewed-by: Jeremy Faller --- diff --git a/src/cmd/link/internal/loader/symbolbuilder.go b/src/cmd/link/internal/loader/symbolbuilder.go index 8f14298543..82de931caa 100644 --- a/src/cmd/link/internal/loader/symbolbuilder.go +++ b/src/cmd/link/internal/loader/symbolbuilder.go @@ -315,6 +315,25 @@ func (sb *SymbolBuilder) SetUint(arch *sys.Arch, r int64, v uint64) int64 { return sb.setUintXX(arch, r, v, int64(arch.PtrSize)) } +func (sb *SymbolBuilder) SetAddrPlus(arch *sys.Arch, off int64, tgt Sym, add int64) int64 { + if sb.Type() == 0 { + sb.SetType(sym.SDATA) + } + sb.setReachable() + if off+int64(arch.PtrSize) > sb.size { + sb.size = off + int64(arch.PtrSize) + sb.Grow(sb.size) + } + var r Reloc + r.Sym = tgt + r.Off = int32(off) + r.Size = uint8(arch.PtrSize) + r.Type = objabi.R_ADDR + r.Add = add + sb.AddReloc(r) + return off + int64(r.Size) +} + func (sb *SymbolBuilder) Addstring(str string) int64 { sb.setReachable() if sb.kind == 0 {