Merge tag 'i3c/for-6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/i3c/linux
[linux-block.git] / Documentation / bpf / clang-notes.rst
CommitLineData
6c7aaffb
DT
1.. contents::
2.. sectnum::
3
4==========================
5Clang implementation notes
6==========================
7
8This document provides more details specific to the Clang/LLVM implementation of the eBPF instruction set.
9
10Versions
11========
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
ee159bdb
DT
17Arithmetic instructions
18=======================
19
20For CPU versions prior to 3, Clang v7.0 and later can enable ``BPF_ALU`` support with
21``-Xclang -target-feature -Xclang +alu32``. In CPU version 3, support is automatically included.
22
c1f9e14e
DT
23Jump instructions
24=================
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
6c7aaffb
DT
29Atomic operations
30=================
31
32Clang can generate atomic instructions by default when ``-mcpu=v3`` is
33enabled. If a lower version for ``-mcpu`` is set, the only atomic instruction
34Clang can generate is ``BPF_ADD`` *without* ``BPF_FETCH``. If you need to enable
35the atomics features, while keeping a lower ``-mcpu`` version, you can use
36``-Xclang -target-feature -Xclang +alu32``.