mirror of
https://github.com/golang/go
synced 2024-09-30 16:08:36 -06:00
[dev.link] cmd/link: unify Relocs.Count and len(rs)
The Count field in Relocs type is always equal to len(rs). Unify them. Change-Id: Ic77288ea58b61a98482b218e051d81047d0ddd88 Reviewed-on: https://go-review.googlesource.com/c/go/+/226717 Run-TryBot: Cherry Zhang <cherryyz@google.com> Reviewed-by: Than McIntosh <thanm@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
6e3bde5f30
commit
0e0ee115c5
@ -603,7 +603,7 @@ func (ctxt *Link) reloc() {
|
|||||||
func windynrelocsym(ctxt *Link, rel *loader.SymbolBuilder, s loader.Sym) {
|
func windynrelocsym(ctxt *Link, rel *loader.SymbolBuilder, s loader.Sym) {
|
||||||
var su *loader.SymbolBuilder
|
var su *loader.SymbolBuilder
|
||||||
relocs := ctxt.loader.Relocs(s)
|
relocs := ctxt.loader.Relocs(s)
|
||||||
for ri := 0; ri < relocs.Count; ri++ {
|
for ri := 0; ri < relocs.Count(); ri++ {
|
||||||
r := relocs.At2(ri)
|
r := relocs.At2(ri)
|
||||||
targ := r.Sym()
|
targ := r.Sym()
|
||||||
if targ == 0 {
|
if targ == 0 {
|
||||||
|
@ -86,7 +86,7 @@ func (d *deadcodePass2) init() {
|
|||||||
exportsIdx := d.ldr.Lookup("go.plugin.exports", 0)
|
exportsIdx := d.ldr.Lookup("go.plugin.exports", 0)
|
||||||
if exportsIdx != 0 {
|
if exportsIdx != 0 {
|
||||||
relocs := d.ldr.Relocs(exportsIdx)
|
relocs := d.ldr.Relocs(exportsIdx)
|
||||||
for i := 0; i < relocs.Count; i++ {
|
for i := 0; i < relocs.Count(); i++ {
|
||||||
d.mark(relocs.At2(i).Sym(), 0)
|
d.mark(relocs.At2(i).Sym(), 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -139,14 +139,14 @@ func (d *deadcodePass2) flood() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var methods []methodref2
|
var methods []methodref2
|
||||||
for i := 0; i < relocs.Count; i++ {
|
for i := 0; i < relocs.Count(); i++ {
|
||||||
r := relocs.At2(i)
|
r := relocs.At2(i)
|
||||||
t := r.Type()
|
t := r.Type()
|
||||||
if t == objabi.R_WEAKADDROFF {
|
if t == objabi.R_WEAKADDROFF {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if t == objabi.R_METHODOFF {
|
if t == objabi.R_METHODOFF {
|
||||||
if i+2 >= relocs.Count {
|
if i+2 >= relocs.Count() {
|
||||||
panic("expect three consecutive R_METHODOFF relocs")
|
panic("expect three consecutive R_METHODOFF relocs")
|
||||||
}
|
}
|
||||||
methods = append(methods, methodref2{src: symIdx, r: i})
|
methods = append(methods, methodref2{src: symIdx, r: i})
|
||||||
@ -272,7 +272,7 @@ func deadcode2(ctxt *Link) {
|
|||||||
s := loader.Sym(i)
|
s := loader.Sym(i)
|
||||||
if ldr.IsItabLink(s) {
|
if ldr.IsItabLink(s) {
|
||||||
relocs := ldr.Relocs(s)
|
relocs := ldr.Relocs(s)
|
||||||
if relocs.Count > 0 && ldr.AttrReachable(relocs.At2(0).Sym()) {
|
if relocs.Count() > 0 && ldr.AttrReachable(relocs.At2(0).Sym()) {
|
||||||
ldr.SetAttrReachable(s, true)
|
ldr.SetAttrReachable(s, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ import (
|
|||||||
// to decodesym.go once the rouetines there have been decprecated + removed.
|
// to decodesym.go once the rouetines there have been decprecated + removed.
|
||||||
|
|
||||||
func decodeReloc2(ldr *loader.Loader, symIdx loader.Sym, relocs *loader.Relocs, off int32) loader.Reloc2 {
|
func decodeReloc2(ldr *loader.Loader, symIdx loader.Sym, relocs *loader.Relocs, off int32) loader.Reloc2 {
|
||||||
for j := 0; j < relocs.Count; j++ {
|
for j := 0; j < relocs.Count(); j++ {
|
||||||
rel := relocs.At2(j)
|
rel := relocs.At2(j)
|
||||||
if rel.Off() == off {
|
if rel.Off() == off {
|
||||||
return rel
|
return rel
|
||||||
|
@ -1097,7 +1097,7 @@ func (d *dwctxt2) importInfoSymbol(ctxt *Link, dsym loader.Sym) {
|
|||||||
log.Fatalf("error: DWARF info sym %d/%s with incorrect type %s", dsym, d.ldr.SymName(dsym), d.ldr.SymType(dsym).String())
|
log.Fatalf("error: DWARF info sym %d/%s with incorrect type %s", dsym, d.ldr.SymName(dsym), d.ldr.SymType(dsym).String())
|
||||||
}
|
}
|
||||||
relocs := d.ldr.Relocs(dsym)
|
relocs := d.ldr.Relocs(dsym)
|
||||||
for i := 0; i < relocs.Count; i++ {
|
for i := 0; i < relocs.Count(); i++ {
|
||||||
r := relocs.At2(i)
|
r := relocs.At2(i)
|
||||||
if r.Type() != objabi.R_DWARFSECREF {
|
if r.Type() != objabi.R_DWARFSECREF {
|
||||||
continue
|
continue
|
||||||
@ -1850,7 +1850,7 @@ func dwarfGenerateDebugInfo(ctxt *Link) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
drelocs := d.ldr.Relocs(infosym)
|
drelocs := d.ldr.Relocs(infosym)
|
||||||
for ri := 0; ri < drelocs.Count; ri++ {
|
for ri := 0; ri < drelocs.Count(); ri++ {
|
||||||
r := drelocs.At2(ri)
|
r := drelocs.At2(ri)
|
||||||
if r.Type() == objabi.R_DWARFSECREF {
|
if r.Type() == objabi.R_DWARFSECREF {
|
||||||
rsym := r.Sym()
|
rsym := r.Sym()
|
||||||
@ -1932,7 +1932,7 @@ func dwarfGenerateDebugInfo(ctxt *Link) {
|
|||||||
for _, s := range list {
|
for _, s := range list {
|
||||||
symIdx := loader.Sym(s)
|
symIdx := loader.Sym(s)
|
||||||
relocs := d.ldr.Relocs(symIdx)
|
relocs := d.ldr.Relocs(symIdx)
|
||||||
for i := 0; i < relocs.Count; i++ {
|
for i := 0; i < relocs.Count(); i++ {
|
||||||
r := relocs.At2(i)
|
r := relocs.At2(i)
|
||||||
if r.Type() == objabi.R_USETYPE {
|
if r.Type() == objabi.R_USETYPE {
|
||||||
d.defgotype(r.Sym())
|
d.defgotype(r.Sym())
|
||||||
@ -2045,7 +2045,7 @@ func (d *dwctxt2) collectlocs(syms []loader.Sym, units []*sym.CompilationUnit) [
|
|||||||
for _, u := range units {
|
for _, u := range units {
|
||||||
for _, fn := range u.FuncDIEs2 {
|
for _, fn := range u.FuncDIEs2 {
|
||||||
relocs := d.ldr.Relocs(loader.Sym(fn))
|
relocs := d.ldr.Relocs(loader.Sym(fn))
|
||||||
for i := 0; i < relocs.Count; i++ {
|
for i := 0; i < relocs.Count(); i++ {
|
||||||
reloc := relocs.At2(i)
|
reloc := relocs.At2(i)
|
||||||
if reloc.Type() != objabi.R_DWARFSECREF {
|
if reloc.Type() != objabi.R_DWARFSECREF {
|
||||||
continue
|
continue
|
||||||
|
@ -403,7 +403,7 @@ func (ctxt *Link) addexport() {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
relocs := ctxt.loader.Relocs(s)
|
relocs := ctxt.loader.Relocs(s)
|
||||||
for i := 0; i < relocs.Count; i++ {
|
for i := 0; i < relocs.Count(); i++ {
|
||||||
if rs := relocs.At2(i).Sym(); rs != 0 {
|
if rs := relocs.At2(i).Sym(); rs != 0 {
|
||||||
if ctxt.loader.SymType(rs) == sym.Sxxx && !ctxt.loader.AttrLocal(rs) {
|
if ctxt.loader.SymType(rs) == sym.Sxxx && !ctxt.loader.AttrLocal(rs) {
|
||||||
// sanity check
|
// sanity check
|
||||||
|
@ -2370,7 +2370,7 @@ func (sc *stkChk) check(up *chain, depth int) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Process calls in this span.
|
// Process calls in this span.
|
||||||
for i := 0; i < relocs.Count; i++ {
|
for i := 0; i < relocs.Count(); i++ {
|
||||||
r := relocs.At2(i)
|
r := relocs.At2(i)
|
||||||
if uint32(r.Off()) >= pcsp.NextPC {
|
if uint32(r.Off()) >= pcsp.NextPC {
|
||||||
break
|
break
|
||||||
@ -2707,7 +2707,7 @@ func (ctxt *Link) callgraph() {
|
|||||||
ldr := ctxt.loader
|
ldr := ctxt.loader
|
||||||
for _, s := range ctxt.Textp2 {
|
for _, s := range ctxt.Textp2 {
|
||||||
relocs := ldr.Relocs(s)
|
relocs := ldr.Relocs(s)
|
||||||
for i := 0; i < relocs.Count; i++ {
|
for i := 0; i < relocs.Count(); i++ {
|
||||||
r := relocs.At2(i)
|
r := relocs.At2(i)
|
||||||
rs := r.Sym()
|
rs := r.Sym()
|
||||||
if rs == 0 {
|
if rs == 0 {
|
||||||
|
@ -1479,7 +1479,7 @@ func addpersrc(ctxt *Link) {
|
|||||||
|
|
||||||
// relocation
|
// relocation
|
||||||
relocs := ctxt.loader.Relocs(rsrcsym)
|
relocs := ctxt.loader.Relocs(rsrcsym)
|
||||||
for i := 0; i < relocs.Count; i++ {
|
for i := 0; i < relocs.Count(); i++ {
|
||||||
r := relocs.At2(i)
|
r := relocs.At2(i)
|
||||||
p := data[r.Off():]
|
p := data[r.Off():]
|
||||||
val := uint32(int64(h.virtualAddress) + r.Add())
|
val := uint32(int64(h.virtualAddress) + r.Add())
|
||||||
|
@ -31,8 +31,6 @@ type Sym int
|
|||||||
// Relocs encapsulates the set of relocations on a given symbol; an
|
// Relocs encapsulates the set of relocations on a given symbol; an
|
||||||
// instance of this type is returned by the Loader Relocs() method.
|
// instance of this type is returned by the Loader Relocs() method.
|
||||||
type Relocs struct {
|
type Relocs struct {
|
||||||
Count int // == len(rs), TODO: remove
|
|
||||||
|
|
||||||
rs []goobj2.Reloc2
|
rs []goobj2.Reloc2
|
||||||
|
|
||||||
li int // local index of symbol whose relocs we're examining
|
li int // local index of symbol whose relocs we're examining
|
||||||
@ -1477,6 +1475,8 @@ func (l *Loader) growExtAttrBitmaps() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (relocs *Relocs) Count() int { return len(relocs.rs) }
|
||||||
|
|
||||||
// At2 returns the j-th reloc for a global symbol.
|
// At2 returns the j-th reloc for a global symbol.
|
||||||
func (relocs *Relocs) At2(j int) Reloc2 {
|
func (relocs *Relocs) At2(j int) Reloc2 {
|
||||||
if relocs.l.isExtReader(relocs.r) {
|
if relocs.l.isExtReader(relocs.r) {
|
||||||
@ -1497,22 +1497,18 @@ func (l *Loader) Relocs(i Sym) Relocs {
|
|||||||
|
|
||||||
// Relocs returns a Relocs object given a local sym index and reader.
|
// Relocs returns a Relocs object given a local sym index and reader.
|
||||||
func (l *Loader) relocs(r *oReader, li int) Relocs {
|
func (l *Loader) relocs(r *oReader, li int) Relocs {
|
||||||
var n int
|
|
||||||
var rs []goobj2.Reloc2
|
var rs []goobj2.Reloc2
|
||||||
if l.isExtReader(r) {
|
if l.isExtReader(r) {
|
||||||
pp := l.payloads[li]
|
pp := l.payloads[li]
|
||||||
n = len(pp.relocs)
|
|
||||||
rs = pp.relocs
|
rs = pp.relocs
|
||||||
} else {
|
} else {
|
||||||
rs = r.Relocs2(li)
|
rs = r.Relocs2(li)
|
||||||
n = len(rs)
|
|
||||||
}
|
}
|
||||||
return Relocs{
|
return Relocs{
|
||||||
Count: n,
|
rs: rs,
|
||||||
rs: rs,
|
li: li,
|
||||||
li: li,
|
r: r,
|
||||||
r: r,
|
l: l,
|
||||||
l: l,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1966,8 +1962,8 @@ func (l *Loader) PropagateLoaderChangesToSymbols(toconvert []Sym, anonVerReplace
|
|||||||
for _, cand := range relocfixup {
|
for _, cand := range relocfixup {
|
||||||
s := l.Syms[cand]
|
s := l.Syms[cand]
|
||||||
relocs := l.Relocs(cand)
|
relocs := l.Relocs(cand)
|
||||||
if len(s.R) != relocs.Count {
|
if len(s.R) != relocs.Count() {
|
||||||
s.R = make([]sym.Reloc, relocs.Count)
|
s.R = make([]sym.Reloc, relocs.Count())
|
||||||
}
|
}
|
||||||
l.convertRelocations(&relocs, s, true)
|
l.convertRelocations(&relocs, s, true)
|
||||||
}
|
}
|
||||||
@ -2171,8 +2167,8 @@ func (l *Loader) cloneToExternal(symIdx Sym) {
|
|||||||
|
|
||||||
// Copy relocations
|
// Copy relocations
|
||||||
relocs := l.Relocs(symIdx)
|
relocs := l.Relocs(symIdx)
|
||||||
pp.relocs = make([]goobj2.Reloc2, relocs.Count)
|
pp.relocs = make([]goobj2.Reloc2, relocs.Count())
|
||||||
pp.reltypes = make([]objabi.RelocType, relocs.Count)
|
pp.reltypes = make([]objabi.RelocType, relocs.Count())
|
||||||
for i := range pp.relocs {
|
for i := range pp.relocs {
|
||||||
// Copy the relocs slice.
|
// Copy the relocs slice.
|
||||||
// Convert local reference to global reference.
|
// Convert local reference to global reference.
|
||||||
@ -2385,8 +2381,8 @@ func loadObjFull(l *Loader, r *oReader) {
|
|||||||
// Relocs
|
// Relocs
|
||||||
relocs := l.relocs(r, i)
|
relocs := l.relocs(r, i)
|
||||||
batch := l.relocBatch
|
batch := l.relocBatch
|
||||||
s.R = batch[:relocs.Count:relocs.Count]
|
s.R = batch[:relocs.Count():relocs.Count()]
|
||||||
l.relocBatch = batch[relocs.Count:]
|
l.relocBatch = batch[relocs.Count():]
|
||||||
l.convertRelocations(&relocs, s, false)
|
l.convertRelocations(&relocs, s, false)
|
||||||
|
|
||||||
// Aux symbol info
|
// Aux symbol info
|
||||||
@ -2603,7 +2599,7 @@ func (l *Loader) UndefinedRelocTargets(limit int) []Sym {
|
|||||||
result := []Sym{}
|
result := []Sym{}
|
||||||
for si := Sym(1); si < Sym(len(l.objSyms)); si++ {
|
for si := Sym(1); si < Sym(len(l.objSyms)); si++ {
|
||||||
relocs := l.Relocs(si)
|
relocs := l.Relocs(si)
|
||||||
for ri := 0; ri < relocs.Count; ri++ {
|
for ri := 0; ri < relocs.Count(); ri++ {
|
||||||
r := relocs.At2(ri)
|
r := relocs.At2(ri)
|
||||||
rs := r.Sym()
|
rs := r.Sym()
|
||||||
if rs != 0 && l.SymType(rs) == sym.SXREF && l.RawSymName(rs) != ".got" {
|
if rs != 0 && l.SymType(rs) == sym.SXREF && l.RawSymName(rs) != ".got" {
|
||||||
|
@ -209,10 +209,10 @@ func TestAddMaterializedSymbol(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func sameRelocSlice(s1 *Relocs, s2 []Reloc) bool {
|
func sameRelocSlice(s1 *Relocs, s2 []Reloc) bool {
|
||||||
if s1.Count != len(s2) {
|
if s1.Count() != len(s2) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
for i := 0; i < s1.Count; i++ {
|
for i := 0; i < s1.Count(); i++ {
|
||||||
r1 := s1.At2(i)
|
r1 := s1.At2(i)
|
||||||
r2 := &s2[i]
|
r2 := &s2[i]
|
||||||
if r1.Sym() != r2.Sym ||
|
if r1.Sym() != r2.Sym ||
|
||||||
|
Loading…
Reference in New Issue
Block a user