internal/cabi: transform cfunc check called
This commit is contained in:
@@ -812,7 +812,7 @@ func buildPkg(ctx *context, aPkg *aPackage, verbose bool) error {
|
|||||||
}
|
}
|
||||||
check(err)
|
check(err)
|
||||||
|
|
||||||
ctx.cTransformer.TransformModule(ret)
|
ctx.cTransformer.TransformModule(ret.Path(), ret.Module())
|
||||||
|
|
||||||
aPkg.LPkg = ret
|
aPkg.LPkg = ret
|
||||||
cgoLLFiles, cgoLdflags, err := buildCgo(ctx, aPkg, aPkg.Package.Syntax, externs, verbose)
|
cgoLLFiles, cgoLdflags, err := buildCgo(ctx, aPkg, aPkg.Package.Syntax, externs, verbose)
|
||||||
|
|||||||
@@ -52,8 +52,7 @@ func (p *Transformer) isCFunc(name string) bool {
|
|||||||
return !strings.Contains(name, ".")
|
return !strings.Contains(name, ".")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Transformer) TransformModule(pkg ssa.Package) {
|
func (p *Transformer) TransformModule(path string, m llvm.Module) {
|
||||||
m := pkg.Module()
|
|
||||||
ctx := m.Context()
|
ctx := m.Context()
|
||||||
var fns []llvm.Value
|
var fns []llvm.Value
|
||||||
var callInstrs []llvm.Value
|
var callInstrs []llvm.Value
|
||||||
@@ -67,6 +66,13 @@ func (p *Transformer) TransformModule(pkg ssa.Package) {
|
|||||||
p.transformFuncCall(m, fn)
|
p.transformFuncCall(m, fn)
|
||||||
if p.isWrapFunctionType(m.Context(), fn.GlobalValueType()) {
|
if p.isWrapFunctionType(m.Context(), fn.GlobalValueType()) {
|
||||||
fns = append(fns, fn)
|
fns = append(fns, fn)
|
||||||
|
use := fn.FirstUse()
|
||||||
|
for !use.IsNil() {
|
||||||
|
if call := use.User().IsACallInst(); !call.IsNil() && call.CalledValue() == fn {
|
||||||
|
callInstrs = append(callInstrs, call)
|
||||||
|
}
|
||||||
|
use = use.NextUse()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn = llvm.NextFunction(fn)
|
fn = llvm.NextFunction(fn)
|
||||||
|
|||||||
Reference in New Issue
Block a user