bpf, doc: add description wrt native/bpf clang target and pointer size
authorDaniel Borkmann <daniel@iogearbox.net>
Mon, 19 Mar 2018 23:21:15 +0000 (00:21 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 20 Mar 2018 22:47:45 +0000 (15:47 -0700)
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>
Documentation/bpf/bpf_devel_QA.txt

index 84cbb302f2b56e1fe9b4ecc46dfb2f94b1ff392d..1a0b704e1a38f2a8749c83bb3f647d9a952c2787 100644 (file)
@@ -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
        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:
 
      - Your program includes a header file, e.g., ptrace.h, which eventually