Add strings -n option test case

Message ID 20260929090640.663904-2-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, 9:06 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
  

Comments

Jan Beulich Sept. 29, 2026, 9:26 a.m. UTC | #1
(adding v2 to the subject to properly identify the version)

Also, please sen new versions as distinct new threads, not as replies
to earlier versions. See how the versioning isn't possible to determine
at https://sourceware.org/pipermail/binutils/2026-September/thread.html.
The sole thing tagged V2 is _not_ this new patch version.

On 29.09.2026 11:06, pengxu@kylinos.cn wrote:
> --- /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"

Just to mention: I don't mind the labels you added, but they also serve
no purpose.

> --- 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
> +}

I still don't understand why this isn't simply

run_dump_test strings-len-default
run_dump_test strings-len-n-5
run_dump_test strings-len-n-7

Okay with at least this aspect adjusted (whether to keep the labels
above is up to you).

Jan
  

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"