@@ -58,7 +58,10 @@ extern "C" {
58
58
// Debugging helper, last allocation which returned NULL
59
59
void *umm_last_fail_alloc_addr = NULL ;
60
60
int umm_last_fail_alloc_size = 0 ;
61
-
61
+ #if defined(DEBUG_ESP_OOM)
62
+ const char *umm_last_fail_alloc_file = NULL ;
63
+ int umm_last_fail_alloc_line = 0 ;
64
+ #endif
62
65
63
66
#ifdef UMM_INTEGRITY_CHECK
64
67
#define INTEGRITY_CHECK__ABORT () \
@@ -79,18 +82,31 @@ int umm_last_fail_alloc_size = 0;
79
82
80
83
#endif // UMM_INTEGRITY_CHECK
81
84
82
- #define PTR_CHECK__LOG_LAST_FAIL (p, s, a ) \
85
+ #if defined(DEBUG_ESP_OOM)
86
+ #define PTR_CHECK__LOG_LAST_FAIL (p, s, a, f, l ) \
87
+ if (0 != (s) && 0 == p)\
88
+ {\
89
+ umm_last_fail_alloc_addr = a;\
90
+ umm_last_fail_alloc_size = s;\
91
+ umm_last_fail_alloc_file = f;\
92
+ umm_last_fail_alloc_line = l;\
93
+ }
94
+ #else
95
+ #define PTR_CHECK__LOG_LAST_FAIL (p, s, a, f, l ) \
96
+ (void )f;\
97
+ (void )l;\
83
98
if (0 != (s) && 0 == p)\
84
99
{\
85
100
umm_last_fail_alloc_addr = a;\
86
101
umm_last_fail_alloc_size = s;\
87
102
}
103
+ #endif
88
104
89
105
void * _malloc_r (struct _reent * unused, size_t size)
90
106
{
91
107
(void ) unused;
92
108
void *ret = malloc (size);
93
- PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ))
109
+ PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ), NULL , 0 );
94
110
return ret;
95
111
}
96
112
@@ -104,15 +120,15 @@ void* _realloc_r(struct _reent* unused, void* ptr, size_t size)
104
120
{
105
121
(void ) unused;
106
122
void *ret = realloc (ptr, size);
107
- PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ))
123
+ PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ), NULL , 0 );
108
124
return ret;
109
125
}
110
126
111
127
void * _calloc_r (struct _reent * unused, size_t count, size_t size)
112
128
{
113
129
(void ) unused;
114
130
void *ret = calloc (count, size);
115
- PTR_CHECK__LOG_LAST_FAIL (ret, count * size, __builtin_return_address (0 ))
131
+ PTR_CHECK__LOG_LAST_FAIL (ret, count * size, __builtin_return_address (0 ), NULL , 0 );
116
132
return ret;
117
133
}
118
134
@@ -132,7 +148,7 @@ void ICACHE_RAM_ATTR print_loc(size_t size, const char* file, int line)
132
148
133
149
bool inISR = ETS_INTR_WITHINISR ();
134
150
if (inISR && (uint32_t )file >= 0x40200000 ) {
135
- DEBUG_HEAP_PRINTF (" %p" , file);
151
+ DEBUG_HEAP_PRINTF (" File: %p" , file);
136
152
} else if (!inISR && (uint32_t )file >= 0x40200000 ) {
137
153
char buf[ets_strlen (file)] __attribute__ ((aligned (4 )));
138
154
ets_strcpy (buf, file);
@@ -176,7 +192,7 @@ void* ICACHE_RAM_ATTR malloc(size_t size)
176
192
INTEGRITY_CHECK__ABORT ();
177
193
POISON_CHECK__ABORT ();
178
194
void * ret = __umm_malloc (size);
179
- PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ));
195
+ PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ), NULL , 0 );
180
196
OOM_CHECK__PRINT_OOM (ret, size);
181
197
return ret;
182
198
}
@@ -186,7 +202,7 @@ void* ICACHE_RAM_ATTR calloc(size_t count, size_t size)
186
202
INTEGRITY_CHECK__ABORT ();
187
203
POISON_CHECK__ABORT ();
188
204
void * ret = __umm_calloc (count, size);
189
- PTR_CHECK__LOG_LAST_FAIL (ret, count * size, __builtin_return_address (0 ));
205
+ PTR_CHECK__LOG_LAST_FAIL (ret, count * size, __builtin_return_address (0 ), NULL , 0 );
190
206
OOM_CHECK__PRINT_OOM (ret, size);
191
207
return ret;
192
208
}
@@ -196,7 +212,7 @@ void* ICACHE_RAM_ATTR realloc(void* ptr, size_t size)
196
212
INTEGRITY_CHECK__ABORT ();
197
213
void * ret = __umm_realloc_fl (ptr, size, NULL , 0 );
198
214
POISON_CHECK__ABORT ();
199
- PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ));
215
+ PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ), NULL , 0 );
200
216
OOM_CHECK__PRINT_OOM (ret, size);
201
217
return ret;
202
218
}
@@ -215,7 +231,7 @@ void* ICACHE_RAM_ATTR pvPortMalloc(size_t size, const char* file, int line)
215
231
INTEGRITY_CHECK__PANIC_FL (file, line);
216
232
POISON_CHECK__PANIC_FL (file, line);
217
233
void * ret = __umm_malloc (size);
218
- PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ));
234
+ PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ), file, line );
219
235
OOM_CHECK__PRINT_LOC (ret, size, file, line);
220
236
return ret;
221
237
}
@@ -225,7 +241,7 @@ void* ICACHE_RAM_ATTR pvPortCalloc(size_t count, size_t size, const char* file,
225
241
INTEGRITY_CHECK__PANIC_FL (file, line);
226
242
POISON_CHECK__PANIC_FL (file, line);
227
243
void * ret = __umm_calloc (count, size);
228
- PTR_CHECK__LOG_LAST_FAIL (ret, count * size, __builtin_return_address (0 ));
244
+ PTR_CHECK__LOG_LAST_FAIL (ret, count * size, __builtin_return_address (0 ), file, line );
229
245
OOM_CHECK__PRINT_LOC (ret, size, file, line);
230
246
return ret;
231
247
}
@@ -235,7 +251,7 @@ void* ICACHE_RAM_ATTR pvPortRealloc(void *ptr, size_t size, const char* file, in
235
251
INTEGRITY_CHECK__PANIC_FL (file, line);
236
252
void * ret = __umm_realloc_fl (ptr, size, file, line);
237
253
POISON_CHECK__PANIC_FL (file, line);
238
- PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ));
254
+ PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ), file, line );
239
255
OOM_CHECK__PRINT_LOC (ret, size, file, line);
240
256
return ret;
241
257
}
@@ -245,7 +261,7 @@ void* ICACHE_RAM_ATTR pvPortZalloc(size_t size, const char* file, int line)
245
261
INTEGRITY_CHECK__PANIC_FL (file, line);
246
262
POISON_CHECK__PANIC_FL (file, line);
247
263
void * ret = __umm_calloc (1 , size);
248
- PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ));
264
+ PTR_CHECK__LOG_LAST_FAIL (ret, size, __builtin_return_address (0 ), file, line );
249
265
OOM_CHECK__PRINT_LOC (ret, size, file, line);
250
266
return ret;
251
267
}
0 commit comments