mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 20:23:59 +00:00
For some targets, it's not possible to place GVs in the same memory buffer as the MachineCodeEmitter allocated memory. Code and data has different read / write / execution privilege requirements.
This is a short term workaround. The current solution is for the JIT memory manager to manage code and data memory separately. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58688 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -565,6 +565,16 @@ void *JIT::getOrEmitGlobalVariable(const GlobalVariable *GV) {
|
||||
if (GV->isThreadLocal()) {
|
||||
MutexGuard locked(lock);
|
||||
Ptr = TJI.allocateThreadLocalMemory(S);
|
||||
} else if (TJI.allocateSeparateGVMemory()) {
|
||||
if (A <= 8) {
|
||||
Ptr = malloc(S);
|
||||
} else {
|
||||
// Allocate S+A bytes of memory, then use an aligned pointer within that
|
||||
// space.
|
||||
Ptr = malloc(S+A);
|
||||
unsigned MisAligned = ((intptr_t)Ptr & (A-1));
|
||||
Ptr = (char*)Ptr + (MisAligned ? (A-MisAligned) : 0);
|
||||
}
|
||||
} else {
|
||||
Ptr = MCE->allocateSpace(S, A);
|
||||
}
|
||||
|
Reference in New Issue
Block a user