if s.Func() != nil && s.Func().FuncFlag&objabi.FuncFlag_TOPFRAME != 0 {
fmt.Fprintf(ctxt.Bso, "topframe ")
}
+ if s.Func() != nil && s.Func().FuncFlag&objabi.FuncFlag_ASM != 0 {
+ fmt.Fprintf(ctxt.Bso, "asm ")
+ }
fmt.Fprintf(ctxt.Bso, "size=%d", s.Size)
if s.Type == objabi.STEXT {
fn := s.Func()
}
name := strings.Replace(s.Name, "\"\"", ctxt.Pkgpath, -1)
s.Func().FuncID = objabi.GetFuncID(name, flag&WRAPPER != 0 || flag&ABIWRAPPER != 0)
- s.Func().FuncFlag = toFuncFlag(flag)
+ s.Func().FuncFlag = ctxt.toFuncFlag(flag)
s.Set(AttrOnList, true)
s.Set(AttrDuplicateOK, flag&DUPOK != 0)
s.Set(AttrNoSplit, flag&NOSPLIT != 0)
ctxt.dwarfSym(s)
}
-func toFuncFlag(flag int) objabi.FuncFlag {
+func (ctxt *Link) toFuncFlag(flag int) objabi.FuncFlag {
var out objabi.FuncFlag
if flag&TOPFRAME != 0 {
out |= objabi.FuncFlag_TOPFRAME
}
+ if ctxt.IsAsm {
+ out |= objabi.FuncFlag_ASM
+ }
return out
}
// to be an incomplete unwinding of the stack. In certain contexts
// (in particular garbage collector stack scans) that is a fatal error.
funcFlag_SPWRITE
+
+ // ASM indicates that a function was implemented in assembly.
+ funcFlag_ASM
)
// pcHeader holds data used by the pclntab lookups.