if s == rel {
return
}
- for ri := 0; ri < len(s.R); ri++ {
+ for ri := range s.R {
r := &s.R[ri]
targ := r.Sym
if targ == nil {
return
}
- for ri := 0; ri < len(s.R); ri++ {
+ for ri := range s.R {
r := &s.R[ri]
if ctxt.BuildMode == BuildModePIE && ctxt.LinkMode == LinkInternal {
// It's expected that some relocations will be done
}
eaddr := addr + size
- var q []byte
for _, s := range syms {
if !s.Attr.Reachable() {
continue
}
ctxt.Logf("%.6x\t%-20s\n", uint64(addr), s.Name)
- q = s.P
+ q := s.P
for len(q) >= 16 {
ctxt.Logf("%.6x\t% x\n", uint64(addr), q[:16])
sect.Align = dataMaxAlign[sym.SELFGOT]
datsize = Rnd(datsize, int64(sect.Align))
sect.Vaddr = uint64(datsize)
- var toc *sym.Symbol
for _, s := range data[sym.SELFGOT] {
datsize = aligndatsize(datsize, s)
s.Sect = sect
s.Value = int64(uint64(datsize) - sect.Vaddr)
// Resolve .TOC. symbol for this object file (ppc64)
- toc = ctxt.Syms.ROLookup(".TOC.", int(s.Version))
+ toc := ctxt.Syms.ROLookup(".TOC.", int(s.Version))
if toc != nil {
toc.Sect = sect
toc.Outer = s
mpos := 0 // 0-3, the R_METHODOFF relocs of runtime.uncommontype
var methods []methodref
- for i := 0; i < len(s.R); i++ {
+ for i := range s.R {
r := &s.R[i]
if r.Sym == nil {
continue
dotypedef(ctxt, &dwtypes, name, die)
newrefattr(die, dwarf.DW_AT_type, mustFind(ctxt, "void"))
nfields := decodetypeFuncInCount(ctxt.Arch, gotype)
- var fld *dwarf.DWDie
- var s *sym.Symbol
for i := 0; i < nfields; i++ {
- s = decodetypeFuncInType(ctxt.Arch, gotype, i)
- fld = newdie(ctxt, die, dwarf.DW_ABRV_FUNCTYPEPARAM, s.Name[5:], 0)
+ s := decodetypeFuncInType(ctxt.Arch, gotype, i)
+ fld := newdie(ctxt, die, dwarf.DW_ABRV_FUNCTYPEPARAM, s.Name[5:], 0)
newrefattr(fld, dwarf.DW_AT_type, defgotype(ctxt, s))
}
}
nfields = decodetypeFuncOutCount(ctxt.Arch, gotype)
for i := 0; i < nfields; i++ {
- s = decodetypeFuncOutType(ctxt.Arch, gotype, i)
- fld = newdie(ctxt, die, dwarf.DW_ABRV_FUNCTYPEPARAM, s.Name[5:], 0)
+ s := decodetypeFuncOutType(ctxt.Arch, gotype, i)
+ fld := newdie(ctxt, die, dwarf.DW_ABRV_FUNCTYPEPARAM, s.Name[5:], 0)
newrefattr(fld, dwarf.DW_AT_type, defptrto(ctxt, defgotype(ctxt, s)))
}
}
func mkinternaltypename(base string, arg1 string, arg2 string) string {
- var buf string
-
if arg2 == "" {
- buf = fmt.Sprintf("%s<%s>", base, arg1)
- } else {
- buf = fmt.Sprintf("%s<%s,%s>", base, arg1, arg2)
+ return fmt.Sprintf("%s<%s>", base, arg1)
}
- n := buf
- return n
+ return fmt.Sprintf("%s<%s,%s>", base, arg1, arg2)
}
// synthesizemaptypes is way too closely married to runtime/hashmap.c
// example, files mentioned only in an inlined subroutine).
dsym := ctxt.Syms.Lookup(dwarf.InfoPrefix+s.Name, int(s.Version))
importInfoSymbol(ctxt, dsym)
- for ri := 0; ri < len(dsym.R); ri++ {
+ for ri := range dsym.R {
r := &dsym.R[ri]
if r.Type != objabi.R_DWARFFILEREF {
continue
// DIE flavors (ex: variables) then those DIEs would need to
// be included below.
missing := make(map[int]interface{})
- for fidx := 0; fidx < len(funcs); fidx++ {
- f := funcs[fidx]
- for ri := 0; ri < len(f.R); ri++ {
+ for _, f := range funcs {
+ for ri := range f.R {
r := &f.R[ri]
if r.Type != objabi.R_DWARFFILEREF {
continue
if s.Value >= int64(eaddr) {
break
}
- for ri := 0; ri < len(s.R); ri++ {
+ for ri := range s.R {
r := &s.R[ri]
if r.Done {
continue
return nil
}
- for i := 0; i < len(ctxt.Libdir); i++ {
+ for _, libdir := range ctxt.Libdir {
if ctxt.linkShared {
- shlibname := filepath.Join(ctxt.Libdir[i], name+".shlibname")
+ shlibname := filepath.Join(libdir, name+".shlibname")
if ctxt.Debugvlog != 0 {
ctxt.Logf("searching for %s.a in %s\n", name, shlibname)
}
return addlibpath(ctxt, "internal", "internal", "", name, shlibname)
}
}
- pname := filepath.Join(ctxt.Libdir[i], name+".a")
+ pname := filepath.Join(libdir, name+".a")
if ctxt.Debugvlog != 0 {
ctxt.Logf("searching for %s.a in %s\n", name, pname)
}
x = sym.AttrCgoExportStatic
}
w := 0
- for i := 0; i < len(dynexp); i++ {
+ for i := range dynexp {
if dynexp[i].Attr&x != 0 {
dynexp[w] = dynexp[i]
w++
func ldhostobj(ld func(*Link, *bio.Reader, string, int64, string), headType objabi.HeadType, f *bio.Reader, pkg string, length int64, pn string, file string) *Hostobj {
isinternal := false
- for i := 0; i < len(internalpkg); i++ {
- if pkg == internalpkg[i] {
+ for _, intpkg := range internalpkg {
+ if pkg == intpkg {
isinternal = true
break
}
Exit(2)
}
-func doversion() {
- Exitf("version %s", objabi.Version)
-}
-
type SymbolType int8
const (
// see also http://9p.io/magic/man2html/1/nm
TextSym SymbolType = 'T'
- DataSym = 'D'
- BSSSym = 'B'
- UndefinedSym = 'U'
- TLSSym = 't'
- FrameSym = 'm'
- ParamSym = 'p'
- AutoSym = 'a'
+ DataSym SymbolType = 'D'
+ BSSSym SymbolType = 'B'
+ UndefinedSym SymbolType = 'U'
+ TLSSym SymbolType = 't'
+ FrameSym SymbolType = 'm'
+ ParamSym SymbolType = 'p'
+ AutoSym SymbolType = 'a'
// Deleted auto (not a real sym, just placeholder for type)
DeletedAutoSym = 'x'
type markKind uint8 // for postorder traversal
const (
- unvisited markKind = iota
+ _ markKind = iota
visiting
visited
)
o1 := out.Offset()
loadsize := 4 * 4 * ndebug
- for i := 0; i < len(load); i++ {
+ for i := range load {
loadsize += 4 * (len(load[i].data) + 2)
}
if arch.PtrSize == 8 {
}
}
- for i := 0; i < len(load); i++ {
+ for i := range load {
l := &load[i]
out.Write32(l.type_)
out.Write32(4 * (uint32(len(l.data)) + 2))
ml.data[0] = 12 /* offset to string */
stringtouint32(ml.data[1:], "/usr/lib/dyld")
- for i := 0; i < len(dylib); i++ {
- ml = newMachoLoad(ctxt.Arch, LC_LOAD_DYLIB, 4+(uint32(len(dylib[i]))+1+7)/8*2)
+ for _, lib := range dylib {
+ ml = newMachoLoad(ctxt.Arch, LC_LOAD_DYLIB, 4+(uint32(len(lib))+1+7)/8*2)
ml.data[0] = 24 /* offset of string from beginning of load */
ml.data[1] = 0 /* time stamp */
ml.data[2] = 0 /* version */
ml.data[3] = 0 /* compatibility version */
- stringtouint32(ml.data[4:], dylib[i])
+ stringtouint32(ml.data[4:], lib)
}
}
}
// On Mac OS X Mountain Lion, we must sort exported symbols
// So we sort them here and pre-allocate dynid for them
// See https://golang.org/issue/4029
- for i := 0; i < len(dynexp); i++ {
+ for i := range dynexp {
dynexp[i].Attr |= sym.AttrReachable
}
machogenasmsym(ctxt)
if s.Value >= int64(eaddr) {
break
}
- for ri := 0; ri < len(s.R); ri++ {
+ for ri := range s.R {
r := &s.R[ri]
if r.Done {
continue
}
func renumberfiles(ctxt *Link, files []*sym.Symbol, d *sym.Pcdata) {
- var f *sym.Symbol
-
// Give files numbers.
- for i := 0; i < len(files); i++ {
- f = files[i]
+ for _, f := range files {
numberfile(ctxt, f)
}
off = addpctab(ctxt, ftab, off, &pcln.Pcline)
off = int32(ftab.SetUint32(ctxt.Arch, int64(off), uint32(len(pcln.Pcdata))))
off = int32(ftab.SetUint32(ctxt.Arch, int64(off), uint32(len(pcln.Funcdata))))
- for i := 0; i < len(pcln.Pcdata); i++ {
+ for i := range pcln.Pcdata {
off = addpctab(ctxt, ftab, off, &pcln.Pcdata[i])
}
if off&int32(ctxt.Arch.PtrSize-1) != 0 {
off += 4
}
- for i := 0; i < len(pcln.Funcdata); i++ {
+ for i := range pcln.Funcdata {
if pcln.Funcdata[i] == nil {
ftab.SetUint(ctxt.Arch, int64(off)+int64(ctxt.Arch.PtrSize)*int64(i), uint64(pcln.Funcdataoff[i]))
} else {
if sym.Value >= int64(eaddr) {
break
}
- for ri := 0; ri < len(sym.R); ri++ {
+ for ri := range sym.R {
r := &sym.R[ri]
if r.Done {
continue
}
// write function names
- var m *Imp
for d := dr; d != nil; d = d.next {
- for m = d.ms; m != nil; m = m.next {
+ for m := d.ms; m != nil; m = m.next {
m.off = uint64(pefile.nextSectOffset) + uint64(ctxt.Out.Offset()) - uint64(startoff)
ctxt.Out.Write16(0) // hint
strput(ctxt.Out, m.s.Extname)
n = uint64(ctxt.Out.Offset())
for d := dr; d != nil; d = d.next {
d.thunkoff = uint64(ctxt.Out.Offset()) - n
- for m = d.ms; m != nil; m = m.next {
+ for m := d.ms; m != nil; m = m.next {
if pe64 != 0 {
ctxt.Out.Write64(m.off)
} else {
ctxt.Out.SeekSet(int64(uint64(datsect.pointerToRawData) + ftbase))
for d := dr; d != nil; d = d.next {
- for m = d.ms; m != nil; m = m.next {
+ for m := d.ms; m != nil; m = m.next {
if pe64 != 0 {
ctxt.Out.Write64(m.off)
} else {
h.checkOffset(ctxt.Out.Offset())
// relocation
- var p []byte
- var r *sym.Reloc
- var val uint32
- for ri := 0; ri < len(rsrcsym.R); ri++ {
- r = &rsrcsym.R[ri]
- p = rsrcsym.P[r.Off:]
- val = uint32(int64(h.virtualAddress) + r.Add)
+ for ri := range rsrcsym.R {
+ r := &rsrcsym.R[ri]
+ p := rsrcsym.P[r.Off:]
+ val := uint32(int64(h.virtualAddress) + r.Add)
// 32-bit little-endian
p[0] = byte(val)