Re: [PATCH v7 2/2] selftests/bpf: Force -O2 for USDT selftests to cover SIB handling logic

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 8/6/25 7:57 PM, 赵佳炜 wrote:



Hi Yonghong,

I noticed that the USDT argument specification generated by GCC 14 is '8@array(,%rax,8)'.
This pattern is currently not handled correctly. I'm exploring whether I can use DWARF information
to calculate the address of this variable. This approach seems to work. However, since I can't

I think 'array' should be in symbol table, so there is no need to check dwarf in my opinion.

reproduce the same issue on my machine, I plan to implement this approach for the PC-relative
issue in a separate patch. Would that affect the merging of this patch?

Let us handle this since '8@array(,%rax,8)' may appear in CI environment.



At 2025-08-07 02:17:34, "Yonghong Song" <yonghong.song@xxxxxxxxx> wrote:

On 8/6/25 2:24 AM, Jiawei Zhao wrote:
When using GCC on x86-64 to compile an usdt prog with -O1 or higher
optimization, the compiler will generate SIB addressing mode for global
array and PC-relative addressing mode for global variable,
e.g. "1@-96(%rbp,%rax,8)" and "-1@4+t1(%rip)".

In this patch:
- add usdt_o2 test case to cover SIB addressing usdt argument spec
    handling logic

Signed-off-by: Jiawei Zhao <phoenix500526@xxxxxxx>
---
   tools/testing/selftests/bpf/Makefile          |  8 +++
   .../selftests/bpf/prog_tests/usdt_o2.c        | 71 +++++++++++++++++++
   .../selftests/bpf/progs/test_usdt_o2.c        | 37 ++++++++++
   3 files changed, 116 insertions(+)
   create mode 100644 tools/testing/selftests/bpf/prog_tests/usdt_o2.c
   create mode 100644 tools/testing/selftests/bpf/progs/test_usdt_o2.c

diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
index 910d8d6402ef..68cf6a9cf05f 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -759,6 +759,14 @@ TRUNNER_BPF_BUILD_RULE := $$(error no BPF objects should be built)
   TRUNNER_BPF_CFLAGS :=
   $(eval $(call DEFINE_TEST_RUNNER,test_maps))
+# Use -O2 optimization to generate SIB addressing usdt argument spec
+# Only apply on x86 architecture where SIB addressing is relevant
+ifeq ($(ARCH), x86)
+$(OUTPUT)/usdt_o2.test.o: CFLAGS:=$(subst O0,O2,$(CFLAGS))
+$(OUTPUT)/cpuv4/usdt_o2.test.o: CFLAGS:=$(subst O0,O2,$(CFLAGS))
+$(OUTPUT)/no_alu32/usdt_o2.test.o: CFLAGS:=$(subst O0,O2,$(CFLAGS))
+endif
I tried your selftest with gcc14 and llvm20 in my environment. See below:

llvm20:
Displaying notes found in: .note.stapsdt
   Owner                Data size        Description
   stapsdt              0x0000002f       NT_STAPSDT (SystemTap probe descriptors)
     Provider: test
     Name: usdt1
     Location: 0x00000000000003ac, Base: 0x0000000000000000, Semaphore: 0x0000000000000000
     Arguments: 8@-64(%rbp)

gcc14:
Displaying notes found in: .note.stapsdt
   Owner                Data size        Description
   stapsdt              0x00000034       NT_STAPSDT (SystemTap probe descriptors)
     Provider: test
     Name: usdt1
     Location: 0x0000000000000334, Base: 0x0000000000000000, Semaphore: 0x0000000000000000
     Arguments: 8@array(,%rax,8)

llvm20 and gcc14 generate different usdt patterns. '8@-64(%rbp)' already supports so
with SIB support, the test should pass CI, I think.

[...]





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux