]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Merge from trunk:
authorJulian Seward <jseward@acm.org>
Thu, 20 Oct 2016 05:48:12 +0000 (05:48 +0000)
committerJulian Seward <jseward@acm.org>
Thu, 20 Oct 2016 05:48:12 +0000 (05:48 +0000)
  16080 mips: fix coredump creation in Valgrind

git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_12_BRANCH@16089

coregrind/m_coredump/coredump-elf.c
include/vki/vki-mips32-linux.h
include/vki/vki-mips64-linux.h

index d51b8d2445cd52bc11740a8b211883a271739cfe..b4b429302eed7335064acb2553496f62f4e78b86 100644 (file)
@@ -226,7 +226,11 @@ static void fill_prstatus(const ThreadState *tst,
                          /*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));
@@ -245,6 +249,8 @@ static void fill_prstatus(const ThreadState *tst,
 #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));
@@ -389,24 +395,27 @@ static void fill_prstatus(const ThreadState *tst,
    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);
index 54d9a96864ebbe09ef93efa62477387aa9be63b8..5be8e156256195769795d9f2622923e6d40b8ce7 100644 (file)
@@ -815,56 +815,60 @@ struct vki_pt_regs {
 #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];
 
index bfd86923483739a525ac2518d2282749158c6b04..26b8e9f982e576ad639cea666c507bc20e0baaf7 100644 (file)
@@ -841,43 +841,48 @@ struct vki_pt_regs {
 #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