Home | History | Annotate | Download | only in mips
      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