Commit | Line | Data |
---|---|---|
6fa3eb70 S |
1 | #if !defined(__MRDUMP_PRIVATE_H__) |
2 | ||
3 | static inline void mrdump_save_current_backtrace(struct pt_regs *regs) | |
4 | { | |
5 | #if defined(__arm__) | |
6 | asm volatile("stmia %1, {r0 - r15}\n\t" | |
7 | "mrs %0, cpsr\n" | |
8 | : "=r"(regs->uregs[16]) | |
9 | : "r" (regs) | |
10 | : "memory"); | |
11 | #elif defined(__aarch64__) | |
12 | /* FIXME: 64b */ | |
13 | asm volatile("stp x0, x1, [%0] \n\t" | |
14 | "stp x2, x3, [%0, #16] \n\t" | |
15 | "stp x4, x5, [%0, #32] \n\t" | |
16 | "stp x6, x7, [%0, #48] \n\t" | |
17 | "stp x8, x9, [%0, #64] \n\t" | |
18 | "stp x10, x11, [%0, #80] \n\t" | |
19 | "stp x12, x13, [%0, #96] \n\t" | |
20 | "stp x14, x15, [%0, #112] \n\t" | |
21 | "stp x16, x17, [%0, #128] \n\t" | |
22 | "stp x18, x19, [%0, #144] \n\t" | |
23 | "stp x20, x21, [%0, #160] \n\t" | |
24 | "stp x22, x23, [%0, #176] \n\t" | |
25 | "stp x24, x25, [%0, #192] \n\t" | |
26 | "stp x26, x27, [%0, #208] \n\t" | |
27 | "stp x28, x29, [%0, #224] \n\t" | |
28 | "str x30, [%0, #240] \n\t" | |
29 | : | |
30 | :"r" (®s->user_regs) | |
31 | : "memory"); | |
32 | asm volatile("mov x8, sp \n\t" | |
33 | "str x8, [%0] \n\t" | |
34 | "1: \n\t" | |
35 | "adr x8, 1b \n\t" | |
36 | "str x8, [%1] \n\t" | |
37 | : | |
38 | :"r" (®s->user_regs.sp), "r" (®s->user_regs.pc) | |
39 | : "x8", "memory"); | |
40 | #else | |
41 | #error "Unsupport archtecture" | |
42 | #endif | |
43 | } | |
44 | ||
45 | #endif |