diff mbox series

[v2] nm01: Fix BSD vs POSIX format comparison failure on Power

Message ID 20260513085124.12324-1-wegao@suse.com
State Accepted
Headers show
Series [v2] nm01: Fix BSD vs POSIX format comparison failure on Power | expand

Checks

Context Check Description
ltpci/github-build-doc success success
ltpci/github-build-debian_stable_powerpc64le-linux-gnu-gcc_ppc64el success success
ltpci/github-build-debian_stable_s390x-linux-gnu-gcc_s390x success success
ltpci/github-build-debian_stable_aarch64-linux-gnu-gcc_arm64 success success
ltpci/github-build-fedora_latest_clang success success
ltpci/github-build-opensuse-leap_latest_gcc success success
ltpci/github-build-debian_oldstable_clang success success
ltpci/github-build-opensuse-archive_42-2_gcc success success
ltpci/github-build-ubuntu_jammy_gcc success success
ltpci/github-build-debian_oldstable_gcc success success
ltpci/github-build-debian_testing_gcc success success
ltpci/github-build-ubuntu_noble_gcc success success
ltpci/github-build-alpine_latest_gcc success success
ltpci/github-build-debian_stable_gcc success success
ltpci/github-build-debian_testing_clang success success
ltpci/github-build-quay-io-centos-centos_stream9_gcc success success
ltpci/github-build-debian_stable_gcc success success
ltpci/copilot-review success Approved

Commit Message

Wei Gao May 13, 2026, 8:51 a.m. UTC
On Power architecture, symbol names can contain hex-like prefixes such
as "0000003e.plt_call.__gmon_start__".

In our openqa specific power system, the gensub seems has some
compatible issue which you can see following trace, the BSD format's
symbol name was incorrectly trimmed to ".plt_call.__gmon_start__"
(losing the "3e"), while the POSIX format kept it as
"3e.plt_call.__gmon_start__".

Example failure from a Power machine:
 --- DEBUG nm01_sh ---
 --- RAW BSD ---
 00000000000005e0 t 0000003e.plt_call.__gmon_start__
 --- RAW POSIX ---
 0000003e.plt_call.__gmon_start__ t 5e0
 --- REPRO LTP LOGIC ---
 --- TRIMMED BSD ---
 5e0 t .plt_call.__gmon_start__
 --- TRIMMED POSIX ---
 3e.plt_call.__gmon_start__ t 5e0
 --- REORDERED BSD (nm1) ---
 .plt_call.__gmon_start__t5e0
 --- REORDERED POSIX (nm2) ---
 3e.plt_call.__gmon_start__t5e0
 --- DIFF RESULT ---
 --- /tmp/dbg_nm1	2026-05-11 22:33:54.754648941 -0400
 +++ /tmp/dbg_nm2	2026-05-11 22:33:54.761924742 -0400
 @@ -1,7 +1,7 @@
 -.plt_call.__gmon_start__t5e0
 +3e.plt_call.__gmon_start__t5e0
 --- END DEBUG ---

Replace the global gensub to simple sub approach with targeted field processing in awk
can fix the issue.

Signed-off-by: Wei Gao <wegao@suse.com>
---
v1->v2:
Update commit message to fix patch apply error

 testcases/commands/nm/nm01.sh | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

Comments

linuxtestproject.agent@gmail.com May 13, 2026, 10:37 a.m. UTC | #1
Hi Wei,

On 2026-05-13, Wei Gao wrote:
> nm01: Fix BSD vs POSIX format comparison failure on Power

> -       ROD awk '{print gensub(/\y(0+)([0-9a-fA-F]+)\y/, "\\2", "g")}' nm_bsd.out \> trimmed_nm_bsd.out
> +       ROD awk '{
> +               if (NF == 2) { val = "0"; type = $1; name = $2; }
> +               else { val = $1; type = $2; name = $3; }
> +               sub(/^0+/, "", val); if (val == "") val = "0";
> +               sub(/^0+/, "", name);
> +               print name type val
> +       }' nm_bsd.out \> nm1.out

Good fix. Replacing gensub() (gawk extension) with sub() is the right
approach here and correctly handles the hex-prefix symbol names on Power.

Reviewed-by: LTP AI Reviewer <ltp-ai@noreply.github.com>

Pre-existing issues noticed in the surrounding code (not introduced
by this patch):

- testcases/commands/nm/nm01.sh — Uses intermediate API (. tst_test.sh /
  tst_run) rather than the current style with tst_loader.sh and doc/env
  blocks. Not a blocker for this fix.

---
Note:

Our agent completed the review of the patch.

The agent can sometimes produce false positives although often its
findings are genuine. If you find issues with the review, please
comment this email or ignore the suggestions.

Regards,
LTP AI Reviewer
Andrea Cervesato May 19, 2026, 2:25 p.m. UTC | #2
Reviewed-by: Andrea Cervesato <andrea.cervesato@suse.com>

--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
Petr Vorel May 20, 2026, 8:23 a.m. UTC | #3
Hi Wei, Andrea,

FYI merged, thank you!

Kind regards,
Petr
diff mbox series

Patch

diff --git a/testcases/commands/nm/nm01.sh b/testcases/commands/nm/nm01.sh
index c795d47ff..2ca73c4ea 100755
--- a/testcases/commands/nm/nm01.sh
+++ b/testcases/commands/nm/nm01.sh
@@ -83,17 +83,28 @@  test5()
 	EXPECT_PASS $NM -f bsd $TST_DATAROOT/f1 \> nm_bsd.out
 	EXPECT_PASS $NM -f posix $TST_DATAROOT/f1 \> nm_posix.out
 
-	ROD awk '{print gensub(/\y(0+)([0-9a-fA-F]+)\y/, "\\2", "g")}' nm_bsd.out \> trimmed_nm_bsd.out
-	ROD awk '{print gensub(/\y(0+)([0-9a-fA-F]+)\y/, "\\2", "g")}' nm_posix.out \> trimmed_nm_posix.out
-
-	ROD awk '{print $3 $2 $1}' trimmed_nm_bsd.out \> nm1.out
-	ROD awk '{print $1 $2 $3}' trimmed_nm_posix.out \> nm2.out
+	ROD awk '{
+		if (NF == 2) { val = "0"; type = $1; name = $2; }
+		else { val = $1; type = $2; name = $3; }
+		sub(/^0+/, "", val); if (val == "") val = "0";
+		sub(/^0+/, "", name);
+		print name type val
+	}' nm_bsd.out \> nm1.out
+
+	ROD awk '{
+		val = $3; type = $2; name = $1;
+		sub(/^0+/, "", val); if (val == "") val = "0";
+		sub(/^0+/, "", name);
+		print name type val
+	}' nm_posix.out \> nm2.out
 
 	if diff nm1.out nm2.out > /dev/null; then
 		tst_res TPASS "Got BSD format with -f bsd"
 	else
 		tst_res TFAIL "Got wrong format with -f bsd"
 		cat nm_bsd.out
+		cat nm_posix.out
+		diff -u nm1.out nm2.out
 	fi
 }