SUMMARY valgrind is currently configured to build with: -mcpu=cortex-a8 Since gcc-11 (and above) this means the compiler is free to include simd (neon) instruction. Since neon is not stricly required to run valgrind on armhf, please reduce requirement. STEPS TO REPRODUCE % git clone % ./autogen.sh && ./configure && make % ./vg-in-place Illegal instruction. OBSERVED RESULT neon instructions is present in the binaries. Program received signal SIGILL, Illegal instruction. vgPlain_am_startup (sp_at_startup=3204445696) at m_aspacemgr/aspacemgr-linux.c:1626 1626 init_nsegment(&seg); (gdb) x/i $pc => 0x58071090 <vgPlain_am_startup+20>: vmov.i32 d16, #0 ; 0x00000000 EXPECTED RESULT valgrind should run on neon-less armhf. SOFTWARE/OS VERSIONS % cat /proc/cpuinfo model name : ARMv7 Processor rev 2 (v7l) Features : half thumb fastmult vfp edsp thumbee vfpv3 tls idiva idivt vfpd32 lpae ADDITIONAL INFORMATION Complete thread on valgrind-users https://sourceforge.net/p/valgrind/mailman/valgrind-users/thread/CA%2B7wUsyP0aTmfQMi3ro0AeXvRW8v2G1UYsLoFxpvi_RCUrbdJQ%40mail.gmail.com/#msg37673816
Here is a suggested patch: % sed -i -e 's/cortex-a8/generic-armv7-a+vfpv3-d16/g' Makefile.all.am
Correction, the actual patch should be: sed -i -e 's/cortex-a8/generic-armv7-a/g' Makefile.all.am There's no need for the fpu selection to be specified as generic-armv7-a defaults to vfpv3-d16. Credits: Richard Earnshaw https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=928224#60
The original reason for using -mcpu=cortex-a8 was: commit 68f57d0181acae56adf05e0987990c2b41081f48 Author: Julian Seward <jseward@acm.org> Date: Tue May 31 07:17:54 2011 +0000 On arm-linux, give gcc "-mcpu=cortex-a8" so as to persuade it to accept the armv6t2 (I think) insns (movt, movw) in dispatch-arm-linux.S. Some older gccs apparently think they are compiling for armv6 by default and reject them (gcc 4.4.1 on Ubuntu 9.10, for one.) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11793 So I think generic-armv7-a would be fine too. Have to find an 32bit arm machine to double check. But given that Debian apparently already made this change it is probably correct.
I tried on an armbian 23.02.2 Buster, based on Debian 10.13, so fairly old. And with 6.1.11-rockchip, which has half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm. So it "worked" before already. It seems to also "work" with the patch. But, at least none/tests/arm/v6intThumb doesn't build (before/after the patch). And with that commented out, the make regtest results don't look very good (although the results are identical): == 717 tests, 74 stderr failures, 8 stdout failures, 3 stderrB failures, 2 stdoutB failures, 15 post failures == gdbserver_tests/mcblocklistsearch (stderrB) gdbserver_tests/mcinfcallWSRU (stderrB) gdbserver_tests/nlcontrolc (stdoutB) gdbserver_tests/nlgone_exit (stderrB) gdbserver_tests/nlvgdbsigqueue (stdoutB) memcheck/tests/dw4 (stderr) memcheck/tests/err_disable3 (stderr) memcheck/tests/err_disable4 (stderr) memcheck/tests/leak-cases-full (stderr) memcheck/tests/leak-cases-summary (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-segv-jmp (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/leak_cpp_interior (stderr) memcheck/tests/lks (stderr) memcheck/tests/new_aligned_delete_default (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/sem (stderr) memcheck/tests/sendmsg (stderr) memcheck/tests/supp_unknown (stderr) memcheck/tests/threadname (stderr) memcheck/tests/threadname_xml (stderr) memcheck/tests/varinfo2 (stderr) memcheck/tests/varinfo3 (stderr) memcheck/tests/varinfo4 (stderr) memcheck/tests/varinfo5 (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/varinforestrict (stderr) memcheck/tests/vbit-test/vbit-test (stderr) helgrind/tests/annotate_rwlock (stderr) helgrind/tests/bar_bad (stderr) helgrind/tests/bug392331 (stderr) helgrind/tests/free_is_write (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg04_race_h9 (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/locked_vs_unlocked1_fwd (stderr) helgrind/tests/locked_vs_unlocked1_rev (stderr) helgrind/tests/locked_vs_unlocked2 (stderr) helgrind/tests/locked_vs_unlocked3 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_destroy_cond (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) drd/tests/annotate_trace_memory (stderr) drd/tests/annotate_trace_memory_xml (stderr) drd/tests/atomic_var (stderr) drd/tests/hg03_inherit (stderr) drd/tests/hg05_race2 (stderr) drd/tests/pth_detached (stderr) drd/tests/pth_detached2 (stderr) drd/tests/pth_detached_sem (stderr) drd/tests/rwlock_race (stderr) drd/tests/tc19_shadowmem (stderr) drd/tests/tc21_pthonce (stderr) massif/tests/bug469146 (post) massif/tests/mmapunmap (post) massif/tests/new-cpp (post) massif/tests/overloaded-new (post) none/tests/arm/v6intThumb (stdout) none/tests/arm/v6intThumb (stderr) none/tests/arm/v8crypto_a (stdout) none/tests/arm/v8crypto_a (stderr) none/tests/arm/v8crypto_t (stdout) none/tests/arm/v8crypto_t (stderr) none/tests/arm/v8fpsimd_a (stdout) none/tests/arm/v8fpsimd_a (stderr) none/tests/arm/v8fpsimd_t (stdout) none/tests/arm/v8fpsimd_t (stderr) none/tests/arm/v8memory_a (stdout) none/tests/arm/v8memory_a (stderr) none/tests/arm/v8memory_t (stdout) none/tests/arm/v8memory_t (stderr) none/tests/bigcode (stdout) none/tests/bigcode (stderr) exp-bbv/tests/arm-linux/ll (stderr) exp-bbv/tests/arm-linux/ll (post) exp-bbv/tests/arm-linux/million (stderr) exp-bbv/tests/arm-linux/million (post)