@@ -29,9 +29,12 @@ static struct k_thread *s_task_tcbs[CONFIG_MEMFAULT_COREDUMP_MAX_TRACKED_TASKS];
2929 "Only full-descending stacks are supported by this implementation. Please contact
[email protected] ."
3030#endif
3131
32+ #if defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE )
3233static struct MfltTaskWatermarks {
3334 uint32_t high_watermark ;
3435} s_task_watermarks [CONFIG_MEMFAULT_COREDUMP_MAX_TRACKED_TASKS ];
36+ #endif // defined(CONFIG_MEMFAULT_COMPUTE_STACK_HIGHWATER_ON_DEVICE)
37+
3538#endif
3639
3740#define EMPTY_SLOT 0
@@ -105,6 +108,7 @@ size_t memfault_platform_sanitize_address_range(void *start_addr, size_t desired
105108 return 0 ;
106109}
107110
111+ #if defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE )
108112//! Compute the high watermark of a task's stack. This is the amount of stack
109113//! that has been written to since the task was created.
110114static ssize_t prv_stack_bytes_unused (uintptr_t stack_start , size_t stack_size ) {
@@ -119,14 +123,15 @@ static ssize_t prv_stack_bytes_unused(uintptr_t stack_start, size_t stack_size)
119123 // looking for the first address that contains something other than the stack
120124 // painting pattern, 0xAA.
121125 const uint8_t * stack_max = (const uint8_t * )stack_start ;
122- const uint8_t * const stack_bottom = (const uint8_t * const )(stack_start + stack_size );
126+ const uint8_t * const stack_bottom = (const uint8_t * const )(stack_start + stack_size );
123127
124128 for (; (stack_max < stack_bottom ) && (* stack_max == 0xAA ); stack_max ++ ) {
125129 }
126130
127131 // return the "bytes unused" count for the stack
128132 return (uintptr_t )stack_max - stack_start ;
129133}
134+ #endif // defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
130135
131136size_t memfault_zephyr_get_task_regions (sMfltCoredumpRegion * regions , size_t num_regions ) {
132137 if (regions == NULL || num_regions == 0 ) {
@@ -174,10 +179,10 @@ size_t memfault_zephyr_get_task_regions(sMfltCoredumpRegion *regions, size_t num
174179 // when collecting partial stacks, thread context is only valid when task
175180 // is _not_ running so we skip collecting it. just update the watermark
176181 // for the thread
177- #if CONFIG_THREAD_STACK_INFO
182+ #if defined( CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE )
178183 s_task_watermarks [i ].high_watermark =
179184 prv_stack_bytes_unused (thread -> stack_info .start , thread -> stack_info .size );
180- #endif
185+ #endif // defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
181186 continue ;
182187 }
183188#endif
@@ -207,21 +212,21 @@ size_t memfault_zephyr_get_task_regions(sMfltCoredumpRegion *regions, size_t num
207212 continue ;
208213 }
209214
210- #if defined(CONFIG_THREAD_STACK_INFO )
215+ #if defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE )
211216 // compute high watermarks for each task
212217 s_task_watermarks [i ].high_watermark =
213218 prv_stack_bytes_unused (thread -> stack_info .start , thread -> stack_info .size );
214- #endif
219+ #endif // defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
215220
216221 regions [region_idx ] = MEMFAULT_COREDUMP_MEMORY_REGION_INIT (sp , stack_size_to_collect );
217222 region_idx ++ ;
218223 }
219224
220- #if defined(CONFIG_THREAD_STACK_INFO )
225+ #if defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE )
221226 regions [region_idx ] =
222227 MEMFAULT_COREDUMP_MEMORY_REGION_INIT (s_task_watermarks , sizeof (s_task_watermarks ));
223228 region_idx ++ ;
224- #endif
229+ #endif // defined(CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE)
225230
226231 regions [region_idx ] = MEMFAULT_COREDUMP_MEMORY_REGION_INIT (s_task_tcbs , sizeof (s_task_tcbs ));
227232 region_idx ++ ;
0 commit comments