wasi-libc icon indicating copy to clipboard operation
wasi-libc copied to clipboard

main in a library regression

Open yamt opened this issue 1 year ago • 2 comments

recent wasi-libc is broken if you put main in a library.

test case: https://github.com/yamt/garbage/tree/d422b1073125b3fc8f843ce4b12280ab3982fb84/c/main_in_lib

spacetanuki% ./build-native.sh
spacetanuki% ./a.out
this is foo
spacetanuki% WASI_SDK=/opt/wasi-sdk-20.0 ./build-wasi.sh
spacetanuki% toywasm --wasi a.out
this is foo
spacetanuki% WASI_SDK=/opt/wasi-sdk-21.0 ./build-wasi.sh
spacetanuki% toywasm --wasi a.out                       
Error: [trap] unreachable executed (4): unreachable at 0001a5
frame[  2] funcpc 0001a5 (<unknown>:undefined_weak:main) callerpc 0022de
  param [0] = 00000001
  param [1] = 00010b30
frame[  1] funcpc 00226c (<unknown>:__main_void) callerpc 0001df
  local [0] = 00010b00
  local [1] = 00010b30
  local [2] = 00010b20
frame[  0] funcpc 0001ab (<unknown>:_start)
  local [0] = 00000000
2024-03-16 14:47:15 (1710568035.864123000): [117042600] instance_execute_func failed with -1
2024-03-16 14:47:15 (1710568035.864618000): [117042600] invoke failed with -1
spacetanuki% 

i guess this is a regression caused by https://github.com/WebAssembly/wasi-libc/pull/429

yamt avatar Mar 16 '24 05:03 yamt

Yes, it looks like its specifically this line: https://github.com/WebAssembly/wasi-libc/pull/429/files#r1290434731.

sbc100 avatar Mar 18 '24 14:03 sbc100

a simpler case (just an empty file w/o main function)

spacetanuki% cat a.c
spacetanuki% /opt/wasi-sdk-20.0/bin/clang a.c
wasm-ld: error: /Users/yamamoto/wasm/wasi-sdk-20.0/bin/../share/wasi-sysroot/lib/wasm32-wasi/libc.a(__main_void.o): undefined symbol: main
clang-16: error: linker command failed with exit code 1 (use -v to see invocation)
spacetanuki% /opt/wasi-sdk-21.0/bin/clang a.c
spacetanuki% toywasm --wasi a.out
Error: [trap] unreachable executed (4): unreachable at 0000e6
current pc 0000e6
frame[  2] funcpc 0000e6 (<unknown>:undefined_weak:main) callerpc 00221f
  param [0] = 00000001
  param [1] = 00010620
frame[  1] funcpc 0021ad (<unknown>:__main_void) callerpc 000120
  local [0] = 000105f0
  local [1] = 00010620
  local [2] = 00010610
frame[  0] funcpc 0000ec (<unknown>:_start)
  local [0] = 00000000
2024-07-11 11:01:40 (1720663300.957057000): [10aacc600] instance_execute_func failed with -1
2024-07-11 11:01:40 (1720663300.957537000): [10aacc600] invoke failed with -1
spacetanuki% 

yamt avatar Jul 11 '24 02:07 yamt