memory/jemalloc/src/test/aligned_alloc.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 #define	JEMALLOC_MANGLE
     2 #include "jemalloc_test.h"
     4 #define CHUNK 0x400000
     5 /* #define MAXALIGN ((size_t)UINT64_C(0x80000000000)) */
     6 #define MAXALIGN ((size_t)0x2000000LU)
     7 #define NITER 4
     9 int
    10 main(void)
    11 {
    12 	size_t alignment, size, total;
    13 	unsigned i;
    14 	void *p, *ps[NITER];
    16 	malloc_printf("Test begin\n");
    18 	/* Test error conditions. */
    19 	alignment = 0;
    20 	set_errno(0);
    21 	p = aligned_alloc(alignment, 1);
    22 	if (p != NULL || get_errno() != EINVAL) {
    23 		malloc_printf(
    24 		    "Expected error for invalid alignment %zu\n", alignment);
    25 	}
    27 	for (alignment = sizeof(size_t); alignment < MAXALIGN;
    28 	    alignment <<= 1) {
    29 		set_errno(0);
    30 		p = aligned_alloc(alignment + 1, 1);
    31 		if (p != NULL || get_errno() != EINVAL) {
    32 			malloc_printf(
    33 			    "Expected error for invalid alignment %zu\n",
    34 			    alignment + 1);
    35 		}
    36 	}
    38 #if LG_SIZEOF_PTR == 3
    39 	alignment = UINT64_C(0x8000000000000000);
    40 	size      = UINT64_C(0x8000000000000000);
    41 #else
    42 	alignment = 0x80000000LU;
    43 	size      = 0x80000000LU;
    44 #endif
    45 	set_errno(0);
    46 	p = aligned_alloc(alignment, size);
    47 	if (p != NULL || get_errno() != ENOMEM) {
    48 		malloc_printf(
    49 		    "Expected error for aligned_alloc(%zu, %zu)\n",
    50 		    alignment, size);
    51 	}
    53 #if LG_SIZEOF_PTR == 3
    54 	alignment = UINT64_C(0x4000000000000000);
    55 	size      = UINT64_C(0x8400000000000001);
    56 #else
    57 	alignment = 0x40000000LU;
    58 	size      = 0x84000001LU;
    59 #endif
    60 	set_errno(0);
    61 	p = aligned_alloc(alignment, size);
    62 	if (p != NULL || get_errno() != ENOMEM) {
    63 		malloc_printf(
    64 		    "Expected error for aligned_alloc(%zu, %zu)\n",
    65 		    alignment, size);
    66 	}
    68 	alignment = 0x10LU;
    69 #if LG_SIZEOF_PTR == 3
    70 	size = UINT64_C(0xfffffffffffffff0);
    71 #else
    72 	size = 0xfffffff0LU;
    73 #endif
    74 	set_errno(0);
    75 	p = aligned_alloc(alignment, size);
    76 	if (p != NULL || get_errno() != ENOMEM) {
    77 		malloc_printf(
    78 		    "Expected error for aligned_alloc(&p, %zu, %zu)\n",
    79 		    alignment, size);
    80 	}
    82 	for (i = 0; i < NITER; i++)
    83 		ps[i] = NULL;
    85 	for (alignment = 8;
    86 	    alignment <= MAXALIGN;
    87 	    alignment <<= 1) {
    88 		total = 0;
    89 		malloc_printf("Alignment: %zu\n", alignment);
    90 		for (size = 1;
    91 		    size < 3 * alignment && size < (1U << 31);
    92 		    size += (alignment >> (LG_SIZEOF_PTR-1)) - 1) {
    93 			for (i = 0; i < NITER; i++) {
    94 				ps[i] = aligned_alloc(alignment, size);
    95 				if (ps[i] == NULL) {
    96 					char buf[BUFERROR_BUF];
    98 					buferror(buf, sizeof(buf));
    99 					malloc_printf(
   100 					    "Error for size %zu (%#zx): %s\n",
   101 					    size, size, buf);
   102 					exit(1);
   103 				}
   104 				total += malloc_usable_size(ps[i]);
   105 				if (total >= (MAXALIGN << 1))
   106 					break;
   107 			}
   108 			for (i = 0; i < NITER; i++) {
   109 				if (ps[i] != NULL) {
   110 					free(ps[i]);
   111 					ps[i] = NULL;
   112 				}
   113 			}
   114 		}
   115 	}
   117 	malloc_printf("Test end\n");
   118 	return (0);
   119 }

mercurial