Clang 为WebAssembly创建程序集数据节

Clang 为WebAssembly创建程序集数据节,clang,webassembly,llvm-ir,Clang,Webassembly,Llvm Ir,我有一个汇编数据部分,我想编译成WebAssembly。数据部分是自动生成的,布局必须在输出中完全匹配。这是气体组件中部分数据的外观: 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_004a1

我有一个汇编数据部分,我想编译成WebAssembly。数据部分是自动生成的,布局必须在输出中完全匹配。这是气体组件中部分数据的外观:

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的源代码才能理解语法选项

  • 使用此指令启动数据部分(需要
    ,@
    部分以避免语法错误?)

  • 定义所有外部符号或函数的类型(可以在此处找到可能的类型:)

  • 为每个定义的符号指定一个大小

    .global my_defined_symbol
    my_defined_symbol:
    .size my_defined_symbol, 4
    .byte ...
    

布局是指符号内的部分吗?我确信这在LLVM IR中是可能的,尽管我不知道具体细节。不,我指的是该部分的整个字节布局,只是为了确保它的布局正确。我已经找到了解决方案,我将发布一个答案:)
.functype extern_func (arg1, arg2, ...) -> (return)
.globaltype extern_global_var type
.global my_defined_symbol
my_defined_symbol:
.size my_defined_symbol, 4
.byte ...