| 50 | } |
| 51 | |
| 52 | void |
| 53 | stack_save(struct stack *st) |
| 54 | { |
| 55 | struct unwind_state state; |
| 56 | uint32_t sp; |
| 57 | |
| 58 | /* Read the stack pointer */ |
| 59 | __asm __volatile("mov %0, sp" : "=&r" (sp)); |
| 60 | |
| 61 | state.registers[FP] = (uint32_t)__builtin_frame_address(0); |
| 62 | state.registers[SP] = sp; |
| 63 | state.registers[LR] = (uint32_t)__builtin_return_address(0); |
| 64 | state.registers[PC] = (uint32_t)stack_save; |
| 65 | |
| 66 | stack_capture(st, &state); |
| 67 | } |
| 68 | |
| 69 | int |
| 70 | stack_save_td(struct stack *st, struct thread *td) |
no test coverage detected