nsym := dname(a.name, "", pkg, exported)
ot = dsymptrOff(lsym, ot, nsym, 0)
- ot = dmethodptrOff(lsym, ot, dtypesym(a.mtype).Linksym())
+ ot = dmethodptrOff(lsym, ot, dtypesym(a.mtype))
ot = dmethodptrOff(lsym, ot, a.isym.Linksym())
ot = dmethodptrOff(lsym, ot, a.tsym.Linksym())
}
if t.Sym != nil || methods(tptr) != nil {
sptrWeak = false
}
- sptr = dtypesym(tptr).Linksym()
+ sptr = dtypesym(tptr)
}
gcsym, useGCProg, ptrdata := dgcsym(t)
return t
}
-func dtypesym(t *types.Type) *types.Sym {
+func dtypesym(t *types.Type) *obj.LSym {
t = formalType(t)
if t.IsUntyped() {
Fatalf("dtypesym %v", t)
}
s := typesym(t)
+ lsym := s.Linksym()
if s.Siggen() {
- return s
+ return lsym
}
s.SetSiggen(true)
if myimportpath != "runtime" || (tbase != types.Types[tbase.Etype] && tbase != types.Bytetype && tbase != types.Runetype && tbase != types.Errortype) { // int, float, etc
// named types from other files are defined only by those files
if tbase.Sym != nil && tbase.Sym.Pkg != localpkg {
- return s
+ return lsym
}
// TODO(mdempsky): Investigate whether this can happen.
if isforw[tbase.Etype] {
- return s
+ return lsym
}
}
ot := 0
- lsym := s.Linksym()
switch t.Etype {
default:
ot = dcommontype(lsym, ot, t)
t2 := types.NewSlice(t.Elem())
s2 := dtypesym(t2)
ot = dcommontype(lsym, ot, t)
- ot = dsymptr(lsym, ot, s1.Linksym(), 0)
- ot = dsymptr(lsym, ot, s2.Linksym(), 0)
+ ot = dsymptr(lsym, ot, s1, 0)
+ ot = dsymptr(lsym, ot, s2, 0)
ot = duintptr(lsym, ot, uint64(t.NumElem()))
ot = dextratype(lsym, ot, t, 0)
// ../../../../runtime/type.go:/sliceType
s1 := dtypesym(t.Elem())
ot = dcommontype(lsym, ot, t)
- ot = dsymptr(lsym, ot, s1.Linksym(), 0)
+ ot = dsymptr(lsym, ot, s1, 0)
ot = dextratype(lsym, ot, t, 0)
case TCHAN:
// ../../../../runtime/type.go:/chanType
s1 := dtypesym(t.Elem())
ot = dcommontype(lsym, ot, t)
- ot = dsymptr(lsym, ot, s1.Linksym(), 0)
+ ot = dsymptr(lsym, ot, s1, 0)
ot = duintptr(lsym, ot, uint64(t.ChanDir()))
ot = dextratype(lsym, ot, t, 0)
// Array of rtype pointers follows funcType.
for _, t1 := range t.Recvs().Fields().Slice() {
- ot = dsymptr(lsym, ot, dtypesym(t1.Type).Linksym(), 0)
+ ot = dsymptr(lsym, ot, dtypesym(t1.Type), 0)
}
for _, t1 := range t.Params().Fields().Slice() {
- ot = dsymptr(lsym, ot, dtypesym(t1.Type).Linksym(), 0)
+ ot = dsymptr(lsym, ot, dtypesym(t1.Type), 0)
}
for _, t1 := range t.Results().Fields().Slice() {
- ot = dsymptr(lsym, ot, dtypesym(t1.Type).Linksym(), 0)
+ ot = dsymptr(lsym, ot, dtypesym(t1.Type), 0)
}
case TINTER:
nsym := dname(a.name, "", pkg, exported)
ot = dsymptrOff(lsym, ot, nsym, 0)
- ot = dsymptrOff(lsym, ot, dtypesym(a.type_).Linksym(), 0)
+ ot = dsymptrOff(lsym, ot, dtypesym(a.type_), 0)
}
// ../../../../runtime/type.go:/mapType
s3 := dtypesym(bmap(t))
s4 := dtypesym(hmap(t))
ot = dcommontype(lsym, ot, t)
- ot = dsymptr(lsym, ot, s1.Linksym(), 0)
- ot = dsymptr(lsym, ot, s2.Linksym(), 0)
- ot = dsymptr(lsym, ot, s3.Linksym(), 0)
- ot = dsymptr(lsym, ot, s4.Linksym(), 0)
+ ot = dsymptr(lsym, ot, s1, 0)
+ ot = dsymptr(lsym, ot, s2, 0)
+ ot = dsymptr(lsym, ot, s3, 0)
+ ot = dsymptr(lsym, ot, s4, 0)
if t.Key().Width > MAXKEYSIZE {
ot = duint8(lsym, ot, uint8(Widthptr))
ot = duint8(lsym, ot, 1) // indirect
s1 := dtypesym(t.Elem())
ot = dcommontype(lsym, ot, t)
- ot = dsymptr(lsym, ot, s1.Linksym(), 0)
+ ot = dsymptr(lsym, ot, s1, 0)
ot = dextratype(lsym, ot, t, 0)
// ../../../../runtime/type.go:/structType
for _, f := range t.Fields().Slice() {
// ../../../../runtime/type.go:/structField
ot = dnameField(lsym, ot, spkg, f)
- ot = dsymptr(lsym, ot, dtypesym(f.Type).Linksym(), 0)
+ ot = dsymptr(lsym, ot, dtypesym(f.Type), 0)
offsetAnon := uint64(f.Offset) << 1
if offsetAnon>>1 != uint64(f.Offset) {
Fatalf("%v: bad field offset for %s", t, f.Sym.Name)
}
lsym.Set(obj.AttrMakeTypelink, keep)
- return s
+ return lsym
}
// for each itabEntry, gather the methods on
// _ [4]byte
// fun [1]uintptr // variable sized
// }
- o := dsymptr(i.lsym, 0, dtypesym(i.itype).Linksym(), 0)
- o = dsymptr(i.lsym, o, dtypesym(i.t).Linksym(), 0)
+ o := dsymptr(i.lsym, 0, dtypesym(i.itype), 0)
+ o = dsymptr(i.lsym, o, dtypesym(i.t), 0)
o = duint32(i.lsym, o, typehash(i.t)) // copy of type hash
o += 4 // skip unused field
for _, fn := range genfun(i.t, i.itype) {
// }
nsym := dname(p.s.Name, "", nil, true)
ot = dsymptrOff(s, ot, nsym, 0)
- ot = dsymptrOff(s, ot, dtypesym(p.t).Linksym(), 0)
+ ot = dsymptrOff(s, ot, dtypesym(p.t), 0)
}
ggloblsym(s, int32(ot), int16(obj.RODATA))