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