|
@@ -7,11 +7,13 @@
|
|
|
|
|
|
unsigned long unwind_get_return_address(struct unwind_state *state)
|
|
|
{
|
|
|
+ unsigned long addr = READ_ONCE_NOCHECK(*state->sp);
|
|
|
+
|
|
|
if (unwind_done(state))
|
|
|
return 0;
|
|
|
|
|
|
return ftrace_graph_ret_addr(state->task, &state->graph_idx,
|
|
|
- *state->sp, state->sp);
|
|
|
+ addr, state->sp);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(unwind_get_return_address);
|
|
|
|
|
@@ -23,8 +25,10 @@ bool unwind_next_frame(struct unwind_state *state)
|
|
|
return false;
|
|
|
|
|
|
do {
|
|
|
+ unsigned long addr = READ_ONCE_NOCHECK(*state->sp);
|
|
|
+
|
|
|
for (state->sp++; state->sp < info->end; state->sp++)
|
|
|
- if (__kernel_text_address(*state->sp))
|
|
|
+ if (__kernel_text_address(addr))
|
|
|
return true;
|
|
|
|
|
|
state->sp = info->next_sp;
|