|
From: <sv...@va...> - 2016-10-18 05:18:14
|
Author: sewardj
Date: Tue Oct 18 06:18:06 2016
New Revision: 16065
Log:
Merge from trunk:
16039 mips: allow Valgrind to be compiled for soft-float
Modified:
branches/VALGRIND_3_12_BRANCH/ (props changed)
branches/VALGRIND_3_12_BRANCH/coregrind/m_machine.c
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/FPUarithmetic.c
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/FPUarithmetic.vgtest
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/MoveIns.c
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/MoveIns.vgtest
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/change_fp_mode.c
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/change_fp_mode.vgtest
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/fpu_branches.c
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/fpu_branches.vgtest
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round.c
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round.vgtest
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round_fpu64.c
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round_fpu64.vgtest
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/test_fcsr.c
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/test_fcsr.vgtest
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/vfp.c
branches/VALGRIND_3_12_BRANCH/none/tests/mips32/vfp.vgtest
branches/VALGRIND_3_12_BRANCH/none/tests/mips64/change_fp_mode.c
branches/VALGRIND_3_12_BRANCH/none/tests/mips64/change_fp_mode.vgtest
Modified: branches/VALGRIND_3_12_BRANCH/coregrind/m_machine.c
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/coregrind/m_machine.c (original)
+++ branches/VALGRIND_3_12_BRANCH/coregrind/m_machine.c Tue Oct 18 06:18:06 2016
@@ -1738,10 +1738,6 @@
}
}
- VG_(convert_sigaction_fromK_to_toK)(&saved_sigill_act, &tmp_sigill_act);
- VG_(sigaction)(VKI_SIGILL, &tmp_sigill_act, NULL);
- VG_(sigprocmask)(VKI_SIG_SETMASK, &saved_set, NULL);
-
# if defined(VGP_mips32_linux)
Int fpmode = VG_(prctl)(VKI_PR_GET_FP_MODE);
# else
@@ -1752,25 +1748,33 @@
/* prctl(PR_GET_FP_MODE) is not supported by Kernel,
we are using alternative way to determine FP mode */
ULong result = 0;
- __asm__ volatile (
- ".set push\n\t"
- ".set noreorder\n\t"
- ".set oddspreg\n\t"
- "lui $t0, 0x3FF0\n\t"
- "ldc1 $f0, %0\n\t"
- "mtc1 $t0, $f1\n\t"
- "sdc1 $f0, %0\n\t"
- ".set pop\n\t"
- : "+m"(result)
- :
- : "t0", "$f0", "$f1", "memory");
- fpmode = (result != 0x3FF0000000000000ull);
+ if (!VG_MINIMAL_SETJMP(env_unsup_insn)) {
+ __asm__ volatile (
+ ".set push\n\t"
+ ".set noreorder\n\t"
+ ".set oddspreg\n\t"
+ ".set hardfloat\n\t"
+ "lui $t0, 0x3FF0\n\t"
+ "ldc1 $f0, %0\n\t"
+ "mtc1 $t0, $f1\n\t"
+ "sdc1 $f0, %0\n\t"
+ ".set pop\n\t"
+ : "+m"(result)
+ :
+ : "t0", "$f0", "$f1", "memory");
+
+ fpmode = (result != 0x3FF0000000000000ull);
+ }
}
if (fpmode != 0)
vai.hwcaps |= VEX_MIPS_HOST_FR;
+ VG_(convert_sigaction_fromK_to_toK)(&saved_sigill_act, &tmp_sigill_act);
+ VG_(sigaction)(VKI_SIGILL, &tmp_sigill_act, NULL);
+ VG_(sigprocmask)(VKI_SIG_SETMASK, &saved_set, NULL);
+
VG_(debugLog)(1, "machine", "hwcaps = 0x%x\n", vai.hwcaps);
VG_(machine_get_cache_info)(&vai);
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/FPUarithmetic.c
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/FPUarithmetic.c (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/FPUarithmetic.c Tue Oct 18 06:18:06 2016
@@ -1,3 +1,5 @@
+#if defined(__mips_hard_float)
+
#include <stdio.h>
#include <stdlib.h>
@@ -235,4 +237,8 @@
return 0;
}
-
+#else
+int main() {
+ return 0;
+}
+#endif
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/FPUarithmetic.vgtest
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/FPUarithmetic.vgtest (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/FPUarithmetic.vgtest Tue Oct 18 06:18:06 2016
@@ -1,2 +1,3 @@
prog: FPUarithmetic
+prereq: ../../../tests/mips_features fpu
vgopts: -q
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/MoveIns.c
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/MoveIns.c (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/MoveIns.c Tue Oct 18 06:18:06 2016
@@ -1,3 +1,5 @@
+#if defined(__mips_hard_float)
+
#include <stdint.h>
#include <stdio.h>
@@ -661,3 +663,8 @@
return 0;
}
+#else
+int main() {
+ return 0;
+}
+#endif
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/MoveIns.vgtest
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/MoveIns.vgtest (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/MoveIns.vgtest Tue Oct 18 06:18:06 2016
@@ -1,2 +1,3 @@
prog: MoveIns
+prereq: ../../../tests/mips_features fpu
vgopts: -q
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/change_fp_mode.c
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/change_fp_mode.c (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/change_fp_mode.c Tue Oct 18 06:18:06 2016
@@ -1,3 +1,5 @@
+#if defined(__mips_hard_float)
+
#include <elf.h>
#include <stdio.h>
#include <stdlib.h>
@@ -76,3 +78,8 @@
return 0;
}
+#else
+int main() {
+ return 0;
+}
+#endif
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/change_fp_mode.vgtest
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/change_fp_mode.vgtest (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/change_fp_mode.vgtest Tue Oct 18 06:18:06 2016
@@ -1,2 +1,3 @@
prog: change_fp_mode
+prereq: ../../../tests/mips_features fpu
vgopts: -q
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/fpu_branches.c
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/fpu_branches.c (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/fpu_branches.c Tue Oct 18 06:18:06 2016
@@ -1,3 +1,5 @@
+#if defined(__mips_hard_float)
+
#include <stdio.h>
#define MAX_ARR 24
@@ -314,4 +316,8 @@
}
return 0;
}
-
+#else
+int main() {
+ return 0;
+}
+#endif
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/fpu_branches.vgtest
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/fpu_branches.vgtest (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/fpu_branches.vgtest Tue Oct 18 06:18:06 2016
@@ -1,2 +1,3 @@
prog: fpu_branches
+prereq: ../../../tests/mips_features fpu
vgopts: -q
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round.c
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round.c (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round.c Tue Oct 18 06:18:06 2016
@@ -1,3 +1,5 @@
+#if defined(__mips_hard_float)
+
#include <stdio.h>
typedef enum {
@@ -289,4 +291,9 @@
}
return 0;
}
+#else
+int main() {
+ return 0;
+}
+#endif
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round.vgtest
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round.vgtest (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round.vgtest Tue Oct 18 06:18:06 2016
@@ -1,2 +1,3 @@
prog: round
+prereq: ../../../tests/mips_features fpu
vgopts: -q
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round_fpu64.c
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round_fpu64.c (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round_fpu64.c Tue Oct 18 06:18:06 2016
@@ -1,3 +1,5 @@
+#if defined(__mips_hard_float)
+
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
@@ -202,3 +204,8 @@
#endif
return 0;
}
+#else
+int main() {
+ return 0;
+}
+#endif
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round_fpu64.vgtest
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round_fpu64.vgtest (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/round_fpu64.vgtest Tue Oct 18 06:18:06 2016
@@ -1,2 +1,3 @@
prog: round_fpu64
+prereq: ../../../tests/mips_features fpu
vgopts: -q
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/test_fcsr.c
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/test_fcsr.c (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/test_fcsr.c Tue Oct 18 06:18:06 2016
@@ -1,3 +1,5 @@
+#if defined(__mips_hard_float)
+
#include <stdio.h>
int main ()
@@ -23,3 +25,8 @@
printf("FCSR::1: 0x%x, 2: 0x%x\n", out[0], out[1]);
return 0;
}
+#else
+int main() {
+ return 0;
+}
+#endif
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/test_fcsr.vgtest
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/test_fcsr.vgtest (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/test_fcsr.vgtest Tue Oct 18 06:18:06 2016
@@ -1,2 +1,3 @@
prog: test_fcsr
+prereq: ../../../tests/mips_features fpu
vgopts: -q
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/vfp.c
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/vfp.c (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/vfp.c Tue Oct 18 06:18:06 2016
@@ -1,3 +1,5 @@
+#if defined(__mips_hard_float)
+
#include <stdint.h>
#include <stdio.h>
@@ -405,4 +407,8 @@
return 0;
}
-
+#else
+int main() {
+ return 0;
+}
+#endif
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips32/vfp.vgtest
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips32/vfp.vgtest (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips32/vfp.vgtest Tue Oct 18 06:18:06 2016
@@ -1,2 +1,3 @@
prog: vfp
+prereq: ../../../tests/mips_features fpu
vgopts: -q
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips64/change_fp_mode.c
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips64/change_fp_mode.c (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips64/change_fp_mode.c Tue Oct 18 06:18:06 2016
@@ -1,3 +1,5 @@
+#if defined(__mips_hard_float)
+
#include <elf.h>
#include <stdio.h>
#include <stdlib.h>
@@ -257,3 +259,8 @@
return 0;
}
+#else
+int main() {
+ return 0;
+}
+#endif
Modified: branches/VALGRIND_3_12_BRANCH/none/tests/mips64/change_fp_mode.vgtest
==============================================================================
--- branches/VALGRIND_3_12_BRANCH/none/tests/mips64/change_fp_mode.vgtest (original)
+++ branches/VALGRIND_3_12_BRANCH/none/tests/mips64/change_fp_mode.vgtest Tue Oct 18 06:18:06 2016
@@ -1,2 +1,3 @@
prog: change_fp_mode
+prereq: ../../../tests/mips_features fpu
vgopts: -q
|