valgrind: improve mips support
authorHauke Mehrtens <hauke@hauke-m.de>
Mon, 3 Oct 2016 14:23:17 +0000 (16:23 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Mon, 3 Oct 2016 15:18:33 +0000 (17:18 +0200)
We have to remove the FPU check, it will run in an endless loop on LEDE
when compile without FPU emulation support.
The second patch fixes this problem: valgrind: mmap(0x400000, 303104)
failed in UME with error 22 (Invalid argument).

valgrind still does not support mips16, build LEDE without mips16 support.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
package/devel/valgrind/patches/120-mips_fix_soft_float.patch
package/devel/valgrind/patches/310-mips-link-tool.patch [new file with mode: 0644]

index 1cf5aec..a407a93 100644 (file)
     return ret;
  }
  
+--- a/coregrind/m_machine.c
++++ b/coregrind/m_machine.c
+@@ -1652,6 +1652,7 @@ Bool VG_(machine_get_hwcaps)( void )
+         }
+      }
++#ifndef __mips_soft_float
+      /* Check if CPU has FPU and 32 dbl. prec. FP registers */
+      int FIR = 0;
+      __asm__ __volatile__(
+@@ -1661,6 +1662,7 @@ Bool VG_(machine_get_hwcaps)( void )
+      if (FIR & (1 << FP64)) {
+         vai.hwcaps |= VEX_PRID_CPU_32FPR;
+      }
++#endif
+      VG_(convert_sigaction_fromK_to_toK)(&saved_sigill_act, &tmp_sigill_act);
+      VG_(sigaction)(VKI_SIGILL, &tmp_sigill_act, NULL);
diff --git a/package/devel/valgrind/patches/310-mips-link-tool.patch b/package/devel/valgrind/patches/310-mips-link-tool.patch
new file mode 100644 (file)
index 0000000..198f740
--- /dev/null
@@ -0,0 +1,38 @@
+r15754 | petarj | 2015-12-29 20:14:37 +0100 (Tue, 29 Dec 2015) | 8 lines
+
+mips: remove link script exception for MIPS arch
+
+Current toolchains on MIPS targets that we care about are reasonably
+modern and we do not need this link script exception for MIPS anymore.
+
+This should fix issues with newer toolchain versions and .MIPS.abiflags
+section.
+
+--- a/coregrind/link_tool_exe_linux.in
++++ b/coregrind/link_tool_exe_linux.in
+@@ -69,24 +69,7 @@ shift; # Remove $ala from @ARGV
+ die "Bogus alt-load address"
+     if (length($ala) < 3 || index($ala, "0x") != 0);
+-# For mips32 or mips64 we need to use "--section-start=.reginfo=$ala" or
+-# "--section-start=.MIPS.options=$ala" respectively, because "-Ttext=$ala" will
+-# not put all the sections to the specificed address ($ala).
+-my $x = `cat ../config.log 2>&1 | grep host_cpu= | sed "s/host_cpu='//g"`;
+-my $arch = substr($x, 0, index($x, "'"));
+-
+-my $extra_args;
+-if (($arch eq 'mips') || ($arch eq 'mipsel')
+-    || ($arch eq 'mipsisa32r2el')) {
+-   $extra_args = "-static -Wl,--section-start=.reginfo=$ala";
+-} elsif (($arch eq 'mips64') || ($arch eq 'mips64el') ||
+-         ($arch eq 'mipsisa64el')) {
+-   $extra_args = "-static -Wl,--section-start=.MIPS.options=$ala";
+-} else {
+-   $extra_args = "-static -Wl,@FLAG_T_TEXT@=$ala";
+-}
+-
+-my $cmd = join(" ", @ARGV, $extra_args);
++my $cmd = join(" ", @ARGV, "-static -Wl,@FLAG_T_TEXT@=$ala");
+ #print "link_tool_exe_linux: $cmd\n";