diff options
Diffstat (limited to 'backends/plugins/elf/memory-manager.cpp')
| -rw-r--r-- | backends/plugins/elf/memory-manager.cpp | 62 | 
1 files changed, 31 insertions, 31 deletions
| diff --git a/backends/plugins/elf/memory-manager.cpp b/backends/plugins/elf/memory-manager.cpp index 39f5e9071d..02669b3647 100644 --- a/backends/plugins/elf/memory-manager.cpp +++ b/backends/plugins/elf/memory-manager.cpp @@ -20,7 +20,7 @@   *   */ -#include "common/scummsys.h"  +#include "common/scummsys.h"  #if defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) @@ -28,12 +28,12 @@  #include "common/debug.h"  #include "common/util.h"  #include <malloc.h> -  -DECLARE_SINGLETON(ELFMemoryManager);  -ELFMemoryManager::ELFMemoryManager() :  -	_heap(0), _heapSize(0), _heapAlign(0),  -	_trackAllocs(false), _measuredSize(0), _measuredAlign(0),  +DECLARE_SINGLETON(ELFMemoryManager); + +ELFMemoryManager::ELFMemoryManager() : +	_heap(0), _heapSize(0), _heapAlign(0), +	_trackAllocs(false), _measuredSize(0), _measuredAlign(0),  	_bytesAllocated(0) {}  ELFMemoryManager::~ELFMemoryManager() { @@ -46,23 +46,23 @@ void ELFMemoryManager::trackPlugin(bool value) {  	if (value == _trackAllocs)  		return; -	 +  	_trackAllocs = value; -	 +  	if (_trackAllocs) {	// start measuring  		// start tracking allocations  		_measuredAlign = 0; -		 +  	} else {	// we're done measuring  		// get the total allocated size  		uint32 measuredSize = _allocList.back().end() - _allocList.front().start;  		_heapSize = MAX(_heapSize, measuredSize);  		_heapAlign = MAX(_heapAlign, _measuredAlign); -		 +  		_allocList.clear();  		_bytesAllocated = 0;	// reset -		 +  		debug(2, "measured a plugin of size %d. Max size %d. Max align %d", measuredSize, _heapSize, _heapAlign);  	}  } @@ -70,7 +70,7 @@ void ELFMemoryManager::trackPlugin(bool value) {  void ELFMemoryManager::trackAlloc(uint32 align, uint32 size) {  	if (!_measuredAlign)  		_measuredAlign = align; -		 +  	// use the allocate function to simulate allocation  	allocateOnHeap(align, size);  } @@ -79,20 +79,20 @@ void ELFMemoryManager::allocateHeap() {  	// The memory manager should only allocate once  	assert (!_heap);  	assert (_heapSize); -	 +  	// clear the list  	_allocList.clear();  	_bytesAllocated = 0; -	 +  	debug(2, "ELFMemoryManager: allocating %d bytes aligned at %d as the \  			plugin heap", _heapSize, _heapAlign); -	 +  	// prepare the heap -	if (_heapAlign)  +	if (_heapAlign)  		_heap = ::memalign(_heapAlign, _heapSize);  	else  		_heap = ::malloc(_heapSize); -		 +  	assert(_heap);  } @@ -106,7 +106,7 @@ void *ELFMemoryManager::pluginAllocate(uint32 size) {  void *ELFMemoryManager::pluginAllocate(uint32 align, uint32 size) {  	if (_heap) {  		return allocateOnHeap(align, size); -	}  +	}  	return ::memalign(align, size);  } @@ -120,16 +120,16 @@ void ELFMemoryManager::pluginDeallocate(void *ptr) {  // Allocate space for the request in our heap  void *ELFMemoryManager::allocateOnHeap(uint32 align, uint32 size) {  	byte *lastAddress = (byte *)_heap; -	 +  	// We can't allow allocations smaller than sizeof(Allocation). This could -	// only be from non-plugin allocations and would cause infinite recursion  +	// only be from non-plugin allocations and would cause infinite recursion  	// when allocating our Allocation in the list.  	if (size <= sizeof(Allocation))  		return 0; -	 +  	Common::List<Allocation>::iterator i;  	for (i = _allocList.begin(); i != _allocList.end(); i++) { -		if (i->start - lastAddress > (int)size)  +		if (i->start - lastAddress > (int)size)  			break;  		lastAddress = i->end();  		// align to desired alignment @@ -137,20 +137,20 @@ void *ELFMemoryManager::allocateOnHeap(uint32 align, uint32 size) {  			lastAddress = (byte *)( ((uint32)lastAddress + align - 1) & ~(align - 1) );  		}  	} -	 +  	// Check if we exceeded our heap limit  	// We skip this case if we're only tracking allocations  	if (!_trackAllocs && ((uint32)lastAddress + size > (uint32)_heap + _heapSize)) {  		debug(2, "failed to find space to allocate %d bytes", size);  		return 0;  	} -	 +  	_allocList.insert(i, Allocation(lastAddress, size));  	_bytesAllocated += size; -	 -	debug(7, "ELFMemoryManager: allocated %d bytes at %p. Total %d bytes",  + +	debug(7, "ELFMemoryManager: allocated %d bytes at %p. Total %d bytes",  		size, lastAddress, _bytesAllocated); -	 +  	return lastAddress;  } @@ -159,14 +159,14 @@ void ELFMemoryManager::deallocateFromHeap(void *ptr) {  	for (i = _allocList.begin(); i != _allocList.end(); i++) {  		if (i->start == ptr) {  			_bytesAllocated -= (*i).size; -			 -			debug(7, "ELFMemoryManager: freed %d bytes at %p. Total %d bytes",  + +			debug(7, "ELFMemoryManager: freed %d bytes at %p. Total %d bytes",  				(*i).size, (*i).start, _bytesAllocated); -			 +  			_allocList.erase(i);  			break;  		} -	}	 +	}  }  #endif /* defined(DYNAMIC_MODULES) && defined(USE_ELF_LOADER) */ | 
