// Copyright 2018 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package objabi import ( "strconv" "strings" ) // A FuncID identifies particular functions that need to be treated // specially by the runtime. // Note that in some situations involving plugins, there may be multiple // copies of a particular special runtime function. // Note: this list must match the list in runtime/symtab.go. type FuncID uint8 const ( FuncID_normal FuncID = iota // not a special function FuncID_runtime_main FuncID_goexit FuncID_jmpdefer FuncID_mcall FuncID_morestack FuncID_mstart FuncID_rt0_go FuncID_asmcgocall FuncID_sigpanic FuncID_runfinq FuncID_gcBgMarkWorker FuncID_systemstack_switch FuncID_systemstack FuncID_cgocallback_gofunc FuncID_gogo FuncID_externalthreadhandler FuncID_debugCallV1 FuncID_gopanic FuncID_panicwrap FuncID_wrapper // any autogenerated code (hash/eq algorithms, method wrappers, etc.) ) // Get the function ID for the named function in the named file. // The function should be package-qualified. func GetFuncID(name, file string) FuncID { switch name { case "runtime.main": return FuncID_runtime_main case "runtime.goexit": return FuncID_goexit case "runtime.jmpdefer": return FuncID_jmpdefer case "runtime.mcall": return FuncID_mcall case "runtime.morestack": return FuncID_morestack case "runtime.mstart": return FuncID_mstart case "runtime.rt0_go": return FuncID_rt0_go case "runtime.asmcgocall": return FuncID_asmcgocall case "runtime.sigpanic": return FuncID_sigpanic case "runtime.runfinq": return FuncID_runfinq case "runtime.gcBgMarkWorker": return FuncID_gcBgMarkWorker case "runtime.systemstack_switch": return FuncID_systemstack_switch case "runtime.systemstack": return FuncID_systemstack case "runtime.cgocallback_gofunc": return FuncID_cgocallback_gofunc case "runtime.gogo": return FuncID_gogo case "runtime.externalthreadhandler": return FuncID_externalthreadhandler case "runtime.debugCallV1": return FuncID_debugCallV1 case "runtime.gopanic": return FuncID_gopanic case "runtime.panicwrap": return FuncID_panicwrap } if file == "<autogenerated>" { return FuncID_wrapper } if strings.HasPrefix(name, "runtime.call") { if _, err := strconv.Atoi(name[12:]); err == nil { // runtime.callXX reflect call wrappers. return FuncID_wrapper } } if strings.HasSuffix(name, "-fm") { return FuncID_wrapper } return FuncID_normal }