blob: 376dbc1842b208985059f105cfb8ac47bd7cd8a9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include <linux/bug.h>
#include <linux/mm.h>
#include <linux/module.h>
#include <asm/ptrace.h>
#include "mrdump_private.h"
void mrdump_save_current_backtrace(struct pt_regs *regs)
{
asm volatile("stmia %1, {r0 - r15}\n\t"
"mrs %0, cpsr\n"
: "=r"(regs->uregs[16])
: "r" (regs)
: "memory");
}
void mrdump_print_crash(struct pt_regs *regs)
{
unsigned int fp, mode;
int ok = 1;
__show_regs(regs);
/* Print current backtrace */
printk("Backtrace: ");
fp = regs->ARM_fp;
mode = processor_mode(regs);
if (!fp) {
printk("no frame pointer");
ok = 0;
} else if ((fp < PAGE_OFFSET) || ((high_memory != NULL) && (fp > (unsigned long) high_memory))) {
printk("invalid frame pointer 0x%08x", fp);
ok = 0;
}
printk("\n");
if (ok)
c_backtrace(fp, mode);
}
|