Open2
WasmLinux: メモリサイズの収集
前回 https://zenn.dev/link/comments/53dede8034a6d5 はユーザランドプログラムを実行するのに確保するべきメモリサイズを決めうちにしていた。これはちょっと良くないので、プログラムで取得して埋め込んでおくことにする。
dylink.0
セクション
WebAssemblyのdynamic libraryサポートはまだ提案の段階だが、情報としては dylink.0
に必要なものが集約されている。
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 ]