PVRSRV_ERROR OSFreeMem_Debug_Wrapper(u32 ui32Flags, u32 ui32Size, void *pvCpuVAddr, void *hBlockAlloc, char *pszFilename, u32 ui32Line) { OSMEM_DEBUG_INFO *psInfo; OSCheckMemDebug(pvCpuVAddr, ui32Size, pszFilename, ui32Line); memset(pvCpuVAddr, 0xBF, ui32Size + TEST_BUFFER_PADDING_AFTER); psInfo = (OSMEM_DEBUG_INFO *) ((u32) pvCpuVAddr - TEST_BUFFER_PADDING_STATUS); psInfo->uSize = 0; psInfo->uSizeParityCheck = 0; psInfo->eValid = isFree; psInfo->uLineNo = ui32Line; debug_strcpy(psInfo->sFileName, pszFilename); return OSFreeMem_Debug_Linux_Memory_Allocations(ui32Flags, ui32Size + TEST_BUFFER_PADDING, psInfo, hBlockAlloc, pszFilename, ui32Line); }
PVRSRV_ERROR OSFreeMem_Debug_Wrapper(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID pvCpuVAddr, IMG_HANDLE hBlockAlloc, IMG_CHAR *pszFilename, IMG_UINT32 ui32Line) { OSMEM_DEBUG_INFO *psInfo; /*check dbginfo (arg pointing to user memory)*/ OSCheckMemDebug(pvCpuVAddr, ui32Size, pszFilename, ui32Line); /*mark memory as freed*/ OSMemSet(pvCpuVAddr, 0xBF, ui32Size + TEST_BUFFER_PADDING_AFTER); /*point to the starting address of the total allocated memory*/ psInfo = (OSMEM_DEBUG_INFO *)((IMG_UINTPTR_T) pvCpuVAddr - TEST_BUFFER_PADDING_STATUS); /*update dbg info struct*/ psInfo->uSize = 0; psInfo->uSizeParityCheck = 0; psInfo->eValid = isFree; psInfo->uLineNo = ui32Line; debug_strcpy(psInfo->sFileName, pszFilename); return OSFreeMem_Debug_Linux_Memory_Allocations(ui32Flags, ui32Size + TEST_BUFFER_PADDING, psInfo, hBlockAlloc, pszFilename, ui32Line); }
PVRSRV_ERROR OSAllocMem_Debug_Wrapper(u32 ui32Flags, u32 ui32Size, void **ppvCpuVAddr, void **phBlockAlloc, char *pszFilename, u32 ui32Line) { OSMEM_DEBUG_INFO *psInfo; PVRSRV_ERROR eError; eError = OSAllocMem_Debug_Linux_Memory_Allocations(ui32Flags, ui32Size + TEST_BUFFER_PADDING, ppvCpuVAddr, phBlockAlloc, pszFilename, ui32Line); if (eError != PVRSRV_OK) { return eError; } memset((char *)(*ppvCpuVAddr) + TEST_BUFFER_PADDING_STATUS, 0xBB, ui32Size); memset((char *)(*ppvCpuVAddr) + ui32Size + TEST_BUFFER_PADDING_STATUS, 0xB2, TEST_BUFFER_PADDING_AFTER); psInfo = (OSMEM_DEBUG_INFO *) (*ppvCpuVAddr); memset(psInfo->sGuardRegionBefore, 0xB1, sizeof(psInfo->sGuardRegionBefore)); debug_strcpy(psInfo->sFileName, pszFilename); psInfo->uLineNo = ui32Line; psInfo->eValid = isAllocated; psInfo->uSize = ui32Size; psInfo->uSizeParityCheck = 0x01234567 ^ ui32Size; *ppvCpuVAddr = (void *)((u32) * ppvCpuVAddr) + TEST_BUFFER_PADDING_STATUS; #ifdef PVRSRV_LOG_MEMORY_ALLOCS PVR_TRACE(("Allocated pointer (after debug info): 0x%X from %s:%d", *ppvCpuVAddr, pszFilename, ui32Line)); #endif return PVRSRV_OK; }
PVRSRV_ERROR OSAllocMem_Debug_Wrapper(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID *ppvCpuVAddr, IMG_HANDLE *phBlockAlloc, IMG_CHAR *pszFilename, IMG_UINT32 ui32Line) { OSMEM_DEBUG_INFO *psInfo; PVRSRV_ERROR eError; eError = OSAllocMem_Debug_Linux_Memory_Allocations(ui32Flags, ui32Size + TEST_BUFFER_PADDING, ppvCpuVAddr, phBlockAlloc, pszFilename, ui32Line); if (eError != PVRSRV_OK) { return eError; } OSMemSet((IMG_CHAR *)(*ppvCpuVAddr) + TEST_BUFFER_PADDING_STATUS, 0xBB, ui32Size); OSMemSet((IMG_CHAR *)(*ppvCpuVAddr) + ui32Size + TEST_BUFFER_PADDING_STATUS, 0xB2, TEST_BUFFER_PADDING_AFTER); /*fill the dbg info struct*/ psInfo = (OSMEM_DEBUG_INFO *)(*ppvCpuVAddr); OSMemSet(psInfo->sGuardRegionBefore, 0xB1, sizeof(psInfo->sGuardRegionBefore)); debug_strcpy(psInfo->sFileName, pszFilename); psInfo->uLineNo = ui32Line; psInfo->eValid = isAllocated; psInfo->uSize = ui32Size; psInfo->uSizeParityCheck = 0x01234567 ^ ui32Size; /*point to the user data section*/ *ppvCpuVAddr = (IMG_PVOID) ((IMG_UINTPTR_T)*ppvCpuVAddr)+TEST_BUFFER_PADDING_STATUS; #ifdef PVRSRV_LOG_MEMORY_ALLOCS /*this is here to simplify the surounding logging macro, that is a expression maybe the macro should be an expression */ PVR_TRACE(("Allocated pointer (after debug info): 0x%p from %s:%d", *ppvCpuVAddr, pszFilename, ui32Line)); #endif return PVRSRV_OK; }