From: Julian Seward Date: Thu, 20 Oct 2016 05:48:12 +0000 (+0000) Subject: Merge from trunk: X-Git-Tag: svn/VALGRIND_3_12_0~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a2df821ed1ac450a95f67901bc30fec68349ad69;p=thirdparty%2Fvalgrind.git Merge from trunk: 16080 mips: fix coredump creation in Valgrind git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_12_BRANCH@16089 --- diff --git a/coregrind/m_coredump/coredump-elf.c b/coregrind/m_coredump/coredump-elf.c index d51b8d2445..b4b429302e 100644 --- a/coregrind/m_coredump/coredump-elf.c +++ b/coregrind/m_coredump/coredump-elf.c @@ -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); diff --git a/include/vki/vki-mips32-linux.h b/include/vki/vki-mips32-linux.h index 54d9a96864..5be8e15625 100644 --- a/include/vki/vki-mips32-linux.h +++ b/include/vki/vki-mips32-linux.h @@ -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]; diff --git a/include/vki/vki-mips64-linux.h b/include/vki/vki-mips64-linux.h index bfd8692348..26b8e9f982 100644 --- a/include/vki/vki-mips64-linux.h +++ b/include/vki/vki-mips64-linux.h @@ -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