[PATCH v2] perf/test: perf test 86 fails on s390

Thomas Richter posted 1 patch 1 month, 3 weeks ago
tools/perf/tests/shell/record+probe_libc_inet_pton.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH v2] perf/test: perf test 86 fails on s390
Posted by Thomas Richter 1 month, 3 weeks ago
Command perf test 86 fails on s390:
 # perf test -F 86
 ping 868299 [007] 28248.013596: probe_libc:inet_pton_1: (3ff95948020)
 3ff95948020 inet_pton+0x0 (inlined)
 3ff9595e6e7 text_to_binary_address+0x1007 (inlined)
 3ff9595e6e7 gaih_inet+0x1007 (inlined)
 FAIL: expected backtrace entry \
	 "main\+0x[[:xdigit:]]+[[:space:]]\(.*/bin/ping.*\)$"
	 got "3ff9595e6e7 gaih_inet+0x1007 (inlined)"
 86: probe libc's inet_pton & backtrace it with ping  : FAILED!
 #

The root cause is a new stack layout, two functions have been added
as seen below.

 # perf script | tac | grep -m1 '^ping' -B9 | tac
 ping  866856 [007] 25979.494921: probe_libc:inet_pton: (3ff8ec48020)
	     3ff8ec48020 inet_pton+0x0 (inlined)
 new -->     3ff8ec5e6e7 text_to_binary_address+0x1007 (inlined)
 new -->     3ff8ec5e6e7 gaih_inet+0x1007 (inlined)
	     3ff8ec5e6e7 getaddrinfo+0x1007 (/usr/lib64/libc.so.6)
	     2aa3fe04bf5 main+0xff5 (/usr/bin/ping)
	     3ff8eb34a5b __libc_start_call_main+0x8b (/usr/lib64/libc.so.6)
	     3ff8eb34b5d __libc_start_main@GLIBC_2.2+0xad (inlined)
	     2aa3fe06a1f [unknown] (/usr/bin/ping)

 #

The new functions in the call chain are:
 - text_to_binary_address()
 - gaih_inet().

Both functions are inlined and do not show up in the output
of the nm command:

  # nm -a /usr/lib64/libc.so.6 | \
	grep -E '(text_to_binary_address|gaih_inet)$'
  #

There is no possibility to add these 2 functions depending on their
existance in the C library.

Add text_to_binary_address() and gaih_inet() to the list of
expected functions in an compatible way and extend the regular
expression. On s390 the backtrace can now be

   Before                   After
   probe_libc:inet_pton     probe_libc:inet_pton
   inet_pton		    inet_pton
   getaddrinfo		    getaddrinfo | text_to_binary_address
   main			    main | gaih_inet

Output after:
 # perf test -F 86
 86: probe libc's inet_pton & backtrace it with ping  : Ok
 #

Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
---
 tools/perf/tests/shell/record+probe_libc_inet_pton.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
index f38c8ead0b03..47a26f25db9f 100755
--- a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
+++ b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
@@ -40,8 +40,8 @@ trace_libc_inet_pton_backtrace() {
 	case "$(uname -m)" in
 	s390x)
 		eventattr='call-graph=dwarf,max-stack=4'
-		echo "(__GI_)?getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" >> $expected
-		echo "main\+0x[[:xdigit:]]+[[:space:]]\(.*/bin/ping.*\)$" >> $expected
+		echo "((__GI_)?getaddrinfo|text_to_binary_address)\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" >> $expected
+		echo "(gaih_inet|main)\+0x[[:xdigit:]]+[[:space:]]\(inlined|.*/bin/ping.*\)$" >> $expected
 		;;
 	ppc64|ppc64le)
 		eventattr='max-stack=4'
-- 
2.46.2
Re: [PATCH v2] perf/test: perf test 86 fails on s390
Posted by Namhyung Kim 1 month, 3 weeks ago
On Tue, 01 Oct 2024 14:42:23 +0200, Thomas Richter wrote:

> Command perf test 86 fails on s390:
>  # perf test -F 86
>  ping 868299 [007] 28248.013596: probe_libc:inet_pton_1: (3ff95948020)
>  3ff95948020 inet_pton+0x0 (inlined)
>  3ff9595e6e7 text_to_binary_address+0x1007 (inlined)
>  3ff9595e6e7 gaih_inet+0x1007 (inlined)
>  FAIL: expected backtrace entry \
> 	 "main\+0x[[:xdigit:]]+[[:space:]]\(.*/bin/ping.*\)$"
> 	 got "3ff9595e6e7 gaih_inet+0x1007 (inlined)"
>  86: probe libc's inet_pton & backtrace it with ping  : FAILED!
>  #
> 
> [...]

Applied to perf-tools-next, thanks!

Best regards,
Namhyung