// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md // // Created by mati on 08.05.19. // #include #include #include #include #include "memory/usermem.h" void free(void *pv) { #if PROJECT_CONFIG_MEM_LEAKS_CHECKS == 1 uint32_t caller = (uint32_t)__builtin_return_address (0); memleaks_log_free((uint32_t)pv,caller); #endif return userfree(pv); } void *malloc(size_t xWantedSize) { void * ptr = usermalloc(xWantedSize); #if PROJECT_CONFIG_MEM_LEAKS_CHECKS == 1 uint32_t caller = (uint32_t)__builtin_return_address (0); memleaks_log_malloc((uint32_t)ptr,(uint32_t)caller,xWantedSize); #endif return ptr; } void* _malloc_r (struct _reent *r, size_t sz) { void * ptr = usermalloc(sz); #if PROJECT_CONFIG_MEM_LEAKS_CHECKS == 1 uint32_t caller = (uint32_t)__builtin_return_address (0); memleaks_log_malloc((uint32_t)ptr,(uint32_t)caller,sz); #endif return ptr; } void* calloc (size_t num, size_t size) { size_t total = num * size; void * p = usermalloc(total); #if PROJECT_CONFIG_MEM_LEAKS_CHECKS == 1 uint32_t caller = (uint32_t)__builtin_return_address (0); memleaks_log_malloc((uint32_t)p,(uint32_t)caller,total); #endif if (!p) return NULL; return memset(p, 0, total); } void *realloc(void *aptr, size_t nbytes) { return userrealloc(aptr, nbytes); } void* _calloc_r (struct _reent *r, size_t a, size_t b) { size_t total = a * b; void * p = usermalloc(total); #if PROJECT_CONFIG_MEM_LEAKS_CHECKS == 1 uint32_t caller = (uint32_t)__builtin_return_address (0); memleaks_log_malloc((uint32_t)p,(uint32_t)caller,total); #endif if (!p) return NULL; return memset(p, 0, total); } void _free_r (struct _reent *r, void* x) { #if PROJECT_CONFIG_MEM_LEAKS_CHECKS == 1 uint32_t caller = (uint32_t)__builtin_return_address (0); memleaks_log_free((uint32_t)x,caller); #endif return userfree(x); } void* _realloc_r (struct _reent *r, void* x, size_t sz) { return realloc(x, sz); } void _putchar(char character) { // Use of printf is banned }