@@ -81,12 +81,18 @@ extern "C" {
81
81
void * __real__realloc_r (struct _reent * r, void * ptr, size_t size);
82
82
void __real__free_r (struct _reent * r, void * ptr);
83
83
void * __real__calloc_r (struct _reent * r, size_t nmemb, size_t size);
84
+ void * malloc_wrapper (struct _reent * r, size_t size, void * caller);
85
+ void free_wrapper (struct _reent * r, void * ptr, void * caller);
84
86
}
85
87
86
88
// TODO: memory tracing doesn't work with uVisor enabled.
87
89
#if !defined(FEATURE_UVISOR)
88
90
89
91
extern " C" void * __wrap__malloc_r (struct _reent * r, size_t size) {
92
+ return malloc_wrapper (r, size, MBED_CALLER_ADDR ());
93
+ }
94
+
95
+ extern " C" void * malloc_wrapper (struct _reent * r, size_t size, void * caller) {
90
96
void *ptr = NULL ;
91
97
#ifdef MBED_MEM_TRACING_ENABLED
92
98
mbed_mem_trace_lock ();
@@ -111,7 +117,7 @@ extern "C" void * __wrap__malloc_r(struct _reent * r, size_t size) {
111
117
ptr = __real__malloc_r (r, size);
112
118
#endif // #ifdef MBED_HEAP_STATS_ENABLED
113
119
#ifdef MBED_MEM_TRACING_ENABLED
114
- mbed_mem_trace_malloc (ptr, size, MBED_CALLER_ADDR () );
120
+ mbed_mem_trace_malloc (ptr, size, caller );
115
121
mbed_mem_trace_unlock ();
116
122
#endif // #ifdef MBED_MEM_TRACING_ENABLED
117
123
return ptr;
@@ -160,6 +166,10 @@ extern "C" void * __wrap__realloc_r(struct _reent * r, void * ptr, size_t size)
160
166
}
161
167
162
168
extern " C" void __wrap__free_r (struct _reent * r, void * ptr) {
169
+ free_wrapper (r, ptr, MBED_CALLER_ADDR ());
170
+ }
171
+
172
+ extern " C" void free_wrapper (struct _reent * r, void * ptr, void * caller) {
163
173
#ifdef MBED_MEM_TRACING_ENABLED
164
174
mbed_mem_trace_lock ();
165
175
#endif
@@ -177,7 +187,7 @@ extern "C" void __wrap__free_r(struct _reent * r, void * ptr) {
177
187
__real__free_r (r, ptr);
178
188
#endif // #ifdef MBED_HEAP_STATS_ENABLED
179
189
#ifdef MBED_MEM_TRACING_ENABLED
180
- mbed_mem_trace_free (ptr, MBED_CALLER_ADDR () );
190
+ mbed_mem_trace_free (ptr, caller );
181
191
mbed_mem_trace_unlock ();
182
192
#endif // #ifdef MBED_MEM_TRACING_ENABLED
183
193
}
@@ -245,9 +255,16 @@ extern "C" {
245
255
void *SUPER_REALLOC (void *ptr, size_t size);
246
256
void *SUPER_CALLOC (size_t nmemb, size_t size);
247
257
void SUPER_FREE (void *ptr);
258
+ void *malloc_wrapper (size_t size, void * caller);
259
+ void free_wrapper (void *ptr, void * caller);
248
260
}
249
261
262
+
250
263
extern " C" void * SUB_MALLOC (size_t size) {
264
+ return malloc_wrapper (size, MBED_CALLER_ADDR ());
265
+ }
266
+
267
+ extern " C" void * malloc_wrapper (size_t size, void * caller) {
251
268
void *ptr = NULL ;
252
269
#ifdef MBED_MEM_TRACING_ENABLED
253
270
mbed_mem_trace_lock ();
@@ -272,12 +289,13 @@ extern "C" void* SUB_MALLOC(size_t size) {
272
289
ptr = SUPER_MALLOC (size);
273
290
#endif // #ifdef MBED_HEAP_STATS_ENABLED
274
291
#ifdef MBED_MEM_TRACING_ENABLED
275
- mbed_mem_trace_malloc (ptr, size, MBED_CALLER_ADDR () );
292
+ mbed_mem_trace_malloc (ptr, size, caller );
276
293
mbed_mem_trace_unlock ();
277
294
#endif // #ifdef MBED_MEM_TRACING_ENABLED
278
295
return ptr;
279
296
}
280
297
298
+
281
299
extern " C" void * SUB_REALLOC (void *ptr, size_t size) {
282
300
void *new_ptr = NULL ;
283
301
#ifdef MBED_MEM_TRACING_ENABLED
@@ -337,6 +355,10 @@ extern "C" void *SUB_CALLOC(size_t nmemb, size_t size) {
337
355
}
338
356
339
357
extern " C" void SUB_FREE (void *ptr) {
358
+ free_wrapper (ptr, MBED_CALLER_ADDR ());
359
+ }
360
+
361
+ extern " C" void free_wrapper (void *ptr, void * caller) {
340
362
#ifdef MBED_MEM_TRACING_ENABLED
341
363
mbed_mem_trace_lock ();
342
364
#endif
@@ -354,7 +376,7 @@ extern "C" void SUB_FREE(void *ptr) {
354
376
SUPER_FREE (ptr);
355
377
#endif // #ifdef MBED_HEAP_STATS_ENABLED
356
378
#ifdef MBED_MEM_TRACING_ENABLED
357
- mbed_mem_trace_free (ptr, MBED_CALLER_ADDR () );
379
+ mbed_mem_trace_free (ptr, caller );
358
380
mbed_mem_trace_unlock ();
359
381
#endif // #ifdef MBED_MEM_TRACING_ENABLED
360
382
}
0 commit comments