libbpf: Parse usdt args without offset on x86 (e.g. 8@(%rsp))
authorTimo Hunziker <timo.hunziker@gmx.ch>
Sat, 3 Dec 2022 12:37:46 +0000 (12:37 +0000)
committerAndrii Nakryiko <andrii@kernel.org>
Wed, 7 Dec 2022 00:16:50 +0000 (16:16 -0800)
commitc21dc529baba16d6698a396eb997fee318300ee1
tree56ee0ad2804f3ce2d36966bcb2728a225016957c
parentaa67961f3243dfff26c47769f87b4d94b07ec71f
libbpf: Parse usdt args without offset on x86 (e.g. 8@(%rsp))

Parse USDT arguments like "8@(%rsp)" on x86. These are emmited by
SystemTap. The argument syntax is similar to the existing "memory
dereference case" but the offset left out as it's zero (i.e. read
the value from the address in the register). We treat it the same
as the the "memory dereference case", but set the offset to 0.

I've tested that this fixes the "unrecognized arg #N spec: 8@(%rsp).."
error I've run into when attaching to a probe with such an argument.
Attaching and reading the correct argument values works.

Something similar might be needed for the other supported
architectures.

  [0] Closes: https://github.com/libbpf/libbpf/issues/559

Signed-off-by: Timo Hunziker <timo.hunziker@gmx.ch>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20221203123746.2160-1-timo.hunziker@eclipso.ch
tools/lib/bpf/usdt.c