← Documents Documentation/bpf/clang-notes.rst GitHub 원문 ↗

Linux 6.18.37 · BPF

Clang implementation notes

Clang의 eBPF CPU version, ALU32·atomic feature flag와 verifier가 지원하지 않는 -O0 jump instruction을 설명합니다.

Source pathDocumentation/bpf/clang-notes.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

clang-notes.rst:1-36

Clang의 `-mcpu=v3`는 현재 eBPF ISA를 선택하며 ALU32와 atomic instruction support를 기본 포함합니다. 이전 CPU version에서는 target feature flag로 필요한 기능을 별도 활성화해야 합니다.

`-O0`는 Linux verifier가 지원하지 않는 `BPF_CALL | BPF_X | BPF_JMP` opcode를 만들 수 있으므로 BPF program compile option을 선택할 때 주의해야 합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. contents::
2 .. sectnum::
3
4 ==========================
5 Clang implementation notes
6 ==========================
7
8 This document provides more details specific to the Clang/LLVM implementation of the eBPF instruction set.
9
10 Versions
11 ========
12
13 Clang defined "CPU" versions, where a CPU version of 3 corresponds to the current eBPF ISA.
14
15 Clang can select the eBPF ISA version using ``-mcpu=v3`` for example to select version 3.
16
17 Arithmetic instructions
18 =======================
19
20 For 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
23 Jump instructions
24 =================
25
26 If ``-O0`` is used, Clang will generate the ``BPF_CALL | BPF_X | BPF_JMP`` (0x8d)
27 instruction, which is not supported by the Linux kernel verifier.
28
29 Atomic operations
30 =================
31
32 Clang can generate atomic instructions by default when ``-mcpu=v3`` is
33 enabled. If a lower version for ``-mcpu`` is set, the only atomic instruction
34 Clang can generate is ``BPF_ADD`` *without* ``BPF_FETCH``. If you need to enable
35 the atomics features, while keeping a lower ``-mcpu`` version, you can use
36 ``-Xclang -target-feature -Xclang +alu32``.
37

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Clang eBPF 구현 참고

1-9

이 문서는 eBPF instruction set의 Clang/LLVM implementation에 해당하는 세부 사항을 설명합니다.

CPU version과 ISA 선택

10-16

Clang은 "CPU" version을 정의하며 CPU version 3이 현재 eBPF ISA에 대응합니다.

예를 들어 `-mcpu=v3`를 사용하면 Clang이 eBPF ISA version 3을 선택합니다.

Arithmetic instruction과 ALU32

17-22

CPU version 3보다 이전 version에서는 Clang v7.0 이상이 `-Xclang -target-feature -Xclang +alu32`로 `BPF_ALU` support를 활성화할 수 있습니다.

CPU version 3에는 이 support가 자동으로 포함됩니다.

-O0 jump instruction 제한

23-28

`-O0`를 사용하면 Clang은 `BPF_CALL | BPF_X | BPF_JMP`(`0x8d`) instruction을 생성합니다. Linux kernel verifier는 이 instruction을 지원하지 않습니다.

Atomic operation 생성

29-36

`-mcpu=v3`를 활성화하면 Clang은 기본적으로 atomic instruction을 생성할 수 있습니다.

`-mcpu`를 더 낮은 version으로 설정했을 때 Clang이 생성할 수 있는 atomic instruction은 `BPF_FETCH`가 없는 `BPF_ADD`뿐입니다.

낮은 `-mcpu` version을 유지하면서 atomic feature를 활성화해야 한다면 `-Xclang -target-feature -Xclang +alu32`를 사용할 수 있습니다.