]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link/internal/ld: reduce the scope of some local declarations
authorDave Cheney <dave@cheney.net>
Sun, 1 Oct 2017 03:39:04 +0000 (14:39 +1100)
committerDave Cheney <dave@cheney.net>
Sun, 1 Oct 2017 22:00:18 +0000 (22:00 +0000)
Move some local declarations closer to their use, reducing their
respective lifetimes. Spotted while reviewing CL 67318.

Change-Id: I68db67fe8530344d95e50efb6587bc724e1171f5
Reviewed-on: https://go-review.googlesource.com/67370
Run-TryBot: Dave Cheney <dave@cheney.net>
Reviewed-by: Marvin Stenger <marvin.stenger94@gmail.com>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/link/internal/ld/data.go
src/cmd/link/internal/ld/elf.go
src/cmd/link/internal/ld/go.go
src/cmd/link/internal/ld/ldelf.go
src/cmd/link/internal/ld/ldmacho.go
src/cmd/link/internal/ld/macho.go

index 5dfd10fa92adc6936f4e60d46b4ccc47779f3dd9..495c8b72e8f4e968d7678eec94fcb46c584c5319 100644 (file)
@@ -381,20 +381,11 @@ func trampoline(ctxt *Link, s *Symbol) {
 
 // resolve relocations in s.
 func relocsym(ctxt *Link, s *Symbol) {
-       var r *Reloc
-       var rs *Symbol
-       var i16 int16
-       var off int32
-       var siz int32
-       var fl int32
-       var o int64
-
        for ri := int32(0); ri < int32(len(s.R)); ri++ {
-               r = &s.R[ri]
-
+               r := &s.R[ri]
                r.Done = true
-               off = r.Off
-               siz = int32(r.Siz)
+               off := r.Off
+               siz := int32(r.Siz)
                if off < 0 || off+siz > int32(len(s.P)) {
                        rname := ""
                        if r.Sym != nil {
@@ -450,6 +441,7 @@ func relocsym(ctxt *Link, s *Symbol) {
                        }
                }
 
+               var o int64
                switch r.Type {
                default:
                        switch siz {
@@ -535,7 +527,7 @@ func relocsym(ctxt *Link, s *Symbol) {
                                r.Done = false
 
                                // set up addend for eventual relocation via outer symbol.
-                               rs = r.Sym
+                               rs := r.Sym
 
                                r.Xadd = r.Add
                                for rs.Outer != nil {
@@ -607,7 +599,6 @@ func relocsym(ctxt *Link, s *Symbol) {
                                r.Xadd = r.Add + Symaddr(r.Sym) - int64(r.Sym.Sect.Vaddr)
 
                                o = r.Xadd
-                               rs = r.Xsym
                                if Iself && SysArch.Family == sys.AMD64 {
                                        o = 0
                                }
@@ -647,7 +638,7 @@ func relocsym(ctxt *Link, s *Symbol) {
                                r.Done = false
 
                                // set up addend for eventual relocation via outer symbol.
-                               rs = r.Sym
+                               rs := r.Sym
 
                                r.Xadd = r.Add
                                for rs.Outer != nil {
@@ -722,7 +713,7 @@ func relocsym(ctxt *Link, s *Symbol) {
                        if o != int64(int16(o)) {
                                Errorf(s, "relocation address for %s is too big: %#x", r.Sym.Name, o)
                        }
-                       i16 = int16(o)
+                       i16 := int16(o)
                        ctxt.Arch.ByteOrder.PutUint16(s.P[off:], uint16(i16))
                case 4:
                        if r.Type == objabi.R_PCREL || r.Type == objabi.R_CALL {
@@ -735,7 +726,7 @@ func relocsym(ctxt *Link, s *Symbol) {
                                }
                        }
 
-                       fl = int32(o)
+                       fl := int32(o)
                        ctxt.Arch.ByteOrder.PutUint32(s.P[off:], uint32(fl))
                case 8:
                        ctxt.Arch.ByteOrder.PutUint64(s.P[off:], uint64(o))
@@ -2233,12 +2224,11 @@ func (ctxt *Link) address() {
        var noptr *Section
        var bss *Section
        var noptrbss *Section
-       var vlen int64
        for i, s := range Segdata.Sections {
                if Iself && s.Name == ".tbss" {
                        continue
                }
-               vlen = int64(s.Length)
+               vlen := int64(s.Length)
                if i+1 < len(Segdata.Sections) && !(Iself && Segdata.Sections[i+1].Name == ".tbss") {
                        vlen = int64(Segdata.Sections[i+1].Vaddr - s.Vaddr)
                }
@@ -2270,7 +2260,7 @@ func (ctxt *Link) address() {
                Segdwarf.Fileoff = Segdata.Fileoff + uint64(Rnd(int64(Segdata.Filelen), int64(PEFILEALIGN)))
        }
        for i, s := range Segdwarf.Sections {
-               vlen = int64(s.Length)
+               vlen := int64(s.Length)
                if i+1 < len(Segdwarf.Sections) {
                        vlen = int64(Segdwarf.Sections[i+1].Vaddr - s.Vaddr)
                }
index 0edf76ec5a85c5b9d85a404bdb5c8308b02b08c5..b998533b7a5926ef3981633fd256232f1055c03c 100644 (file)
@@ -1462,7 +1462,6 @@ func elfdynhash(ctxt *Link) {
        chain := make([]uint32, nsym)
        buckets := make([]uint32, nbucket)
 
-       var b int
        for _, sy := range ctxt.Syms.Allsym {
                if sy.Dynid <= 0 {
                        continue
@@ -1475,7 +1474,7 @@ func elfdynhash(ctxt *Link) {
                name := sy.Extname
                hc := elfhash(name)
 
-               b = int(hc % uint32(nbucket))
+               b := hc % uint32(nbucket)
                chain[sy.Dynid] = buckets[b]
                buckets[b] = uint32(sy.Dynid)
        }
@@ -1507,15 +1506,13 @@ func elfdynhash(ctxt *Link) {
        s = ctxt.Syms.Lookup(".gnu.version_r", 0)
        i = 2
        nfile := 0
-       var j int
-       var x *Elfaux
        for l := needlib; l != nil; l = l.next {
                nfile++
 
                // header
                Adduint16(ctxt, s, 1) // table version
-               j = 0
-               for x = l.aux; x != nil; x = x.next {
+               j := 0
+               for x := l.aux; x != nil; x = x.next {
                        j++
                }
                Adduint16(ctxt, s, uint16(j))                         // aux count
@@ -1527,7 +1524,7 @@ func elfdynhash(ctxt *Link) {
                        Adduint32(ctxt, s, 0)
                }
 
-               for x = l.aux; x != nil; x = x.next {
+               for x := l.aux; x != nil; x = x.next {
                        x.num = i
                        i++
 
@@ -1613,24 +1610,18 @@ func elfphrelro(seg *Segment) {
 }
 
 func elfshname(name string) *ElfShdr {
-       var off int
-       var sh *ElfShdr
-
        for i := 0; i < nelfstr; i++ {
                if name == elfstr[i].s {
-                       off = elfstr[i].off
+                       off := elfstr[i].off
                        for i = 0; i < int(ehdr.shnum); i++ {
-                               sh = shdr[i]
+                               sh := shdr[i]
                                if sh.name == uint32(off) {
                                        return sh
                                }
                        }
-
-                       sh = newElfShdr(int64(off))
-                       return sh
+                       return newElfShdr(int64(off))
                }
        }
-
        Exitf("cannot find elf name %s", name)
        return nil
 }
@@ -1638,14 +1629,10 @@ func elfshname(name string) *ElfShdr {
 // Create an ElfShdr for the section with name.
 // Create a duplicate if one already exists with that name
 func elfshnamedup(name string) *ElfShdr {
-       var off int
-       var sh *ElfShdr
-
        for i := 0; i < nelfstr; i++ {
                if name == elfstr[i].s {
-                       off = elfstr[i].off
-                       sh = newElfShdr(int64(off))
-                       return sh
+                       off := elfstr[i].off
+                       return newElfShdr(int64(off))
                }
        }
 
index 1494ca87eb5840a2d5172644886056ce0f64fb95..491b4e70f8504d7090eacf95712ca77bcc811bda 100644 (file)
@@ -29,8 +29,6 @@ func expandpkg(t0 string, pkg string) string {
 //             libmach, so that other linkers and ar can share.
 
 func ldpkg(ctxt *Link, f *bio.Reader, pkg string, length int64, filename string, whence int) {
-       var p0, p1 int
-
        if *flagG {
                return
        }
@@ -95,7 +93,8 @@ func ldpkg(ctxt *Link, f *bio.Reader, pkg string, length int64, filename string,
        }
 
        // look for cgo section
-       p0 = strings.Index(data, "\n$$  // cgo")
+       p0 := strings.Index(data, "\n$$  // cgo")
+       var p1 int
        if p0 >= 0 {
                p0 += p1
                i := strings.IndexByte(data[p0+1:], '\n')
@@ -128,9 +127,6 @@ func ldpkg(ctxt *Link, f *bio.Reader, pkg string, length int64, filename string,
 func loadcgo(ctxt *Link, file string, pkg string, p string) {
        var next string
        var q string
-       var f []string
-       var local string
-       var remote string
        var lib string
        var s *Symbol
 
@@ -143,7 +139,7 @@ func loadcgo(ctxt *Link, file string, pkg string, p string) {
                }
 
                p0 = p // save for error message
-               f = tokenize(p)
+               f := tokenize(p)
                if len(f) == 0 {
                        continue
                }
@@ -153,8 +149,8 @@ func loadcgo(ctxt *Link, file string, pkg string, p string) {
                                goto err
                        }
 
-                       local = f[1]
-                       remote = local
+                       local := f[1]
+                       remote := local
                        if len(f) > 2 {
                                remote = f[2]
                        }
@@ -205,7 +201,7 @@ func loadcgo(ctxt *Link, file string, pkg string, p string) {
                        if len(f) != 2 {
                                goto err
                        }
-                       local = f[1]
+                       local := f[1]
                        s = ctxt.Syms.Lookup(local, 0)
                        s.Type = SHOSTOBJ
                        s.Size = 0
@@ -216,7 +212,8 @@ func loadcgo(ctxt *Link, file string, pkg string, p string) {
                        if len(f) < 2 || len(f) > 3 {
                                goto err
                        }
-                       local = f[1]
+                       local := f[1]
+                       var remote string
                        if len(f) > 2 {
                                remote = f[2]
                        } else {
index 340d9b22533b5fc2ae04c2287a381034809bff75..419113f76daac87851f51ff82d47c4267a29ac84 100644 (file)
@@ -450,36 +450,18 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
        localSymVersion := ctxt.Syms.IncVersion()
        base := f.Offset()
 
-       var add uint64
-       var e binary.ByteOrder
-       var elfobj *ElfObj
-       var flag int
-       var hdr *ElfHdrBytes
        var hdrbuf [64]uint8
-       var info uint64
-       var is64 int
-       var j int
-       var n int
-       var name string
-       var p []byte
-       var r []Reloc
-       var rela int
-       var rp *Reloc
-       var rsect *ElfSect
-       var s *Symbol
-       var sect *ElfSect
-       var sym ElfSym
-       var symbols []*Symbol
        if _, err := io.ReadFull(f, hdrbuf[:]); err != nil {
                Errorf(nil, "%s: malformed elf file: %v", pn, err)
                return
        }
-       hdr = new(ElfHdrBytes)
+       hdr := new(ElfHdrBytes)
        binary.Read(bytes.NewReader(hdrbuf[:]), binary.BigEndian, hdr) // only byte arrays; byte order doesn't matter
        if string(hdr.Ident[:4]) != "\x7FELF" {
                Errorf(nil, "%s: malformed elf file", pn)
                return
        }
+       var e binary.ByteOrder
        switch hdr.Ident[5] {
        case ElfDataLsb:
                e = binary.LittleEndian
@@ -493,7 +475,7 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
        }
 
        // read header
-       elfobj = new(ElfObj)
+       elfobj := new(ElfObj)
 
        elfobj.e = e
        elfobj.f = f
@@ -501,7 +483,7 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
        elfobj.length = length
        elfobj.name = pn
 
-       is64 = 0
+       is64 := 0
        if hdr.Ident[4] == ElfClass64 {
                is64 = 1
                hdr := new(ElfHdrBytes64)
@@ -609,7 +591,7 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                        Errorf(nil, "%s: malformed elf file", pn)
                        return
                }
-               sect = &elfobj.sect[i]
+               sect := &elfobj.sect[i]
                if is64 != 0 {
                        var b ElfSectBytes64
 
@@ -655,7 +637,7 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                return
        }
 
-       sect = &elfobj.sect[elfobj.shstrndx]
+       sect := &elfobj.sect[elfobj.shstrndx]
        if err := elfmap(elfobj, sect); err != nil {
                Errorf(nil, "%s: malformed elf file: %v", pn, err)
                return
@@ -720,8 +702,8 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                        }
                }
 
-               name = fmt.Sprintf("%s(%s)", pkg, sect.name)
-               s = ctxt.Syms.Lookup(name, localSymVersion)
+               name := fmt.Sprintf("%s(%s)", pkg, sect.name)
+               s := ctxt.Syms.Lookup(name, localSymVersion)
 
                switch int(sect.flags) & (ElfSectFlagAlloc | ElfSectFlagWrite | ElfSectFlagExec) {
                default:
@@ -757,9 +739,10 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
 
        // enter sub-symbols into symbol table.
        // symbol 0 is the null symbol.
-       symbols = make([]*Symbol, elfobj.nsymtab)
+       symbols := make([]*Symbol, elfobj.nsymtab)
 
        for i := 1; i < elfobj.nsymtab; i++ {
+               var sym ElfSym
                if err := readelfsym(ctxt, elfobj, i, &sym, 1, localSymVersion); err != nil {
                        Errorf(nil, "%s: malformed elf file: %v", pn, err)
                        return
@@ -769,7 +752,7 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                        continue
                }
                if sym.shndx == ElfSymShnCommon || sym.type_ == ElfSymTypeCommon {
-                       s = sym.sym
+                       s := sym.sym
                        if uint64(s.Size) < sym.size {
                                s.Size = int64(sym.size)
                        }
@@ -806,7 +789,7 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                        continue
                }
 
-               s = sym.sym
+               s := sym.sym
                if s.Outer != nil {
                        if s.Attr.DuplicateOK() {
                                continue
@@ -831,7 +814,7 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                }
 
                if elfobj.machine == ElfMachPower64 {
-                       flag = int(sym.other) >> 5
+                       flag := int(sym.other) >> 5
                        if 2 <= flag && flag <= 6 {
                                s.Localentry = 1 << uint(flag-2)
                        } else if flag == 7 {
@@ -842,8 +825,8 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
 
        // Sort outer lists by address, adding to textp.
        // This keeps textp in increasing address order.
-       for i := 0; uint(i) < elfobj.nsect; i++ {
-               s = elfobj.sect[i].sym
+       for i := uint(0); i < elfobj.nsect; i++ {
+               s := elfobj.sect[i].sym
                if s == nil {
                        continue
                }
@@ -867,8 +850,8 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
        }
 
        // load relocations
-       for i := 0; uint(i) < elfobj.nsect; i++ {
-               rsect = &elfobj.sect[i]
+       for i := uint(0); i < elfobj.nsect; i++ {
+               rsect := &elfobj.sect[i]
                if rsect.type_ != ElfSectRela && rsect.type_ != ElfSectRel {
                        continue
                }
@@ -880,16 +863,17 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                        Errorf(nil, "%s: malformed elf file: %v", pn, err)
                        return
                }
-               rela = 0
+               rela := 0
                if rsect.type_ == ElfSectRela {
                        rela = 1
                }
-               n = int(rsect.size / uint64(4+4*is64) / uint64(2+rela))
-               r = make([]Reloc, n)
-               p = rsect.base
-               for j = 0; j < n; j++ {
-                       add = 0
-                       rp = &r[j]
+               n := int(rsect.size / uint64(4+4*is64) / uint64(2+rela))
+               r := make([]Reloc, n)
+               p := rsect.base
+               for j := 0; j < n; j++ {
+                       var add uint64
+                       rp := &r[j]
+                       var info uint64
                        if is64 != 0 {
                                // 64-bit rel/rela
                                rp.Off = int32(e.Uint64(p))
@@ -924,6 +908,7 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                        if info>>32 == 0 { // absolute relocation, don't bother reading the null symbol
                                rp.Sym = nil
                        } else {
+                               var sym ElfSym
                                if err := readelfsym(ctxt, elfobj, int(info>>32), &sym, 0, 0); err != nil {
                                        Errorf(nil, "%s: malformed elf file: %v", pn, err)
                                        return
@@ -964,7 +949,7 @@ func ldelf(ctxt *Link, f *bio.Reader, pkg string, length int64, pn string) {
                sort.Sort(rbyoff(r[:n]))
                // just in case
 
-               s = sect.sym
+               s := sect.sym
                s.R = r
                s.R = s.R[:n]
        }
index 7fc452dffec28240b2ffafdf13c7d3fa030d2c8b..89556c6b1f65c42285c83a642079019bdf3d2fbc 100644 (file)
@@ -306,12 +306,9 @@ func macholoadrel(m *ldMachoObj, sect *ldMachoSect) int {
        if _, err := io.ReadFull(m.f, buf); err != nil {
                return -1
        }
-       var p []byte
-       var r *ldMachoRel
-       var v uint32
-       for i := 0; uint32(i) < sect.nreloc; i++ {
-               r = &rel[i]
-               p = buf[i*8:]
+       for i := uint32(0); i < sect.nreloc; i++ {
+               r := &rel[i]
+               p := buf[i*8:]
                r.addr = m.e.Uint32(p)
 
                // TODO(rsc): Wrong interpretation for big-endian bitfields?
@@ -319,7 +316,7 @@ func macholoadrel(m *ldMachoObj, sect *ldMachoSect) int {
                        // scatterbrained relocation
                        r.scattered = 1
 
-                       v = r.addr >> 24
+                       v := r.addr >> 24
                        r.addr &= 0xFFFFFF
                        r.type_ = uint8(v & 0xF)
                        v >>= 4
@@ -328,7 +325,7 @@ func macholoadrel(m *ldMachoObj, sect *ldMachoSect) int {
                        r.pcrel = uint8(v & 1)
                        r.value = m.e.Uint32(p[4:])
                } else {
-                       v = m.e.Uint32(p[4:])
+                       v := m.e.Uint32(p[4:])
                        r.symnum = v & 0xFFFFFF
                        v >>= 24
                        r.pcrel = uint8(v & 1)
@@ -390,11 +387,9 @@ func macholoadsym(m *ldMachoObj, symtab *ldMachoSymtab) int {
        }
        sym := make([]ldMachoSym, symtab.nsym)
        p := symbuf
-       var s *ldMachoSym
-       var v uint32
-       for i := 0; uint32(i) < symtab.nsym; i++ {
-               s = &sym[i]
-               v = m.e.Uint32(p)
+       for i := uint32(0); i < symtab.nsym; i++ {
+               s := &sym[i]
+               v := m.e.Uint32(p)
                if v >= symtab.strsize {
                        return -1
                }
index 0d9b8246386fee1460c053b930c5dd7394b8e67e..f06cf9c6178c4f7dc6468be29c1b8bd024adc991 100644 (file)
@@ -273,11 +273,8 @@ func machowrite() int {
                Thearch.Lput(0) /* reserved */
        }
 
-       var j int
-       var s *MachoSeg
-       var t *MachoSect
        for i := 0; i < nseg; i++ {
-               s = &seg[i]
+               s := &seg[i]
                if macho64 {
                        Thearch.Lput(LC_SEGMENT_64)
                        Thearch.Lput(72 + 80*s.nsect)
@@ -304,8 +301,8 @@ func machowrite() int {
                        Thearch.Lput(s.flag)
                }
 
-               for j = 0; uint32(j) < s.nsect; j++ {
-                       t = &s.sect[j]
+               for j := uint32(0); j < s.nsect; j++ {
+                       t := &s.sect[j]
                        if macho64 {
                                strnput(t.name, 16)
                                strnput(t.segname, 16)
@@ -335,12 +332,11 @@ func machowrite() int {
                }
        }
 
-       var l *MachoLoad
        for i := 0; i < len(load); i++ {
-               l = &load[i]
+               l := &load[i]
                Thearch.Lput(l.type_)
                Thearch.Lput(4 * (uint32(len(l.data)) + 2))
-               for j = 0; j < len(l.data); j++ {
+               for j := 0; j < len(l.data); j++ {
                        Thearch.Lput(l.data[j])
                }
        }