memory/jemalloc/src/test/allocm.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 	int r;
    13 	void *p;
    14 	size_t nsz, rsz, sz, alignment, total;
    15 	unsigned i;
    16 	void *ps[NITER];
    18 	malloc_printf("Test begin\n");
    20 	sz = 42;
    21 	nsz = 0;
    22 	r = nallocm(&nsz, sz, 0);
    23 	if (r != ALLOCM_SUCCESS) {
    24 		malloc_printf("Unexpected nallocm() error\n");
    25 		abort();
    26 	}
    27 	rsz = 0;
    28 	r = allocm(&p, &rsz, sz, 0);
    29 	if (r != ALLOCM_SUCCESS) {
    30 		malloc_printf("Unexpected allocm() error\n");
    31 		abort();
    32 	}
    33 	if (rsz < sz)
    34 		malloc_printf("Real size smaller than expected\n");
    35 	if (nsz != rsz)
    36 		malloc_printf("nallocm()/allocm() rsize mismatch\n");
    37 	if (dallocm(p, 0) != ALLOCM_SUCCESS)
    38 		malloc_printf("Unexpected dallocm() error\n");
    40 	r = allocm(&p, NULL, sz, 0);
    41 	if (r != ALLOCM_SUCCESS) {
    42 		malloc_printf("Unexpected allocm() error\n");
    43 		abort();
    44 	}
    45 	if (dallocm(p, 0) != ALLOCM_SUCCESS)
    46 		malloc_printf("Unexpected dallocm() error\n");
    48 	nsz = 0;
    49 	r = nallocm(&nsz, sz, ALLOCM_ZERO);
    50 	if (r != ALLOCM_SUCCESS) {
    51 		malloc_printf("Unexpected nallocm() error\n");
    52 		abort();
    53 	}
    54 	rsz = 0;
    55 	r = allocm(&p, &rsz, sz, ALLOCM_ZERO);
    56 	if (r != ALLOCM_SUCCESS) {
    57 		malloc_printf("Unexpected allocm() error\n");
    58 		abort();
    59 	}
    60 	if (nsz != rsz)
    61 		malloc_printf("nallocm()/allocm() rsize mismatch\n");
    62 	if (dallocm(p, 0) != ALLOCM_SUCCESS)
    63 		malloc_printf("Unexpected dallocm() error\n");
    65 #if LG_SIZEOF_PTR == 3
    66 	alignment = UINT64_C(0x8000000000000000);
    67 	sz        = UINT64_C(0x8000000000000000);
    68 #else
    69 	alignment = 0x80000000LU;
    70 	sz        = 0x80000000LU;
    71 #endif
    72 	nsz = 0;
    73 	r = nallocm(&nsz, sz, ALLOCM_ALIGN(alignment));
    74 	if (r == ALLOCM_SUCCESS) {
    75 		malloc_printf(
    76 		    "Expected error for nallocm(&nsz, %zu, %#x)\n",
    77 		    sz, ALLOCM_ALIGN(alignment));
    78 	}
    79 	rsz = 0;
    80 	r = allocm(&p, &rsz, sz, ALLOCM_ALIGN(alignment));
    81 	if (r == ALLOCM_SUCCESS) {
    82 		malloc_printf(
    83 		    "Expected error for allocm(&p, %zu, %#x)\n",
    84 		    sz, ALLOCM_ALIGN(alignment));
    85 	}
    86 	if (nsz != rsz)
    87 		malloc_printf("nallocm()/allocm() rsize mismatch\n");
    89 #if LG_SIZEOF_PTR == 3
    90 	alignment = UINT64_C(0x4000000000000000);
    91 	sz        = UINT64_C(0x8400000000000001);
    92 #else
    93 	alignment = 0x40000000LU;
    94 	sz        = 0x84000001LU;
    95 #endif
    96 	nsz = 0;
    97 	r = nallocm(&nsz, sz, ALLOCM_ALIGN(alignment));
    98 	if (r != ALLOCM_SUCCESS)
    99 		malloc_printf("Unexpected nallocm() error\n");
   100 	rsz = 0;
   101 	r = allocm(&p, &rsz, sz, ALLOCM_ALIGN(alignment));
   102 	if (r == ALLOCM_SUCCESS) {
   103 		malloc_printf(
   104 		    "Expected error for allocm(&p, %zu, %#x)\n",
   105 		    sz, ALLOCM_ALIGN(alignment));
   106 	}
   108 	alignment = 0x10LU;
   109 #if LG_SIZEOF_PTR == 3
   110 	sz = UINT64_C(0xfffffffffffffff0);
   111 #else
   112 	sz = 0xfffffff0LU;
   113 #endif
   114 	nsz = 0;
   115 	r = nallocm(&nsz, sz, ALLOCM_ALIGN(alignment));
   116 	if (r == ALLOCM_SUCCESS) {
   117 		malloc_printf(
   118 		    "Expected error for nallocm(&nsz, %zu, %#x)\n",
   119 		    sz, ALLOCM_ALIGN(alignment));
   120 	}
   121 	rsz = 0;
   122 	r = allocm(&p, &rsz, sz, ALLOCM_ALIGN(alignment));
   123 	if (r == ALLOCM_SUCCESS) {
   124 		malloc_printf(
   125 		    "Expected error for allocm(&p, %zu, %#x)\n",
   126 		    sz, ALLOCM_ALIGN(alignment));
   127 	}
   128 	if (nsz != rsz)
   129 		malloc_printf("nallocm()/allocm() rsize mismatch\n");
   131 	for (i = 0; i < NITER; i++)
   132 		ps[i] = NULL;
   134 	for (alignment = 8;
   135 	    alignment <= MAXALIGN;
   136 	    alignment <<= 1) {
   137 		total = 0;
   138 		malloc_printf("Alignment: %zu\n", alignment);
   139 		for (sz = 1;
   140 		    sz < 3 * alignment && sz < (1U << 31);
   141 		    sz += (alignment >> (LG_SIZEOF_PTR-1)) - 1) {
   142 			for (i = 0; i < NITER; i++) {
   143 				nsz = 0;
   144 				r = nallocm(&nsz, sz,
   145 				    ALLOCM_ALIGN(alignment) | ALLOCM_ZERO);
   146 				if (r != ALLOCM_SUCCESS) {
   147 					malloc_printf(
   148 					    "nallocm() error for size %zu"
   149 					    " (%#zx): %d\n",
   150 					    sz, sz, r);
   151 					exit(1);
   152 				}
   153 				rsz = 0;
   154 				r = allocm(&ps[i], &rsz, sz,
   155 				    ALLOCM_ALIGN(alignment) | ALLOCM_ZERO);
   156 				if (r != ALLOCM_SUCCESS) {
   157 					malloc_printf(
   158 					    "allocm() error for size %zu"
   159 					    " (%#zx): %d\n",
   160 					    sz, sz, r);
   161 					exit(1);
   162 				}
   163 				if (rsz < sz) {
   164 					malloc_printf(
   165 					    "Real size smaller than"
   166 					    " expected\n");
   167 				}
   168 				if (nsz != rsz) {
   169 					malloc_printf(
   170 					    "nallocm()/allocm() rsize"
   171 					    " mismatch\n");
   172 				}
   173 				if ((uintptr_t)p & (alignment-1)) {
   174 					malloc_printf(
   175 					    "%p inadequately aligned for"
   176 					    " alignment: %zu\n", p, alignment);
   177 				}
   178 				sallocm(ps[i], &rsz, 0);
   179 				total += rsz;
   180 				if (total >= (MAXALIGN << 1))
   181 					break;
   182 			}
   183 			for (i = 0; i < NITER; i++) {
   184 				if (ps[i] != NULL) {
   185 					dallocm(ps[i], 0);
   186 					ps[i] = NULL;
   187 				}
   188 			}
   189 		}
   190 	}
   192 	malloc_printf("Test end\n");
   193 	return (0);
   194 }

mercurial