b15915046f6f2fcfa2525d6def02ceddaaeab307
[fw/openocd] / src / rtos / rtos_ecos_stackings.c
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 #ifdef HAVE_CONFIG_H
4 #include "config.h"
5 #endif
6
7 #include "rtos.h"
8 #include "rtos_standard_stackings.h"
9 #include "target/armv7m.h"
10
11 static const struct stack_register_offset rtos_ecos_cortex_m3_stack_offsets[ARMV7M_NUM_CORE_REGS] = {
12         { ARMV7M_R0,   0x0c, 32 },              /* r0   */
13         { ARMV7M_R1,   0x10, 32 },              /* r1   */
14         { ARMV7M_R2,   0x14, 32 },              /* r2   */
15         { ARMV7M_R3,   0x18, 32 },              /* r3   */
16         { ARMV7M_R4,   0x1c, 32 },              /* r4   */
17         { ARMV7M_R5,   0x20, 32 },              /* r5   */
18         { ARMV7M_R6,   0x24, 32 },              /* r6   */
19         { ARMV7M_R7,   0x28, 32 },              /* r7   */
20         { ARMV7M_R8,   0x2c, 32 },              /* r8   */
21         { ARMV7M_R9,   0x30, 32 },              /* r9   */
22         { ARMV7M_R10,  0x34, 32 },              /* r10  */
23         { ARMV7M_R11,  0x38, 32 },              /* r11  */
24         { ARMV7M_R12,  0x3c, 32 },              /* r12  */
25         { ARMV7M_R13,  -2,   32 },              /* sp   */
26         { ARMV7M_R14,  -1,   32 },              /* lr   */
27         { ARMV7M_PC,   0x40, 32 },              /* pc   */
28         { ARMV7M_XPSR, -1,   32 },              /* xPSR */
29 };
30
31 const struct rtos_register_stacking rtos_ecos_cortex_m3_stacking = {
32         .stack_registers_size = 0x44,
33         .stack_growth_direction = -1,
34         .num_output_registers = ARMV7M_NUM_CORE_REGS,
35         .calculate_process_stack = rtos_generic_stack_align8,
36         .register_offsets = rtos_ecos_cortex_m3_stack_offsets
37 };