1 /* Linux-specific definitions: */ 2 3 /* Define various structure offsets to simplify cross-compilation. */ 4 5 /* FIXME: Currently these are only used in getcontext.S, which is only used 6 for a local unwinder, so we can use the compile-time ABI. At a later date 7 we will want all three here, to use for signal handlers. Also, because 8 of the three ABIs, gen-offsets.c can not quite generate this file. */ 9 10 /* Offsets for MIPS Linux "ucontext_t": */ 11 12 /* First 24 bytes in sigframe are argument save space and padding for 13 what used to be signal trampolines. Ref: arch/mips/kernel/signal.c */ 14 #define LINUX_SF_TRAMP_SIZE 0x18 15 16 #if _MIPS_SIM == _ABIO32 17 18 # define LINUX_UC_FLAGS_OFF 0x0 19 # define LINUX_UC_LINK_OFF 0x4 20 # define LINUX_UC_STACK_OFF 0x8 21 # define LINUX_UC_MCONTEXT_OFF 0x18 22 # define LINUX_UC_SIGMASK_OFF 0x268 23 # define LINUX_UC_MCONTEXT_PC 0x20 24 # define LINUX_UC_MCONTEXT_GREGS 0x28 25 26 #elif _MIPS_SIM == _ABIN32 27 28 # define LINUX_UC_FLAGS_OFF 0x0 29 # define LINUX_UC_LINK_OFF 0x4 30 # define LINUX_UC_STACK_OFF 0x8 31 # define LINUX_UC_MCONTEXT_OFF 0x18 32 # define LINUX_UC_SIGMASK_OFF 0x270 33 # define LINUX_UC_MCONTEXT_PC 0x258 34 # define LINUX_UC_MCONTEXT_GREGS 0x18 35 36 #elif _MIPS_SIM == _ABI64 37 38 # define LINUX_UC_FLAGS_OFF 0x0 39 # define LINUX_UC_LINK_OFF 0x8 40 # define LINUX_UC_STACK_OFF 0x10 41 # define LINUX_UC_MCONTEXT_OFF 0x28 42 # define LINUX_UC_SIGMASK_OFF 0x280 43 # define LINUX_UC_MCONTEXT_PC 0x268 44 # define LINUX_UC_MCONTEXT_GREGS 0x28 45 #else 46 47 #error Unsupported ABI 48 49 #endif 50 51 #define LINUX_SC_R0_OFF (LINUX_UC_MCONTEXT_GREGS - LINUX_UC_MCONTEXT_OFF) 52 #define LINUX_SC_R1_OFF (LINUX_SC_R0_OFF + 1*8) 53 #define LINUX_SC_R2_OFF (LINUX_SC_R0_OFF + 2*8) 54 #define LINUX_SC_R3_OFF (LINUX_SC_R0_OFF + 3*8) 55 #define LINUX_SC_R4_OFF (LINUX_SC_R0_OFF + 4*8) 56 #define LINUX_SC_R5_OFF (LINUX_SC_R0_OFF + 5*8) 57 #define LINUX_SC_R6_OFF (LINUX_SC_R0_OFF + 6*8) 58 #define LINUX_SC_R7_OFF (LINUX_SC_R0_OFF + 7*8) 59 #define LINUX_SC_R8_OFF (LINUX_SC_R0_OFF + 8*8) 60 #define LINUX_SC_R9_OFF (LINUX_SC_R0_OFF + 9*8) 61 #define LINUX_SC_R10_OFF (LINUX_SC_R0_OFF + 10*8) 62 #define LINUX_SC_R11_OFF (LINUX_SC_R0_OFF + 11*8) 63 #define LINUX_SC_R12_OFF (LINUX_SC_R0_OFF + 12*8) 64 #define LINUX_SC_R13_OFF (LINUX_SC_R0_OFF + 13*8) 65 #define LINUX_SC_R14_OFF (LINUX_SC_R0_OFF + 14*8) 66 #define LINUX_SC_R15_OFF (LINUX_SC_R0_OFF + 15*8) 67 #define LINUX_SC_R16_OFF (LINUX_SC_R0_OFF + 16*8) 68 #define LINUX_SC_R17_OFF (LINUX_SC_R0_OFF + 17*8) 69 #define LINUX_SC_R18_OFF (LINUX_SC_R0_OFF + 18*8) 70 #define LINUX_SC_R19_OFF (LINUX_SC_R0_OFF + 19*8) 71 #define LINUX_SC_R20_OFF (LINUX_SC_R0_OFF + 20*8) 72 #define LINUX_SC_R21_OFF (LINUX_SC_R0_OFF + 21*8) 73 #define LINUX_SC_R22_OFF (LINUX_SC_R0_OFF + 22*8) 74 #define LINUX_SC_R23_OFF (LINUX_SC_R0_OFF + 23*8) 75 #define LINUX_SC_R24_OFF (LINUX_SC_R0_OFF + 24*8) 76 #define LINUX_SC_R25_OFF (LINUX_SC_R0_OFF + 25*8) 77 #define LINUX_SC_R26_OFF (LINUX_SC_R0_OFF + 26*8) 78 #define LINUX_SC_R27_OFF (LINUX_SC_R0_OFF + 27*8) 79 #define LINUX_SC_R28_OFF (LINUX_SC_R0_OFF + 28*8) 80 #define LINUX_SC_R29_OFF (LINUX_SC_R0_OFF + 29*8) 81 #define LINUX_SC_R30_OFF (LINUX_SC_R0_OFF + 30*8) 82 #define LINUX_SC_R31_OFF (LINUX_SC_R0_OFF + 31*8) 83 84 #define LINUX_SC_SP_OFF LINUX_SC_R29_OFF 85 #define LINUX_SC_PC_OFF (LINUX_UC_MCONTEXT_PC - LINUX_UC_MCONTEXT_OFF) 86