Skip to content

binaryen fails to validate wasm in asm2wasm #37555

Closed
@m4b

Description

@m4b

I receive compile errors w.r.t. invalid wasm being generated unless I turn off the archive and mach64 features in goblin.

Dump:

asm2wasm: /home/m4b/.emscripten_ports/binaryen/binaryen-version_18/src/asm2wasm.h:1111: void wasm::Asm2WasmBuilder::processAsm(cashew::Ref): Assertion `WasmValidator().validate(wasm)' failed.
Traceback (most recent call last):
  File "/home/m4b/lib/emsdk_portable/emscripten/incoming/emcc", line 13, in <module>
    emcc.run()
  File "/home/m4b/lib/emsdk_portable/emscripten/incoming/emcc.py", line 2028, in run
    subprocess.check_call(cmd, stdout=open(wasm_text_target, 'w'))
  File "/usr/lib64/python2.7/subprocess.py", line 541, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '[u'/home/m4b/.emscripten_ports/binaryen/binaryen-version_18/bin/asm2wasm', '/home/m4b/projects/goblin/target/wasm32-unknown-emscripten/debug/examples/rdr.asm.js', '--total-memory=16777216', '--mem-init=/home/m4b/projects/goblin/target/wasm32-unknown-emscripten/debug/examples/rdr.js.mem', '--wasm-only']' returned non-zero exit status -6


error: aborting due to previous error

error: Could not compile `goblin`.

Caused by:
  process didn't exit successfully: `rustc examples/rdr.rs --crate-name rdr --crate-type bin -g --cfg feature="archive" --cfg feature="byteorder" --cfg feature="pe64" --cfg feature="goblin" --cfg feature="std" --cfg feature="elf32" --cfg feature="endian_fd" --cfg feature="default" --cfg feature="mach64" --cfg feature="pe32" --cfg feature="mach32" --cfg feature="elf64" -C metadata=17b052e017a24401 --out-dir /home/m4b/projects/goblin/target/wasm32-unknown-emscripten/debug/examples --emit=dep-info,link --target wasm32-unknown-emscripten -L dependency=/home/m4b/projects/goblin/target/wasm32-unknown-emscripten/debug/deps --extern byteorder=/home/m4b/projects/goblin/target/wasm32-unknown-emscripten/debug/deps/libbyteorder-e4fc6ea0c49cabcf.rlib --extern goblin=/home/m4b/projects/goblin/target/wasm32-unknown-emscripten/debug/deps/libgoblin.rlib` (exit code: 101)

is what I receive after it outputs an inappropriately large s-expression to stdout.

Also, it looks like file access is broken (maybe this never worked, in which case shouldn't it throw unsupported function?):

node rdr.js /bin/ls
trying binaryen method: native-wasm
no native wasm support detected
trying binaryen method: interpret-binary
binaryen method succeeded.
Not an ELF: Error { repr: Os { code: 2, message: "No such file or directory" } }

If I print the path, it is correct; it just can't find any files seemingly. Testing with simple crate with file access has similar results.

Metadata

Metadata

Assignees

No one assigned

    Labels

    O-wasmTarget: WASM (WebAssembly), http://webassembly.org/

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions