data += len(pc.Pcfile.P)
data += len(pc.Pcline.P)
data += len(pc.Pcinline.P)
- for i := 0; i < len(pc.Pcdata); i++ {
- data += len(pc.Pcdata[i].P)
+ for _, pcd := range pc.Pcdata {
+ data += len(pcd.P)
}
w.nData += data
w.wr.Write(pc.Pcfile.P)
w.wr.Write(pc.Pcline.P)
w.wr.Write(pc.Pcinline.P)
- for i := 0; i < len(pc.Pcdata); i++ {
- w.wr.Write(pc.Pcdata[i].P)
+ for _, pcd := range pc.Pcdata {
+ w.wr.Write(pcd.P)
}
}
for _, s := range ctxt.Data {
w.writeString(s.Name)
}
// Write "version".
- if s.Static() {
- w.writeInt(1)
- } else {
- w.writeInt(0)
- }
+ w.writeBool(s.Static())
w.nRefs++
s.RefIdx = w.nRefs
m[s.Name] = w.nRefs
func (w *objWriter) writeRefs(s *LSym) {
w.writeRef(s, false)
w.writeRef(s.Gotype, false)
- for i := range s.R {
- w.writeRef(s.R[i].Sym, false)
+ for _, r := range s.R {
+ w.writeRef(r.Sym, false)
}
if s.Type == objabi.STEXT {
w.writeInt(int64(len(s.R)))
var r *Reloc
- for i := 0; i < len(s.R); i++ {
+ for i := range s.R {
r = &s.R[i]
w.writeInt(int64(r.Off))
w.writeInt(int64(r.Siz))
w.writeInt(int64(s.Func.Args))
w.writeInt(int64(s.Func.Locals))
- if s.NoSplit() {
- w.writeInt(1)
- } else {
- w.writeInt(0)
- }
+ w.writeBool(s.NoSplit())
flags = int64(0)
if s.Leaf() {
flags |= 1
w.writeInt(int64(len(pc.Pcline.P)))
w.writeInt(int64(len(pc.Pcinline.P)))
w.writeInt(int64(len(pc.Pcdata)))
- for i := 0; i < len(pc.Pcdata); i++ {
- w.writeInt(int64(len(pc.Pcdata[i].P)))
+ for _, pcd := range pc.Pcdata {
+ w.writeInt(int64(len(pcd.P)))
}
w.writeInt(int64(len(pc.Funcdataoff)))
- for i := 0; i < len(pc.Funcdataoff); i++ {
+ for i := range pc.Funcdataoff {
w.writeRefIndex(pc.Funcdata[i])
}
- for i := 0; i < len(pc.Funcdataoff); i++ {
+ for i := range pc.Funcdataoff {
w.writeInt(pc.Funcdataoff[i])
}
w.writeInt(int64(len(pc.File)))
}
}
+func (w *objWriter) writeBool(b bool) {
+ if b {
+ w.writeInt(1)
+ } else {
+ w.writeInt(0)
+ }
+}
+
func (w *objWriter) writeInt(sval int64) {
var v uint64
uv := (uint64(sval) << 1) ^ uint64(sval>>63)
// Generate the slice of declOffset's based in vars/coffsets
doffsets := make([]declOffset, len(coffsets))
- for i := 0; i < len(coffsets); i++ {
+ for i := range coffsets {
doffsets[i].dclIdx = vars[i].ChildIndex
doffsets[i].offset = coffsets[i]
}
sf := &ft.svec[slot]
for _, f := range sf.fixups {
dfound := false
- for i := 0; i < len(sf.doffsets); i++ {
- if sf.doffsets[i].dclIdx == f.dclidx {
- f.refsym.R[f.relidx].Add += int64(sf.doffsets[i].offset)
+ for _, doffset := range sf.doffsets {
+ if doffset.dclIdx == f.dclidx {
+ f.refsym.R[f.relidx].Add += int64(doffset.offset)
dfound = true
break
}
// resulting list (don't want to rely on map ordering here).
fns := make([]*LSym, len(ft.precursor))
idx := 0
- for fn, _ := range ft.precursor {
+ for fn := range ft.precursor {
fns[idx] = fn
idx++
}
}
// Generate any missing abstract functions.
- for i := 0; i < len(fns); i++ {
- s := fns[i]
+ for _, s := range fns {
absfn := ft.AbsFuncDwarfSym(s)
slot, found := ft.symtab[absfn]
if !found || !ft.svec[slot].defseen {
}
// Apply fixups.
- for i := 0; i < len(fns); i++ {
- s := fns[i]
+ for _, s := range fns {
absfn := ft.AbsFuncDwarfSym(s)
slot, found := ft.symtab[absfn]
if !found {
}
func linkpatch(ctxt *Link, sym *LSym, newprog ProgAlloc) {
- var c int32
- var name string
- var q *Prog
-
for p := sym.Func.Text; p != nil; p = p.Link {
checkaddr(ctxt, p, &p.From)
if p.GetFrom3() != nil {
if p.To.Sym != nil {
continue
}
- c = int32(p.To.Offset)
- for q = sym.Func.Text; q != nil; {
- if int64(c) == q.Pc {
+ q := sym.Func.Text
+ for q != nil {
+ if p.To.Offset == q.Pc {
break
}
- if q.Forwd != nil && int64(c) >= q.Forwd.Pc {
+ if q.Forwd != nil && p.To.Offset >= q.Forwd.Pc {
q = q.Forwd
} else {
q = q.Link
}
if q == nil {
- name = "<nil>"
+ name := "<nil>"
if p.To.Sym != nil {
name = p.To.Sym.Name
}
- ctxt.Diag("branch out of range (%#x)\n%v [%s]", uint32(c), p, name)
+ ctxt.Diag("branch out of range (%#x)\n%v [%s]", uint32(p.To.Offset), p, name)
p.To.Type = TYPE_NONE
}
if dbg {
ctxt.Logf("wrote %d bytes to %p\n", len(dst.P), dst)
- for i := 0; i < len(dst.P); i++ {
- ctxt.Logf(" %02x", dst.P[i])
+ for _, p := range dst.P {
+ ctxt.Logf(" %02x", p)
}
ctxt.Logf("\n")
}
// funcdata
if nfuncdata > 0 {
- var i int
for p := cursym.Func.Text; p != nil; p = p.Link {
- if p.As == AFUNCDATA {
- i = int(p.From.Offset)
- pcln.Funcdataoff[i] = p.To.Offset
- if p.To.Type != TYPE_CONST {
- // TODO: Dedup.
- //funcdata_bytes += p->to.sym->size;
- pcln.Funcdata[i] = p.To.Sym
- }
+ if p.As != AFUNCDATA {
+ continue
+ }
+ i := int(p.From.Offset)
+ pcln.Funcdataoff[i] = p.To.Offset
+ if p.To.Type != TYPE_CONST {
+ // TODO: Dedup.
+ //funcdata_bytes += p->to.sym->size;
+ pcln.Funcdata[i] = p.To.Sym
}
}
}