Add strings -n option test case

Message ID 20260929085421.654372-1-pengxu@kylinos.cn
State New
Headers
Series Add strings -n option test case |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm success Build passed
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 success Build passed
linaro-tcwg-bot/tcwg_binutils_check--master-aarch64 success Test passed
linaro-tcwg-bot/tcwg_binutils_check--master-arm success Test passed

Commit Message

pengxu@kylinos.cn Sept. 29, 2026, 8:54 a.m. UTC
  From: pengxu <pengxu@kylinos.cn>

This patch adds strings -n test case, including n=4(default),5 and 7.
For example , when n = 5, the "strings -n" result only show symbols whose length >= 5.
At the same time ,add "strings" command support in binutils-common.exp.

Signed-off-by: pengxu <pengxu@kylinos.cn>
---
 .../testsuite/binutils-all/strings-len-default.d     |  9 +++++++++
 binutils/testsuite/binutils-all/strings-len-n-5.d    |  8 ++++++++
 binutils/testsuite/binutils-all/strings-len-n-7.d    |  7 +++++++
 binutils/testsuite/binutils-all/strings-len.s        | 12 ++++++++++++
 binutils/testsuite/binutils-all/strings.exp          | 10 ++++++++++
 binutils/testsuite/lib/binutils-common.exp           |  8 +++++---
 6 files changed, 51 insertions(+), 3 deletions(-)
 create mode 100644 binutils/testsuite/binutils-all/strings-len-default.d
 create mode 100644 binutils/testsuite/binutils-all/strings-len-n-5.d
 create mode 100644 binutils/testsuite/binutils-all/strings-len-n-7.d
 create mode 100644 binutils/testsuite/binutils-all/strings-len.s
  

Patch

diff --git a/binutils/testsuite/binutils-all/strings-len-default.d b/binutils/testsuite/binutils-all/strings-len-default.d
new file mode 100644
index 00000000000..e971e3898c7
--- /dev/null
+++ b/binutils/testsuite/binutils-all/strings-len-default.d
@@ -0,0 +1,9 @@ 
+#name: strings default minimum length (4)
+#source: strings-len.s
+#DUMPPROG: strings
+#strings: -d
+
+bbbb
+ccccc
+dddddddd
+eeeeeeeeeee
diff --git a/binutils/testsuite/binutils-all/strings-len-n-5.d b/binutils/testsuite/binutils-all/strings-len-n-5.d
new file mode 100644
index 00000000000..0fb9265ffe1
--- /dev/null
+++ b/binutils/testsuite/binutils-all/strings-len-n-5.d
@@ -0,0 +1,8 @@ 
+#name: strings -n 5 (5-char minimum)
+#source: strings-len.s
+#DUMPPROG: strings
+#strings: -d -n 5
+
+ccccc
+dddddddd
+eeeeeeeeeee
diff --git a/binutils/testsuite/binutils-all/strings-len-n-7.d b/binutils/testsuite/binutils-all/strings-len-n-7.d
new file mode 100644
index 00000000000..c363b933155
--- /dev/null
+++ b/binutils/testsuite/binutils-all/strings-len-n-7.d
@@ -0,0 +1,7 @@ 
+#name: strings -n 7 (excludes 3-/4-/5-/6-char runs)
+#source: strings-len.s
+#DUMPPROG: strings
+#strings: -d -n 7
+
+dddddddd
+eeeeeeeeeee
diff --git a/binutils/testsuite/binutils-all/strings-len.s b/binutils/testsuite/binutils-all/strings-len.s
new file mode 100644
index 00000000000..cf24189e91a
--- /dev/null
+++ b/binutils/testsuite/binutils-all/strings-len.s
@@ -0,0 +1,12 @@ 
+/* Prepare different length of symbols for string -n test */
+	.section .data
+.Lstr1:
+	.asciz "aaa"
+.Lstr2:
+	.asciz "bbbb"
+.Lstr3:
+	.asciz "ccccc"
+.Lstr4:
+	.asciz "dddddddd"
+.Lstr5:
+	.asciz "eeeeeeeeeee"
diff --git a/binutils/testsuite/binutils-all/strings.exp b/binutils/testsuite/binutils-all/strings.exp
index 1a317e1022c..7ce491cf852 100644
--- a/binutils/testsuite/binutils-all/strings.exp
+++ b/binutils/testsuite/binutils-all/strings.exp
@@ -48,3 +48,13 @@  proc test_print_file_name {testfile} {
 }
 
 test_print_file_name $srcdir/$subdir/strings-1.bin
+
+set strings_len_tests {
+    strings-len-default
+    strings-len-n-5
+    strings-len-n-7
+}
+
+foreach t $strings_len_tests {
+    run_dump_test $t
+}
diff --git a/binutils/testsuite/lib/binutils-common.exp b/binutils/testsuite/lib/binutils-common.exp
index e7e8c223389..f5e5a719d20 100644
--- a/binutils/testsuite/lib/binutils-common.exp
+++ b/binutils/testsuite/lib/binutils-common.exp
@@ -945,11 +945,12 @@  proc prune_dump_output { output } {
 #   objdump: FLAGS
 #   readelf: FLAGS
 #   size: FLAGS
+#   strings: FLAGS
 #	Use the specified program to analyze the output file, and pass it
 #	FLAGS, in addition to the output name.  Note that they are run
 #	with LC_ALL=C in the environment to give consistent sorting of
 #	symbols.  If no FLAGS are needed then you can use:
-#	    DUMPPROG: [nm objdump readelf addr2line]
+#	    DUMPPROG: [nm objdump readelf addr2line strings]
 #	instead, or just pass a flag that happens to be the default.
 #	If objdump is the dump tool and we're not dumping binary, nor
 #	have run ld, then the standard section names (.text, .data and
@@ -1051,7 +1052,7 @@  proc run_dump_test { name {extra_options {}} } {
     global ADDR2LINE ADDR2LINEFLAGS AS ASFLAGS CC_FOR_TARGET CFLAGS_FOR_TARGET
     global ELFEDIT ELFEDITFLAGS LD LDFLAGS NM NMFLAGS OBJCOPY OBJCOPYFLAGS
     global OBJDUMP OBJDUMPFLAGS READELF READELFFLAGS STRIP STRIPFLAGS
-    global SIZE SIZEFLAGS
+    global SIZE SIZEFLAGS STRINGS STRINGSFLAGS
     global copyfile env runtests srcdir subdir verbose base_dir
     global DT_RELR_LDFLAGS NO_DT_RELR_LDFLAGS
     global NO_ROSEGMENT_LDFLAGS
@@ -1314,6 +1315,7 @@  proc run_dump_test { name {extra_options {}} } {
 		objdump		{ set dumpprogram objdump }
 		readelf		{ set dumpprogram readelf }
 		size		{ set dumpprogram size }
+		strings         { set dumpprogram strings }
 		default		{
 		    perror "unrecognized DUMPPROG option $opts(DUMPPROG) in $file.d"
 		    unresolved $base_testname
@@ -1322,7 +1324,7 @@  proc run_dump_test { name {extra_options {}} } {
 	    }
 	} else {
 	    # Guess which program to run, by seeing which option was specified.
-	    foreach p {addr2line nm objdump readelf size} {
+	    foreach p {addr2line nm objdump readelf size strings} {
 		if {$opts($p) != ""} {
 		    if {$dumpprogram != ""} {
 			perror "ambiguous dump program in $file.d"