Fix tests that are testing obsoleted functionality

* 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.
This commit is contained in:
Steve Ellcey 2017-09-05 12:24:00 -07:00
parent 99d6791899
commit 05b38d64b1
5 changed files with 71 additions and 37 deletions

View File

@ -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> 2017-09-05 Joseph Myers <joseph@codesourcery.com>
[BZ #22086] [BZ #22086]

View File

@ -97,4 +97,14 @@
compat_symbol (libc, name, aliasname, version); compat_symbol (libc, name, aliasname, version);
# endif # 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 */ #endif /* shlib-compat.h */

View File

@ -23,19 +23,20 @@
#include <string.h> #include <string.h>
#include <libc-symbols.h> #include <libc-symbols.h>
#include <shlib-compat.h> #include <shlib-compat.h>
#include <support/check.h>
#include <support/support.h>
#include <support/test-driver.h>
#include "malloc.h" #include "malloc.h"
#if TEST_COMPAT (libc, GLIBC_2_0, GLIBC_2_25)
/* Make the compatibility symbols availabile to this test case. */ /* Make the compatibility symbols availabile to this test case. */
void *malloc_get_state (void); void *malloc_get_state (void);
compat_symbol_reference (libc, malloc_get_state, malloc_get_state, GLIBC_2_0); compat_symbol_reference (libc, malloc_get_state, malloc_get_state, GLIBC_2_0);
int malloc_set_state (void *); int malloc_set_state (void *);
compat_symbol_reference (libc, malloc_set_state, malloc_set_state, GLIBC_2_0); 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. */ /* Maximum object size in the fake heap. */
enum { max_size = 64 }; 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 /* Copied from malloc.c and hooks.c. The version is deliberately
lower than the final version of malloc_set_state. */ lower than the final version of malloc_set_state. */
#define NBINS 128 # define NBINS 128
#define MALLOC_STATE_MAGIC 0x444c4541l # define MALLOC_STATE_MAGIC 0x444c4541l
#define MALLOC_STATE_VERSION (0 * 0x100l + 4l) # define MALLOC_STATE_VERSION (0 * 0x100l + 4l)
static struct static struct
{ {
long magic; long magic;
@ -117,12 +118,7 @@ dumped_heap_alloc (size_t length)
/* Round up the allocation size to the heap alignment. */ /* Round up the allocation size to the heap alignment. */
chunk_size += heap_alignment_mask; chunk_size += heap_alignment_mask;
chunk_size &= ~heap_alignment_mask; chunk_size &= ~heap_alignment_mask;
if ((chunk_size & 3) != 0) TEST_VERIFY_EXIT ((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);
}
if (next_heap_chunk == NULL) if (next_heap_chunk == NULL)
/* Initialize the top of the heap. Add one word of zero padding, /* Initialize the top of the heap. Add one word of zero padding,
to match existing practice. */ to match existing practice. */
@ -244,11 +240,7 @@ shuffle_allocation_tasks (void)
/* Pick pair in the tail of the array. */ /* Pick pair in the tail of the array. */
int j = i + (rand_next (&global_seed) int j = i + (rand_next (&global_seed)
% ((unsigned) (allocation_task_count - i))); % ((unsigned) (allocation_task_count - i)));
if (j < 0 || j >= allocation_task_count) TEST_VERIFY_EXIT (j >= 0 && j < allocation_task_count);
{
write_message ("error: test bug in shuffle\n");
_exit (1);
}
/* Exchange. */ /* Exchange. */
struct allocation_task tmp = allocation_tasks[i]; struct allocation_task tmp = allocation_tasks[i];
allocation_tasks[i] = allocation_tasks[j]; allocation_tasks[i] = allocation_tasks[j];
@ -298,7 +290,8 @@ static volatile bool heap_initialized;
static void static void
init_heap (void) init_heap (void)
{ {
write_message ("info: performing heap initialization\n"); if (test_verbose)
printf ("info: performing heap initialization\n");
heap_initialized = true; heap_initialized = true;
/* Populate the dumped heap. */ /* Populate the dumped heap. */
@ -312,11 +305,7 @@ init_heap (void)
save_state.av[2] = (void *) (next_heap_chunk - 1); save_state.av[2] = (void *) (next_heap_chunk - 1);
/* Integrate the dumped heap into the process heap. */ /* Integrate the dumped heap into the process heap. */
if (malloc_set_state (&save_state) != 0) TEST_VERIFY_EXIT (malloc_set_state (&save_state) == 0);
{
write_message ("error: malloc_set_state failed\n");
_exit (1);
}
} }
/* Interpose the initialization callback. */ /* Interpose the initialization callback. */
@ -389,15 +378,12 @@ static int
do_test (void) do_test (void)
{ {
my_free (malloc (1)); my_free (malloc (1));
if (!heap_initialized) TEST_VERIFY_EXIT (heap_initialized);
{
printf ("error: heap was not initialized by malloc\n");
return 1;
}
/* The first pass performs the randomly generated allocation /* The first pass performs the randomly generated allocation
tasks. */ tasks. */
write_message ("info: first pass through allocation tasks\n"); if (test_verbose)
printf ("info: first pass through allocation tasks\n");
full_heap_check (); full_heap_check ();
/* Execute the post-undump tasks in a random order. */ /* Execute the post-undump tasks in a random order. */
@ -451,14 +437,15 @@ do_test (void)
break; break;
case action_count: case action_count:
abort (); FAIL_EXIT1 ("task->action should never be action_count");
} }
full_heap_check (); full_heap_check ();
} }
/* The second pass frees the objects which were allocated during the /* The second pass frees the objects which were allocated during the
first pass. */ 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 (); shuffle_allocation_tasks ();
for (int i = 0; i < allocation_task_count; ++i) for (int i = 0; i < allocation_task_count; ++i)
@ -480,7 +467,7 @@ do_test (void)
break; break;
case action_count: case action_count:
abort (); FAIL_EXIT1 ("task->action should never be action_count");
} }
full_heap_check (); full_heap_check ();
} }
@ -503,3 +490,12 @@ do_test (void)
return errors; return errors;
} }
#else
static int
do_test (void)
{
return 77;
}
#endif
#include <support/test-driver.c>

View File

@ -22,8 +22,11 @@
#include <math-svid-compat.h> #include <math-svid-compat.h>
#include <shlib-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, matherr, matherr, GLIBC_2_0);
compat_symbol_reference (libm, _LIB_VERSION, _LIB_VERSION, GLIBC_2_0); compat_symbol_reference (libm, _LIB_VERSION, _LIB_VERSION, GLIBC_2_0);
@ -45,5 +48,12 @@ do_test (void)
acos (2.0); acos (2.0);
return fail; return fail;
} }
#else
static int
do_test (void)
{
return 77;
}
#endif
#include <support/test-driver.c> #include <support/test-driver.c>

View File

@ -22,8 +22,11 @@
#include <math-svid-compat.h> #include <math-svid-compat.h>
#include <shlib-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, matherr, matherr, GLIBC_2_0);
compat_symbol_reference (libm, _LIB_VERSION, _LIB_VERSION, GLIBC_2_0); compat_symbol_reference (libm, _LIB_VERSION, _LIB_VERSION, GLIBC_2_0);
@ -44,5 +47,12 @@ do_test (void)
acos (2.0); acos (2.0);
return fail; return fail;
} }
#else
static int
do_test (void)
{
return 77;
}
#endif
#include <support/test-driver.c> #include <support/test-driver.c>