Commit 6d4d359
committed
WIP: selftests/bpf: Fix uprobe tests in attach_probe on arm 32-bit
With test_progs compiled with ARM THUMB insns, trigger_func*() used for
testing uprobes have odd (LSB set) entry points due to interworking. This
fails alignment check first, then due to uprobe unsupported for THUMB in
prepare_uprobe() -> arch_uprobe_analyze_insn() -> arm_probes_decode_insn().
First fix by setting trigger_func*() as ARM insns and rely on interworking
enabled by default. Doesn't work on Debian bookworm target because insn #1
of funcs patched to 'UDF torvalds#25' which causes "Illegal instruction". Patched
by dynamic loader? Kernel somehow?
__attribute__((target("arm")))
Works to compile all test_progs with gcc -marm, or just attach_probe.c.
Change Makefile to compile prog_tests/attach_probe.c with '-marm' to avoid
using THUMB insns, with expected tests passing:
torvalds#8/1 attach_probe/manual-default:OK
torvalds#8/2 attach_probe/manual-legacy:OK
torvalds#8/3 attach_probe/manual-perf:OK
torvalds#8/4 attach_probe/manual-link:OK
torvalds#8/5 attach_probe/auto:OK
torvalds#8/6 attach_probe/kprobe-sleepable:OK
torvalds#8/8 attach_probe/uprobe-sleepable:OK
torvalds#8/9 attach_probe/uprobe-ref_ctr:OK
torvalds#8/10 attach_probe/uprobe-long_name:OK
torvalds#8/11 attach_probe/kprobe-long_name:OK
torvalds#8 attach_probe:OK
Note that attach_probe/uprobe-lib will still fail since it tries to attach
a uprobe to the system libc.so, which is compiled for THUMB:
test_attach_probe:PASS:skel_open 0 nsec
test_attach_probe:PASS:skel_load 0 nsec
test_attach_probe:PASS:check_bss 0 nsec
test_attach_probe:PASS:uprobe_ref_ctr_cleanup 0 nsec
libbpf: prog 'handle_uprobe_byname2': failed to create uprobe '/lib/arm-linux-gnueabihf/libc.so.6:0x528e1' perf event: -EINVAL
test_uprobe_lib:FAIL:attach_uprobe_byname2 unexpected error: -22
torvalds#8/7 attach_probe/uprobe-lib:FAIL
torvalds#8 attach_probe:FAIL
Also compile other sources and binary with same issue using "-marm":
bpf_cookie.c
fill_link_info.c
task_pt_regs.test.c
uprobe_autoattach.c (also tries libc.so attach)
usdt.c
uprobe_multi
Similar problem with some perf tests, which try to set HW breakpoint on a
userspace THUMB func but fail when LSB set in insn addr (treated as
misaligned). Also use "-marm" to work around.
perf_skip.test.o
Finally, try adding general 'CFLAG += -marm' if SRCARCH=arm rather than
cherry-picking files, and waiting for later breakage.
Signed-off-by: Tony Ambardar <[email protected]>1 parent 672535c commit 6d4d359
1 file changed
+13
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
61 | 64 | | |
62 | 65 | | |
63 | 66 | | |
| |||
888 | 891 | | |
889 | 892 | | |
890 | 893 | | |
| 894 | + | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
891 | 904 | | |
892 | 905 | | |
893 | 906 | | |
| |||
0 commit comments