[FFmpeg-cvslog] checkasm: disable unaligned access emulation

Rémi Denis-Courmont git at videolan.org
Fri Jun 7 17:54:42 EEST 2024


ffmpeg | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Jun  1 10:55:51 2024 +0300| [8d117024fe05dcf0f45693b47118e4c26e0940af] | committer: Rémi Denis-Courmont

checkasm: disable unaligned access emulation

The OS may silently fix (emulate) unaligned hardware access exceptions.
This is extremely slow and code should be fixed not to rely on unaligned
access on affected hardware. Accordingly this requests that the OS
disable emulation and instead throw Bus error, which will be caught by
checkasm's signal handler.

This has no effects if the hardware supports unaligned access in
hardware, since no exceptions are generated. prctl() will fail safe in
that case.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8d117024fe05dcf0f45693b47118e4c26e0940af
---

 tests/checkasm/checkasm.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
index d7aa2a9c09..2329e2e1bc 100644
--- a/tests/checkasm/checkasm.c
+++ b/tests/checkasm/checkasm.c
@@ -41,6 +41,9 @@
 #if HAVE_IO_H
 #include <io.h>
 #endif
+#if HAVE_PRCTL
+#include <sys/prctl.h>
+#endif
 
 #if defined(_WIN32) && !defined(SIGBUS)
 /* non-standard, use the same value as mingw-w64 */
@@ -847,6 +850,9 @@ int main(int argc, char *argv[])
     sigaction(SIGILL,  &signal_handler_act, NULL);
     sigaction(SIGSEGV, &signal_handler_act, NULL);
 #endif
+#if HAVE_PRCTL && defined(PR_SET_UNALIGN)
+    prctl(PR_SET_UNALIGN, PR_UNALIGN_SIGBUS);
+#endif
 #if ARCH_ARM && HAVE_ARMV5TE_EXTERNAL
     if (have_vfp(av_get_cpu_flags()) || have_neon(av_get_cpu_flags()))
         checkasm_checked_call = checkasm_checked_call_vfp;



More information about the ffmpeg-cvslog mailing list