]> Cypherpunks.ru repositories - gostls13.git/commitdiff
[dev.link] cmd/link/internal/loader: add another symbolbuilder method
authorThan McIntosh <thanm@google.com>
Wed, 8 Apr 2020 11:35:58 +0000 (07:35 -0400)
committerThan McIntosh <thanm@google.com>
Fri, 10 Apr 2020 12:33:13 +0000 (12:33 +0000)
Introduce SetAddrPlus method for use with SymbolBuilder.

Change-Id: Ieb2986b2fc1675b7a3a71c84b7219b3d564ac122
Reviewed-on: https://go-review.googlesource.com/c/go/+/227757
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
src/cmd/link/internal/loader/symbolbuilder.go

index 8f142985434a70f6279abea7381635f8c2dee1f2..82de931caae9d67615412fb9ce833fd304e011c2 100644 (file)
@@ -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 {