/* * Copyright (c) 2019-2020 Cobham Gaisler AB * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_ARCH_SPARC_CORE_STACK_H_ #define ZEPHYR_ARCH_SPARC_CORE_STACK_H_ /* * Offsets for SPARC ABI stack frame. * * Reference: System V Application Binary Interface, SPARC Processor * Supplement, Third Edition, Page 3-35. */ #define STACK_FRAME_L0_OFFSET 0x00 #define STACK_FRAME_L1_OFFSET 0x04 #define STACK_FRAME_L2_OFFSET 0x08 #define STACK_FRAME_L3_OFFSET 0x0c #define STACK_FRAME_L4_OFFSET 0x10 #define STACK_FRAME_L5_OFFSET 0x14 #define STACK_FRAME_L6_OFFSET 0x18 #define STACK_FRAME_L7_OFFSET 0x1c #define STACK_FRAME_I0_OFFSET 0x20 #define STACK_FRAME_I1_OFFSET 0x24 #define STACK_FRAME_I2_OFFSET 0x28 #define STACK_FRAME_I3_OFFSET 0x2c #define STACK_FRAME_I4_OFFSET 0x30 #define STACK_FRAME_I5_OFFSET 0x34 #define STACK_FRAME_I6_OFFSET 0x38 #define STACK_FRAME_I7_OFFSET 0x3c #define STACK_FRAME_STRUCTURE_RETURN_ADDRESS_OFFSET 0x40 #define STACK_FRAME_SAVED_ARG0_OFFSET 0x44 #define STACK_FRAME_SAVED_ARG1_OFFSET 0x48 #define STACK_FRAME_SAVED_ARG2_OFFSET 0x4c #define STACK_FRAME_SAVED_ARG3_OFFSET 0x50 #define STACK_FRAME_SAVED_ARG4_OFFSET 0x54 #define STACK_FRAME_SAVED_ARG5_OFFSET 0x58 #define STACK_FRAME_PAD0_OFFSET 0x5c #define STACK_FRAME_SIZE 0x60 /* Interrupt stack frame */ #define ISF_PSR_OFFSET (0x40 + 0x00) #define ISF_PC_OFFSET (0x40 + 0x04) #define ISF_NPC_OFFSET (0x40 + 0x08) #define ISF_G1_OFFSET (0x40 + 0x0c) #define ISF_G2_OFFSET (0x40 + 0x10) #define ISF_G3_OFFSET (0x40 + 0x14) #define ISF_G4_OFFSET (0x40 + 0x18) #define ISF_Y_OFFSET (0x40 + 0x1c) #if !defined(_FLAT) #define ISF_SIZE (0x20) #else /* * The flat ABI stores and loads "local" and "in" registers in the save area as * part of function prologue and epilogue. So we allocate space for a new save * area (0x40 byte) as part of the interrupt stack frame. */ #define ISF_SIZE (0x40 + 0x20) #endif #endif /* ZEPHYR_ARCH_SPARC_CORE_STACK_H_ */