modernc.org/99c@v1.0.1-0.20181109153923-a9e8197063d9/examples/plugin/main.go (about) 1 //go:generate 99c -99lib lib42.c 2 3 package main 4 5 import ( 6 "fmt" 7 "os" 8 9 "modernc.org/ir" 10 "modernc.org/virtual" 11 "modernc.org/xc" 12 ) 13 14 func main() { 15 f, err := os.Open("a.out") 16 if err != nil { 17 panic(err) 18 } 19 20 var bin virtual.Binary 21 if _, err := bin.ReadFrom(f); err != nil { 22 panic(err) 23 } 24 25 m, _, err := virtual.New(&bin, nil, nil, nil, nil, 0, 1<<10, "") 26 if err != nil { 27 panic(err) 28 } 29 30 defer m.Close() 31 32 pc, ok := bin.Sym[ir.NameID(xc.Dict.SID("f42"))] 33 if !ok { 34 panic("symbol not found") 35 } 36 37 t, err := m.NewThread(1 << 10) 38 if err != nil { 39 panic(err) 40 } 41 42 for _, v := range []int{1, 2, 3} { 43 var y int32 44 _, err := t.FFI1(pc, virtual.Int32Result{&y}, virtual.Int32(int32(v))) 45 if err != nil { 46 panic(err) 47 } 48 49 fmt.Println(y) 50 } 51 }