65 lines
2.5 KiB
C
65 lines
2.5 KiB
C
/*
|
|
* 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_ */
|