Rename Reloc2 to Reloc, At2 to At, Aux2 to Aux.
Change-Id: Ic98d83c080e8cd80fbe1837c8f0aa134033508ce
Reviewed-on: https://go-review.googlesource.com/c/go/+/245578
Reviewed-by: Jeremy Faller <jeremy@golang.org>
o(0xc3)
}
-func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc2, rIdx int) bool {
+func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool {
targ := r.Sym()
var targType sym.SymKind
if targ != 0 {
// Reread the reloc to incorporate any changes in type above.
relocs := ldr.Relocs(s)
- r = relocs.At2(rIdx)
+ r = relocs.At(rIdx)
switch r.Type() {
case objabi.R_CALL,
return true
}
-func archreloc(*ld.Target, *loader.Loader, *ld.ArchSyms, loader.Reloc2, loader.Sym, int64) (int64, int, bool) {
+func archreloc(*ld.Target, *loader.Loader, *ld.ArchSyms, loader.Reloc, loader.Sym, int64) (int64, int, bool) {
return -1, 0, false
}
-func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc2, sym.RelocVariant, loader.Sym, int64) int64 {
+func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc, sym.RelocVariant, loader.Sym, int64) int64 {
log.Fatalf("unexpected relocation variant")
return -1
}
return int32((uint32(a))&0xff000000 | 0x00ffffff&uint32(a+b))
}
-func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc2, rIdx int) bool {
+func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool {
targ := r.Sym()
var targType sym.SymKind
// Reread the reloc to incorporate any changes in type above.
relocs := ldr.Relocs(s)
- r = relocs.At2(rIdx)
+ r = relocs.At(rIdx)
switch r.Type() {
case objabi.R_CALLARM:
case objabi.R_CALLARM:
if siz == 4 {
relocs := ldr.Relocs(s)
- r := relocs.At2(ri)
+ r := relocs.At(ri)
if r.Add()&0xff000000 == 0xeb000000 { // BL // TODO: using r.Add here is bad (issue 19811)
out.Write32(uint32(elf.R_ARM_CALL) | uint32(elfsym)<<8)
} else {
// Convert the direct jump relocation r to refer to a trampoline if the target is too far
func trampoline(ctxt *ld.Link, ldr *loader.Loader, ri int, rs, s loader.Sym) {
relocs := ldr.Relocs(s)
- r := relocs.At2(ri)
+ r := relocs.At(ri)
switch r.Type() {
case objabi.R_CALLARM:
// r.Add is the instruction
// modify reloc to point to tramp, which will be resolved later
sb := ldr.MakeSymbolUpdater(s)
relocs := sb.Relocs()
- r := relocs.At2(ri)
+ r := relocs.At(ri)
r.SetSym(tramp)
r.SetAdd(r.Add()&0xff000000 | 0xfffffe) // clear the offset embedded in the instruction
}
}
}
-func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc2, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) {
+func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) {
rs := r.Sym()
rs = ldr.ResolveABIAlias(rs)
if target.IsExternal() {
return val, 0, false
}
-func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc2, sym.RelocVariant, loader.Sym, int64) int64 {
+func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc, sym.RelocVariant, loader.Sym, int64) int64 {
log.Fatalf("unexpected relocation variant")
return -1
}
-func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc2, s loader.Sym) (loader.ExtReloc, bool) {
+func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc, s loader.Sym) (loader.ExtReloc, bool) {
rs := ldr.ResolveABIAlias(r.Sym())
var rr loader.ExtReloc
switch r.Type() {
rel2.SetSym(addmoduledata)
}
-func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc2, rIdx int) bool {
+func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool {
targ := r.Sym()
var targType sym.SymKind
// Reread the reloc to incorporate any changes in type above.
relocs := ldr.Relocs(s)
- r = relocs.At2(rIdx)
+ r = relocs.At(rIdx)
switch r.Type() {
case objabi.R_CALL,
return true
}
-func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc2, s loader.Sym, val int64) (int64, int, bool) {
+func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc, s loader.Sym, val int64) (int64, int, bool) {
const noExtReloc = 0
const isOk = true
return val, 0, false
}
-func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc2, sym.RelocVariant, loader.Sym, int64) int64 {
+func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc, sym.RelocVariant, loader.Sym, int64) int64 {
log.Fatalf("unexpected relocation variant")
return -1
}
-func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc2, s loader.Sym) (loader.ExtReloc, bool) {
+func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc, s loader.Sym) (loader.ExtReloc, bool) {
switch rt := r.Type(); rt {
case objabi.R_ARM64_GOTPCREL,
objabi.R_ADDRARM64:
n := uint64(0)
relocs := ldr.Relocs(s)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
if r.Type().IsDirectCallOrJump() {
n++
}
ldr := ctxt.loader
relocs := ldr.Relocs(s)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
if !r.Type().IsDirectCallOrJump() {
continue
}
syms := st.syms
nExtReloc := 0 // number of external relocations
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
off := r.Off()
siz := int32(r.Siz())
rs := r.Sym()
}
// Convert a Go relocation to an external relocation.
-func extreloc(ctxt *Link, ldr *loader.Loader, s loader.Sym, r loader.Reloc2) (loader.ExtReloc, bool) {
+func extreloc(ctxt *Link, ldr *loader.Loader, s loader.Sym, r loader.Reloc) (loader.ExtReloc, bool) {
var rr loader.ExtReloc
target := &ctxt.Target
siz := int32(r.Siz())
// ExtrelocSimple creates a simple external relocation from r, with the same
// symbol and addend.
-func ExtrelocSimple(ldr *loader.Loader, r loader.Reloc2) loader.ExtReloc {
+func ExtrelocSimple(ldr *loader.Loader, r loader.Reloc) loader.ExtReloc {
var rr loader.ExtReloc
rs := ldr.ResolveABIAlias(r.Sym())
rr.Xsym = rs
// ExtrelocViaOuterSym creates an external relocation from r targeting the
// outer symbol and folding the subsymbol's offset into the addend.
-func ExtrelocViaOuterSym(ldr *loader.Loader, r loader.Reloc2, s loader.Sym) loader.ExtReloc {
+func ExtrelocViaOuterSym(ldr *loader.Loader, r loader.Reloc, s loader.Sym) loader.ExtReloc {
// set up addend for eventual relocation via outer symbol.
var rr loader.ExtReloc
rs := ldr.ResolveABIAlias(r.Sym())
var su *loader.SymbolBuilder
relocs := ctxt.loader.Relocs(s)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
targ := r.Sym()
if targ == 0 {
continue
syms := &ctxt.ArchSyms
relocs := ldr.Relocs(s)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
if ctxt.BuildMode == BuildModePIE && ctxt.LinkMode == LinkInternal {
// It's expected that some relocations will be done
// later by relocsym (R_TLS_LE, R_ADDROFF), so
if exportsIdx != 0 {
relocs := d.ldr.Relocs(exportsIdx)
for i := 0; i < relocs.Count(); i++ {
- d.mark(relocs.At2(i).Sym(), 0)
+ d.mark(relocs.At(i).Sym(), 0)
}
}
}
methods = methods[:0]
for i := 0; i < relocs.Count(); i++ {
- r := relocs.At2(i)
+ r := relocs.At(i)
t := r.Type()
if t == objabi.R_WEAKADDROFF {
continue
}
naux := d.ldr.NAux(symIdx)
for i := 0; i < naux; i++ {
- a := d.ldr.Aux2(symIdx, i)
+ a := d.ldr.Aux(symIdx, i)
if a.Type() == goobj2.AuxGotype && !d.ctxt.linkShared {
// A symbol being reachable doesn't imply we need its
// type descriptor. Don't mark it.
func (d *deadcodePass) markMethod(m methodref) {
relocs := d.ldr.Relocs(m.src)
- d.mark(relocs.At2(m.r).Sym(), m.src)
- d.mark(relocs.At2(m.r+1).Sym(), m.src)
- d.mark(relocs.At2(m.r+2).Sym(), m.src)
+ d.mark(relocs.At(m.r).Sym(), m.src)
+ d.mark(relocs.At(m.r+1).Sym(), m.src)
+ d.mark(relocs.At(m.r+2).Sym(), m.src)
}
// deadcode marks all reachable symbols.
s := loader.Sym(i)
if ldr.IsItabLink(s) {
relocs := ldr.Relocs(s)
- if relocs.Count() > 0 && ldr.AttrReachable(relocs.At2(0).Sym()) {
+ if relocs.Count() > 0 && ldr.AttrReachable(relocs.At(0).Sym()) {
ldr.SetAttrReachable(s, true)
}
}
kindMask = (1 << 5) - 1
)
-func decodeReloc(ldr *loader.Loader, symIdx loader.Sym, relocs *loader.Relocs, off int32) loader.Reloc2 {
+func decodeReloc(ldr *loader.Loader, symIdx loader.Sym, relocs *loader.Relocs, off int32) loader.Reloc {
for j := 0; j < relocs.Count(); j++ {
- rel := relocs.At2(j)
+ rel := relocs.At(j)
if rel.Off() == off {
return rel
}
}
- return loader.Reloc2{}
+ return loader.Reloc{}
}
func decodeRelocSym(ldr *loader.Loader, symIdx loader.Sym, relocs *loader.Relocs, off int32) loader.Sym {
}
relocs := d.ldr.Relocs(dsym)
for i := 0; i < relocs.Count(); i++ {
- r := relocs.At2(i)
+ r := relocs.At(i)
if r.Type() != objabi.R_DWARFSECREF {
continue
}
// locals/params but were optimized away.
drelocs := d.ldr.Relocs(infosym)
for ri := 0; ri < drelocs.Count(); ri++ {
- r := drelocs.At2(ri)
+ r := drelocs.At(ri)
// Look for "use type" relocs.
if r.Type() == objabi.R_USETYPE {
d.defgotype(r.Sym())
for _, fn := range u.FuncDIEs {
relocs := d.ldr.Relocs(loader.Sym(fn))
for i := 0; i < relocs.Count(); i++ {
- reloc := relocs.At2(i)
+ reloc := relocs.At(i)
if reloc.Type() != objabi.R_DWARFSECREF {
continue
}
// to stream out.
relocs := ldr.Relocs(s)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
rr, ok := extreloc(ctxt, ldr, s, r)
if !ok {
continue
}
relocs := ctxt.loader.Relocs(s)
for i := 0; i < relocs.Count(); i++ {
- if rs := relocs.At2(i).Sym(); rs != 0 {
+ if rs := relocs.At(i).Sym(); rs != 0 {
if ctxt.loader.SymType(rs) == sym.Sxxx && !ctxt.loader.AttrLocal(rs) {
// sanity check
if len(ctxt.loader.Data(rs)) != 0 {
Plan9Magic uint32
Plan9_64Bit bool
- Adddynrel func(*Target, *loader.Loader, *ArchSyms, loader.Sym, loader.Reloc2, int) bool
+ Adddynrel func(*Target, *loader.Loader, *ArchSyms, loader.Sym, loader.Reloc, int) bool
Archinit func(*Link)
// Archreloc is an arch-specific hook that assists in relocation processing
// (invoked by 'relocsym'); it handles target-specific relocation tasks.
// ELF/Mach-O/etc. relocations, not Go relocations, this must match Elfreloc1,
// etc.), and a boolean indicating success/failure (a failing value indicates
// a fatal error).
- Archreloc func(*Target, *loader.Loader, *ArchSyms, loader.Reloc2, loader.Sym,
+ Archreloc func(*Target, *loader.Loader, *ArchSyms, loader.Reloc, loader.Sym,
int64) (relocatedOffset int64, nExtReloc int, ok bool)
// Archrelocvariant is a second arch-specific hook used for
// relocation processing; it handles relocations where r.Type is
// relocation applies, and "off" is the contents of the
// to-be-relocated data item (from sym.P). Return is an updated
// offset value.
- Archrelocvariant func(target *Target, ldr *loader.Loader, rel loader.Reloc2,
+ Archrelocvariant func(target *Target, ldr *loader.Loader, rel loader.Reloc,
rv sym.RelocVariant, sym loader.Sym, offset int64) (relocatedOffset int64)
// Generate a trampoline for a call from s to rs if necessary. ri is
// Extreloc is an arch-specific hook that converts a Go relocation to an
// external relocation. Return the external relocation and whether it is
// needed.
- Extreloc func(*Target, *loader.Loader, loader.Reloc2, loader.Sym) (loader.ExtReloc, bool)
+ Extreloc func(*Target, *loader.Loader, loader.Reloc, loader.Sym) (loader.ExtReloc, bool)
Elfreloc1 func(*Link, *OutBuf, *loader.Loader, loader.Sym, loader.ExtReloc, int, int64) bool
ElfrelocSize uint32 // size of an ELF relocation record, must match Elfreloc1.
// Process calls in this span.
for ; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
if uint32(r.Off()) >= pcsp.NextPC {
break
}
for _, s := range ctxt.Textp {
relocs := ldr.Relocs(s)
for i := 0; i < relocs.Count(); i++ {
- r := relocs.At2(i)
+ r := relocs.At(i)
rs := r.Sym()
if rs == 0 {
continue
// to stream out.
relocs := ldr.Relocs(s)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
rr, ok := extreloc(ctxt, ldr, s, r)
if !ok {
continue
relocs := state.ldr.Relocs(s)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
if target.IsWasm() && r.Type() == objabi.R_ADDR {
// Wasm does not have a live variable set at the deferreturn
// call itself. Instead it has one identified by the
// to stream out.
relocs := ldr.Relocs(s)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
rr, ok := extreloc(ctxt, ldr, s, r)
if !ok {
continue
rt.blocks = make(map[uint32]peBaseRelocBlock)
}
-func (rt *peBaseRelocTable) addentry(ldr *loader.Loader, s loader.Sym, r *loader.Reloc2) {
+func (rt *peBaseRelocTable) addentry(ldr *loader.Loader, s loader.Sym, r *loader.Reloc) {
// pageSize is the size in bytes of a page
// described by a base relocation block.
const pageSize = 0x1000
func addPEBaseRelocSym(ldr *loader.Loader, s loader.Sym, rt *peBaseRelocTable) {
relocs := ldr.Relocs(s)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
if r.Type() >= objabi.ElfRelocOffset {
continue
}
// relocation
relocs := ctxt.loader.Relocs(rsrcsym)
for i := 0; i < relocs.Count(); i++ {
- r := relocs.At2(i)
+ r := relocs.At(i)
p := data[r.Off():]
val := uint32(int64(h.virtualAddress) + r.Add())
tl.Grow(tl.Size())
relocs := tl.AddRelocs(len(typelinks))
for i, s := range typelinks {
- r := relocs.At2(i)
+ r := relocs.At(i)
r.SetSym(s.Type)
r.SetOff(int32(i * 4))
r.SetSiz(4)
// Xcoffadddynrel adds a dynamic relocation in a XCOFF file.
// This relocation will be made by the loader.
-func Xcoffadddynrel(target *Target, ldr *loader.Loader, syms *ArchSyms, s loader.Sym, r loader.Reloc2, rIdx int) bool {
+func Xcoffadddynrel(target *Target, ldr *loader.Loader, syms *ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool {
if target.IsExternal() {
return true
}
sorted[i] = i
}
sort.Slice(sorted, func(i, j int) bool {
- return relocs.At2(sorted[i]).Off() < relocs.At2(sorted[j]).Off()
+ return relocs.At(sorted[i]).Off() < relocs.At(sorted[j]).Off()
})
for _, ri := range sorted {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
rr, ok := extreloc(ctxt, ldr, s, r)
if !ok {
continue
Size uint8
}
-// Reloc2 holds a "handle" to access a relocation record from an
+// Reloc holds a "handle" to access a relocation record from an
// object file.
-type Reloc2 struct {
+type Reloc struct {
*goobj2.Reloc
r *oReader
l *Loader
// External reloc types may not fit into a uint8 which the Go object file uses.
- // Store it here, instead of in the byte of goobj2.Reloc2.
+ // Store it here, instead of in the byte of goobj2.Reloc.
// For Go symbols this will always be zero.
- // goobj2.Reloc2.Type() + typ is always the right type, for both Go and external
+ // goobj2.Reloc.Type() + typ is always the right type, for both Go and external
// symbols.
typ objabi.RelocType
}
-func (rel Reloc2) Type() objabi.RelocType { return objabi.RelocType(rel.Reloc.Type()) + rel.typ }
-func (rel Reloc2) Sym() Sym { return rel.l.resolve(rel.r, rel.Reloc.Sym()) }
-func (rel Reloc2) SetSym(s Sym) { rel.Reloc.SetSym(goobj2.SymRef{PkgIdx: 0, SymIdx: uint32(s)}) }
+func (rel Reloc) Type() objabi.RelocType { return objabi.RelocType(rel.Reloc.Type()) + rel.typ }
+func (rel Reloc) Sym() Sym { return rel.l.resolve(rel.r, rel.Reloc.Sym()) }
+func (rel Reloc) SetSym(s Sym) { rel.Reloc.SetSym(goobj2.SymRef{PkgIdx: 0, SymIdx: uint32(s)}) }
-func (rel Reloc2) SetType(t objabi.RelocType) {
+func (rel Reloc) SetType(t objabi.RelocType) {
if t != objabi.RelocType(uint8(t)) {
- panic("SetType: type doesn't fit into Reloc2")
+ panic("SetType: type doesn't fit into Reloc")
}
rel.Reloc.SetType(uint8(t))
if rel.typ != 0 {
}
}
-// Aux2 holds a "handle" to access an aux symbol record from an
+// Aux holds a "handle" to access an aux symbol record from an
// object file.
-type Aux2 struct {
+type Aux struct {
*goobj2.Aux
r *oReader
l *Loader
}
-func (a Aux2) Sym() Sym { return a.l.resolve(a.r, a.Aux.Sym()) }
+func (a Aux) Sym() Sym { return a.l.resolve(a.r, a.Aux.Sym()) }
// oReader is a wrapper type of obj.Reader, along with some
// extra information.
}
// Returns the "handle" to the j-th aux symbol of the i-th symbol.
-func (l *Loader) Aux2(i Sym, j int) Aux2 {
+func (l *Loader) Aux(i Sym, j int) Aux {
if l.IsExternal(i) {
- return Aux2{}
+ return Aux{}
}
r, li := l.toLocal(i)
if j >= r.NAux(li) {
- return Aux2{}
+ return Aux{}
}
- return Aux2{r.Aux(li, j), r, l}
+ return Aux{r.Aux(li, j), r, l}
}
// GetFuncDwarfAuxSyms collects and returns the auxiliary DWARF
func (relocs *Relocs) Count() int { return len(relocs.rs) }
-// At2 returns the j-th reloc for a global symbol.
-func (relocs *Relocs) At2(j int) Reloc2 {
+// At returns the j-th reloc for a global symbol.
+func (relocs *Relocs) At(j int) Reloc {
if relocs.l.isExtReader(relocs.r) {
pp := relocs.l.payloads[relocs.li]
- return Reloc2{&relocs.rs[j], relocs.r, relocs.l, pp.reltypes[j]}
+ return Reloc{&relocs.rs[j], relocs.r, relocs.l, pp.reltypes[j]}
}
- return Reloc2{&relocs.rs[j], relocs.r, relocs.l, 0}
+ return Reloc{&relocs.rs[j], relocs.r, relocs.l, 0}
}
// Relocs returns a Relocs object for the given global sym.
return s
}
relocs := l.Relocs(s)
- target := relocs.At2(0).Sym()
+ target := relocs.At(0).Sym()
if l.SymType(target) == sym.SABIALIAS {
panic(fmt.Sprintf("ABI alias %s references another ABI alias %s", l.SymName(s), l.SymName(target)))
}
for i := range pp.relocs {
// Copy the relocs slice.
// Convert local reference to global reference.
- rel := relocs.At2(i)
+ rel := relocs.At(i)
pp.relocs[i].Set(rel.Off(), rel.Siz(), 0, rel.Add(), goobj2.SymRef{PkgIdx: 0, SymIdx: uint32(rel.Sym())})
pp.reltypes[i] = rel.Type()
}
for si := Sym(1); si < Sym(len(l.objSyms)); si++ {
relocs := l.Relocs(si)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
rs := r.Sym()
if rs != 0 && l.SymType(rs) == sym.SXREF && l.RawSymName(rs) != ".got" {
result = append(result, rs)
// Now invoke the usual loader interfaces to make sure
// we're getting the right things back for these symbols.
// First relocations...
- expRel := [][]Reloc2{{r1, r2}, {r3}}
+ expRel := [][]Reloc{{r1, r2}, {r3}}
for k, sb := range []*SymbolBuilder{sb1, sb2} {
rsl := sb.Relocs()
exp := expRel[k]
}
}
-func sameRelocSlice(s1 *Relocs, s2 []Reloc2) bool {
+func sameRelocSlice(s1 *Relocs, s2 []Reloc) bool {
if s1.Count() != len(s2) {
return false
}
for i := 0; i < s1.Count(); i++ {
- r1 := s1.At2(i)
+ r1 := s1.At(i)
r2 := &s2[i]
if r1.Sym() != r2.Sym() ||
r1.Type() != r2.Type() ||
type addFunc func(l *Loader, s Sym, s2 Sym) Sym
-func mkReloc(l *Loader, typ objabi.RelocType, off int32, siz uint8, add int64, sym Sym) Reloc2 {
- r := Reloc2{&goobj2.Reloc{}, l.extReader, l, typ}
+func mkReloc(l *Loader, typ objabi.RelocType, off int32, siz uint8, add int64, sym Sym) Reloc {
+ r := Reloc{&goobj2.Reloc{}, l.extReader, l, typ}
r.SetOff(off)
r.SetSiz(siz)
r.SetAdd(add)
addDataFunc addFunc
expData []byte
expKind sym.SymKind
- expRel []Reloc2
+ expRel []Reloc
}{
{
which: "AddUint8",
},
expData: []byte{0, 0, 0, 0, 0, 0, 0, 0},
expKind: sym.SDATA,
- expRel: []Reloc2{mkReloc(ldr, objabi.R_ADDR, 0, 8, 3, 6)},
+ expRel: []Reloc{mkReloc(ldr, objabi.R_ADDR, 0, 8, 3, 6)},
},
{
which: "AddAddrPlus4",
},
expData: []byte{0, 0, 0, 0},
expKind: sym.SDATA,
- expRel: []Reloc2{mkReloc(ldr, objabi.R_ADDR, 0, 4, 3, 7)},
+ expRel: []Reloc{mkReloc(ldr, objabi.R_ADDR, 0, 4, 3, 7)},
},
{
which: "AddCURelativeAddrPlus",
},
expData: []byte{0, 0, 0, 0, 0, 0, 0, 0},
expKind: sym.SDATA,
- expRel: []Reloc2{mkReloc(ldr, objabi.R_ADDRCUOFF, 0, 8, 7, 8)},
+ expRel: []Reloc{mkReloc(ldr, objabi.R_ADDRCUOFF, 0, 8, 7, 8)},
},
}
// Add a relocation with given type, return its handle and index
// (to set other fields).
-func (sb *SymbolBuilder) AddRel(typ objabi.RelocType) (Reloc2, int) {
+func (sb *SymbolBuilder) AddRel(typ objabi.RelocType) (Reloc, int) {
j := len(sb.relocs)
sb.relocs = append(sb.relocs, goobj2.Reloc{})
sb.reltypes = append(sb.reltypes, typ)
relocs := sb.Relocs()
- return relocs.At2(j), j
+ return relocs.At(j), j
}
// Sort relocations by offset.
}
}
-func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc2, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) {
+func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) {
rs := r.Sym()
rs = ldr.ResolveABIAlias(rs)
if target.IsExternal() {
return val, 0, false
}
-func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc2, sym.RelocVariant, loader.Sym, int64) int64 {
+func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc, sym.RelocVariant, loader.Sym, int64) int64 {
return -1
}
-func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc2, s loader.Sym) (loader.ExtReloc, bool) {
+func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc, s loader.Sym) (loader.ExtReloc, bool) {
switch r.Type() {
case objabi.R_ADDRMIPS, objabi.R_ADDRMIPSU:
return ld.ExtrelocViaOuterSym(ldr, r, s), true
return false
}
-func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc2, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) {
+func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) {
if target.IsExternal() {
switch r.Type() {
default:
return val, 0, false
}
-func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc2, sym.RelocVariant, loader.Sym, int64) int64 {
+func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc, sym.RelocVariant, loader.Sym, int64) int64 {
return -1
}
-func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc2, s loader.Sym) (loader.ExtReloc, bool) {
+func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc, s loader.Sym) (loader.ExtReloc, bool) {
switch r.Type() {
case objabi.R_ADDRMIPS,
objabi.R_ADDRMIPSU:
for _, s := range ctxt.Textp {
relocs := ldr.Relocs(s)
for i := 0; i < relocs.Count(); i++ {
- r := relocs.At2(i)
+ r := relocs.At(i)
if r.Type() != objabi.ElfRelocOffset+objabi.RelocType(elf.R_PPC64_REL24) || ldr.SymType(r.Sym()) != sym.SDYNIMPORT {
continue
}
stub.AddUint32(ctxt.Arch, 0x4e800420) // bctr
}
-func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc2, rIdx int) bool {
+func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool {
if target.IsElf() {
return addelfdynrel(target, ldr, syms, s, r, rIdx)
} else if target.IsAIX() {
return false
}
-func addelfdynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc2, rIdx int) bool {
+func addelfdynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool {
targ := r.Sym()
var targType sym.SymKind
if targ != 0 {
// default load instruction can be changed to an addi instruction and the
// symbol address can be used directly.
// This code is for AIX only.
-func archreloctoc(ldr *loader.Loader, target *ld.Target, syms *ld.ArchSyms, r loader.Reloc2, s loader.Sym, val int64) int64 {
+func archreloctoc(ldr *loader.Loader, target *ld.Target, syms *ld.ArchSyms, r loader.Reloc, s loader.Sym, val int64) int64 {
rs := ldr.ResolveABIAlias(r.Sym())
if target.IsLinux() {
ldr.Errorf(s, "archrelocaddr called for %s relocation\n", ldr.SymName(rs))
var t int64
useAddi := false
relocs := ldr.Relocs(rs)
- tarSym := ldr.ResolveABIAlias(relocs.At2(0).Sym())
+ tarSym := ldr.ResolveABIAlias(relocs.At(0).Sym())
if target.IsInternal() && tarSym != 0 && ldr.AttrReachable(tarSym) && ldr.SymSect(tarSym).Seg == &ld.Segdata {
t = ldr.SymValue(tarSym) + r.Add() - ldr.SymValue(syms.TOC)
// archrelocaddr relocates a symbol address.
// This code is for AIX only.
-func archrelocaddr(ldr *loader.Loader, target *ld.Target, syms *ld.ArchSyms, r loader.Reloc2, s loader.Sym, val int64) int64 {
+func archrelocaddr(ldr *loader.Loader, target *ld.Target, syms *ld.ArchSyms, r loader.Reloc, s loader.Sym, val int64) int64 {
rs := ldr.ResolveABIAlias(r.Sym())
if target.IsAIX() {
ldr.Errorf(s, "archrelocaddr called for %s relocation\n", ldr.SymName(rs))
}
relocs := ldr.Relocs(s)
- r := relocs.At2(ri)
+ r := relocs.At(ri)
t := ldr.SymValue(rs) + r.Add() - (ldr.SymValue(s) + int64(r.Off()))
switch r.Type() {
case objabi.R_CALLPOWER:
}
sb := ldr.MakeSymbolUpdater(s)
relocs := sb.Relocs()
- r := relocs.At2(ri)
+ r := relocs.At(ri)
r.SetSym(tramp)
r.SetAdd(0) // This was folded into the trampoline target address
}
tramp.SetData(P)
}
-func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc2, s loader.Sym, val int64) (relocatedOffset int64, nExtReloc int, ok bool) {
+func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc, s loader.Sym, val int64) (relocatedOffset int64, nExtReloc int, ok bool) {
rs := ldr.ResolveABIAlias(r.Sym())
if target.IsExternal() {
// On AIX, relocations (except TLS ones) must be also done to the
return val, nExtReloc, false
}
-func archrelocvariant(target *ld.Target, ldr *loader.Loader, r loader.Reloc2, rv sym.RelocVariant, s loader.Sym, t int64) (relocatedOffset int64) {
+func archrelocvariant(target *ld.Target, ldr *loader.Loader, r loader.Reloc, rv sym.RelocVariant, s loader.Sym, t int64) (relocatedOffset int64) {
rs := ldr.ResolveABIAlias(r.Sym())
switch rv & sym.RV_TYPE_MASK {
default:
return t
}
-func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc2, s loader.Sym) (loader.ExtReloc, bool) {
+func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc, s loader.Sym) (loader.ExtReloc, bool) {
switch r.Type() {
case objabi.R_POWER_TLS, objabi.R_POWER_TLS_LE, objabi.R_POWER_TLS_IE, objabi.R_CALLPOWER:
return ld.ExtrelocSimple(ldr, r), true
return false
}
-func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc2, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) {
+func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) {
rs := r.Sym()
rs = ldr.ResolveABIAlias(rs)
switch r.Type() {
return val, 0, false
}
-func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc2, sym.RelocVariant, loader.Sym, int64) int64 {
+func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc, sym.RelocVariant, loader.Sym, int64) int64 {
log.Fatalf("archrelocvariant")
return -1
}
initfunc.AddUint32(ctxt.Arch, 0)
}
-func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc2, rIdx int) bool {
+func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool {
targ := r.Sym()
var targType sym.SymKind
if targ != 0 {
return false
}
-func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc2, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) {
+func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) {
return val, 0, false
}
-func archrelocvariant(target *ld.Target, ldr *loader.Loader, r loader.Reloc2, rv sym.RelocVariant, s loader.Sym, t int64) int64 {
+func archrelocvariant(target *ld.Target, ldr *loader.Loader, r loader.Reloc, rv sym.RelocVariant, s loader.Sym, t int64) int64 {
switch rv & sym.RV_TYPE_MASK {
default:
ldr.Errorf(s, "unexpected relocation variant %d", rv)
for _, fn := range ctxt.Textp {
relocs := ldr.Relocs(fn)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
if r.Type() == objabi.R_WASMIMPORT {
hostImportMap[r.Sym()] = int64(len(hostImports))
hostImports = append(hostImports, &wasmFunc{
P := ldr.Data(fn)
off := int32(0)
for ri := 0; ri < relocs.Count(); ri++ {
- r := relocs.At2(ri)
+ r := relocs.At(ri)
wfn.Write(P[off:r.Off()])
off = r.Off()
rs := ldr.ResolveABIAlias(r.Sym())
o(0xc3)
}
-func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc2, rIdx int) bool {
+func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool {
targ := r.Sym()
var targType sym.SymKind
if targ != 0 {
// Reread the reloc to incorporate any changes in type above.
relocs := ldr.Relocs(s)
- r = relocs.At2(rIdx)
+ r = relocs.At(rIdx)
switch r.Type() {
case objabi.R_CALL,
return true
}
-func archreloc(*ld.Target, *loader.Loader, *ld.ArchSyms, loader.Reloc2, loader.Sym, int64) (int64, int, bool) {
+func archreloc(*ld.Target, *loader.Loader, *ld.ArchSyms, loader.Reloc, loader.Sym, int64) (int64, int, bool) {
return -1, 0, false
}
-func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc2, sym.RelocVariant, loader.Sym, int64) int64 {
+func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc, sym.RelocVariant, loader.Sym, int64) int64 {
log.Fatalf("unexpected relocation variant")
return -1
}