1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2026-01-09 03:53:26 +00:00

Added tracker

This commit is contained in:
Bryan Roe
2021-01-23 00:44:52 -08:00
parent 9bb81b946a
commit 4be310f809
4 changed files with 59 additions and 2 deletions

View File

@@ -562,6 +562,10 @@ ifeq ($(FIPS),1)
CFLAGS += -DFIPSMODE CFLAGS += -DFIPSMODE
endif endif
ifeq ($(MEMTRACK),1)
CFLAGS += -DILIBMEMTRACK
endif
GCCTEST := $(shell $(CC) meshcore/dummy.c -o /dev/null -no-pie > /dev/null 2>&1 ; echo $$? ) GCCTEST := $(shell $(CC) meshcore/dummy.c -o /dev/null -no-pie > /dev/null 2>&1 ; echo $$? )
ifeq ($(GCCTEST),0) ifeq ($(GCCTEST),0)
LDFLAGS += -no-pie LDFLAGS += -no-pie

View File

@@ -3113,6 +3113,17 @@ duk_ret_t ILibDuktape_Polyfills_MSH(duk_context *ctx)
duk_pop(ctx); // [msh] duk_pop(ctx); // [msh]
return(1); return(1);
} }
#if defined(ILIBMEMTRACK) && !defined(ILIBCHAIN_GLOBAL_LOCK)
extern size_t ILib_NativeAllocSize;
extern ILibSpinLock ILib_MemoryTrackLock;
duk_ret_t ILibDuktape_Polyfills_NativeAllocSize(duk_context *ctx)
{
ILibSpinLock_Lock(&ILib_MemoryTrackLock);
duk_push_uint(ctx, ILib_NativeAllocSize);
ILibSpinLock_UnLock(&ILib_MemoryTrackLock);
return(1);
}
#endif
void ILibDuktape_Polyfills_Init(duk_context *ctx) void ILibDuktape_Polyfills_Init(duk_context *ctx)
{ {
@@ -3160,6 +3171,9 @@ void ILibDuktape_Polyfills_Init(duk_context *ctx)
ILibDuktape_CreateInstanceMethod(ctx, "_ipv4From", ILibDuktape_Polyfills_ipv4From, 1); ILibDuktape_CreateInstanceMethod(ctx, "_ipv4From", ILibDuktape_Polyfills_ipv4From, 1);
ILibDuktape_CreateInstanceMethod(ctx, "_isBuffer", ILibDuktape_Polyfills_isBuffer, 1); ILibDuktape_CreateInstanceMethod(ctx, "_isBuffer", ILibDuktape_Polyfills_isBuffer, 1);
ILibDuktape_CreateInstanceMethod(ctx, "_MSH", ILibDuktape_Polyfills_MSH, 0); ILibDuktape_CreateInstanceMethod(ctx, "_MSH", ILibDuktape_Polyfills_MSH, 0);
#if defined(ILIBMEMTRACK) && !defined(ILIBCHAIN_GLOBAL_LOCK)
ILibDuktape_CreateInstanceMethod(ctx, "_NativeAllocSize", ILibDuktape_Polyfills_NativeAllocSize, 0);
#endif
#ifndef MICROSTACK_NOTLS #ifndef MICROSTACK_NOTLS
ILibDuktape_CreateInstanceMethod(ctx, "crc32c", ILibDuktape_Polyfills_crc32c, DUK_VARARGS); ILibDuktape_CreateInstanceMethod(ctx, "crc32c", ILibDuktape_Polyfills_crc32c, DUK_VARARGS);

View File

@@ -997,6 +997,18 @@ typedef struct ILibBaseChain
int lastDescriptorCount; int lastDescriptorCount;
}ILibBaseChain; }ILibBaseChain;
#if defined(ILIBMEMTRACK) && !defined(ILIBCHAIN_GLOBAL_LOCK)
size_t ILib_NativeAllocSize = 0;
ILibSpinLock ILib_MemoryTrackLock = 0;
void* ILibMemory_InitEx(void *ptr, size_t primarySize, size_t extraSize, ILibMemory_Types memType)
{
ILibSpinLock_Lock(&ILib_MemoryTrackLock);
ILib_NativeAllocSize += (primarySize + extraSize);
ILibSpinLock_UnLock(&ILib_MemoryTrackLock);
return(ILibMemory_Init(ptr, primarySize, extraSize, memType));
}
#endif
void* ILibMemory_AllocateA_Init(void *buffer) void* ILibMemory_AllocateA_Init(void *buffer)
{ {
@@ -1031,6 +1043,19 @@ void* ILibMemory_SmartReAllocate(void *ptr, size_t len)
memmove_s(ILibMemory_Extra(ret) - sizeof(ILibMemory_Header) + offset, originalExtraSize + sizeof(ILibMemory_Header), ILibMemory_Extra(ret) - sizeof(ILibMemory_Header), originalExtraSize + sizeof(ILibMemory_Header)); memmove_s(ILibMemory_Extra(ret) - sizeof(ILibMemory_Header) + offset, originalExtraSize + sizeof(ILibMemory_Header), ILibMemory_Extra(ret) - sizeof(ILibMemory_Header), originalExtraSize + sizeof(ILibMemory_Header));
} }
#if defined(ILIBMEMTRACK) && !defined(ILIBCHAIN_GLOBAL_LOCK)
ILibSpinLock_Lock(&ILib_MemoryTrackLock);
if (newRawSize > originalRawSize)
{
ILib_NativeAllocSize += (newRawSize - originalRawSize);
}
else
{
ILib_NativeAllocSize -= (originalRawSize - newRawSize);
}
ILibSpinLock_UnLock(&ILib_MemoryTrackLock);
#endif
ILibMemory_Size(ret) = len; ILibMemory_Size(ret) = len;
return(ret); return(ret);
} }
@@ -1076,6 +1101,7 @@ void* ILibMemory_Init(void *ptr, size_t primarySize, size_t extraSize, ILibMemor
return(primary); return(primary);
} }
void ILibMemory_SecureZero(void *ptr, size_t len) void ILibMemory_SecureZero(void *ptr, size_t len)
{ {
#if !defined(MICROSTACK_NOTLS) #if !defined(MICROSTACK_NOTLS)
@@ -1102,6 +1128,12 @@ void ILibMemory_Free(void *ptr)
{ {
if (ILibMemory_CanaryOK(ptr) && ILibMemory_MemType(ptr) == ILibMemory_Types_HEAP) if (ILibMemory_CanaryOK(ptr) && ILibMemory_MemType(ptr) == ILibMemory_Types_HEAP)
{ {
#if defined(ILIBMEMTRACK) && !defined(ILIBCHAIN_GLOBAL_LOCK)
ILibSpinLock_Lock(&ILib_MemoryTrackLock);
ILib_NativeAllocSize -= (ILibMemory_Size(ptr) + ILibMemory_ExtraSize(ptr));
ILibSpinLock_UnLock(&ILib_MemoryTrackLock);
#endif
if (ILibMemory_ExtraSize(ptr) > 0) if (ILibMemory_ExtraSize(ptr) > 0)
{ {
ILibMemory_SecureZero(ILibMemory_RawPtr(ILibMemory_Extra(ptr)), sizeof(ILibMemory_Header)); ILibMemory_SecureZero(ILibMemory_RawPtr(ILibMemory_Extra(ptr)), sizeof(ILibMemory_Header));

View File

@@ -450,6 +450,13 @@ int ILibIsRunningOnChainThread(void* chain);
ILibMemory_Types memoryType; ILibMemory_Types memoryType;
}ILibMemory_Header; }ILibMemory_Header;
#if defined(ILIBMEMTRACK) && !defined(ILIBCHAIN_GLOBAL_LOCK)
void* ILibMemory_InitEx(void *ptr, size_t primarySize, size_t extraSize, ILibMemory_Types memType);
#else
#define ILibMemory_InitEx(ptr, primarySize, extraSize, memType) ILibMemory_Init(ptr, primarySize, extraSize, memType)
#endif
#define ILibChain_Link_SetMetadata(chainLink, value) if((chainLink)!=NULL) { ILibMemory_Free(((ILibChain_Link*)chainLink)->MetaData); ((ILibChain_Link*)chainLink)->MetaData = value; } #define ILibChain_Link_SetMetadata(chainLink, value) if((chainLink)!=NULL) { ILibMemory_Free(((ILibChain_Link*)chainLink)->MetaData); ((ILibChain_Link*)chainLink)->MetaData = value; }
#define ILibChain_Link_GetMetadata(chainLink) ((chainLink)==NULL?"":(((ILibChain_Link*)chainLink)->MetaData)) #define ILibChain_Link_GetMetadata(chainLink) ((chainLink)==NULL?"":(((ILibChain_Link*)chainLink)->MetaData))
#define ILibMemory_Canary (((int*)((char*)(const char*)"broe"))[0]) #define ILibMemory_Canary (((int*)((char*)(const char*)"broe"))[0])
@@ -471,8 +478,8 @@ int ILibIsRunningOnChainThread(void* chain);
#define ILibMemory_Size_Validate(primaryLen, extraLen) (((size_t)(primaryLen)<(UINT32_MAX - (size_t)(extraLen)))&&((size_t)(extraLen)<(UINT32_MAX-(size_t)(primaryLen)))&&((size_t)((primaryLen) + (extraLen))<(UINT32_MAX - sizeof(ILibMemory_Header)))&&((extraLen)==0 || ((size_t)((primaryLen)+(extraLen)+sizeof(ILibMemory_Header))<(UINT32_MAX-sizeof(ILibMemory_Header))))) #define ILibMemory_Size_Validate(primaryLen, extraLen) (((size_t)(primaryLen)<(UINT32_MAX - (size_t)(extraLen)))&&((size_t)(extraLen)<(UINT32_MAX-(size_t)(primaryLen)))&&((size_t)((primaryLen) + (extraLen))<(UINT32_MAX - sizeof(ILibMemory_Header)))&&((extraLen)==0 || ((size_t)((primaryLen)+(extraLen)+sizeof(ILibMemory_Header))<(UINT32_MAX-sizeof(ILibMemory_Header)))))
#define ILibMemory_Init_Size(primaryLen, extraLen) (primaryLen + extraLen + sizeof(ILibMemory_Header) + (extraLen>0?sizeof(ILibMemory_Header):0)) #define ILibMemory_Init_Size(primaryLen, extraLen) (primaryLen + extraLen + sizeof(ILibMemory_Header) + (extraLen>0?sizeof(ILibMemory_Header):0))
void* ILibMemory_Init(void *ptr, size_t primarySize, size_t extraSize, ILibMemory_Types memType); void* ILibMemory_Init(void *ptr, size_t primarySize, size_t extraSize, ILibMemory_Types memType);
#define ILibMemory_SmartAllocate(len) ILibMemory_Init(ILibMemory_Size_Validate(len,0)?malloc(ILibMemory_Init_Size(len, 0)):NULL, (int)len, 0, ILibMemory_Types_HEAP) #define ILibMemory_SmartAllocate(len) ILibMemory_InitEx(ILibMemory_Size_Validate(len,0)?malloc(ILibMemory_Init_Size(len, 0)):NULL, (int)len, 0, ILibMemory_Types_HEAP)
#define ILibMemory_SmartAllocateEx(primaryLen, extraLen) ILibMemory_Init(ILibMemory_Size_Validate(primaryLen,extraLen)?malloc(ILibMemory_Init_Size(primaryLen, extraLen)):NULL, (int)primaryLen, (int)extraLen, ILibMemory_Types_HEAP) #define ILibMemory_SmartAllocateEx(primaryLen, extraLen) ILibMemory_InitEx(ILibMemory_Size_Validate(primaryLen,extraLen)?malloc(ILibMemory_Init_Size(primaryLen, extraLen)):NULL, (int)primaryLen, (int)extraLen, ILibMemory_Types_HEAP)
void* ILibMemory_SmartReAllocate(void *ptr, size_t len); void* ILibMemory_SmartReAllocate(void *ptr, size_t len);
void* ILibMemory_SmartAllocateEx_ResizeExtra(void *ptr, size_t extraSize); void* ILibMemory_SmartAllocateEx_ResizeExtra(void *ptr, size_t extraSize);