为 WebAssembly 创建程序集数据部分
create assembly data section for WebAssembly
我有一个程序集数据部分,我想将其编译为 WebAssembly。数据部分是自动生成的,布局必须在输出中完全匹配。这是部分数据在 GAS 程序集中的样子:
sym_00497658_11353_5752:
.quad sym_0020ad70_3404_1468903
.quad sym_0020ada0_3404_1468951
.quad sym_00208480_3404_1458423
.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
.quad sym_004a1de0_11353_48640
.global sym_00497680_11353_5792
sym_00497680_11353_5792:
.quad sym_00209e90_3404_1465095
.quad sym_0020a590_3404_1466887
.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
.quad sym_004a1df0_11353_48656
.global sym_004976a0_11353_5824
...
有没有办法为 WebAssembly 生成这样的数据部分?我考虑过使用 LLVM IR,但我不确定如何确保布局正确。
这是将可执行文件重新编译为 WebAssembly 的一部分,这就是部分布局必须匹配的原因。
clang 支持从 .S
(预处理)或 .s
(未预处理)汇编文件生成 wasm 对象。我必须查看程序集解析器或 LLVM 的源代码才能理解语法选项...
使用此指令启动数据部分(需要 "",@
部分以避免语法错误?):
.section .data, "",@
定义所有外部符号或函数的类型(可以在这里找到可能的类型:https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.cpp)
.functype extern_func (arg1, arg2, ...) -> (return)
.globaltype extern_global_var type
为每个定义的符号分配一个大小
.global my_defined_symbol
my_defined_symbol:
.size my_defined_symbol, 4
.byte ...
我有一个程序集数据部分,我想将其编译为 WebAssembly。数据部分是自动生成的,布局必须在输出中完全匹配。这是部分数据在 GAS 程序集中的样子:
sym_00497658_11353_5752:
.quad sym_0020ad70_3404_1468903
.quad sym_0020ada0_3404_1468951
.quad sym_00208480_3404_1458423
.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
.quad sym_004a1de0_11353_48640
.global sym_00497680_11353_5792
sym_00497680_11353_5792:
.quad sym_00209e90_3404_1465095
.quad sym_0020a590_3404_1466887
.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
.quad sym_004a1df0_11353_48656
.global sym_004976a0_11353_5824
...
有没有办法为 WebAssembly 生成这样的数据部分?我考虑过使用 LLVM IR,但我不确定如何确保布局正确。
这是将可执行文件重新编译为 WebAssembly 的一部分,这就是部分布局必须匹配的原因。
clang 支持从 .S
(预处理)或 .s
(未预处理)汇编文件生成 wasm 对象。我必须查看程序集解析器或 LLVM 的源代码才能理解语法选项...
使用此指令启动数据部分(需要
"",@
部分以避免语法错误?):.section .data, "",@
定义所有外部符号或函数的类型(可以在这里找到可能的类型:https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/WebAssembly/Utils/WebAssemblyTypeUtilities.cpp)
.functype extern_func (arg1, arg2, ...) -> (return) .globaltype extern_global_var type
为每个定义的符号分配一个大小
.global my_defined_symbol my_defined_symbol: .size my_defined_symbol, 4 .byte ...