Loading...
// // malloc_type_backdeploy.c // libsystem_malloc // #define __APPLE_BLEACH_SDK__ // rdar://127521206 (SDK sanitizer should not remove bridgeOS Availability machinery) #ifndef __API_AVAILABLE_PLATFORM_bridgeos #define __API_AVAILABLE_PLATFORM_bridgeos(x) bridgeos,introduced=x #endif #ifndef __API_UNAVAILABLE_PLATFORM_bridgeos #define __API_UNAVAILABLE_PLATFORM_bridgeos bridgeos,unavailable #endif #pragma GCC diagnostic ignored "-Wgcc-compat" #pragma GCC diagnostic ignored "-Wunguarded-availability-new" #import <malloc/malloc.h> #include <stdlib.h> #include <darwintest.h> #if defined(__LP64__) && !TARGET_OS_BRIDGE && !TARGET_OS_VISION && \ (!defined(_MALLOC_TYPE_MALLOC_IS_BACKDEPLOYING) || \ !_MALLOC_TYPE_MALLOC_IS_BACKDEPLOYING) #error "Test must be backdeploying!" #endif const size_t alloc_max = 2 * 1024 * 1024; T_DECL(malloc_backdeploy, "malloc backdeploy", T_META_TAG_ALL_ALLOCATORS, T_META_TAG_VM_PREFERRED) { size_t sz = rand() % alloc_max; void *ptr = malloc(sz); T_ASSERT_NOTNULL(ptr, "malloc, size %lu", sz); ptr = realloc(ptr, sz + 1); T_ASSERT_NOTNULL(ptr, "reallocate"); free(ptr); } T_DECL(malloc_options_backdeploy, "malloc with options backdeploy", T_META_TAG_ALL_ALLOCATORS, T_META_TAG_VM_PREFERRED) { size_t sz = ((rand() % alloc_max) & ~(MALLOC_ZONE_MALLOC_DEFAULT_ALIGN - 1ul)); void *ptr = malloc_zone_malloc_with_options(NULL, MALLOC_ZONE_MALLOC_DEFAULT_ALIGN, sz, MALLOC_ZONE_MALLOC_OPTION_NONE); T_ASSERT_NOTNULL(ptr, "malloc_zone_malloc_with_options, size %lu align %d", sz, MALLOC_ZONE_MALLOC_DEFAULT_ALIGN); free(ptr); } T_DECL(calloc_backdeploy, "calloc backdeploy", T_META_TAG_ALL_ALLOCATORS, T_META_TAG_VM_PREFERRED) { size_t sz = rand() % alloc_max; void *ptr = calloc(1, sz); T_ASSERT_NOTNULL(ptr, "calloc, size %lu", sz); free(ptr); } T_DECL(valloc_backdeploy, "valloc backdeploy", T_META_TAG_ALL_ALLOCATORS, T_META_TAG_VM_PREFERRED) { size_t sz = rand() % alloc_max; void *ptr = valloc(sz); T_ASSERT_NOTNULL(ptr, "valloc, size %lu", sz); free(ptr); } T_DECL(aligned_alloc_backdeploy, "aligned_alloc backdeploy", T_META_TAG_ALL_ALLOCATORS, T_META_TAG_VM_PREFERRED) { size_t sz = (rand() % alloc_max) & ~(sizeof(void *) - 1ul); void *ptr = aligned_alloc(sizeof(void *), sz); T_ASSERT_NOTNULL(ptr, "aligned_alloc, size %lu align %lu", sz, sizeof(void *)); free(ptr); } T_DECL(posix_memalign_backdeploy, "posix_memalign backdeploy", T_META_TAG_ALL_ALLOCATORS, T_META_TAG_VM_PREFERRED) { void *ptr; size_t sz = rand() % alloc_max; int ret = posix_memalign(&ptr, sizeof(void *), sz); T_ASSERT_EQ(ret, 0, "posix_memalign, size %lu align %lu", sz, sizeof(void *)); T_ASSERT_NOTNULL(ptr, "posix_memalign"); free(ptr); } |