Fatalf("cannot rosymdup %s with relocations", ls.Name)
}
ls.Name = fmt.Sprintf("gclocals·%x", md5.Sum(ls.P))
- ls.Dupok = 1
+ ls.Dupok = true
}
func emitptrargsmap() {
ptxt.From3.Offset |= obj.REFLECTMETHOD
}
if fn.Func.Pragma&Systemstack != 0 {
- ptxt.From.Sym.Cfunc = 1
+ ptxt.From.Sym.Cfunc = true
}
// Clumsy but important.
}
if cursym.Text.Mark&LEAF != 0 {
- cursym.Leaf = 1
+ cursym.Leaf = true
if autosize == 0 {
break
}
p.From.Type = obj.TYPE_MEM
p.From.Reg = REGG
p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
- if ctxt.Cursym.Cfunc != 0 {
+ if ctxt.Cursym.Cfunc {
p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
}
p.To.Type = obj.TYPE_REG
call.To.Type = obj.TYPE_BRANCH
morestack := "runtime.morestack"
switch {
- case ctxt.Cursym.Cfunc != 0:
+ case ctxt.Cursym.Cfunc:
morestack = "runtime.morestackc"
case ctxt.Cursym.Text.From3.Offset&obj.NEEDCTXT == 0:
morestack = "runtime.morestack_noctxt"
p.From.Type = obj.TYPE_MEM
p.From.Reg = REGG
p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
- if ctxt.Cursym.Cfunc != 0 {
+ if ctxt.Cursym.Cfunc {
p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
}
p.To.Type = obj.TYPE_REG
call.To.Type = obj.TYPE_BRANCH
morestack := "runtime.morestack"
switch {
- case ctxt.Cursym.Cfunc != 0:
+ case ctxt.Cursym.Cfunc:
morestack = "runtime.morestackc"
case ctxt.Cursym.Text.From3.Offset&obj.NEEDCTXT == 0:
morestack = "runtime.morestack_noctxt"
aoffset = 0xF0
}
if cursym.Text.Mark&LEAF != 0 {
- cursym.Leaf = 1
+ cursym.Leaf = true
if ctxt.Autosize == 0 {
break
}
Name string
Type int16
Version int16
- Dupok uint8
- Cfunc uint8
- Nosplit uint8
- Leaf uint8
- Seenglobl uint8
- Onlist uint8
+ Dupok bool
+ Cfunc bool
+ Nosplit bool
+ Leaf bool
+ Seenglobl bool
+ Onlist bool
// ReflectMethod means the function may call reflect.Type.Method or
// reflect.Type.MethodByName. Matching is imprecise (as reflect.Type
}
if cursym.Text.Mark&LEAF != 0 {
- cursym.Leaf = 1
+ cursym.Leaf = true
break
}
p.From.Type = obj.TYPE_MEM
p.From.Reg = REGG
p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
- if ctxt.Cursym.Cfunc != 0 {
+ if ctxt.Cursym.Cfunc {
p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
}
p.To.Type = obj.TYPE_REG
p.As = AJAL
p.To.Type = obj.TYPE_BRANCH
- if ctxt.Cursym.Cfunc != 0 {
+ if ctxt.Cursym.Cfunc {
p.To.Sym = obj.Linklookup(ctxt, "runtime.morestackc", 0)
} else if ctxt.Cursym.Text.From3.Offset&obj.NEEDCTXT == 0 {
p.To.Sym = obj.Linklookup(ctxt, "runtime.morestack_noctxt", 0)
case AGLOBL:
s := p.From.Sym
- tmp6 := s.Seenglobl
- s.Seenglobl++
- if tmp6 != 0 {
+ if s.Seenglobl {
fmt.Printf("duplicate %v\n", p)
}
- if s.Onlist != 0 {
+ s.Seenglobl = true
+ if s.Onlist {
log.Fatalf("symbol %s listed multiple times", s.Name)
}
- s.Onlist = 1
+ s.Onlist = true
ctxt.Data = append(ctxt.Data, s)
s.Size = p.To.Offset
if s.Type == 0 || s.Type == SXREF {
}
flag := int(p.From3.Offset)
if flag&DUPOK != 0 {
- s.Dupok = 1
+ s.Dupok = true
}
if flag&RODATA != 0 {
s.Type = SRODATA
if s.Text != nil {
log.Fatalf("duplicate TEXT for %s", s.Name)
}
- if s.Onlist != 0 {
+ if s.Onlist {
log.Fatalf("symbol %s listed multiple times", s.Name)
}
- s.Onlist = 1
+ s.Onlist = true
text = append(text, s)
flag := int(p.From3Offset())
if flag&DUPOK != 0 {
- s.Dupok = 1
+ s.Dupok = true
}
if flag&NOSPLIT != 0 {
- s.Nosplit = 1
+ s.Nosplit = true
}
if flag&REFLECTMETHOD != 0 {
s.ReflectMethod = true
if s.Type != 0 {
fmt.Fprintf(ctxt.Bso, "t=%d ", s.Type)
}
- if s.Dupok != 0 {
+ if s.Dupok {
fmt.Fprintf(ctxt.Bso, "dupok ")
}
- if s.Cfunc != 0 {
+ if s.Cfunc {
fmt.Fprintf(ctxt.Bso, "cfunc ")
}
- if s.Nosplit != 0 {
+ if s.Nosplit {
fmt.Fprintf(ctxt.Bso, "nosplit ")
}
fmt.Fprintf(ctxt.Bso, "size=%d", s.Size)
if s.Type == STEXT {
fmt.Fprintf(ctxt.Bso, " args=%#x locals=%#x", uint64(s.Args), uint64(s.Locals))
- if s.Leaf != 0 {
+ if s.Leaf {
fmt.Fprintf(ctxt.Bso, " leaf")
}
}
Bputc(b, 0xfe)
wrint(b, int64(s.Type))
wrsym(b, s)
- flags := int64(s.Dupok)
+ flags := int64(0)
+ if s.Dupok {
+ flags |= 1
+ }
if s.Local {
- flags |= 2
+ flags |= 1 << 1
}
wrint(b, flags)
wrint(b, s.Size)
if s.Type == STEXT {
wrint(b, int64(s.Args))
wrint(b, int64(s.Locals))
- wrint(b, int64(s.Nosplit))
- flags := int64(s.Leaf) | int64(s.Cfunc)<<1
+ if s.Nosplit {
+ wrint(b, 1)
+ } else {
+ wrint(b, 0)
+ }
+ flags := int64(0)
+ if s.Leaf {
+ flags |= 1
+ }
+ if s.Cfunc {
+ flags |= 1 << 1
+ }
if s.ReflectMethod {
flags |= 1 << 2
}
}
if cursym.Text.Mark&LEAF != 0 {
- cursym.Leaf = 1
+ cursym.Leaf = true
break
}
p.From.Type = obj.TYPE_MEM
p.From.Reg = REGG
p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
- if ctxt.Cursym.Cfunc != 0 {
+ if ctxt.Cursym.Cfunc {
p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
}
p.To.Type = obj.TYPE_REG
}
var morestacksym *obj.LSym
- if ctxt.Cursym.Cfunc != 0 {
+ if ctxt.Cursym.Cfunc {
morestacksym = obj.Linklookup(ctxt, "runtime.morestackc", 0)
} else if ctxt.Cursym.Text.From3.Offset&obj.NEEDCTXT == 0 {
morestacksym = obj.Linklookup(ctxt, "runtime.morestack_noctxt", 0)
p.From.Reg = REG_SP
indir_cx(ctxt, p, &p.To)
p.To.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
- if ctxt.Cursym.Cfunc != 0 {
+ if ctxt.Cursym.Cfunc {
p.To.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
}
} else if framesize <= obj.StackBig {
p.From.Reg = REG_AX
indir_cx(ctxt, p, &p.To)
p.To.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
- if ctxt.Cursym.Cfunc != 0 {
+ if ctxt.Cursym.Cfunc {
p.To.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
}
} else {
p.As = mov
indir_cx(ctxt, p, &p.From)
p.From.Offset = 2 * int64(ctxt.Arch.Ptrsize) // G.stackguard0
- if ctxt.Cursym.Cfunc != 0 {
+ if ctxt.Cursym.Cfunc {
p.From.Offset = 3 * int64(ctxt.Arch.Ptrsize) // G.stackguard1
}
p.To.Type = obj.TYPE_REG
call.To.Type = obj.TYPE_BRANCH
morestack := "runtime.morestack"
switch {
- case ctxt.Cursym.Cfunc != 0:
+ case ctxt.Cursym.Cfunc:
morestack = "runtime.morestackc"
case ctxt.Cursym.Text.From3Offset()&obj.NEEDCTXT == 0:
morestack = "runtime.morestack_noctxt"