forked from Imagelibrary/rtems
powerpc: Add CPU_Exception_frame
The powerpc port uses now a unified CPU_Exception_frame. This resulted in a CPU_Exception_frame layout change for the MPC5XX.
This commit is contained in:
@@ -27,6 +27,74 @@
|
||||
#include <bsp/vectors.h>
|
||||
#include <bsp/bootcard.h>
|
||||
|
||||
#define PPC_EXC_ASSERT_OFFSET(field, off) \
|
||||
RTEMS_STATIC_ASSERT( \
|
||||
offsetof(CPU_Exception_frame, field) + FRAME_LINK_SPACE == off, \
|
||||
CPU_Exception_frame_offset_ ## field \
|
||||
)
|
||||
|
||||
#define PPC_EXC_ASSERT_CANONIC_OFFSET(field) \
|
||||
PPC_EXC_ASSERT_OFFSET(field, field ## _OFFSET)
|
||||
|
||||
PPC_EXC_ASSERT_OFFSET(EXC_SRR0, SRR0_FRAME_OFFSET);
|
||||
PPC_EXC_ASSERT_OFFSET(EXC_SRR1, SRR1_FRAME_OFFSET);
|
||||
PPC_EXC_ASSERT_OFFSET(_EXC_number, EXCEPTION_NUMBER_OFFSET);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(EXC_CR);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(EXC_CTR);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(EXC_XER);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(EXC_LR);
|
||||
#ifdef __SPE__
|
||||
PPC_EXC_ASSERT_OFFSET(EXC_SPEFSCR, PPC_EXC_SPEFSCR_OFFSET);
|
||||
PPC_EXC_ASSERT_OFFSET(EXC_ACC, PPC_EXC_ACC_OFFSET);
|
||||
#endif
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR0);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR1);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR2);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR3);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR4);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR5);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR6);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR7);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR8);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR9);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR10);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR11);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR12);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR13);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR14);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR15);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR16);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR17);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR18);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR19);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR20);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR21);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR22);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR23);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR24);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR25);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR26);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR27);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR28);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR29);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR30);
|
||||
PPC_EXC_ASSERT_CANONIC_OFFSET(GPR31);
|
||||
|
||||
RTEMS_STATIC_ASSERT(
|
||||
PPC_EXC_MINIMAL_FRAME_SIZE % CPU_STACK_ALIGNMENT == 0,
|
||||
PPC_EXC_MINIMAL_FRAME_SIZE
|
||||
);
|
||||
|
||||
RTEMS_STATIC_ASSERT(
|
||||
PPC_EXC_FRAME_SIZE % CPU_STACK_ALIGNMENT == 0,
|
||||
PPC_EXC_FRAME_SIZE
|
||||
);
|
||||
|
||||
RTEMS_STATIC_ASSERT(
|
||||
sizeof(CPU_Exception_frame) + FRAME_LINK_SPACE <= PPC_EXC_FRAME_SIZE,
|
||||
CPU_Exception_frame
|
||||
);
|
||||
|
||||
uint32_t ppc_exc_cache_wb_check = 1;
|
||||
|
||||
#define MTIVPR(prefix) __asm__ volatile ("mtivpr %0" : : "r" (prefix))
|
||||
|
||||
@@ -246,51 +246,7 @@ extern "C" {
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
unsigned EXC_SRR0;
|
||||
unsigned EXC_SRR1;
|
||||
unsigned _EXC_number;
|
||||
unsigned EXC_CR;
|
||||
unsigned EXC_CTR;
|
||||
unsigned EXC_XER;
|
||||
unsigned EXC_LR;
|
||||
#ifdef __SPE__
|
||||
uint32_t EXC_SPEFSCR;
|
||||
uint64_t EXC_ACC;
|
||||
#endif
|
||||
PPC_GPR_TYPE GPR0;
|
||||
PPC_GPR_TYPE GPR1;
|
||||
PPC_GPR_TYPE GPR2;
|
||||
PPC_GPR_TYPE GPR3;
|
||||
PPC_GPR_TYPE GPR4;
|
||||
PPC_GPR_TYPE GPR5;
|
||||
PPC_GPR_TYPE GPR6;
|
||||
PPC_GPR_TYPE GPR7;
|
||||
PPC_GPR_TYPE GPR8;
|
||||
PPC_GPR_TYPE GPR9;
|
||||
PPC_GPR_TYPE GPR10;
|
||||
PPC_GPR_TYPE GPR11;
|
||||
PPC_GPR_TYPE GPR12;
|
||||
PPC_GPR_TYPE GPR13;
|
||||
PPC_GPR_TYPE GPR14;
|
||||
PPC_GPR_TYPE GPR15;
|
||||
PPC_GPR_TYPE GPR16;
|
||||
PPC_GPR_TYPE GPR17;
|
||||
PPC_GPR_TYPE GPR18;
|
||||
PPC_GPR_TYPE GPR19;
|
||||
PPC_GPR_TYPE GPR20;
|
||||
PPC_GPR_TYPE GPR21;
|
||||
PPC_GPR_TYPE GPR22;
|
||||
PPC_GPR_TYPE GPR23;
|
||||
PPC_GPR_TYPE GPR24;
|
||||
PPC_GPR_TYPE GPR25;
|
||||
PPC_GPR_TYPE GPR26;
|
||||
PPC_GPR_TYPE GPR27;
|
||||
PPC_GPR_TYPE GPR28;
|
||||
PPC_GPR_TYPE GPR29;
|
||||
PPC_GPR_TYPE GPR30;
|
||||
PPC_GPR_TYPE GPR31;
|
||||
} BSP_Exception_frame;
|
||||
typedef CPU_Exception_frame BSP_Exception_frame;
|
||||
|
||||
/** @} */
|
||||
|
||||
@@ -534,7 +490,6 @@ int ppc_exc_alignment_handler(BSP_Exception_frame *frame, unsigned excNum);
|
||||
/*
|
||||
* Compatibility with pc386
|
||||
*/
|
||||
typedef BSP_Exception_frame CPU_Exception_frame;
|
||||
typedef exception_handler_t cpuExcHandlerType;
|
||||
|
||||
#endif /* ASM */
|
||||
|
||||
Reference in New Issue
Block a user