libbpf: USDT arm arg parsing support
authorPuranjay Mohan <puranjay12@gmail.com>
Tue, 7 Mar 2023 12:04:40 +0000 (12:04 +0000)
committerAndrii Nakryiko <andrii@kernel.org>
Tue, 7 Mar 2023 23:35:53 +0000 (15:35 -0800)
commit720d93b60aec22abcb2a5b6d8de472f3a50694b1
tree0d9224322daf284d462b8043b8ac069a97c83aed
parent98e678e9bc5859dec605794730ad37d26789bd30
libbpf: USDT arm arg parsing support

Parsing of USDT arguments is architecture-specific; on arm it is
relatively easy since registers used are r[0-10], fp, ip, sp, lr,
pc. Format is slightly different compared to aarch64; forms are

- "size @ [ reg, #offset ]" for dereferences, for example
  "-8 @ [ sp, #76 ]" ; " -4 @ [ sp ]"
- "size @ reg" for register values; for example
  "-4@r0"
- "size @ #value" for raw values; for example
  "-8@#1"

Add support for parsing USDT arguments for ARM architecture.

To test the above changes QEMU's virt[1] board with cortex-a15
CPU was used. libbpf-bootstrap's usdt example[2] was modified to attach
to a test program with DTRACE_PROBE1/2/3/4... probes to test different
combinations.

[1] https://www.qemu.org/docs/master/system/arm/virt.html
[2] https://github.com/libbpf/libbpf-bootstrap/blob/master/examples/c/usdt.bpf.c

Signed-off-by: Puranjay Mohan <puranjay12@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20230307120440.25941-3-puranjay12@gmail.com
tools/lib/bpf/usdt.c