add debug callback function example

pull/449/head
JacobBarthelmeh 2024-08-06 17:02:58 -06:00
parent af4a6494a7
commit 0594daf982
2 changed files with 92 additions and 5 deletions

View File

@ -19,11 +19,6 @@ CFLAGS+=$(OPTIMIZE)
#LIBS+=$(STATIC_LIB)
LIBS+=$(DYN_LIB)
ifneq ($(PSA),)
LIBS+=$(PSA_LIB)
CFLAGS+=-DUSE_PSA
endif
# build targets
SRC=$(wildcard *.c)
TARGETS=$(patsubst %.c, %, $(SRC))

View File

@ -0,0 +1,92 @@
#include <stdio.h>
#include <stdlib.h>
#include <wolfssl/options.h>
#include <wolfssl/wolfcrypt/wc_port.h>
#include <wolfssl/wolfcrypt/memory.h>
#ifndef WOLFSSL_STATIC_MEMORY
#error requires --enable-staticmemory
#endif
#ifdef WOLFSSL_STATIC_MEMORY_DEBUG_CALLBACK
static void MemoryDebug(size_t reqSz, int buckSz, byte memAction, int heapType)
{
switch (memAction) {
case WOLFSSL_DEBUG_MEMORY_ALLOC:
printf("Malloc request of %zu bytes using bucket size of %d and heap"
" type of %d\n", reqSz, buckSz, heapType);
break;
case WOLFSSL_DEBUG_MEMORY_FAIL:
printf("Failed on malloc request of %zu bytes\n", reqSz);
break;
case WOLFSSL_DEBUG_MEMORY_FREE:
#ifdef WOLFSSL_DEBUG_MEMORY
printf("Free'ing %zu bytes, bucket size used was %d bytes\n",
reqSz, buckSz);
#else
printf("Free'ing bucket size %d bytes\n", buckSz);
#endif
break;
case WOLFSSL_DEBUG_MEMORY_INIT:
printf("Creating bucket of size %d\n", buckSz);
break;
}
}
int main(int argc, char** argv)
{
int padSz;
const unsigned int dist[4] = {1, 1, 2, 1};
const unsigned int buck[4] = {10, 15, 20, 25};
byte* buf;
byte* testPtr[5];
int totalMem;
int i;
WOLFSSL_HEAP_HINT* heapHint = NULL;
wolfCrypt_Init();
wolfSSL_SetDebugMemoryCb(MemoryDebug);
/* get padding size per bucket */
padSz = wolfSSL_MemoryPaddingSz();
totalMem = (padSz * 5) + buck[0] + buck[1] + buck[2] + buck[2] + buck[3]
+ sizeof(WOLFSSL_HEAP) + sizeof(WOLFSSL_HEAP_HINT)
+ (WOLFSSL_STATIC_ALIGN - 1);
buf = (byte*)malloc(totalMem);
/* divide up the buffer into individual buckets and manager */
if (wc_LoadStaticMemory_ex(&heapHint, 4, buck, dist, buf, totalMem, 0,
0) != 0) {
printf("Failed to load up static memory\n");
}
/* test checking out all buckets */
testPtr[0] = XMALLOC(6, heapHint, DYNAMIC_TYPE_HASHES);
testPtr[1] = XMALLOC(2, heapHint, DYNAMIC_TYPE_TMP_BUFFER);
testPtr[2] = XMALLOC(200, heapHint, DYNAMIC_TYPE_LOG);
testPtr[3] = XMALLOC(21, heapHint, DYNAMIC_TYPE_LOG);
testPtr[4] = XMALLOC(1, heapHint, DYNAMIC_TYPE_HMAC);
/* free all buckets back to heap hint manager */
for (i = 0; i < sizeof(testPtr)/sizeof(byte*); i++) {
XFREE(testPtr[i], heapHint, DYNAMIC_TYPE_TMP_BUFFER);
}
free(buf);
wolfCrypt_Cleanup();
return 0;
}
#else
int main(int argc, char** argv)
{
printf("Requires WOLFSSL_STATIC_MEMORY_DEBUG_CALLBACK defined\n");
return 0;
}
#endif