Skip to content
Snippets Groups Projects
Commit 852d4dbd authored by Simon Glass's avatar Simon Glass Committed by Tom Rini
Browse files

trace: Detect an infinite loop


If something is wrong with a board's timer function such that it calls
functions not marked with notrace, U-Boot will hang.

Detect this, print a message and disable the trace.

Signed-off-by: Simon Glass's avatarSimon Glass <sjg@chromium.org>
parent 80f91558
No related branches found
No related tags found
No related merge requests found
...@@ -39,6 +39,7 @@ struct trace_hdr { ...@@ -39,6 +39,7 @@ struct trace_hdr {
int depth_limit; /* Depth limit to trace to */ int depth_limit; /* Depth limit to trace to */
int max_depth; /* Maximum depth seen so far */ int max_depth; /* Maximum depth seen so far */
int min_depth; /* Minimum depth seen so far */ int min_depth; /* Minimum depth seen so far */
bool trace_locked; /* Used to detect recursive tracing */
}; };
/* Pointer to start of trace buffer */ /* Pointer to start of trace buffer */
...@@ -133,6 +134,14 @@ void notrace __cyg_profile_func_enter(void *func_ptr, void *caller) ...@@ -133,6 +134,14 @@ void notrace __cyg_profile_func_enter(void *func_ptr, void *caller)
if (trace_enabled) { if (trace_enabled) {
int func; int func;
if (hdr->trace_locked) {
trace_enabled = 0;
puts("trace: recursion detected, disabling\n");
hdr->trace_locked = false;
return;
}
hdr->trace_locked = true;
trace_swap_gd(); trace_swap_gd();
add_ftrace(func_ptr, caller, FUNCF_ENTRY); add_ftrace(func_ptr, caller, FUNCF_ENTRY);
func = func_ptr_to_num(func_ptr); func = func_ptr_to_num(func_ptr);
...@@ -146,6 +155,7 @@ void notrace __cyg_profile_func_enter(void *func_ptr, void *caller) ...@@ -146,6 +155,7 @@ void notrace __cyg_profile_func_enter(void *func_ptr, void *caller)
if (hdr->depth > hdr->max_depth) if (hdr->depth > hdr->max_depth)
hdr->max_depth = hdr->depth; hdr->max_depth = hdr->depth;
trace_swap_gd(); trace_swap_gd();
hdr->trace_locked = false;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment