cl: linkname of varName

This commit is contained in:
xushiwei
2024-05-01 20:56:51 +08:00
parent 8f15fd45f2
commit 8d3cb246c2
4 changed files with 17 additions and 9 deletions

View File

@@ -210,6 +210,14 @@ func (p *context) funcName(pkg *types.Package, fn *ssa.Function, ignore bool) (s
return name, goFunc
}
func (p *context) varName(pkg *types.Package, v *ssa.Global) string {
name := llssa.FullName(pkg, v.Name())
if v, ok := p.link[name]; ok {
return v
}
return name
}
// funcOf returns a function by name and set ftype = goFunc, cFunc, etc.
// or returns nil and set ftype = llgoCstr, llgoAlloca, llgoUnreachable, etc.
func (p *context) funcOf(fn *ssa.Function) (ret llssa.Function, ftype int) {
@@ -235,14 +243,14 @@ func (p *context) funcOf(fn *ssa.Function) (ret llssa.Function, ftype int) {
return
}
func (p *context) varOf(v *ssa.Global) llssa.Global {
func (p *context) varOf(v *ssa.Global) (ret llssa.Global) {
pkgTypes := p.ensureLoaded(v.Pkg.Pkg)
pkg := p.pkg
name := llssa.FullName(pkgTypes, v.Name())
if ret := pkg.VarOf(name); ret != nil {
return ret
name := p.varName(pkgTypes, v)
if ret = pkg.VarOf(name); ret == nil {
ret = pkg.NewVar(name, v.Type())
}
return pkg.NewVar(name, v.Type())
return
}
func (p *context) ensureLoaded(pkgTypes *types.Package) *types.Package {