Open5

WasmLinux: (efault)p0 の謎を追いたい

okuokuokuoku

謎のIssueが来た

https://github.com/okuoku/wasmlinux-project/issues/7

Ubuntu 22.04 のclangでWasmLinuxをビルドすると起動しないイメージができるらしい。コンパイラがバグってることはそんなにないので、これはたぶんスタック破壊バグがまだ残っている。

okuokuokuoku

LLVM 18をインストールする

Ubuntu 22.04自体にはLLVM 18のパッケージは無いようだ。というわけでたぶん公式パッケージだろう。

% docker -it ubuntu:22.04

とりあえずDockerの公式イメージからUbuntu:22.04を使う。

# apt install wget software-properties-common
# wget https://apt.llvm.org/llvm.sh
# chmod +x llvm.sh
# ./llvm.sh 18 all

レポートされたバージョンをインストールできた。

# clang-18 -v
Ubuntu clang version 18.1.8 (++20240731024944+3b5b5c1ec4a3-1~exp1~20240731145000.144)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11
Candidate multilib: .;@m64
Selected multilib: .;@m64
okuokuokuoku

再現環境の構築

# apt update
# apt install build-essential ninja-build cmake wget software-properties-common flex bison bc
# wget https://apt.llvm.org/llvm.sh
# chmod +x llvm.sh
# ./llvm.sh 18 all

wabtは普通にインストールしてみる:

# cmake -S wabt -B build.wabt -G Ninja -DCMAKE_INSTALL_PREFIX=$PWD/host
# ninja -C build.wabt
# ninja -C build.wabt install

clangは ln でごまかす:

# ln -s /usr/bin/clang-18 $PWD/host/bin/clang
# ln -s /usr/bin/wasm-ld-18 $PWD/host/bin/wasm-ld
# ln -s /usr/bin/llvm-ar-18 $PWD/host/bin/llvm-ar
# ln -s /usr/bin/llvm-nm-18 $PWD/host/bin/llvm-nm
# ln -s /usr/bin/llvm-ranlib-18 $PWD/host/bin/llvm-ranlib

... ここまでやってから気付いたけど、Ubuntu 22.04のCMakeが古すぎる。。これドキュメントした方が良いな。。

https://zenn.dev/okuoku/scraps/f032a34e95d1c1

# wget https://github.com/Kitware/CMake/releases/download/v3.30.5/cmake-3.30.5-linux-x86_64.sh
# ...