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
                        }
                }
        }