michael@0: #define JEMALLOC_MANGLE michael@0: #include "jemalloc_test.h" michael@0: michael@0: #define CHUNK 0x400000 michael@0: /* #define MAXALIGN ((size_t)UINT64_C(0x80000000000)) */ michael@0: #define MAXALIGN ((size_t)0x2000000LU) michael@0: #define NITER 4 michael@0: michael@0: int michael@0: main(void) michael@0: { michael@0: size_t alignment, size, total; michael@0: unsigned i; michael@0: int err; michael@0: void *p, *ps[NITER]; michael@0: michael@0: malloc_printf("Test begin\n"); michael@0: michael@0: /* Test error conditions. */ michael@0: for (alignment = 0; alignment < sizeof(void *); alignment++) { michael@0: err = posix_memalign(&p, alignment, 1); michael@0: if (err != EINVAL) { michael@0: malloc_printf( michael@0: "Expected error for invalid alignment %zu\n", michael@0: alignment); michael@0: } michael@0: } michael@0: michael@0: for (alignment = sizeof(size_t); alignment < MAXALIGN; michael@0: alignment <<= 1) { michael@0: err = posix_memalign(&p, alignment + 1, 1); michael@0: if (err == 0) { michael@0: malloc_printf( michael@0: "Expected error for invalid alignment %zu\n", michael@0: alignment + 1); michael@0: } michael@0: } michael@0: michael@0: #if LG_SIZEOF_PTR == 3 michael@0: alignment = UINT64_C(0x8000000000000000); michael@0: size = UINT64_C(0x8000000000000000); michael@0: #else michael@0: alignment = 0x80000000LU; michael@0: size = 0x80000000LU; michael@0: #endif michael@0: err = posix_memalign(&p, alignment, size); michael@0: if (err == 0) { michael@0: malloc_printf( michael@0: "Expected error for posix_memalign(&p, %zu, %zu)\n", michael@0: alignment, size); michael@0: } michael@0: michael@0: #if LG_SIZEOF_PTR == 3 michael@0: alignment = UINT64_C(0x4000000000000000); michael@0: size = UINT64_C(0x8400000000000001); michael@0: #else michael@0: alignment = 0x40000000LU; michael@0: size = 0x84000001LU; michael@0: #endif michael@0: err = posix_memalign(&p, alignment, size); michael@0: if (err == 0) { michael@0: malloc_printf( michael@0: "Expected error for posix_memalign(&p, %zu, %zu)\n", michael@0: alignment, size); michael@0: } michael@0: michael@0: alignment = 0x10LU; michael@0: #if LG_SIZEOF_PTR == 3 michael@0: size = UINT64_C(0xfffffffffffffff0); michael@0: #else michael@0: size = 0xfffffff0LU; michael@0: #endif michael@0: err = posix_memalign(&p, alignment, size); michael@0: if (err == 0) { michael@0: malloc_printf( michael@0: "Expected error for posix_memalign(&p, %zu, %zu)\n", michael@0: alignment, size); michael@0: } michael@0: michael@0: for (i = 0; i < NITER; i++) michael@0: ps[i] = NULL; michael@0: michael@0: for (alignment = 8; michael@0: alignment <= MAXALIGN; michael@0: alignment <<= 1) { michael@0: total = 0; michael@0: malloc_printf("Alignment: %zu\n", alignment); michael@0: for (size = 1; michael@0: size < 3 * alignment && size < (1U << 31); michael@0: size += (alignment >> (LG_SIZEOF_PTR-1)) - 1) { michael@0: for (i = 0; i < NITER; i++) { michael@0: err = posix_memalign(&ps[i], michael@0: alignment, size); michael@0: if (err) { michael@0: malloc_printf( michael@0: "Error for size %zu (%#zx): %s\n", michael@0: size, size, strerror(err)); michael@0: exit(1); michael@0: } michael@0: total += malloc_usable_size(ps[i]); michael@0: if (total >= (MAXALIGN << 1)) michael@0: break; michael@0: } michael@0: for (i = 0; i < NITER; i++) { michael@0: if (ps[i] != NULL) { michael@0: free(ps[i]); michael@0: ps[i] = NULL; michael@0: } michael@0: } michael@0: } michael@0: } michael@0: michael@0: malloc_printf("Test end\n"); michael@0: return (0); michael@0: }