1// Copyright 2021 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package base 6 7import ( 8 "cmd/internal/obj" 9) 10 11var Ctxt *obj.Link 12 13// TODO(mdempsky): These should probably be obj.Link methods. 14 15// PkgLinksym returns the linker symbol for name within the given 16// package prefix. For user packages, prefix should be the package 17// path encoded with objabi.PathToPrefix. 18func PkgLinksym(prefix, name string, abi obj.ABI) *obj.LSym { 19 if name == "_" { 20 // TODO(mdempsky): Cleanup callers and Fatalf instead. 21 return linksym(prefix, "_", abi) 22 } 23 return linksym(prefix, prefix+"."+name, abi) 24} 25 26// Linkname returns the linker symbol for the given name as it might 27// appear within a //go:linkname directive. 28func Linkname(name string, abi obj.ABI) *obj.LSym { 29 return linksym("_", name, abi) 30} 31 32// linksym is an internal helper function for implementing the above 33// exported APIs. 34func linksym(pkg, name string, abi obj.ABI) *obj.LSym { 35 return Ctxt.LookupABIInit(name, abi, func(r *obj.LSym) { r.Pkg = pkg }) 36} 37