Skip to content

一个本地导出到wasm的函数中使用socket的connect时发生异常崩溃 #4815

@kamylee

Description

@kamylee

测试平台:Win10
Wamr版本2.4.4:
wasi-sdk版本:24.0
我使用cmake命令:
cmake -G "Unix Makefiles" -DWASI_SDK_PREFIX=E:/WorkSpace/wamr_source/wasi-sdk-24.0-x86_64-windows -DCMAKE_TOOLCHAIN_FILE=E:/WorkSpace/wamr_source/wasi-sdk-24.0-x86_64-windows/share/cmake/wasi-sdk.cmake -DCMAKE_SYSROOT=E:/WorkSpace/wamr_source/wasi-sdk-24.0-x86_64-windows/share/wasi-sysroot ..
分使用-nostdlib和不使用-nostdlib 来 编译testapp.c (主机配置和示例来自sample/basic)
生成两个wasm:
testapp.wasm(带-nostdlib --no-entry)
testapp1.wasm(不带-nostdlib --no-entry)

target_link_options(testapp1.wasm PRIVATE 
	#-nostdlib -O3					#clang driver 选项(直接给 clang)	 	
	#LINKER:--strip-all,--no-entry	#ok 
	LINKER:--export=__heap_base		#用来指示libc堆的基地址
	LINKER:--export=__data_end		#指示数据区的结束位置
	LINKER:--export=malloc
	LINKER:--export=free		
	#LINKER:--export=__wasm_call_ctors
	LINKER:--export=generate_float
	LINKER:--export=float_to_string
	LINKER:--export=calculate
	LINKER:--export=mul7
	LINKER:--export=wasm_test1
	LINKER:--shared-memory 
	LINKER:--max-memory=6291456 #65536*96
	LINKER:--initial-memory=2097152
	LINKER:-zstack-size=524288
	LINKER:--no-check-features
	LINKER:--allow-undefined
	
)

testapp1.wasm仅注释了-nostdlib 和 LINKER:--strip-all,--no-entry

我在主机上调用了wasm内部的函数wasm_test(),然后在wasm_test()中调用了主机本地函数native_test()。然后在native_test()中创建socket tcp client连接本地服务器127.0.0.1:5077。

结果:
testapp.wasm可以正常连接,
testapp1.wasm 在connect或::connect的时候崩溃了:
0x0000000000000000 处(位于 TestDriver.exe 中)引发的异常: 0xC0000005: 执行位置 0x0000000000000000 时发生访问冲突。

问题:
为什么不带-nostdlib --no-entry的wasm app不能使用connect,connect函数的地址似乎和本地不一样,是被lic-wasi内置的connect给覆盖了?
请大神解惑!感谢!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions