static int check_heap(int verbose){ if (verbose){ dbg_printf("check_heap\n");} int flag=check_epi_pro(1)|check_align(1); flag|=check_hf(1)|check_coalesce(1); return flag; }
int main() { // align the buffer on 16 and call set value in a loop unsigned char buff[1000]; unsigned char *ptr = buff + (16 - (ptr2long(buff) % 16)); int i; memset(buff, 0, 1000); printf("Base pointer: %p\n", ptr); for (i = 0; i < 20; i++) set_value(ptr + 16 * i, 1); for (i = 0; i < 1000; i++) { if (buff[i] && check_align(&buff[i])) { printf("Align check failed on %p\n", &buff[i]); exit(1); } } printf("Align check ok\n"); exit(0); }
a() { int i = 1; short c[i]; c[0] = 0; check_align(c, i); }
b() { int i = 3; char c[i]; c[0] = 0; c[1] = 0; c[2] = 0; check_align(c, i); }
int check_vert(int **grid, int colChoice, int* colPos) { int i=colPos[colChoice], align=0, j=0; while(i>1 && grid[6-colPos[colChoice]][colChoice-1]==grid[6-i+1][colChoice-1]) { i--; align++; } return check_align(align,j); return 0; }
/* * Tests one allocation/deallocaton cycle; used in a loop this tests for leaks */ boolean_t test_alloc_dealloc() { mach_vm_address_t addr = 0; mach_vm_size_t size = SUPERPAGE_SIZE; int kr, ret; kr = mach_vm_allocate(mach_task_self(), &addr, size, VM_FLAGS_ANYWHERE | VM_FLAGS_SUPERPAGE_SIZE_2MB); if (!(ret = check_kr(kr, "mach_vm_allocate"))) return ret; if (!(ret = check_addr0(addr, "mach_vm_allocate"))) return ret; if (!(ret = check_align(addr))) return ret; if (!(ret = check_rw(addr, size))) return ret; kr = mach_vm_deallocate(mach_task_self(), addr, size); if (!(ret = check_kr(kr, "mach_vm_deallocate"))) return ret; return TRUE; }
/* * If we allocate a 2 MB superpage read-write without specifying an address, * - the call should succeed * - not return 0 * - return a 2 MB aligned address * - the memory should be readable and writable */ boolean_t test_allocate() { int kr, ret; global_addr = 0; global_size = SUPERPAGE_SIZE; kr = mach_vm_allocate(mach_task_self(), &global_addr, global_size, VM_FLAGS_ANYWHERE | VM_FLAGS_SUPERPAGE_SIZE_2MB); if (!(ret = check_kr(kr, "mach_vm_allocate"))) return ret; if (!(ret = check_addr0(global_addr, "mach_vm_allocate"))) return ret; if (!(ret = check_align(global_addr))) return ret; if (!(ret = check_rw(global_addr, global_size))) return ret; return TRUE; }
int main (void) { /* Integral types. */ run_signed_tests2(check_align, char, TYPE_ALIGN_CHAR); run_signed_tests2(check_align, short, TYPE_ALIGN_SHORT); run_signed_tests2(check_align, int, TYPE_ALIGN_INT); run_signed_tests2(check_align, long, TYPE_ALIGN_LONG); run_signed_tests2(check_align, long long, TYPE_ALIGN_LONG_LONG); #ifdef CHECK_INT128 run_signed_tests2(check_align, __int128, TYPE_ALIGN_INT128); #endif check_align(enumtype, TYPE_ALIGN_ENUM); /* Floating point types. */ check_align(float, TYPE_ALIGN_FLOAT); check_align(double, TYPE_ALIGN_DOUBLE); #ifdef CHECK_LONG_DOUBLE check_align(long double, TYPE_ALIGN_LONG_DOUBLE); #endif #ifdef CHECK_FLOAT128 check_align(__float128, TYPE_ALIGN_FLOAT128); #endif /* Packed types - MMX, 3DNow!, SSE and SSE2. */ #ifdef CHECK_M64_M128 check_align(__m64, TYPE_ALIGN_M64); check_align(__m128, TYPE_ALIGN_M128); #endif /* Pointer types. */ check_align(void *, TYPE_ALIGN_POINTER); check_align(void (*)(), TYPE_ALIGN_POINTER); return 0; }
int check_horiz(int **grid, int colChoice, int* colPos) { int i=colChoice, align=0, j=0; while(i<8 && grid[6-colPos[colChoice]][colChoice-1]==grid[6-colPos[colChoice]][i]) { i++; align++; } i=colChoice; while(i>1 && grid[6-colPos[colChoice]][colChoice-1]==grid[6-colPos[colChoice]][i-2]) { i--; align++; } return check_align(align,j); }
int check_diag_down_right(int **grid, int colChoice, int* colPos) { int i=colPos[colChoice], k=colChoice, align=0, j=0; while (i<6 && k>1 && grid[6-colPos[colChoice]][colChoice-1]==grid[6-(i+1)][k-2]) { i++; k--; align++; } i=colPos[colChoice]; k=colChoice; while (i>1 && k<8 && grid[6-colPos[colChoice]][colChoice-1]==grid[6-(i-1)][k]) { i--; k++; align++; } return check_align(align,j); }
/* * The mmap() interface should work just as well! */ boolean_t test_mmap() { int kr, ret; uintptr_t addr = 0; int size = SUPERPAGE_SIZE; addr = (uintptr_t)mmap((void*)addr, size, PROT_READ, MAP_ANON | MAP_PRIVATE, VM_FLAGS_SUPERPAGE_SIZE_2MB, 0); if (addr == (uintptr_t)MAP_FAILED) { sprintf(error, "mmap()"); return FALSE; } if (!(ret = check_addr0(addr, "mach_vm_allocate"))) return ret; if (!(ret = check_align(addr))) return ret; if (!(ret = check_r(addr, SUPERPAGE_SIZE, NULL))) return ret; if (!(ret = check_nw(addr, SUPERPAGE_SIZE))) return ret; kr = munmap((void*)addr, size); if (!(ret = check_kr(kr, "munmap"))) return ret; if (!(ret = check_nr(addr, size, NULL))) return ret; return TRUE; }