14 int AllocateMemory(uintptr_t VirtAddr, size_t ByteCount);
15 uintptr_t FindFreeRange(size_t ByteCount, int MaxBits);
18 int AllocateMemory(uintptr_t VirtAddr, size_t ByteCount)
20 uintptr_t base = (VirtAddr >> 12) << 12;
21 size_t size = (VirtAddr & 0xFFF) + ByteCount;
24 tmp = VirtualAlloc(base, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
26 printf("ERROR: Unable to allocate memory (%i)\n", GetLastError());
30 // printf("AllocateMemory: mmap(%p, 0x%lx, ...)\n", (void*)base, ByteCount);
31 tmp = mmap((void*)base, size, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0);
32 if( tmp == MAP_FAILED ) {
33 printf("ERROR: Unable to allocate memory\n");
34 perror("AllocateMemory");
37 // printf("AllocateMemory: RETURN 0\n");
42 uintptr_t FindFreeRange(size_t ByteCount, int MaxBits)
45 # error "Windows FindFreeRange() unimplemented"
47 uintptr_t base, ofs, size;
49 static const int PAGE_SIZE = 0x1000;
51 size = (ByteCount + PAGE_SIZE - 1) / PAGE_SIZE;
54 end <<= (sizeof(intptr_t)*8-MaxBits);
55 end >>= (sizeof(intptr_t)*8-MaxBits);
56 // printf("end = %p\n", (void*)end);
58 // for( base = 0; base < end - size; base -= PAGE_SIZE )
59 for( base = end - size + 1; base > 0; base -= PAGE_SIZE )
61 for( ofs = 0; ofs < size; ofs += PAGE_SIZE ) {
62 if( msync( (void*)(base+ofs), 1, 0) == 0 )
65 perror("FindFreeRange, msync");