about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--include/shlib-compat.h10
-rw-r--r--malloc/tst-mallocstate.c62
-rw-r--r--math/test-matherr-2.c14
-rw-r--r--math/test-matherr.c14
5 files changed, 71 insertions, 37 deletions
diff --git a/ChangeLog b/ChangeLog
index d148e74309..92110bd671 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2017-09-05  Steve Ellcey  <sellcey@cavium.com>
+
+	* include/shlib-compat.h (TEST_COMPAT): New Macro.
+	* malloc/tst-mallocstate.c: Convert from test-skeleton
+	to test-driver.  Ifdef code using TEST_COMPAT macro.
+	* math/test-matherr-2.c: Ifdef test using TEST_COMPAT macro.
+	* math/test-matherr.c: Likewise.
+
 2017-09-05  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #22086]
diff --git a/include/shlib-compat.h b/include/shlib-compat.h
index 41eb362f1d..d872afcbab 100644
--- a/include/shlib-compat.h
+++ b/include/shlib-compat.h
@@ -97,4 +97,14 @@
   compat_symbol (libc, name, aliasname, version);
 # endif
 
+/* The TEST_COMPAT macro acts just like the SHLIB_COMPAT macro except
+   that it does not check IS_IN.  It is used by tests that are testing
+   functionality that is only available in specific GLIBC versions.  */
+
+# define TEST_COMPAT(lib, introduced, obsoleted)			      \
+  _TEST_COMPAT (lib, introduced, obsoleted)
+# define _TEST_COMPAT(lib, introduced, obsoleted)			      \
+   (!(ABI_##lib##_##obsoleted - 0)					      \
+       || ((ABI_##lib##_##introduced - 0) < (ABI_##lib##_##obsoleted - 0)))
+
 #endif	/* shlib-compat.h */
diff --git a/malloc/tst-mallocstate.c b/malloc/tst-mallocstate.c
index 5cb39c0f3d..53154ae588 100644
--- a/malloc/tst-mallocstate.c
+++ b/malloc/tst-mallocstate.c
@@ -23,19 +23,20 @@
 #include <string.h>
 #include <libc-symbols.h>
 #include <shlib-compat.h>
+#include <support/check.h>
+#include <support/support.h>
+#include <support/test-driver.h>
 
 #include "malloc.h"
 
+#if TEST_COMPAT (libc, GLIBC_2_0, GLIBC_2_25)
+
 /* Make the compatibility symbols availabile to this test case.  */
 void *malloc_get_state (void);
 compat_symbol_reference (libc, malloc_get_state, malloc_get_state, GLIBC_2_0);
 int malloc_set_state (void *);
 compat_symbol_reference (libc, malloc_set_state, malloc_set_state, GLIBC_2_0);
 
-static int do_test (void);
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
-
 /* Maximum object size in the fake heap.  */
 enum { max_size = 64 };
 
@@ -63,9 +64,9 @@ static size_t *next_heap_chunk;
 
 /* Copied from malloc.c and hooks.c.  The version is deliberately
    lower than the final version of malloc_set_state.  */
-#define NBINS 128
-#define MALLOC_STATE_MAGIC   0x444c4541l
-#define MALLOC_STATE_VERSION (0 * 0x100l + 4l)
+# define NBINS 128
+# define MALLOC_STATE_MAGIC   0x444c4541l
+# define MALLOC_STATE_VERSION (0 * 0x100l + 4l)
 static struct
 {
   long magic;
@@ -117,12 +118,7 @@ dumped_heap_alloc (size_t length)
   /* Round up the allocation size to the heap alignment.  */
   chunk_size += heap_alignment_mask;
   chunk_size &= ~heap_alignment_mask;
-  if ((chunk_size & 3) != 0)
-    {
-      /* The lower three bits in the chunk size have to be 0.  */
-      write_message ("error: dumped_heap_alloc computed invalid chunk size\n");
-      _exit (1);
-    }
+  TEST_VERIFY_EXIT ((chunk_size & 3) == 0);
   if (next_heap_chunk == NULL)
     /* Initialize the top of the heap.  Add one word of zero padding,
        to match existing practice.  */
@@ -244,11 +240,7 @@ shuffle_allocation_tasks (void)
       /* Pick pair in the tail of the array.  */
       int j = i + (rand_next (&global_seed)
                    % ((unsigned) (allocation_task_count - i)));
-      if (j < 0 || j >= allocation_task_count)
-        {
-          write_message ("error: test bug in shuffle\n");
-          _exit (1);
-        }
+      TEST_VERIFY_EXIT (j >= 0 && j < allocation_task_count);
       /* Exchange. */
       struct allocation_task tmp = allocation_tasks[i];
       allocation_tasks[i] = allocation_tasks[j];
@@ -298,7 +290,8 @@ static volatile bool heap_initialized;
 static void
 init_heap (void)
 {
-  write_message ("info: performing heap initialization\n");
+  if (test_verbose)
+    printf ("info: performing heap initialization\n");
   heap_initialized = true;
 
   /* Populate the dumped heap.  */
@@ -312,11 +305,7 @@ init_heap (void)
   save_state.av[2] = (void *) (next_heap_chunk - 1);
 
   /* Integrate the dumped heap into the process heap.  */
-  if (malloc_set_state (&save_state) != 0)
-    {
-      write_message ("error: malloc_set_state failed\n");
-      _exit (1);
-    }
+  TEST_VERIFY_EXIT (malloc_set_state (&save_state) == 0);
 }
 
 /* Interpose the initialization callback.  */
@@ -389,15 +378,12 @@ static int
 do_test (void)
 {
   my_free (malloc (1));
-  if (!heap_initialized)
-    {
-      printf ("error: heap was not initialized by malloc\n");
-      return 1;
-    }
+  TEST_VERIFY_EXIT (heap_initialized);
 
   /* The first pass performs the randomly generated allocation
      tasks.  */
-  write_message ("info: first pass through allocation tasks\n");
+  if (test_verbose)
+    printf ("info: first pass through allocation tasks\n");
   full_heap_check ();
 
   /* Execute the post-undump tasks in a random order.  */
@@ -451,14 +437,15 @@ do_test (void)
           break;
 
         case action_count:
-          abort ();
+          FAIL_EXIT1 ("task->action should never be action_count");
         }
       full_heap_check ();
     }
 
   /* The second pass frees the objects which were allocated during the
      first pass.  */
-  write_message ("info: second pass through allocation tasks\n");
+  if (test_verbose)
+    printf ("info: second pass through allocation tasks\n");
 
   shuffle_allocation_tasks ();
   for (int i = 0; i < allocation_task_count; ++i)
@@ -480,7 +467,7 @@ do_test (void)
           break;
 
         case action_count:
-          abort ();
+          FAIL_EXIT1 ("task->action should never be action_count");
         }
       full_heap_check ();
     }
@@ -503,3 +490,12 @@ do_test (void)
 
   return errors;
 }
+#else
+static int
+do_test (void)
+{
+  return 77;
+}
+#endif
+
+#include <support/test-driver.c>
diff --git a/math/test-matherr-2.c b/math/test-matherr-2.c
index c2fc5e63c8..7b5f49cd3d 100644
--- a/math/test-matherr-2.c
+++ b/math/test-matherr-2.c
@@ -22,8 +22,11 @@
 
 #include <math-svid-compat.h>
 #include <shlib-compat.h>
-#undef matherr
-#undef _LIB_VERSION
+
+#if TEST_COMPAT (libm, GLIBC_2_0, GLIBC_2_27)
+
+# undef matherr
+# undef _LIB_VERSION
 compat_symbol_reference (libm, matherr, matherr, GLIBC_2_0);
 compat_symbol_reference (libm, _LIB_VERSION, _LIB_VERSION, GLIBC_2_0);
 
@@ -45,5 +48,12 @@ do_test (void)
   acos (2.0);
   return fail;
 }
+#else
+static int
+do_test (void)
+{
+  return 77;
+}
+#endif
 
 #include <support/test-driver.c>
diff --git a/math/test-matherr.c b/math/test-matherr.c
index 34856f1ffb..23521c0d89 100644
--- a/math/test-matherr.c
+++ b/math/test-matherr.c
@@ -22,8 +22,11 @@
 
 #include <math-svid-compat.h>
 #include <shlib-compat.h>
-#undef matherr
-#undef _LIB_VERSION
+
+#if TEST_COMPAT (libm, GLIBC_2_0, GLIBC_2_27)
+
+# undef matherr
+# undef _LIB_VERSION
 compat_symbol_reference (libm, matherr, matherr, GLIBC_2_0);
 compat_symbol_reference (libm, _LIB_VERSION, _LIB_VERSION, GLIBC_2_0);
 
@@ -44,5 +47,12 @@ do_test (void)
   acos (2.0);
   return fail;
 }
+#else
+static int
+do_test (void)
+{
+  return 77;
+}
+#endif
 
 #include <support/test-driver.c>