@@ -258,32 +258,54 @@ func (r *Runner) Generate(ctx context.Context, req *plugin.CodeGenRequest) (*plu
258258 store := wasmtime .NewStore (engine )
259259 store .SetWasi (wasiConfig )
260260
261- linkRegion := trace .StartRegion (ctx , "linker.Instantiate " )
262- instance , err : = linker .Instantiate (store , module )
261+ linkRegion := trace .StartRegion (ctx , "linker.DefineModule " )
262+ err = linker .DefineModule (store , "" , module )
263263 linkRegion .End ()
264264 if err != nil {
265265 return nil , fmt .Errorf ("define wasi: %w" , err )
266266 }
267267
268268 // Run the function
269+ fn , err := linker .GetDefault (store , "" )
270+ if err != nil {
271+ return nil , fmt .Errorf ("wasi: get default: %w" , err )
272+ }
273+
269274 callRegion := trace .StartRegion (ctx , "call _start" )
270- nom := instance .GetExport (store , "_start" ).Func ()
271- _ , err = nom .Call (store )
275+ _ , err = fn .Call (store )
272276 callRegion .End ()
273- if err != nil {
274- // Print WASM stdout
275- stderrBlob , err := os .ReadFile (stderrPath )
276- if err == nil && len (stderrBlob ) > 0 {
277- return nil , errors .New (string (stderrBlob ))
278- }
279- return nil , fmt .Errorf ("call: %w" , err )
277+
278+ if cerr := checkError (err , stderrPath ); cerr != nil {
279+ return nil , cerr
280280 }
281281
282282 // Print WASM stdout
283283 stdoutBlob , err := os .ReadFile (stdoutPath )
284284 if err != nil {
285285 return nil , fmt .Errorf ("read file: %w" , err )
286286 }
287+
287288 var resp plugin.CodeGenResponse
288289 return & resp , resp .UnmarshalVT (stdoutBlob )
289290}
291+
292+ func checkError (err error , stderrPath string ) error {
293+ if err == nil {
294+ return err
295+ }
296+
297+ var wtError * wasmtime.Error
298+ if errors .As (err , & wtError ) {
299+ if code , ok := wtError .ExitStatus (); ok {
300+ if code == 0 {
301+ return nil
302+ }
303+ }
304+ }
305+ // Print WASM stdout
306+ stderrBlob , rferr := os .ReadFile (stderrPath )
307+ if rferr == nil && len (stderrBlob ) > 0 {
308+ return errors .New (string (stderrBlob ))
309+ }
310+ return fmt .Errorf ("call: %w" , err )
311+ }
0 commit comments