purego_analysis.go raw
1 //go:build purego
2
3 package llvm
4
5 import (
6 "errors"
7 "unsafe"
8
9 "github.com/ebitengine/purego"
10 )
11
12 type VerifierFailureAction int
13
14 const (
15 AbortProcessAction VerifierFailureAction = 0
16 PrintMessageAction VerifierFailureAction = 1
17 ReturnStatusAction VerifierFailureAction = 2
18 )
19
20 func VerifyModule(m Module, a VerifierFailureAction) error {
21 var msg uintptr
22 r, _, _ := purego.SyscallN(symVerifyModule, m.C, uintptr(a), uintptr(unsafe.Pointer(&msg)))
23 if r != 0 {
24 s := goString(msg)
25 purego.SyscallN(symDisposeMessage, msg)
26 return errors.New(s)
27 }
28 return nil
29 }
30
31 var verifyFunctionError = errors.New("Function is broken")
32
33 func VerifyFunction(f Value, a VerifierFailureAction) error {
34 r, _, _ := purego.SyscallN(symVerifyFunction, f.C, uintptr(a))
35 if r != 0 {
36 return verifyFunctionError
37 }
38 return nil
39 }
40