【发布时间】:2018-11-04 01:34:06
【问题描述】:
有没有办法用 Web Assembly 编译带有内联汇编语言的 C 文件?
emcc(Emscripten gcc/clang-like 替换 + 模拟 GNU ld 的链接器)1.38.12
尝试编译时:
int main(void) {
register int syscall_no asm("rax") = 1;
register int arg1 asm("rdi") = 1;
register char* arg2 asm("rsi") = "hello, world\n";
register int arg3 asm("rdx") = 14;
asm("syscall");
return 0;
}
这些是错误:
test.c:2:35: error: unknown register name 'rax' in asm
register int syscall_no asm("rax") = 1;
^
test.c:3:35: error: unknown register name 'rdi' in asm
register int arg1 asm("rdi") = 1;
^
test.c:4:35: error: unknown register name 'rsi' in asm
register char* arg2 asm("rsi") = "hello, world!\n";
^
test.c:5:35: error: unknown register name 'rdx' in asm
register int arg3 asm("rdx") = 14;
^
4 errors generated.
ERROR:root:compiler frontend failed to generate LLVM bitcode, halting
还编译了这个C文件:
int main(){
int test();
test()
}
链接到这个程序集文件:
SECTION .text
GLOBAL test
test:
mov rax,1
mov rdi,1
mov rsi,name
mov rdx,7
syscall
mov rax,60
mov rdi,0
syscall
SECTION .data
name DB "Hello",10
这些是错误:
warning: unexpected number of arguments 0 in call to 'test', should be 1
warning: unresolved symbol: test
谢谢。
【问题讨论】:
标签: javascript c assembly emscripten webassembly