bpf, doc: add description wrt native/bpf clang target and pointer size
As this recently came up on netdev [0], lets add it to the BPF devel doc. [0] https://www.spinics.net/lists/netdev/msg489612.html Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Alexei Starovoitov <ast@kernel.org>hifive-unleashed-5.1
parent
d48ce3e5ba
commit
78262f4575
|
@ -539,6 +539,18 @@ A: Although LLVM IR generation and optimization try to stay architecture
|
||||||
The clang option "-fno-jump-tables" can be used to disable
|
The clang option "-fno-jump-tables" can be used to disable
|
||||||
switch table generation.
|
switch table generation.
|
||||||
|
|
||||||
|
- For clang -target bpf, it is guaranteed that pointer or long /
|
||||||
|
unsigned long types will always have a width of 64 bit, no matter
|
||||||
|
whether underlying clang binary or default target (or kernel) is
|
||||||
|
32 bit. However, when native clang target is used, then it will
|
||||||
|
compile these types based on the underlying architecture's conventions,
|
||||||
|
meaning in case of 32 bit architecture, pointer or long / unsigned
|
||||||
|
long types e.g. in BPF context structure will have width of 32 bit
|
||||||
|
while the BPF LLVM back end still operates in 64 bit. The native
|
||||||
|
target is mostly needed in tracing for the case of walking pt_regs
|
||||||
|
or other kernel structures where CPU's register width matters.
|
||||||
|
Otherwise, clang -target bpf is generally recommended.
|
||||||
|
|
||||||
You should use default target when:
|
You should use default target when:
|
||||||
|
|
||||||
- Your program includes a header file, e.g., ptrace.h, which eventually
|
- Your program includes a header file, e.g., ptrace.h, which eventually
|
||||||
|
|
Loading…
Reference in New Issue