hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/* SPDX-License-Identifier: BSD-2-Clause */
/*
 * Copyright (c) 2014, STMicroelectronics International N.V.
 */
#ifndef MALLOC_H
#define MALLOC_H
 
#include <stddef.h>
#include <types_ext.h>
 
void free(void *ptr);
 
#ifdef ENABLE_MDBG
 
void *mdbg_malloc(const char *fname, int lineno, size_t size);
void *mdbg_calloc(const char *fname, int lineno, size_t nmemb, size_t size);
void *mdbg_realloc(const char *fname, int lineno, void *ptr, size_t size);
void *mdbg_memalign(const char *fname, int lineno, size_t alignment,
           size_t size);
 
void mdbg_check(int bufdump);
 
#define malloc(size)    mdbg_malloc(__FILE__, __LINE__, (size))
#define calloc(nmemb, size) \
       mdbg_calloc(__FILE__, __LINE__, (nmemb), (size))
#define realloc(ptr, size) \
       mdbg_realloc(__FILE__, __LINE__, (ptr), (size))
#define memalign(alignment, size) \
       mdbg_memalign(__FILE__, __LINE__, (alignment), (size))
 
#else
 
void *malloc(size_t size);
void *calloc(size_t nmemb, size_t size);
void *realloc(void *ptr, size_t size);
void *memalign(size_t alignment, size_t size);
 
#define mdbg_check(x)        do { } while (0)
 
#endif
 
#define _calloc_r(r, s1, s2) calloc (s1, s2)
#define _malloc_r(r, s) malloc (s)
#define _free_r(r, p) free (p)
 
/*
 * Returns true if the supplied memory area is within a buffer
 * previously allocated (and not freed yet).
 *
 * Used internally by TAs
 */
bool malloc_buffer_is_within_alloced(void *buf, size_t len);
 
/*
 * Returns true if the supplied memory area is overlapping the area used
 * for heap.
 *
 * Used internally by TAs
 */
bool malloc_buffer_overlaps_heap(void *buf, size_t len);
 
/*
 * Adds a pool of memory to allocate from.
 */
void malloc_add_pool(void *buf, size_t len);
 
#ifdef CFG_WITH_STATS
/*
 * Get/reset allocation statistics
 */
 
#define TEE_ALLOCATOR_DESC_LENGTH 32
struct malloc_stats {
   char desc[TEE_ALLOCATOR_DESC_LENGTH];
   uint32_t allocated;               /* Bytes currently allocated */
   uint32_t max_allocated;           /* Tracks max value of allocated */
   uint32_t size;                    /* Total size for this allocator */
   uint32_t num_alloc_fail;          /* Number of failed alloc requests */
   uint32_t biggest_alloc_fail;      /* Size of biggest failed alloc */
   uint32_t biggest_alloc_fail_used; /* Alloc bytes when above occurred */
};
 
void malloc_get_stats(struct malloc_stats *stats);
void malloc_reset_stats(void);
#endif /* CFG_WITH_STATS */
 
 
#ifdef CFG_VIRTUALIZATION
 
void nex_free(void *ptr);
 
#ifdef ENABLE_MDBG
 
void *nex_mdbg_malloc(const char *fname, int lineno, size_t size);
void *nex_mdbg_calloc(const char *fname, int lineno, size_t nmemb, size_t size);
void *nex_mdbg_realloc(const char *fname, int lineno, void *ptr, size_t size);
void *nex_mdbg_memalign(const char *fname, int lineno, size_t alignment,
           size_t size);
 
void nex_mdbg_check(int bufdump);
 
#define nex_malloc(size)    nex_mdbg_malloc(__FILE__, __LINE__, (size))
#define nex_calloc(nmemb, size) \
       nex_mdbg_calloc(__FILE__, __LINE__, (nmemb), (size))
#define nex_realloc(ptr, size) \
       nex_mdbg_realloc(__FILE__, __LINE__, (ptr), (size))
#define nex_memalign(alignment, size) \
       nex_mdbg_memalign(__FILE__, __LINE__, (alignment), (size))
 
#else /* ENABLE_MDBG */
 
void *nex_malloc(size_t size);
void *nex_calloc(size_t nmemb, size_t size);
void *nex_realloc(void *ptr, size_t size);
void *nex_memalign(size_t alignment, size_t size);
 
#define nex_mdbg_check(x)        do { } while (0)
 
#endif /* ENABLE_MDBG */
 
bool nex_malloc_buffer_is_within_alloced(void *buf, size_t len);
bool nex_malloc_buffer_overlaps_heap(void *buf, size_t len);
void nex_malloc_add_pool(void *buf, size_t len);
 
#ifdef CFG_WITH_STATS
/*
 * Get/reset allocation statistics
 */
 
void nex_malloc_get_stats(struct malloc_stats *stats);
void nex_malloc_reset_stats(void);
 
#endif    /* CFG_WITH_STATS */
#else  /* CFG_VIRTUALIZATION */
 
#define nex_free(ptr) free(ptr)
#define nex_malloc(size) malloc(size)
#define nex_calloc(nmemb, size) calloc(nmemb, size)
#define nex_realloc(ptr, size) realloc(ptr, size)
#define nex_memalign(alignment, size) memalign(alignment, size)
 
#endif    /* CFG_VIRTUALIZATION */
 
#endif /* MALLOC_H */