Open2

WasmLinux: メモリサイズの収集

okuokuokuoku

前回 https://zenn.dev/link/comments/53dede8034a6d5 はユーザランドプログラムを実行するのに確保するべきメモリサイズを決めうちにしていた。これはちょっと良くないので、プログラムで取得して埋め込んでおくことにする。

okuokuokuoku

dylink.0 セクション

WebAssemblyのdynamic libraryサポートはまだ提案の段階だが、情報としては dylink.0 に必要なものが集約されている。

https://github.com/WebAssembly/tool-conventions/blob/c74267a5897c1bdc9aa60adeaf41816387d3cd12/DynamicLinking.md?plain=1#L15-L19

For WASM_DYLINK_MEM_INFO the following fields are present in the subsection:

Field Type Description
memorysize varuint32 Size of the memory area the loader should reserve for the module, which will begin at env.__memory_base
memoryalignment varuint32 The required alignment of the memory area, in bytes, encoded as a power of 2.
tablesize varuint32 Size of the table area the loader should reserve for the module, which will begin at env.__table_base
tablealignment varuint32 The required alignment of the table area, in elements, encoded as a power of 2.

セクションの内容は wasm-objdump でダンプできる。

$ ../host/bin/wasm-objdump -x -j dylink.0 busybox_unstripped

busybox_unstripped:     file format wasm 0x1
module name: <busybox_unstripped>

Section Details:

Custom:
 - name: "dylink.0"
 - mem_size     : 199980
 - mem_p2align  : 4
 - table_size   : 809
 - table_p2align: 0
 - imports[5]:
  - env._DYNAMIC [ undefined binding=weak vis=hidden ]
  - env.__init_array_end [ undefined binding=weak vis=hidden ]
  - env.__init_array_start [ undefined binding=weak vis=hidden ]
  - env.__fini_array_start [ undefined binding=weak vis=hidden ]
  - env.__fini_array_end [ undefined binding=weak vis=hidden ]