Update external memory tracker messages

This commit is contained in:
Alex 2023-03-16 17:20:12 +02:00
parent 5ed0389ad1
commit 6a492c6b07
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
3 changed files with 173 additions and 140 deletions

View File

@ -261,7 +261,6 @@ void *HeapMalloc(size_t Size)
memdbg("malloc(%d)->[%s]", Size, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
void *ret = nullptr;
switch (AllocatorType)
{
case MemoryAllocatorType::Pages:
@ -284,7 +283,6 @@ void *HeapMalloc(size_t Size)
default:
throw;
}
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -292,7 +290,9 @@ void *HeapMalloc(size_t Size)
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "malloc( %ld )=%p-%p~%p\n\r", Size, ret, (void *)((uintptr_t)ret + Size), __builtin_return_address(0));
sprintf(mExtTrkLog, "malloc( %ld )=%p~%p\n\r",
Size,
ret, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -314,7 +314,6 @@ void *HeapCalloc(size_t n, size_t Size)
memdbg("calloc(%d, %d)->[%s]", n, Size, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
void *ret = nullptr;
switch (AllocatorType)
{
case MemoryAllocatorType::Pages:
@ -337,7 +336,6 @@ void *HeapCalloc(size_t n, size_t Size)
default:
throw;
}
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -345,7 +343,9 @@ void *HeapCalloc(size_t n, size_t Size)
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "calloc( %ld %ld )=%p-%p~%p\n\r", n, Size, ret, (void *)((uintptr_t)ret + (n * Size)), __builtin_return_address(0));
sprintf(mExtTrkLog, "calloc( %ld %ld )=%p~%p\n\r",
n, Size,
ret, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -367,7 +367,6 @@ void *HeapRealloc(void *Address, size_t Size)
memdbg("realloc(%#lx, %d)->[%s]", Address, Size, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
void *ret = nullptr;
switch (AllocatorType)
{
case unlikely(MemoryAllocatorType::Pages):
@ -390,7 +389,6 @@ void *HeapRealloc(void *Address, size_t Size)
default:
throw;
}
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -398,7 +396,9 @@ void *HeapRealloc(void *Address, size_t Size)
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "realloc( %p %ld )=%p-%p~%p\n\r", Address, Size, ret, (void *)((uintptr_t)ret + Size), __builtin_return_address(0));
sprintf(mExtTrkLog, "realloc( %p %ld )=%p~%p\n\r",
Address, Size,
ret, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -419,25 +419,6 @@ void HeapFree(void *Address)
#endif
memdbg("free(%#lx)->[%s]", Address, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
char LockTmpStr[64];
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "free( %p )~%p\n\r", Address, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
if (mExtTrkLog[i] == '\r')
break;
mTrkUART.Write(mExtTrkLog[i]);
}
mExtTrkLock.Unlock();
}
#endif
switch (AllocatorType)
{
case unlikely(MemoryAllocatorType::Pages):
@ -459,6 +440,26 @@ void HeapFree(void *Address)
default:
throw;
}
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
char LockTmpStr[64];
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "free( %p )~%p\n\r",
Address,
__builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
if (mExtTrkLog[i] == '\r')
break;
mTrkUART.Write(mExtTrkLog[i]);
}
mExtTrkLock.Unlock();
}
#endif
}
void *operator new(size_t Size)
@ -468,6 +469,7 @@ void *operator new(size_t Size)
#endif
memdbg("new(%d)->[%s]", Size, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
void *ret = HeapMalloc(Size);
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -475,7 +477,9 @@ void *operator new(size_t Size)
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "new( %ld )~%p\n\r", Size, __builtin_return_address(0));
sprintf(mExtTrkLog, "new( %ld )=%p~%p\n\r",
Size,
ret, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -486,8 +490,7 @@ void *operator new(size_t Size)
mExtTrkLock.Unlock();
}
#endif
return HeapMalloc(Size);
return ret;
}
void *operator new[](size_t Size)
@ -497,6 +500,7 @@ void *operator new[](size_t Size)
#endif
memdbg("new[](%d)->[%s]", Size, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
void *ret = HeapMalloc(Size);
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -504,7 +508,9 @@ void *operator new[](size_t Size)
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "new[]( %ld )~%p\n\r", Size, __builtin_return_address(0));
sprintf(mExtTrkLog, "new[]( %ld )=%p~%p\n\r",
Size,
ret, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -515,8 +521,7 @@ void *operator new[](size_t Size)
mExtTrkLock.Unlock();
}
#endif
return HeapMalloc(Size);
return ret;
}
void *operator new(unsigned long Size, std::align_val_t Alignment)
@ -527,6 +532,7 @@ void *operator new(unsigned long Size, std::align_val_t Alignment)
memdbg("new(%d, %d)->[%s]", Size, Alignment, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
fixme("operator new with alignment(%#lx) is not implemented", Alignment);
void *ret = HeapMalloc(Size);
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -534,7 +540,9 @@ void *operator new(unsigned long Size, std::align_val_t Alignment)
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "new( %ld %#lx )~%p\n\r", Size, (uintptr_t)Alignment, __builtin_return_address(0));
sprintf(mExtTrkLog, "new( %ld %#lx )=%p~%p\n\r",
Size, (uintptr_t)Alignment,
ret, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -545,8 +553,7 @@ void *operator new(unsigned long Size, std::align_val_t Alignment)
mExtTrkLock.Unlock();
}
#endif
return HeapMalloc(Size);
return ret;
}
void operator delete(void *Pointer)
@ -556,6 +563,7 @@ void operator delete(void *Pointer)
#endif
memdbg("delete(%#lx)->[%s]", Pointer, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
HeapFree(Pointer);
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -563,7 +571,9 @@ void operator delete(void *Pointer)
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "delete( %p )~%p\n\r", Pointer, __builtin_return_address(0));
sprintf(mExtTrkLog, "delete( %p )~%p\n\r",
Pointer,
__builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -574,8 +584,6 @@ void operator delete(void *Pointer)
mExtTrkLock.Unlock();
}
#endif
HeapFree(Pointer);
}
void operator delete[](void *Pointer)
@ -585,6 +593,7 @@ void operator delete[](void *Pointer)
#endif
memdbg("delete[](%#lx)->[%s]", Pointer, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
HeapFree(Pointer);
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -592,7 +601,9 @@ void operator delete[](void *Pointer)
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "delete[]( %p )~%p\n\r", Pointer, __builtin_return_address(0));
sprintf(mExtTrkLog, "delete[]( %p )~%p\n\r",
Pointer,
__builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -603,17 +614,17 @@ void operator delete[](void *Pointer)
mExtTrkLock.Unlock();
}
#endif
HeapFree(Pointer);
}
void operator delete(void *Pointer, long unsigned int Size)
{
UNUSED(Size);
#ifdef DEBUG_ALLOCATIONS_SL
SmartLockClass lock___COUNTER__(OperatorAllocatorLock, (KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown"));
#endif
memdbg("delete(%#lx, %d)->[%s]", Pointer, Size, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
HeapFree(Pointer);
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -621,7 +632,9 @@ void operator delete(void *Pointer, long unsigned int Size)
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "delete( %p %ld )~%p\n\r", Pointer, Size, __builtin_return_address(0));
sprintf(mExtTrkLog, "delete( %p %ld )~%p\n\r",
Pointer, Size,
__builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -632,18 +645,17 @@ void operator delete(void *Pointer, long unsigned int Size)
mExtTrkLock.Unlock();
}
#endif
HeapFree(Pointer);
UNUSED(Size);
}
void operator delete[](void *Pointer, long unsigned int Size)
{
UNUSED(Size);
#ifdef DEBUG_ALLOCATIONS_SL
SmartLockClass lock___COUNTER__(OperatorAllocatorLock, (KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown"));
#endif
memdbg("delete[](%#lx, %d)->[%s]", Pointer, Size, KernelSymbolTable ? KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)) : "Unknown");
HeapFree(Pointer);
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -651,7 +663,9 @@ void operator delete[](void *Pointer, long unsigned int Size)
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "delete[]( %p %ld )~%p\n\r", Pointer, Size, __builtin_return_address(0));
sprintf(mExtTrkLog, "delete[]( %p %ld )~%p\n\r",
Pointer, Size,
__builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -662,7 +676,4 @@ void operator delete[](void *Pointer, long unsigned int Size)
mExtTrkLock.Unlock();
}
#endif
HeapFree(Pointer);
UNUSED(Size);
}

View File

@ -82,7 +82,8 @@ namespace Memory
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "RequestPage( )=%p~%p\n\r", (void *)(PageBitmapIndex * PAGE_SIZE), __builtin_return_address(0));
sprintf(mExtTrkLog, "RequestPage( )=%p~%p\n\r",
(void *)(PageBitmapIndex * PAGE_SIZE), __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -126,7 +127,9 @@ namespace Memory
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "RequestPages( %ld )=%p~%p\n\r", Count, (void *)(Index * PAGE_SIZE), __builtin_return_address(0));
sprintf(mExtTrkLog, "RequestPages( %ld )=%p~%p\n\r",
Count,
(void *)(Index * PAGE_SIZE), __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -155,7 +158,9 @@ namespace Memory
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "RequestPages( %ld )=%p~%p\n\r", Count, (void *)(PageBitmapIndex * PAGE_SIZE), __builtin_return_address(0));
sprintf(mExtTrkLog, "RequestPages( %ld )=%p~%p\n\r",
Count,
(void *)(PageBitmapIndex * PAGE_SIZE), __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -201,7 +206,9 @@ namespace Memory
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "FreePage( %p )=(null)~%p\n\r", Address, __builtin_return_address(0));
sprintf(mExtTrkLog, "FreePage( %p )~%p\n\r",
Address,
__builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -228,7 +235,9 @@ namespace Memory
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "!FreePages( %p %ld )=(null)~%p\n\r", Address, Count, __builtin_return_address(0));
sprintf(mExtTrkLog, "!FreePages( %p %ld )~%p\n\r",
Address, Count,
__builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{

View File

@ -639,6 +639,31 @@ EXTERNC __no_stack_protector void *__memcpy_chk(void *dest, const void *src, siz
if (unlikely(len > slen))
__chk_fail();
void *ret = nullptr;
switch (CPU::CheckSIMD())
{
case CPU::x86SIMDType::SIMD_SSE:
ret = memcpy_sse(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE2:
ret = memcpy_sse2(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE3:
ret = memcpy_sse3(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSSE3:
ret = memcpy_ssse3(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE41:
ret = memcpy_sse4_1(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE42:
ret = memcpy_sse4_2(dest, src, len);
break;
default:
ret = memcpy_unsafe(dest, src, len);
break;
}
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -646,7 +671,9 @@ EXTERNC __no_stack_protector void *__memcpy_chk(void *dest, const void *src, siz
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "memcpy( %p %p %ld %ld )=%p-%p>%p-%p~%p\n\r", dest, src, len, slen, src, (void *)((uintptr_t)src + len), dest, (void *)((uintptr_t)dest + len), __builtin_return_address(0));
sprintf(mExtTrkLog, "memcpy( %p %p %ld %ld )=%p~%p\n\r",
dest, src, len, slen,
ret, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -657,31 +684,7 @@ EXTERNC __no_stack_protector void *__memcpy_chk(void *dest, const void *src, siz
mExtTrkLock.Unlock();
}
#endif
switch (CPU::CheckSIMD())
{
case CPU::x86SIMDType::SIMD_SSE:
return memcpy_sse(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE2:
return memcpy_sse2(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE3:
return memcpy_sse3(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSSE3:
return memcpy_ssse3(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE41:
return memcpy_sse4_1(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE42:
return memcpy_sse4_2(dest, src, len);
break;
default:
return memcpy_unsafe(dest, src, len);
break;
}
return ret;
}
EXTERNC __no_stack_protector void *__memset_chk(void *dest, int val, size_t len, size_t slen)
@ -710,6 +713,31 @@ EXTERNC __no_stack_protector void *__memset_chk(void *dest, int val, size_t len,
if (unlikely(len > slen))
__chk_fail();
void *ret = nullptr;
switch (CPU::CheckSIMD())
{
case CPU::x86SIMDType::SIMD_SSE:
ret = memset_sse(dest, val, len);
break;
case CPU::x86SIMDType::SIMD_SSE2:
ret = memset_sse2(dest, val, len);
break;
case CPU::x86SIMDType::SIMD_SSE3:
ret = memset_sse3(dest, val, len);
break;
case CPU::x86SIMDType::SIMD_SSSE3:
ret = memset_ssse3(dest, val, len);
break;
case CPU::x86SIMDType::SIMD_SSE41:
ret = memset_sse4_1(dest, val, len);
break;
case CPU::x86SIMDType::SIMD_SSE42:
ret = memset_sse4_2(dest, val, len);
break;
default:
ret = memset_unsafe(dest, val, len);
break;
}
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -717,7 +745,9 @@ EXTERNC __no_stack_protector void *__memset_chk(void *dest, int val, size_t len,
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "memset( %p %d %ld %ld )=%#x>%p-%p~%p\n\r", dest, val, len, slen, val, dest, (void *)((uintptr_t)dest + len), __builtin_return_address(0));
sprintf(mExtTrkLog, "memset( %p %d %ld %ld )=%p~%p\n\r",
dest, val, len, slen,
ret, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -728,31 +758,7 @@ EXTERNC __no_stack_protector void *__memset_chk(void *dest, int val, size_t len,
mExtTrkLock.Unlock();
}
#endif
switch (CPU::CheckSIMD())
{
case CPU::x86SIMDType::SIMD_SSE:
return memset_sse(dest, val, len);
break;
case CPU::x86SIMDType::SIMD_SSE2:
return memset_sse2(dest, val, len);
break;
case CPU::x86SIMDType::SIMD_SSE3:
return memset_sse3(dest, val, len);
break;
case CPU::x86SIMDType::SIMD_SSSE3:
return memset_ssse3(dest, val, len);
break;
case CPU::x86SIMDType::SIMD_SSE41:
return memset_sse4_1(dest, val, len);
break;
case CPU::x86SIMDType::SIMD_SSE42:
return memset_sse4_2(dest, val, len);
break;
default:
return memset_unsafe(dest, val, len);
break;
}
return ret;
}
EXTERNC __no_stack_protector void *__memmove_chk(void *dest, const void *src, size_t len, size_t slen)
@ -787,6 +793,31 @@ EXTERNC __no_stack_protector void *__memmove_chk(void *dest, const void *src, si
if (unlikely(len > slen))
__chk_fail();
void *ret = nullptr;
switch (CPU::CheckSIMD())
{
case CPU::x86SIMDType::SIMD_SSE:
ret = memmove_sse(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE2:
ret = memmove_sse2(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE3:
ret = memmove_sse3(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSSE3:
ret = memmove_ssse3(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE41:
ret = memmove_sse4_1(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE42:
ret = memmove_sse4_2(dest, src, len);
break;
default:
ret = memmove_unsafe(dest, src, len);
break;
}
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -794,7 +825,9 @@ EXTERNC __no_stack_protector void *__memmove_chk(void *dest, const void *src, si
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "memmove( %p %p %ld %ld )=%p-%p>%p-%p~%p\n\r", dest, src, len, slen, dest, (void *)((uintptr_t)dest + len), src, (void *)((uintptr_t)src + len), __builtin_return_address(0));
sprintf(mExtTrkLog, "memmove( %p %p %ld %ld )=%p~%p\n\r",
dest, src, len, slen,
ret, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -805,31 +838,7 @@ EXTERNC __no_stack_protector void *__memmove_chk(void *dest, const void *src, si
mExtTrkLock.Unlock();
}
#endif
switch (CPU::CheckSIMD())
{
case CPU::x86SIMDType::SIMD_SSE:
return memmove_sse(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE2:
return memmove_sse2(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE3:
return memmove_sse3(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSSE3:
return memmove_ssse3(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE41:
return memmove_sse4_1(dest, src, len);
break;
case CPU::x86SIMDType::SIMD_SSE42:
return memmove_sse4_2(dest, src, len);
break;
default:
return memmove_unsafe(dest, src, len);
break;
}
return ret;
}
EXTERNC __no_stack_protector char *__strcat_chk(char *dest, const char *src, size_t slen)
@ -895,6 +904,7 @@ EXTERNC __no_stack_protector char *__strcpy_chk(char *dest, const char *src, siz
#undef memcpy
EXTERNC __no_stack_protector void *memcpy(void *dest, const void *src, size_t len)
{
void *ret = __memcpy_chk(dest, src, len, __builtin_object_size(dest, 0));
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -902,7 +912,9 @@ EXTERNC __no_stack_protector void *memcpy(void *dest, const void *src, size_t le
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "!memcpy( %p %p %ld )=%p-%p>%p-%p~%p\n\r", dest, src, len, dest, (void *)((uintptr_t)dest + len), src, (void *)((uintptr_t)src + len), __builtin_return_address(0));
sprintf(mExtTrkLog, "!memcpy( %p %p %ld )=%p~%p\n\r",
dest, src, len,
ret, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -913,13 +925,13 @@ EXTERNC __no_stack_protector void *memcpy(void *dest, const void *src, size_t le
mExtTrkLock.Unlock();
}
#endif
return __memcpy_chk(dest, src, len, __builtin_object_size(dest, 0));
return ret;
}
#undef memset
EXTERNC __no_stack_protector void *memset(void *dest, int val, size_t len)
{
void *ret = __memset_chk(dest, val, len, __builtin_object_size(dest, 0));
#ifdef DEBUG
if (EnableExternalMemoryTracer)
{
@ -927,7 +939,9 @@ EXTERNC __no_stack_protector void *memset(void *dest, int val, size_t len)
strcpy_unsafe(LockTmpStr, __FUNCTION__);
strcat_unsafe(LockTmpStr, "_memTrk");
mExtTrkLock.TimeoutLock(LockTmpStr, 10000);
sprintf(mExtTrkLog, "!memset( %p %d %ld )=%p-%p~%p\n\r", dest, val, len, dest, (void *)((uintptr_t)dest + len), __builtin_return_address(0));
sprintf(mExtTrkLog, "!memset( %p %d %ld )=%p~%p\n\r",
dest, val, len,
ret, __builtin_return_address(0));
UniversalAsynchronousReceiverTransmitter::UART mTrkUART = UniversalAsynchronousReceiverTransmitter::UART(UniversalAsynchronousReceiverTransmitter::COM3);
for (short i = 0; i < MEM_TRK_MAX_SIZE; i++)
{
@ -938,6 +952,5 @@ EXTERNC __no_stack_protector void *memset(void *dest, int val, size_t len)
mExtTrkLock.Unlock();
}
#endif
return __memset_chk(dest, val, len, __builtin_object_size(dest, 0));
return ret;
}