blob: f8fc4f8aef9b1585252a25532d8d19f4498c3984 [file] [log] [blame]
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001// SPDX-License-Identifier: GPL-2.0
2/*
3 * Stack trace management functions
4 *
5 * Copyright IBM Corp. 2006
6 * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
7 */
8
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00009#include <linux/stacktrace.h>
David Brazdil0f672f62019-12-10 10:32:29 +000010#include <asm/stacktrace.h>
11#include <asm/unwind.h>
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000012
David Brazdil0f672f62019-12-10 10:32:29 +000013void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie,
14 struct task_struct *task, struct pt_regs *regs)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000015{
David Brazdil0f672f62019-12-10 10:32:29 +000016 struct unwind_state state;
17 unsigned long addr;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000018
David Brazdil0f672f62019-12-10 10:32:29 +000019 unwind_for_each_frame(&state, task, regs, 0) {
20 addr = unwind_get_return_address(&state);
21 if (!addr || !consume_entry(cookie, addr, false))
22 break;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000023 }
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000024}