Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/parisc/kernel/stacktrace.c
26288 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Stack trace management functions
4
*
5
* Copyright (C) 2009-2021 Helge Deller <[email protected]>
6
* based on arch/x86/kernel/stacktrace.c by Ingo Molnar <[email protected]>
7
* and parisc unwind functions by Randolph Chung <[email protected]>
8
*
9
* TODO: Userspace stacktrace (CONFIG_USER_STACKTRACE_SUPPORT)
10
*/
11
#include <linux/kernel.h>
12
#include <linux/stacktrace.h>
13
14
#include <asm/unwind.h>
15
16
static void notrace walk_stackframe(struct task_struct *task,
17
struct pt_regs *regs, bool (*fn)(void *, unsigned long), void *cookie)
18
{
19
struct unwind_frame_info info;
20
21
unwind_frame_init_task(&info, task, NULL);
22
while (1) {
23
if (unwind_once(&info) < 0 || info.ip == 0)
24
break;
25
26
if (__kernel_text_address(info.ip))
27
if (!fn(cookie, info.ip))
28
break;
29
}
30
}
31
32
void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie,
33
struct task_struct *task, struct pt_regs *regs)
34
{
35
walk_stackframe(task, regs, consume_entry, cookie);
36
}
37
38
int arch_stack_walk_reliable(stack_trace_consume_fn consume_entry, void *cookie,
39
struct task_struct *task)
40
{
41
walk_stackframe(task, NULL, consume_entry, cookie);
42
return 1;
43
}
44
45