File indexing completed on 2025-05-11 08:22:58
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "fsl_common.h"
0010
0011 #define SDK_MEM_MAGIC_NUMBER 12345U
0012
0013 typedef struct _mem_align_control_block
0014 {
0015 uint16_t identifier;
0016 uint16_t offset;
0017 } mem_align_cb_t;
0018
0019
0020 #ifndef FSL_COMPONENT_ID
0021 #define FSL_COMPONENT_ID "platform.drivers.common"
0022 #endif
0023
0024 #if !((defined(__DSC__) && defined(__CW__)))
0025 void *SDK_Malloc(size_t size, size_t alignbytes)
0026 {
0027 mem_align_cb_t *p_cb = NULL;
0028 uint32_t alignedsize;
0029
0030
0031 alignedsize = (uint32_t)(unsigned int)SDK_SIZEALIGN(size, alignbytes);
0032 if (alignedsize < size)
0033 {
0034 return NULL;
0035 }
0036
0037 if (alignedsize > SIZE_MAX - alignbytes - sizeof(mem_align_cb_t))
0038 {
0039 return NULL;
0040 }
0041
0042 alignedsize += alignbytes + (uint32_t)sizeof(mem_align_cb_t);
0043
0044 union
0045 {
0046 void *pointer_value;
0047 uintptr_t unsigned_value;
0048 } p_align_addr, p_addr;
0049
0050 p_addr.pointer_value = malloc((size_t)alignedsize);
0051
0052 if (p_addr.pointer_value == NULL)
0053 {
0054 return NULL;
0055 }
0056
0057 p_align_addr.unsigned_value = SDK_SIZEALIGN(p_addr.unsigned_value + sizeof(mem_align_cb_t), alignbytes);
0058
0059 p_cb = (mem_align_cb_t *)(p_align_addr.unsigned_value - 4U);
0060 p_cb->identifier = SDK_MEM_MAGIC_NUMBER;
0061 p_cb->offset = (uint16_t)(p_align_addr.unsigned_value - p_addr.unsigned_value);
0062
0063 return p_align_addr.pointer_value;
0064 }
0065
0066 void SDK_Free(void *ptr)
0067 {
0068 union
0069 {
0070 void *pointer_value;
0071 uintptr_t unsigned_value;
0072 } p_free;
0073
0074 p_free.pointer_value = ptr;
0075 mem_align_cb_t *p_cb = (mem_align_cb_t *)(p_free.unsigned_value - 4U);
0076
0077 if (p_cb->identifier != SDK_MEM_MAGIC_NUMBER)
0078 {
0079 return;
0080 }
0081
0082 p_free.unsigned_value = p_free.unsigned_value - p_cb->offset;
0083
0084 free(p_free.pointer_value);
0085 }
0086 #endif