diff mbox series

arm: XFAIL string/tst-memmove-overflow due to bug 25620

Message ID 87imgz6gg7.fsf@mid.deneb.enyo.de
State New
Headers show
Series arm: XFAIL string/tst-memmove-overflow due to bug 25620 | expand

Commit Message

Florian Weimer May 13, 2020, 2:46 p.m. UTC
Also reduce the amount of output in case of a large-scale mismatch in
the copied data.

---
 string/tst-memmove-overflow.c | 23 +++++++++++++++++++++--
 sysdeps/arm/Makefile          |  5 +++++
 2 files changed, 26 insertions(+), 2 deletions(-)

Comments

Carlos O'Donell May 13, 2020, 2:47 p.m. UTC | #1
On 5/13/20 10:46 AM, Florian Weimer wrote:
> Also reduce the amount of output in case of a large-scale mismatch in
> the copied data.

OK formaster.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>

> ---
>  string/tst-memmove-overflow.c | 23 +++++++++++++++++++++--
>  sysdeps/arm/Makefile          |  5 +++++
>  2 files changed, 26 insertions(+), 2 deletions(-)
> 
> diff --git a/string/tst-memmove-overflow.c b/string/tst-memmove-overflow.c
> index b744679ef4..77d693d0dd 100644
> --- a/string/tst-memmove-overflow.c
> +++ b/string/tst-memmove-overflow.c
> @@ -57,6 +57,25 @@ expected_value (size_t index)
>    return randomized >> 25;	/* Result is in the range [0, 127].  */
>  }
>  
> +/* Used to count mismatches up to a limit, to avoid creating a huge
> +   test output file.  */
> +static unsigned int mismatch_count;

OK.

> +
> +/* Check ACTUAL == EXPECTED.  Use INDEX for error reporting.  Exit the
> +   process after too many errors.  */
> +static inline void
> +check_one_index (size_t index, unsigned char actual, unsigned char expected)
> +{
> +  if (actual != expected)
> +    {
> +      printf ("error: mismatch at index %zu: expected 0x%02x, got 0x%02x\n",
> +	      index, actual, expected);
> +      ++mismatch_count;
> +      if (mismatch_count > 200)
> +	FAIL_EXIT1 ("bailing out due to too many errors");

OK.

> +    }
> +}
> +
>  static int
>  test_main (void)
>  {
> @@ -138,13 +157,13 @@ test_main (void)
>  			 start + allocation_size - sizeof (expected_end) - 1,
>  			 sizeof (expected_end));
>        for (size_t i = 0; i < unshared_size - 1; ++i)
> -	TEST_COMPARE (start[i], expected_value (i + 1));
> +	check_one_index (i, start[i], expected_value (i + 1));

OK.

>        /* The gap between the checked start and end area of the mapping
>  	 has shared mappings at unspecified boundaries, so do not
>  	 check the expected values in the middle.  */
>        for (size_t i = allocation_size - unshared_size; i < allocation_size - 1;
>  	   ++i)
> -	TEST_COMPARE (start[i], expected_value (i + 1));
> +	check_one_index (i, start[i], expected_value (i + 1));

OK.

>  
>        support_blob_repeat_free (&repeat);
>      }
> diff --git a/sysdeps/arm/Makefile b/sysdeps/arm/Makefile
> index ad2042b93a..a0cb7f3c32 100644
> --- a/sysdeps/arm/Makefile
> +++ b/sysdeps/arm/Makefile
> @@ -68,3 +68,8 @@ ifeq ($(subdir),nptl)
>  libpthread-sysdep_routines += pt-arm-unwind-resume
>  libpthread-shared-only-routines += pt-arm-unwind-resume
>  endif
> +
> +ifeq ($(subdir),string)
> +# This test fails on arm due to bug 25620 and related issues.
> +test-xfail-tst-memmove-overflow = yes

OK.

> +endif
>
diff mbox series

Patch

diff --git a/string/tst-memmove-overflow.c b/string/tst-memmove-overflow.c
index b744679ef4..77d693d0dd 100644
--- a/string/tst-memmove-overflow.c
+++ b/string/tst-memmove-overflow.c
@@ -57,6 +57,25 @@  expected_value (size_t index)
   return randomized >> 25;	/* Result is in the range [0, 127].  */
 }
 
+/* Used to count mismatches up to a limit, to avoid creating a huge
+   test output file.  */
+static unsigned int mismatch_count;
+
+/* Check ACTUAL == EXPECTED.  Use INDEX for error reporting.  Exit the
+   process after too many errors.  */
+static inline void
+check_one_index (size_t index, unsigned char actual, unsigned char expected)
+{
+  if (actual != expected)
+    {
+      printf ("error: mismatch at index %zu: expected 0x%02x, got 0x%02x\n",
+	      index, actual, expected);
+      ++mismatch_count;
+      if (mismatch_count > 200)
+	FAIL_EXIT1 ("bailing out due to too many errors");
+    }
+}
+
 static int
 test_main (void)
 {
@@ -138,13 +157,13 @@  test_main (void)
 			 start + allocation_size - sizeof (expected_end) - 1,
 			 sizeof (expected_end));
       for (size_t i = 0; i < unshared_size - 1; ++i)
-	TEST_COMPARE (start[i], expected_value (i + 1));
+	check_one_index (i, start[i], expected_value (i + 1));
       /* The gap between the checked start and end area of the mapping
 	 has shared mappings at unspecified boundaries, so do not
 	 check the expected values in the middle.  */
       for (size_t i = allocation_size - unshared_size; i < allocation_size - 1;
 	   ++i)
-	TEST_COMPARE (start[i], expected_value (i + 1));
+	check_one_index (i, start[i], expected_value (i + 1));
 
       support_blob_repeat_free (&repeat);
     }
diff --git a/sysdeps/arm/Makefile b/sysdeps/arm/Makefile
index ad2042b93a..a0cb7f3c32 100644
--- a/sysdeps/arm/Makefile
+++ b/sysdeps/arm/Makefile
@@ -68,3 +68,8 @@  ifeq ($(subdir),nptl)
 libpthread-sysdep_routines += pt-arm-unwind-resume
 libpthread-shared-only-routines += pt-arm-unwind-resume
 endif
+
+ifeq ($(subdir),string)
+# This test fails on arm due to bug 25620 and related issues.
+test-xfail-tst-memmove-overflow = yes
+endif