]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: convert dxxx to dxxxLSym
authorJosh Bleecher Snyder <josharian@gmail.com>
Fri, 21 Apr 2017 20:48:15 +0000 (13:48 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Fri, 21 Apr 2017 22:59:11 +0000 (22:59 +0000)
This is an automated refactoring to eliminate
all dxxx calls in gc/obj.go that accept types.Sym
instead of obj.LSym parameters.

The refactoring was of the form:

gorename -from '"cmd/compile/internal/gc".duintxx' -to Duintxx
gorename -from '"cmd/compile/internal/gc".duintxxLSym' -to DuintxxLSym
eg -t t.go -w cmd/compile/internal/gc
gofmt -r 'DuintxxLSym -> duintxxLSym' -w cmd/compile/internal/gc

where t.go looked like:

func before(s *types.Sym, off int, v uint64, wid int) int {
return gc.Duintxx(s, off, v, wid)
}

func after(s *types.Sym, off int, v uint64, wid int) int {
return gc.DuintxxLSym(s.Linksym(), off, v, wid)
}

The rename/gofmt shenanigans were to work around
limitations and bugs in eg and gorename.

The resulting code in reflect.go looks temporarily ugly,
but it makes refactoring and cleanup opportunities
much clearer.

Next step is to rename all the dxxx methods to rename the -LSym suffix
and clean up reflect.go.

The renaming is left for a separate CL to make the changes in
this CL more obvious, and thus hopefully easier to review.

Passes toolstash-check.

Change-Id: Ib31a2b6fd146ed03a855d20ecb0433f0f74e2f10
Reviewed-on: https://go-review.googlesource.com/41396
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/obj.go
src/cmd/compile/internal/gc/reflect.go

index 88ca348e43f0ebaaab404e4a6e7726360b852d40..7d94335679db27fd02f78afad059461fc8087f9f 100644 (file)
@@ -222,7 +222,7 @@ func dumpglobls() {
 
        for _, s := range funcsyms {
                sf := s.Pkg.Lookup(funcsymname(s))
-               dsymptr(sf, 0, s, 0)
+               dsymptrLSym(sf.Linksym(), 0, s.Linksym(), 0)
                ggloblsym(sf, int32(Widthptr), obj.DUPOK|obj.RODATA)
        }
 
@@ -251,10 +251,6 @@ func addGCLocals() {
        }
 }
 
-func duintxx(s *types.Sym, off int, v uint64, wid int) int {
-       return duintxxLSym(s.Linksym(), off, v, wid)
-}
-
 func duintxxLSym(s *obj.LSym, off int, v uint64, wid int) int {
        if s.Type == 0 {
                // TODO(josharian): Do this in obj.prepwrite instead.
@@ -267,30 +263,22 @@ func duintxxLSym(s *obj.LSym, off int, v uint64, wid int) int {
        return off + wid
 }
 
-func duint8(s *types.Sym, off int, v uint8) int {
-       return duintxx(s, off, uint64(v), 1)
-}
-
-func duint16(s *types.Sym, off int, v uint16) int {
-       return duintxx(s, off, uint64(v), 2)
-}
-
-func duint32(s *types.Sym, off int, v uint32) int {
-       return duintxx(s, off, uint64(v), 4)
-}
-
-func duintptr(s *types.Sym, off int, v uint64) int {
-       return duintxx(s, off, v, Widthptr)
-}
-
 func duint8LSym(s *obj.LSym, off int, v uint8) int {
        return duintxxLSym(s, off, uint64(v), 1)
 }
 
+func duint16LSym(s *obj.LSym, off int, v uint16) int {
+       return duintxxLSym(s, off, uint64(v), 2)
+}
+
 func duint32LSym(s *obj.LSym, off int, v uint32) int {
        return duintxxLSym(s, off, uint64(v), 4)
 }
 
+func duintptrLSym(s *obj.LSym, off int, v uint64) int {
+       return duintxxLSym(s, off, v, Widthptr)
+}
+
 func dbvecLSym(s *obj.LSym, off int, bv bvec) int {
        // Runtime reads the bitmaps as byte arrays. Oblige.
        for j := 0; int32(j) < bv.n; j += 8 {
@@ -336,20 +324,16 @@ func slicebytes(nam *Node, s string, len int) {
        sym := localpkg.Lookup(symname)
        sym.Def = asTypesNode(newname(sym))
 
-       off := dsname(sym, 0, s)
+       off := dsnameLSym(sym.Linksym(), 0, s)
        ggloblsym(sym, int32(off), obj.NOPTR|obj.LOCAL)
 
        if nam.Op != ONAME {
                Fatalf("slicebytes %v", nam)
        }
        off = int(nam.Xoffset)
-       off = dsymptr(nam.Sym, off, sym, 0)
-       off = duintxx(nam.Sym, off, uint64(len), Widthint)
-       duintxx(nam.Sym, off, uint64(len), Widthint)
-}
-
-func dsname(s *types.Sym, off int, t string) int {
-       return dsnameLSym(s.Linksym(), off, t)
+       off = dsymptrLSym(nam.Sym.Linksym(), off, sym.Linksym(), 0)
+       off = duintxxLSym(nam.Sym.Linksym(), off, uint64(len), Widthint)
+       duintxxLSym(nam.Sym.Linksym(), off, uint64(len), Widthint)
 }
 
 func dsnameLSym(s *obj.LSym, off int, t string) int {
@@ -357,10 +341,6 @@ func dsnameLSym(s *obj.LSym, off int, t string) int {
        return off + len(t)
 }
 
-func dsymptr(s *types.Sym, off int, x *types.Sym, xoff int) int {
-       return dsymptrLSym(s.Linksym(), off, x.Linksym(), xoff)
-}
-
 func dsymptrLSym(s *obj.LSym, off int, x *obj.LSym, xoff int) int {
        off = int(Rnd(int64(off), int64(Widthptr)))
        s.WriteAddr(Ctxt, int64(off), Widthptr, x, int64(xoff))
index f077b391904bfdbb7cddd0201411cd58e8655afc..23795b89b918ae042500f4cd9217bc7b49ea3b09 100644 (file)
@@ -628,10 +628,10 @@ func dextratype(s *types.Sym, ot int, t *types.Type, dataAdd int) int {
                Fatalf("methods are too far away on %v: %d", t, dataAdd)
        }
 
-       ot = duint16(s, ot, uint16(mcount))
-       ot = duint16(s, ot, 0)
-       ot = duint32(s, ot, uint32(dataAdd))
-       ot = duint32(s, ot, 0)
+       ot = duint16LSym(s.Linksym(), ot, uint16(mcount))
+       ot = duint16LSym(s.Linksym(), ot, 0)
+       ot = duint32LSym(s.Linksym(), ot, uint32(dataAdd))
+       ot = duint32LSym(s.Linksym(), ot, 0)
        return ot
 }
 
@@ -820,10 +820,10 @@ func dcommontype(s *types.Sym, ot int, t *types.Type) int {
        //              str           nameOff
        //              ptrToThis     typeOff
        //      }
-       ot = duintptr(s, ot, uint64(t.Width))
-       ot = duintptr(s, ot, uint64(ptrdata))
+       ot = duintptrLSym(s.Linksym(), ot, uint64(t.Width))
+       ot = duintptrLSym(s.Linksym(), ot, uint64(ptrdata))
 
-       ot = duint32(s, ot, typehash(t))
+       ot = duint32LSym(s.Linksym(), ot, typehash(t))
 
        var tflag uint8
        if uncommonSize(t) != 0 {
@@ -852,7 +852,7 @@ func dcommontype(s *types.Sym, ot int, t *types.Type) int {
                }
        }
 
-       ot = duint8(s, ot, tflag)
+       ot = duint8LSym(s.Linksym(), ot, tflag)
 
        // runtime (and common sense) expects alignment to be a power of two.
        i := int(t.Align)
@@ -863,8 +863,8 @@ func dcommontype(s *types.Sym, ot int, t *types.Type) int {
        if i&(i-1) != 0 {
                Fatalf("invalid alignment %d for %v", t.Align, t)
        }
-       ot = duint8(s, ot, t.Align) // align
-       ot = duint8(s, ot, t.Align) // fieldAlign
+       ot = duint8LSym(s.Linksym(), ot, t.Align) // align
+       ot = duint8LSym(s.Linksym(), ot, t.Align) // fieldAlign
 
        i = kinds[t.Etype]
        if !types.Haspointers(t) {
@@ -876,19 +876,19 @@ func dcommontype(s *types.Sym, ot int, t *types.Type) int {
        if useGCProg {
                i |= objabi.KindGCProg
        }
-       ot = duint8(s, ot, uint8(i)) // kind
+       ot = duint8LSym(s.Linksym(), ot, uint8(i)) // kind
        if algsym == nil {
-               ot = dsymptr(s, ot, dcommontype_algarray, int(alg)*sizeofAlg)
+               ot = dsymptrLSym(s.Linksym(), ot, dcommontype_algarray.Linksym(), int(alg)*sizeofAlg)
        } else {
-               ot = dsymptr(s, ot, algsym, 0)
+               ot = dsymptrLSym(s.Linksym(), ot, algsym.Linksym(), 0)
        }
-       ot = dsymptr(s, ot, gcsym, 0) // gcdata
+       ot = dsymptrLSym(s.Linksym(), ot, gcsym.Linksym(), 0) // gcdata
 
        nsym := dname(p, "", nil, exported)
        ot = dsymptrOffLSym(s.Linksym(), ot, nsym, 0) // str
        // ptrToThis
        if sptr == nil {
-               ot = duint32(s, ot, 0)
+               ot = duint32LSym(s.Linksym(), ot, 0)
        } else if sptrWeak {
                ot = dsymptrWeakOffLSym(s.Linksym(), ot, sptr.Linksym())
        } else {
@@ -1128,24 +1128,24 @@ ok:
                t2 := types.NewSlice(t.Elem())
                s2 := dtypesym(t2)
                ot = dcommontype(s, ot, t)
-               ot = dsymptr(s, ot, s1, 0)
-               ot = dsymptr(s, ot, s2, 0)
-               ot = duintptr(s, ot, uint64(t.NumElem()))
+               ot = dsymptrLSym(s.Linksym(), ot, s1.Linksym(), 0)
+               ot = dsymptrLSym(s.Linksym(), ot, s2.Linksym(), 0)
+               ot = duintptrLSym(s.Linksym(), ot, uint64(t.NumElem()))
                ot = dextratype(s, ot, t, 0)
 
        case TSLICE:
                // ../../../../runtime/type.go:/sliceType
                s1 := dtypesym(t.Elem())
                ot = dcommontype(s, ot, t)
-               ot = dsymptr(s, ot, s1, 0)
+               ot = dsymptrLSym(s.Linksym(), ot, s1.Linksym(), 0)
                ot = dextratype(s, ot, t, 0)
 
        case TCHAN:
                // ../../../../runtime/type.go:/chanType
                s1 := dtypesym(t.Elem())
                ot = dcommontype(s, ot, t)
-               ot = dsymptr(s, ot, s1, 0)
-               ot = duintptr(s, ot, uint64(t.ChanDir()))
+               ot = dsymptrLSym(s.Linksym(), ot, s1.Linksym(), 0)
+               ot = duintptrLSym(s.Linksym(), ot, uint64(t.ChanDir()))
                ot = dextratype(s, ot, t, 0)
 
        case TFUNC:
@@ -1167,8 +1167,8 @@ ok:
                if isddd {
                        outCount |= 1 << 15
                }
-               ot = duint16(s, ot, uint16(inCount))
-               ot = duint16(s, ot, uint16(outCount))
+               ot = duint16LSym(s.Linksym(), ot, uint16(inCount))
+               ot = duint16LSym(s.Linksym(), ot, uint16(outCount))
                if Widthptr == 8 {
                        ot += 4 // align for *rtype
                }
@@ -1178,13 +1178,13 @@ ok:
 
                // Array of rtype pointers follows funcType.
                for _, t1 := range t.Recvs().Fields().Slice() {
-                       ot = dsymptr(s, ot, dtypesym(t1.Type), 0)
+                       ot = dsymptrLSym(s.Linksym(), ot, dtypesym(t1.Type).Linksym(), 0)
                }
                for _, t1 := range t.Params().Fields().Slice() {
-                       ot = dsymptr(s, ot, dtypesym(t1.Type), 0)
+                       ot = dsymptrLSym(s.Linksym(), ot, dtypesym(t1.Type).Linksym(), 0)
                }
                for _, t1 := range t.Results().Fields().Slice() {
-                       ot = dsymptr(s, ot, dtypesym(t1.Type), 0)
+                       ot = dsymptrLSym(s.Linksym(), ot, dtypesym(t1.Type).Linksym(), 0)
                }
 
        case TINTER:
@@ -1203,9 +1203,9 @@ ok:
                }
                ot = dgopkgpath(s, ot, tpkg)
 
-               ot = dsymptr(s, ot, s, ot+Widthptr+2*Widthint+uncommonSize(t))
-               ot = duintxx(s, ot, uint64(n), Widthint)
-               ot = duintxx(s, ot, uint64(n), Widthint)
+               ot = dsymptrLSym(s.Linksym(), ot, s.Linksym(), ot+Widthptr+2*Widthint+uncommonSize(t))
+               ot = duintxxLSym(s.Linksym(), ot, uint64(n), Widthint)
+               ot = duintxxLSym(s.Linksym(), ot, uint64(n), Widthint)
                dataAdd := imethodSize() * n
                ot = dextratype(s, ot, t, dataAdd)
 
@@ -1230,29 +1230,29 @@ ok:
                s3 := dtypesym(mapbucket(t))
                s4 := dtypesym(hmap(t))
                ot = dcommontype(s, ot, t)
-               ot = dsymptr(s, ot, s1, 0)
-               ot = dsymptr(s, ot, s2, 0)
-               ot = dsymptr(s, ot, s3, 0)
-               ot = dsymptr(s, ot, s4, 0)
+               ot = dsymptrLSym(s.Linksym(), ot, s1.Linksym(), 0)
+               ot = dsymptrLSym(s.Linksym(), ot, s2.Linksym(), 0)
+               ot = dsymptrLSym(s.Linksym(), ot, s3.Linksym(), 0)
+               ot = dsymptrLSym(s.Linksym(), ot, s4.Linksym(), 0)
                if t.Key().Width > MAXKEYSIZE {
-                       ot = duint8(s, ot, uint8(Widthptr))
-                       ot = duint8(s, ot, 1) // indirect
+                       ot = duint8LSym(s.Linksym(), ot, uint8(Widthptr))
+                       ot = duint8LSym(s.Linksym(), ot, 1) // indirect
                } else {
-                       ot = duint8(s, ot, uint8(t.Key().Width))
-                       ot = duint8(s, ot, 0) // not indirect
+                       ot = duint8LSym(s.Linksym(), ot, uint8(t.Key().Width))
+                       ot = duint8LSym(s.Linksym(), ot, 0) // not indirect
                }
 
                if t.Val().Width > MAXVALSIZE {
-                       ot = duint8(s, ot, uint8(Widthptr))
-                       ot = duint8(s, ot, 1) // indirect
+                       ot = duint8LSym(s.Linksym(), ot, uint8(Widthptr))
+                       ot = duint8LSym(s.Linksym(), ot, 1) // indirect
                } else {
-                       ot = duint8(s, ot, uint8(t.Val().Width))
-                       ot = duint8(s, ot, 0) // not indirect
+                       ot = duint8LSym(s.Linksym(), ot, uint8(t.Val().Width))
+                       ot = duint8LSym(s.Linksym(), ot, 0) // not indirect
                }
 
-               ot = duint16(s, ot, uint16(mapbucket(t).Width))
-               ot = duint8(s, ot, uint8(obj.Bool2int(isreflexive(t.Key()))))
-               ot = duint8(s, ot, uint8(obj.Bool2int(needkeyupdate(t.Key()))))
+               ot = duint16LSym(s.Linksym(), ot, uint16(mapbucket(t).Width))
+               ot = duint8LSym(s.Linksym(), ot, uint8(obj.Bool2int(isreflexive(t.Key()))))
+               ot = duint8LSym(s.Linksym(), ot, uint8(obj.Bool2int(needkeyupdate(t.Key()))))
                ot = dextratype(s, ot, t, 0)
 
        case TPTR32, TPTR64:
@@ -1268,7 +1268,7 @@ ok:
                s1 := dtypesym(t.Elem())
 
                ot = dcommontype(s, ot, t)
-               ot = dsymptr(s, ot, s1, 0)
+               ot = dsymptrLSym(s.Linksym(), ot, s1.Linksym(), 0)
                ot = dextratype(s, ot, t, 0)
 
        // ../../../../runtime/type.go:/structType
@@ -1296,9 +1296,9 @@ ok:
                        }
                }
                ot = dgopkgpath(s, ot, pkg)
-               ot = dsymptr(s, ot, s, ot+Widthptr+2*Widthint+uncommonSize(t))
-               ot = duintxx(s, ot, uint64(n), Widthint)
-               ot = duintxx(s, ot, uint64(n), Widthint)
+               ot = dsymptrLSym(s.Linksym(), ot, s.Linksym(), ot+Widthptr+2*Widthint+uncommonSize(t))
+               ot = duintxxLSym(s.Linksym(), ot, uint64(n), Widthint)
+               ot = duintxxLSym(s.Linksym(), ot, uint64(n), Widthint)
 
                dataAdd := n * structfieldSize()
                ot = dextratype(s, ot, t, dataAdd)
@@ -1306,7 +1306,7 @@ ok:
                for _, f := range t.Fields().Slice() {
                        // ../../../../runtime/type.go:/structField
                        ot = dnameField(s, ot, pkg, f)
-                       ot = dsymptr(s, ot, dtypesym(f.Type), 0)
+                       ot = dsymptrLSym(s.Linksym(), ot, dtypesym(f.Type).Linksym(), 0)
                        offsetAnon := uint64(f.Offset) << 1
                        if offsetAnon>>1 != uint64(f.Offset) {
                                Fatalf("%v: bad field offset for %s", t, f.Sym.Name)
@@ -1314,7 +1314,7 @@ ok:
                        if f.Embedded != 0 {
                                offsetAnon |= 1
                        }
-                       ot = duintptr(s, ot, offsetAnon)
+                       ot = duintptrLSym(s.Linksym(), ot, offsetAnon)
                }
        }
 
@@ -1461,18 +1461,18 @@ func dumptypestructs() {
                //   unused [2]byte
                //   fun    [1]uintptr // variable sized
                // }
-               o := dsymptr(i.sym, 0, dtypesym(i.itype), 0)
-               o = dsymptr(i.sym, o, dtypesym(i.t), 0)
-               o += Widthptr                          // skip link field
-               o = duint32(i.sym, o, typehash(i.t))   // copy of type hash
-               o += 4                                 // skip bad/inhash/unused fields
-               o += len(imethods(i.itype)) * Widthptr // skip fun method pointers
+               o := dsymptrLSym(i.sym.Linksym(), 0, dtypesym(i.itype).Linksym(), 0)
+               o = dsymptrLSym(i.sym.Linksym(), o, dtypesym(i.t).Linksym(), 0)
+               o += Widthptr                                      // skip link field
+               o = duint32LSym(i.sym.Linksym(), o, typehash(i.t)) // copy of type hash
+               o += 4                                             // skip bad/inhash/unused fields
+               o += len(imethods(i.itype)) * Widthptr             // skip fun method pointers
                // at runtime the itab will contain pointers to types, other itabs and
                // method functions. None are allocated on heap, so we can use obj.NOPTR.
                ggloblsym(i.sym, int32(o), int16(obj.DUPOK|obj.NOPTR))
 
                ilink := itablinkpkg.Lookup(i.t.ShortString() + "," + i.itype.ShortString())
-               dsymptr(ilink, 0, i.sym, 0)
+               dsymptrLSym(ilink.Linksym(), 0, i.sym.Linksym(), 0)
                ggloblsym(ilink, int32(Widthptr), int16(obj.DUPOK|obj.RODATA))
        }
 
@@ -1574,8 +1574,8 @@ func dalgsym(t *types.Type) *types.Sym {
                hashfunc = types.TypePkgLookup(p)
 
                ot := 0
-               ot = dsymptr(hashfunc, ot, Runtimepkg.Lookup("memhash_varlen"), 0)
-               ot = duintxx(hashfunc, ot, uint64(t.Width), Widthptr) // size encoded in closure
+               ot = dsymptrLSym(hashfunc.Linksym(), ot, Runtimepkg.Lookup("memhash_varlen").Linksym(), 0)
+               ot = duintxxLSym(hashfunc.Linksym(), ot, uint64(t.Width), Widthptr) // size encoded in closure
                ggloblsym(hashfunc, int32(ot), obj.DUPOK|obj.RODATA)
 
                // make equality closure
@@ -1584,8 +1584,8 @@ func dalgsym(t *types.Type) *types.Sym {
                eqfunc = types.TypePkgLookup(p)
 
                ot = 0
-               ot = dsymptr(eqfunc, ot, Runtimepkg.Lookup("memequal_varlen"), 0)
-               ot = duintxx(eqfunc, ot, uint64(t.Width), Widthptr)
+               ot = dsymptrLSym(eqfunc.Linksym(), ot, Runtimepkg.Lookup("memequal_varlen").Linksym(), 0)
+               ot = duintxxLSym(eqfunc.Linksym(), ot, uint64(t.Width), Widthptr)
                ggloblsym(eqfunc, int32(ot), obj.DUPOK|obj.RODATA)
        } else {
                // generate an alg table specific to this type
@@ -1600,18 +1600,18 @@ func dalgsym(t *types.Type) *types.Sym {
                geneq(eq, t)
 
                // make Go funcs (closures) for calling hash and equal from Go
-               dsymptr(hashfunc, 0, hash, 0)
+               dsymptrLSym(hashfunc.Linksym(), 0, hash.Linksym(), 0)
 
                ggloblsym(hashfunc, int32(Widthptr), obj.DUPOK|obj.RODATA)
-               dsymptr(eqfunc, 0, eq, 0)
+               dsymptrLSym(eqfunc.Linksym(), 0, eq.Linksym(), 0)
                ggloblsym(eqfunc, int32(Widthptr), obj.DUPOK|obj.RODATA)
        }
 
        // ../../../../runtime/alg.go:/typeAlg
        ot := 0
 
-       ot = dsymptr(s, ot, hashfunc, 0)
-       ot = dsymptr(s, ot, eqfunc, 0)
+       ot = dsymptrLSym(s.Linksym(), ot, hashfunc.Linksym(), 0)
+       ot = dsymptrLSym(s.Linksym(), ot, eqfunc.Linksym(), 0)
        ggloblsym(s, int32(ot), obj.DUPOK|obj.RODATA)
        return s
 }
@@ -1675,7 +1675,7 @@ func dgcptrmask(t *types.Type) *types.Sym {
        if !sym.Uniq() {
                sym.SetUniq(true)
                for i, x := range ptrmask {
-                       duint8(sym, i, x)
+                       duint8LSym(sym.Linksym(), i, x)
                }
                ggloblsym(sym, int32(len(ptrmask)), obj.DUPOK|obj.RODATA|obj.LOCAL)
        }
@@ -1745,12 +1745,12 @@ func (p *GCProg) init(sym *types.Sym) {
 }
 
 func (p *GCProg) writeByte(x byte) {
-       p.symoff = duint8(p.sym, p.symoff, x)
+       p.symoff = duint8LSym(p.sym.Linksym(), p.symoff, x)
 }
 
 func (p *GCProg) end() {
        p.w.End()
-       duint32(p.sym, 0, uint32(p.symoff-4))
+       duint32LSym(p.sym.Linksym(), 0, uint32(p.symoff-4))
        ggloblsym(p.sym, int32(p.symoff), obj.DUPOK|obj.RODATA|obj.LOCAL)
        if Debug_gcprog > 0 {
                fmt.Fprintf(os.Stderr, "compile: end GCProg for %v\n", p.sym)