1 Clang 實現注意事項

本文件提供了 Clang/LLVM 實現 eBPF 指令集的更多詳細資訊。

1.1 版本

Clang 定義了“CPU”版本,其中 CPU 版本 3 對應當前的 eBPF ISA。

例如,Clang 可以使用 -mcpu=v3 來選擇 eBPF ISA 版本 3。

1.2 算術指令

對於版本 3 之前的 CPU 版本,Clang v7.0 及更高版本可以使用 -Xclang -target-feature -Xclang +alu32 啟用 BPF_ALU 支援。在 CPU 版本 3 中,支援是自動包含的。

1.3 跳轉指令

如果使用 -O0,Clang 將生成 BPF_CALL | BPF_X | BPF_JMP (0x8d) 指令,Linux 核心驗證器不支援該指令。

1.4 原子操作

-mcpu=v3 啟用時,Clang 預設可以生成原子指令。如果 -mcpu 設定為較低版本,Clang 唯一能生成的原子指令是 不帶 BPF_FETCHBPF_ADD。如果需要在保持較低 -mcpu 版本的同時啟用原子特性,可以使用 -Xclang -target-feature -Xclang +alu32