/*OUT*/struct vki_elf_prstatus *prs,
const vki_siginfo_t *si)
{
+#if defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
+ vki_elf_greg_t *regs;
+#else
struct vki_user_regs_struct *regs;
+#endif
const ThreadArchState* arch = &tst->arch;
VG_(memset)(prs, 0, sizeof(*prs));
#if defined(VGP_s390x_linux)
/* prs->pr_reg has struct type. Need to take address. */
regs = (struct vki_user_regs_struct *)&(prs->pr_reg);
+#elif defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
+ regs = (vki_elf_greg_t *)prs->pr_reg;
#else
regs = (struct vki_user_regs_struct *)prs->pr_reg;
vg_assert(sizeof(*regs) == sizeof(prs->pr_reg));
regs->orig_gpr2 = arch->vex.guest_r2;
#elif defined(VGP_mips32_linux)
-# define DO(n) regs->MIPS_r##n = arch->vex.guest_r##n
- DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
- DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15);
- DO(16); DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23);
- DO(24); DO(25); DO(26); DO(27); DO(28); DO(29); DO(30); DO(31);
+# define DO(n) regs[VKI_MIPS32_EF_R##n] = arch->vex.guest_r##n
+ DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7); DO(8);
+ DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15); DO(16);
+ DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23); DO(24);
+ DO(25); DO(28); DO(29); DO(30); DO(31);
# undef DO
- regs->MIPS_hi = arch->vex.guest_HI;
- regs->MIPS_lo = arch->vex.guest_LO;
-
+ regs[VKI_MIPS32_EF_LO] = arch->vex.guest_LO;
+ regs[VKI_MIPS32_EF_HI] = arch->vex.guest_HI;
+ regs[VKI_MIPS32_EF_CP0_STATUS] = arch->vex.guest_CP0_status;
+ regs[VKI_MIPS32_EF_CP0_EPC] = arch->vex.guest_PC;
#elif defined(VGP_mips64_linux)
-# define DO(n) regs->MIPS_r##n = arch->vex.guest_r##n
- DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
- DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15);
- DO(16); DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23);
- DO(24); DO(25); DO(26); DO(27); DO(28); DO(29); DO(30); DO(31);
+# define DO(n) regs[VKI_MIPS64_EF_R##n] = arch->vex.guest_r##n
+ DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7); DO(8);
+ DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15); DO(16);
+ DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23); DO(24);
+ DO(25); DO(28); DO(29); DO(30); DO(31);
# undef DO
- regs->MIPS_hi = arch->vex.guest_HI;
- regs->MIPS_lo = arch->vex.guest_LO;
+ regs[VKI_MIPS64_EF_LO] = arch->vex.guest_LO;
+ regs[VKI_MIPS64_EF_HI] = arch->vex.guest_HI;
+ regs[VKI_MIPS64_EF_CP0_STATUS] = arch->vex.guest_CP0_status;
+ regs[VKI_MIPS64_EF_CP0_EPC] = arch->vex.guest_PC;
#elif defined(VGP_tilegx_linux)
# define DO(n) regs->regs[n] = arch->vex.guest_r##n
DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
#endif
} __attribute__ ((aligned (8)));
-
-#define vki_user_regs_struct vki_pt_regs
-
-#define MIPS_lo lo
-#define MIPS_hi hi
-//#define MIPS_pc regs[32]
-#define MIPS_r31 regs[31]
-#define MIPS_r30 regs[30]
-#define MIPS_r29 regs[29]
-#define MIPS_r28 regs[28]
-#define MIPS_r27 regs[27]
-#define MIPS_r26 regs[26]
-#define MIPS_r25 regs[25]
-#define MIPS_r24 regs[24]
-#define MIPS_r23 regs[23]
-#define MIPS_r22 regs[22]
-#define MIPS_r21 regs[21]
-#define MIPS_r20 regs[20]
-#define MIPS_r19 regs[19]
-#define MIPS_r18 regs[18]
-#define MIPS_r17 regs[17]
-#define MIPS_r16 regs[16]
-#define MIPS_r15 regs[15]
-#define MIPS_r14 regs[14]
-#define MIPS_r13 regs[13]
-#define MIPS_r12 regs[12]
-#define MIPS_r11 regs[11]
-#define MIPS_r10 regs[10]
-#define MIPS_r9 regs[9]
-#define MIPS_r8 regs[8]
-#define MIPS_r7 regs[7]
-#define MIPS_r6 regs[6]
-#define MIPS_r5 regs[5]
-#define MIPS_r4 regs[4]
-#define MIPS_r3 regs[3]
-#define MIPS_r2 regs[2]
-#define MIPS_r1 regs[1]
-#define MIPS_r0 regs[0]
-
#define VKI_PTRACE_GETREGS 12
#define VKI_PTRACE_SETREGS 13
#define VKI_PTRACE_GETFPREGS 14
#define VKI_PTRACE_SETFPREGS 15
//----------------------------------------------------------------------
-// From linux-2.6.35.5/include/asm-mips/elf.h
+// From linux-4.5/arch/mips/include/uapi/asm/reg.h
+//----------------------------------------------------------------------
+#define VKI_MIPS32_EF_R0 6
+#define VKI_MIPS32_EF_R1 7
+#define VKI_MIPS32_EF_R2 8
+#define VKI_MIPS32_EF_R3 9
+#define VKI_MIPS32_EF_R4 10
+#define VKI_MIPS32_EF_R5 11
+#define VKI_MIPS32_EF_R6 12
+#define VKI_MIPS32_EF_R7 13
+#define VKI_MIPS32_EF_R8 14
+#define VKI_MIPS32_EF_R9 15
+#define VKI_MIPS32_EF_R10 16
+#define VKI_MIPS32_EF_R11 17
+#define VKI_MIPS32_EF_R12 18
+#define VKI_MIPS32_EF_R13 19
+#define VKI_MIPS32_EF_R14 20
+#define VKI_MIPS32_EF_R15 21
+#define VKI_MIPS32_EF_R16 22
+#define VKI_MIPS32_EF_R17 23
+#define VKI_MIPS32_EF_R18 24
+#define VKI_MIPS32_EF_R19 25
+#define VKI_MIPS32_EF_R20 26
+#define VKI_MIPS32_EF_R21 27
+#define VKI_MIPS32_EF_R22 28
+#define VKI_MIPS32_EF_R23 29
+#define VKI_MIPS32_EF_R24 30
+#define VKI_MIPS32_EF_R25 31
+#define VKI_MIPS32_EF_R26 32
+#define VKI_MIPS32_EF_R27 33
+#define VKI_MIPS32_EF_R28 34
+#define VKI_MIPS32_EF_R29 35
+#define VKI_MIPS32_EF_R30 36
+#define VKI_MIPS32_EF_R31 37
+#define VKI_MIPS32_EF_LO 38
+#define VKI_MIPS32_EF_HI 39
+#define VKI_MIPS32_EF_CP0_EPC 40
+#define VKI_MIPS32_EF_CP0_BADVADDR 41
+#define VKI_MIPS32_EF_CP0_STATUS 42
+#define VKI_MIPS32_EF_CP0_CAUSE 43
+#define VKI_MIPS32_EF_UNUSED0 44
+
+//----------------------------------------------------------------------
+// From linux-4.5/arch/mips/include/asm/elf.h
//----------------------------------------------------------------------
typedef unsigned long vki_elf_greg_t;
-#define VKI_ELF_NGREG (sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t))
-#define VKI_ELF_NFPREG 33 /* includes fpscr */
+#define VKI_ELF_NGREG 45
+#define VKI_ELF_NFPREG 33 /* includes fpscr */
typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
#endif
} __attribute__ ((aligned (8)));
-
-#define vki_user_regs_struct vki_pt_regs
-
-#define MIPS_lo lo
-#define MIPS_hi hi
-#define MIPS_r31 regs[31]
-#define MIPS_r30 regs[30]
-#define MIPS_r29 regs[29]
-#define MIPS_r28 regs[28]
-#define MIPS_r27 regs[27]
-#define MIPS_r26 regs[26]
-#define MIPS_r25 regs[25]
-#define MIPS_r24 regs[24]
-#define MIPS_r23 regs[23]
-#define MIPS_r22 regs[22]
-#define MIPS_r21 regs[21]
-#define MIPS_r20 regs[20]
-#define MIPS_r19 regs[19]
-#define MIPS_r18 regs[18]
-#define MIPS_r17 regs[17]
-#define MIPS_r16 regs[16]
-#define MIPS_r15 regs[15]
-#define MIPS_r14 regs[14]
-#define MIPS_r13 regs[13]
-#define MIPS_r12 regs[12]
-#define MIPS_r11 regs[11]
-#define MIPS_r10 regs[10]
-#define MIPS_r9 regs[9]
-#define MIPS_r8 regs[8]
-#define MIPS_r7 regs[7]
-#define MIPS_r6 regs[6]
-#define MIPS_r5 regs[5]
-#define MIPS_r4 regs[4]
-#define MIPS_r3 regs[3]
-#define MIPS_r2 regs[2]
-#define MIPS_r1 regs[1]
-#define MIPS_r0 regs[0]
+//----------------------------------------------------------------------
+// From linux-4.5/arch/mips/include/uapi/asm/reg.h
+//----------------------------------------------------------------------
+
+#define VKI_MIPS64_EF_R0 0
+#define VKI_MIPS64_EF_R1 1
+#define VKI_MIPS64_EF_R2 2
+#define VKI_MIPS64_EF_R3 3
+#define VKI_MIPS64_EF_R4 4
+#define VKI_MIPS64_EF_R5 5
+#define VKI_MIPS64_EF_R6 6
+#define VKI_MIPS64_EF_R7 7
+#define VKI_MIPS64_EF_R8 8
+#define VKI_MIPS64_EF_R9 9
+#define VKI_MIPS64_EF_R10 10
+#define VKI_MIPS64_EF_R11 11
+#define VKI_MIPS64_EF_R12 12
+#define VKI_MIPS64_EF_R13 13
+#define VKI_MIPS64_EF_R14 14
+#define VKI_MIPS64_EF_R15 15
+#define VKI_MIPS64_EF_R16 16
+#define VKI_MIPS64_EF_R17 17
+#define VKI_MIPS64_EF_R18 18
+#define VKI_MIPS64_EF_R19 19
+#define VKI_MIPS64_EF_R20 20
+#define VKI_MIPS64_EF_R21 21
+#define VKI_MIPS64_EF_R22 22
+#define VKI_MIPS64_EF_R23 23
+#define VKI_MIPS64_EF_R24 24
+#define VKI_MIPS64_EF_R25 25
+#define VKI_MIPS64_EF_R26 26
+#define VKI_MIPS64_EF_R27 27
+#define VKI_MIPS64_EF_R28 28
+#define VKI_MIPS64_EF_R29 29
+#define VKI_MIPS64_EF_R30 30
+#define VKI_MIPS64_EF_R31 31
+#define VKI_MIPS64_EF_LO 32
+#define VKI_MIPS64_EF_HI 33
+#define VKI_MIPS64_EF_CP0_EPC 34
+#define VKI_MIPS64_EF_CP0_BADVADDR 35
+#define VKI_MIPS64_EF_CP0_STATUS 36
+#define VKI_MIPS64_EF_CP0_CAUSE 37
//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-i386/ptrace.h