--- cpukit/include/rtems/test.h | 7 ++ cpukit/libtest/t-test-malloc.c | 80 ++------------------- cpukit/libtest/t-test.c | 88 +++++++++++++++++++++++ cpukit/libtest/testrun.c | 2 + testsuites/libtests/ttest01/init.c | 2 + testsuites/smptests/smpmulticast01/init.c | 4 +- testsuites/validation/ts-validation-0.c | 2 + 7 files changed, 110 insertions(+), 75 deletions(-)
diff --git a/cpukit/include/rtems/test.h b/cpukit/include/rtems/test.h index 935e796bf0..e24d9d29ac 100644 --- a/cpukit/include/rtems/test.h +++ b/cpukit/include/rtems/test.h @@ -2253,6 +2253,10 @@ T_time T_case_begin_time(void); /** @} */ +void *T_heap_allocate(size_t, void *); + +void T_heap_deallocate(void *, void *); + void *T_malloc(size_t); void *T_calloc(size_t, size_t); @@ -2286,6 +2290,9 @@ typedef struct { void *putchar_arg; T_verbosity verbosity; T_time (*now)(void); + void *(*allocate)(size_t, void *); + void (*deallocate)(void *, void *); + void *allocator_arg; size_t action_count; const T_action *actions; } T_config; diff --git a/cpukit/libtest/t-test-malloc.c b/cpukit/libtest/t-test-malloc.c index 369bff9a57..c54b5f6672 100644 --- a/cpukit/libtest/t-test-malloc.c +++ b/cpukit/libtest/t-test-malloc.c @@ -29,84 +29,16 @@ #include <stdlib.h> -#ifdef __BIGGEST_ALIGNMENT__ -#define T_BIGGEST_ALIGNMENT __BIGGEST_ALIGNMENT__ -#else -#define T_BIGGEST_ALIGNMENT sizeof(long long) -#endif - -typedef struct __attribute__((__aligned__(T_BIGGEST_ALIGNMENT))) { - T_destructor base; - void (*destroy)(void *); -} T_malloc_destructor; - -static void -T_malloc_destroy(T_destructor *base) -{ - T_malloc_destructor *dtor; - - dtor = (T_malloc_destructor *)(uintptr_t)base; - - if (dtor->destroy != NULL) { - (*dtor->destroy)(dtor + 1); - } - - free(dtor); -} - -static void * -T_do_malloc(size_t size, void (*destroy)(void *)) -{ - T_malloc_destructor *dtor; - size_t new_size; - - new_size = sizeof(*dtor) + size; - if (new_size <= size) { - return NULL; - } - - dtor = malloc(new_size); - if (dtor != NULL) { - dtor->destroy = destroy; - T_add_destructor(&dtor->base, T_malloc_destroy); - ++dtor; - } - - return dtor; -} - -void * -T_malloc(size_t size) -{ - return T_do_malloc(size, NULL); -} - -void * -T_calloc(size_t nelem, size_t elsize) -{ - return T_zalloc(nelem * elsize, NULL); -} - void * -T_zalloc(size_t size, void (*destroy)(void *)) +T_heap_allocate(size_t size, void *arg) { - void *p; - - p = T_do_malloc(size, destroy); - if (p != NULL) { - p = memset(p, 0, size); - } - - return p; + (void)arg; + return malloc(size); } void -T_free(void *ptr) +T_heap_deallocate(void *ptr, void *arg) { - T_malloc_destructor *dtor; - - dtor = ptr; - --dtor; - T_remove_destructor(&dtor->base); - free(dtor); + (void)arg; + free(ptr); } diff --git a/cpukit/libtest/t-test.c b/cpukit/libtest/t-test.c index 11f1cf70e9..64c3d33703 100644 --- a/cpukit/libtest/t-test.c +++ b/cpukit/libtest/t-test.c @@ -1299,3 +1299,91 @@ T_get_scope(const char * const * const *desc, char *buf, size_t n, return n - c; } + +#ifdef __BIGGEST_ALIGNMENT__ +#define T_BIGGEST_ALIGNMENT __BIGGEST_ALIGNMENT__ +#else +#define T_BIGGEST_ALIGNMENT sizeof(long long) +#endif + +typedef struct __attribute__((__aligned__(T_BIGGEST_ALIGNMENT))) { + T_destructor base; + void (*destroy)(void *); +} T_malloc_destructor; + +static void +T_malloc_destroy(T_destructor *base) +{ + const T_config *config; + T_malloc_destructor *dtor; + + dtor = (T_malloc_destructor *)(uintptr_t)base; + + if (dtor->destroy != NULL) { + (*dtor->destroy)(dtor + 1); + } + + config = T_instance.config; + (*config->deallocate)(dtor, config->allocator_arg); +} + +static void * +T_do_malloc(size_t size, void (*destroy)(void *)) +{ + const T_config *config; + T_malloc_destructor *dtor; + size_t new_size; + + new_size = sizeof(*dtor) + size; + if (new_size <= size) { + return NULL; + } + + config = T_instance.config; + dtor = (*config->allocate)(new_size, config->allocator_arg); + if (dtor != NULL) { + dtor->destroy = destroy; + T_add_destructor(&dtor->base, T_malloc_destroy); + ++dtor; + } + + return dtor; +} + +void * +T_malloc(size_t size) +{ + return T_do_malloc(size, NULL); +} + +void * +T_calloc(size_t nelem, size_t elsize) +{ + return T_zalloc(nelem * elsize, NULL); +} + +void * +T_zalloc(size_t size, void (*destroy)(void *)) +{ + void *p; + + p = T_do_malloc(size, destroy); + if (p != NULL) { + p = memset(p, 0, size); + } + + return p; +} + +void +T_free(void *ptr) +{ + const T_config *config; + T_malloc_destructor *dtor; + + dtor = ptr; + --dtor; + T_remove_destructor(&dtor->base); + config = T_instance.config; + (*config->deallocate)(dtor, config->allocator_arg); +} diff --git a/cpukit/libtest/testrun.c b/cpukit/libtest/testrun.c index d11bf63c17..9ea648f2eb 100644 --- a/cpukit/libtest/testrun.c +++ b/cpukit/libtest/testrun.c @@ -65,6 +65,8 @@ static const T_config config = { .putchar = T_putchar_default, .verbosity = T_VERBOSE, .now = T_now_clock, + .allocate = T_heap_allocate, + .deallocate = T_heap_deallocate, .action_count = T_ARRAY_SIZE( actions ), .actions = actions }; diff --git a/testsuites/libtests/ttest01/init.c b/testsuites/libtests/ttest01/init.c index c0ccee9aa4..e97e204e3e 100644 --- a/testsuites/libtests/ttest01/init.c +++ b/testsuites/libtests/ttest01/init.c @@ -255,6 +255,8 @@ static const T_config config = { .putchar_arg = &test_instance, .verbosity = T_VERBOSE, .now = now, + .allocate = T_heap_allocate, + .deallocate = T_heap_deallocate, .action_count = T_ARRAY_SIZE(actions), .actions = actions }; diff --git a/testsuites/smptests/smpmulticast01/init.c b/testsuites/smptests/smpmulticast01/init.c index 3d2412427c..ebc8897ae0 100644 --- a/testsuites/smptests/smpmulticast01/init.c +++ b/testsuites/smptests/smpmulticast01/init.c @@ -45,7 +45,9 @@ static const T_config config = { .name = "SMPMultiCast", .putchar = T_putchar_default, .verbosity = RTEMS_TEST_VERBOSITY, - .now = T_now_clock + .now = T_now_clock, + .allocate = T_heap_allocate, + .deallocate = T_heap_deallocate }; typedef struct { diff --git a/testsuites/validation/ts-validation-0.c b/testsuites/validation/ts-validation-0.c index baaa679c05..a2e10bc8af 100644 --- a/testsuites/validation/ts-validation-0.c +++ b/testsuites/validation/ts-validation-0.c @@ -95,6 +95,8 @@ static const T_config test_config = { .putchar = rtems_put_char, .verbosity = RTEMS_TEST_VERBOSITY, .now = T_now_clock, + .allocate = T_heap_allocate, + .deallocate = T_heap_deallocate, .action_count = T_ARRAY_SIZE( actions ), .actions = actions }; -- 2.26.2 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel