mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-08 12:21:04 +00:00
Teach the RtDyld to tell the memory manager about how much space a function
actually takes rather than how much memory was allocated for it. This is more accurate and should help the manager pack things more effectively. llvm-svn: 131305
This commit is contained in:
parent
9df62fe3e4
commit
ed5d966802
@ -129,18 +129,19 @@ void RuntimeDyldImpl::extractFunction(StringRef Name, uint8_t *StartAddress,
|
||||
uint8_t *EndAddress) {
|
||||
// Allocate memory for the function via the memory manager.
|
||||
uintptr_t Size = EndAddress - StartAddress + 1;
|
||||
uint8_t *Mem = MemMgr->startFunctionBody(Name.data(), Size);
|
||||
uintptr_t AllocSize = Size;
|
||||
uint8_t *Mem = MemMgr->startFunctionBody(Name.data(), AllocSize);
|
||||
assert(Size >= (uint64_t)(EndAddress - StartAddress + 1) &&
|
||||
"Memory manager failed to allocate enough memory!");
|
||||
// Copy the function payload into the memory block.
|
||||
memcpy(Mem, StartAddress, EndAddress - StartAddress + 1);
|
||||
memcpy(Mem, StartAddress, Size);
|
||||
MemMgr->endFunctionBody(Name.data(), Mem, Mem + Size);
|
||||
// Remember where we put it.
|
||||
Functions[Name] = sys::MemoryBlock(Mem, Size);
|
||||
// Default the assigned address for this symbol to wherever this
|
||||
// allocated it.
|
||||
SymbolTable[Name] = Mem;
|
||||
DEBUG(dbgs() << " allocated to " << Mem << "\n");
|
||||
DEBUG(dbgs() << " allocated to [" << Mem << ", " << Mem + Size << "]\n");
|
||||
}
|
||||
|
||||
bool RuntimeDyldImpl::
|
||||
|
Loading…
Reference in New Issue
Block a user