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
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
(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
new file mode 100644
@@ -0,0 +1,9 @@
+#name: strings default minimum length (4)
+#source: strings-len.s
+#DUMPPROG: strings
+#strings: -d
+
+bbbb
+ccccc
+dddddddd
+eeeeeeeeeee
new file mode 100644
@@ -0,0 +1,8 @@
+#name: strings -n 5 (5-char minimum)
+#source: strings-len.s
+#DUMPPROG: strings
+#strings: -d -n 5
+
+ccccc
+dddddddd
+eeeeeeeeeee
new file mode 100644
@@ -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
new file mode 100644
@@ -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"
@@ -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
+}
@@ -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"