openwrt/package/devel/valgrind/patches/130-mips_fix_soft_float.patch
Hauke Mehrtens 1a55d90320 valgrind: Update to version 3.23
Release notes:
https://valgrind.org/docs/manual/dist.news.html

The patch `130-fix_arm_arch_detection.patch` was added upstream in
https://sourceware.org/git/?p=valgrind.git;a=commitdiff;h=5bdb86cc9a962f04f2dd3816b7d3a96288b09b72

Replace `010-mips-Fix-new-syscall-numbers.patch` with backport from
upstream.

Backport patch `020-no-member-guest_IP_AT_SYSCALL.patch` to fix a
compile problem on MIPS.

Small size increase:
1527884 bin/packages/mips_24kc-old/base/valgrind_3.22.0-r1_mips_24kc.ipk
3352210 bin/packages/mips_24kc-old/base/valgrind-cachegrind_3.22.0-r1_mips_24kc.ipk
3522982 bin/packages/mips_24kc-old/base/valgrind-callgrind_3.22.0-r1_mips_24kc.ipk
3573577 bin/packages/mips_24kc-old/base/valgrind-drd_3.22.0-r1_mips_24kc.ipk
3647835 bin/packages/mips_24kc-old/base/valgrind-helgrind_3.22.0-r1_mips_24kc.ipk
3383239 bin/packages/mips_24kc-old/base/valgrind-massif_3.22.0-r1_mips_24kc.ipk
  22332 bin/packages/mips_24kc-old/base/valgrind-vgdb_3.22.0-r1_mips_24kc.ipk
1541969 bin/packages/mips_24kc-new/base/valgrind_3.23.0-r1_mips_24kc.ipk
3378595 bin/packages/mips_24kc-new/base/valgrind-cachegrind_3.23.0-r1_mips_24kc.ipk
3548415 bin/packages/mips_24kc-new/base/valgrind-callgrind_3.23.0-r1_mips_24kc.ipk
3592715 bin/packages/mips_24kc-new/base/valgrind-drd_3.23.0-r1_mips_24kc.ipk
3664706 bin/packages/mips_24kc-new/base/valgrind-helgrind_3.23.0-r1_mips_24kc.ipk
3411485 bin/packages/mips_24kc-new/base/valgrind-massif_3.23.0-r1_mips_24kc.ipk
  22869 bin/packages/mips_24kc-new/base/valgrind-vgdb_3.23.0-r1_mips_24kc.ipk

Link: https://github.com/openwrt/openwrt/pull/16584
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2024-10-05 12:24:28 +02:00

69 lines
2.2 KiB
Diff

Disable the valgrind helpers which use MIPS floating point operations
when floating point support is deactivated in the toolchain.
The fix from this commit is not sufficient any more:
https://sourceware.org/git/?p=valgrind.git;a=commitdiff;h=869fcf2f6739f17b4eff36ec68f8dca826c8afeb
This fixes the following error message when compiling with a GCC 10 MIPS BE 32:
---------------------------------------------------------
../VEX/priv/guest_mips_helpers.c: In function 'mips_dirtyhelper_calculate_FCSR_fp32':
../VEX/priv/guest_mips_helpers.c:640:10: error: the register '$f21' cannot be clobbered in 'asm' for the current target
640 | ASM_VOLATILE_UNARY32_DOUBLE(round.w.d)
| ^
---------------------------------------------------------
--- a/VEX/priv/guest_mips_helpers.c
+++ b/VEX/priv/guest_mips_helpers.c
@@ -620,6 +620,7 @@ extern UInt mips_dirtyhelper_calculate_F
flt_op inst )
{
UInt ret = 0;
+#ifndef __mips_soft_float
#if defined(__mips__)
VexGuestMIPS32State* guest_state = (VexGuestMIPS32State*)gs;
UInt loFsVal, hiFsVal, loFtVal, hiFtVal;
@@ -702,6 +703,7 @@ extern UInt mips_dirtyhelper_calculate_F
break;
}
#endif
+#endif
return ret;
}
@@ -711,6 +713,7 @@ extern UInt mips_dirtyhelper_calculate_F
flt_op inst )
{
UInt ret = 0;
+#ifndef __mips_soft_float
#if defined(__mips__) && ((__mips == 64) || \
(defined(__mips_isa_rev) && (__mips_isa_rev >= 2)))
#if defined(VGA_mips32)
@@ -863,6 +866,7 @@ extern UInt mips_dirtyhelper_calculate_F
break;
}
#endif
+#endif
return ret;
}
--- a/coregrind/m_machine.c
+++ b/coregrind/m_machine.c
@@ -2119,6 +2119,7 @@ Bool VG_(machine_get_hwcaps)( void )
we are using alternative way to determine FP mode */
ULong result = 0;
+#ifndef __mips_soft_float
if (!VG_MINIMAL_SETJMP(env_unsup_insn)) {
__asm__ volatile (
".set push\n\t"
@@ -2136,6 +2137,9 @@ Bool VG_(machine_get_hwcaps)( void )
fpmode = (result != 0x3FF0000000000000ull);
}
+#else
+ fpmode = 0;
+#endif
}
if (fpmode != 0)