Use mmap() to allocate codeblock memory on x86-64 when not running on Windows.
This commit is contained in:
parent
c86b919ed8
commit
1953f4afb9
1 changed files with 1 additions and 11 deletions
|
|
@ -286,7 +286,7 @@ void codegen_backend_init()
|
||||||
#if defined WIN32 || defined _WIN32 || defined _WIN32
|
#if defined WIN32 || defined _WIN32 || defined _WIN32
|
||||||
codeblock_data = VirtualAlloc(NULL, BLOCK_SIZE * BLOCK_DATA_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
codeblock_data = VirtualAlloc(NULL, BLOCK_SIZE * BLOCK_DATA_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
||||||
#else
|
#else
|
||||||
codeblock_data = malloc(BLOCK_SIZE * BLOCK_DATA_SIZE);
|
codeblock_data = mmap(0, BLOCK_SIZE * BLOCK_DATA_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, 0, 0);
|
||||||
#endif
|
#endif
|
||||||
codeblock = malloc(BLOCK_SIZE * sizeof(codeblock_t));
|
codeblock = malloc(BLOCK_SIZE * sizeof(codeblock_t));
|
||||||
codeblock_hash = malloc(HASH_SIZE * sizeof(codeblock_t *));
|
codeblock_hash = malloc(HASH_SIZE * sizeof(codeblock_t *));
|
||||||
|
|
@ -299,16 +299,6 @@ void codegen_backend_init()
|
||||||
codeblock[c].data = &codeblock_data[c * BLOCK_DATA_SIZE];
|
codeblock[c].data = &codeblock_data[c * BLOCK_DATA_SIZE];
|
||||||
codeblock[c].pc = BLOCK_PC_INVALID;
|
codeblock[c].pc = BLOCK_PC_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__linux__) || defined(__APPLE__)
|
|
||||||
start = (void *)((long)codeblock & pagemask);
|
|
||||||
len = ((BLOCK_SIZE * sizeof(codeblock_t)) + pagesize) & pagemask;
|
|
||||||
if (mprotect(start, len, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
|
|
||||||
{
|
|
||||||
perror("mprotect");
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
// pclog("Codegen is %p\n", (void *)pages[0xfab12 >> 12].block);
|
// pclog("Codegen is %p\n", (void *)pages[0xfab12 >> 12].block);
|
||||||
|
|
||||||
block_current = 0;
|
block_current = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue