wabt icon indicating copy to clipboard operation
wabt copied to clipboard

can wast2json write out binary modules as they are without error checking?

Open yamt opened this issue 6 months ago • 4 comments

is there a way to make wast2json ignore errors in binary modules? ((module binary ...)

i want to convert wast files from exception-handling proposal. eg. https://github.com/WebAssembly/exception-handling/blob/123ac59cb650e9537ce129bb2977243bcbe9a773/test/core/try_table.wast i know that wabt doesn't support the latest version of the proposal yet. however, as the reference interpreter from the proposal repo can covert modules into binary, if wast2json can write out binary modules as they are without parsing, it would be usable to run (most of) these tests.

spacetanuki% ../../../interpreter/wasm ../try_table.wast -o try_table.bin.wast
spacetanuki% ~/git/wabt/b/wast2json --no-check try_table.bin.wast             
try_table.bin.wast:1:2: error: error in binary module: @0x00000020: invalid section code: 13
(module binary
 ^^^^^^
try_table.bin.wast:9:2: error: error in binary module: @0x00000041: expected valid result type (got -0x17)
(module binary
 ^^^^^^
try_table.bin.wast:174:2: error: error in binary module: @0x00000038: invalid section code: 13
(module binary
 ^^^^^^
try_table.bin.wast:186:2: error: error in binary module: @0x00000016: expected valid result type (got -0x17)
(module binary
 ^^^^^^
spacetanuki% 

yamt avatar Jan 27 '24 16:01 yamt

Can you explain what the first line is doing? What is the try_table.bin.wast output file in this case? How is it different to the input wast file?

I wonder how hard it would be to add wabt support for the latest exception handling changes? @aheejin ?

I suppose it would make sense to extend the meaning of --no-check when passed to wast2json. Having said that I'm not sure why that option even exists for this tool. I don't see any usage of wast2json --no-check in wabt.

sbc100 avatar Jan 28 '24 18:01 sbc100

Can you explain what the first line is doing? What is the try_table.bin.wast output file in this case? How is it different to the input wast file?

it converts

;; Test try-catch blocks.

(module
  (tag $e0 (export "e0"))
  (func (export "throw") (throw $e0))
)

(register "test")
:
:

to

(module binary
  "\00\61\73\6d\01\00\00\00\01\84\80\80\80\00\01\60"
  "\00\00\03\82\80\80\80\00\01\00\0d\83\80\80\80\00"
  "\01\00\00\07\8e\80\80\80\00\02\02\65\30\04\00\05"
  "\74\68\72\6f\77\00\00\0a\8a\80\80\80\00\01\84\80"
  "\80\80\00\00\08\00\0b"
)
(register "test")
:
:

yamt avatar Jan 29 '24 04:01 yamt

@sbc100

I wonder how hard it would be to add wabt support for the latest exception handling changes? @aheejin ?

Not sure, because I'm not very familiar with the wabt internals myself. I reviewed some of the current EH implementation in wabt many years ago but I have to re-familiarize myself with it. I don't think it will be more difficult than the efforts put into the current implementation, but I don't think it will be trivial either. At the moment this is not on my priority to-do list unless something else pops up that requires it.

aheejin avatar Jan 30 '24 01:01 aheejin

i ended up with writing a horrible hack to convert EH wast. https://github.com/yamt/wasm-spec-test/blob/master/conv-eh.sh

yamt avatar Jun 20 '24 12:06 yamt