37 lines · plain
1.. contents::2.. sectnum::3 4==========================5Clang implementation notes6==========================7 8This document provides more details specific to the Clang/LLVM implementation of the eBPF instruction set.9 10Versions11========12 13Clang defined "CPU" versions, where a CPU version of 3 corresponds to the current eBPF ISA.14 15Clang can select the eBPF ISA version using ``-mcpu=v3`` for example to select version 3.16 17Arithmetic instructions18=======================19 20For CPU versions prior to 3, Clang v7.0 and later can enable ``BPF_ALU`` support with21``-Xclang -target-feature -Xclang +alu32``. In CPU version 3, support is automatically included.22 23Jump instructions24=================25 26If ``-O0`` is used, Clang will generate the ``BPF_CALL | BPF_X | BPF_JMP`` (0x8d)27instruction, which is not supported by the Linux kernel verifier.28 29Atomic operations30=================31 32Clang can generate atomic instructions by default when ``-mcpu=v3`` is33enabled. If a lower version for ``-mcpu`` is set, the only atomic instruction34Clang can generate is ``BPF_ADD`` *without* ``BPF_FETCH``. If you need to enable35the atomics features, while keeping a lower ``-mcpu`` version, you can use36``-Xclang -target-feature -Xclang +alu32``.37