diff --git a/Core/Memory/Memory.cpp b/Core/Memory/Memory.cpp index fd40897..968072e 100644 --- a/Core/Memory/Memory.cpp +++ b/Core/Memory/Memory.cpp @@ -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); } diff --git a/Core/Memory/PhysicalMemoryManager.cpp b/Core/Memory/PhysicalMemoryManager.cpp index bdbc312..0da3ab1 100644 --- a/Core/Memory/PhysicalMemoryManager.cpp +++ b/Core/Memory/PhysicalMemoryManager.cpp @@ -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++) { diff --git a/Library/Convert.cpp b/Library/Convert.cpp index abf71e7..2faccc9 100644 --- a/Library/Convert.cpp +++ b/Library/Convert.cpp @@ -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; }