From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 947E845208 for ; Wed, 12 Jul 2023 19:52:58 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BC81F68C36A; Wed, 12 Jul 2023 22:52:54 +0300 (EEST) Received: from ursule.remlab.net (vps-a2bccee9.vps.ovh.net [51.75.19.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0672B68C2D1 for ; Wed, 12 Jul 2023 22:52:48 +0300 (EEST) Received: from basile.remlab.net (localhost [IPv6:::1]) by ursule.remlab.net (Postfix) with ESMTP id 4081CC006A for ; Wed, 12 Jul 2023 22:52:47 +0300 (EEST) From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Jul 2023 22:52:47 +0300 Message-Id: <20230712195247.38674-1-remi@remlab.net> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] checkasm/riscv: report an error upon SIGILL X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Terminating the whole checkasm process is not very helpful. This will report if an illegal instruction occurs while executing a tested function. --- tests/checkasm/checkasm.c | 20 ++++++++++++++++++++ tests/checkasm/checkasm.h | 8 +++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index 4311a8ffcb..53cf6c48bb 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -29,6 +29,7 @@ # endif #endif +#include #include #include #include @@ -68,6 +69,15 @@ void (*checkasm_checked_call)(void *func, int dummy, ...) = checkasm_checked_call_novfp; #endif +#if ARCH_RISCV +_Thread_local sigjmp_buf checkasm_fail_sig_jmpbuf; + +static void fail_sig_handler(int signum) +{ + siglongjmp(checkasm_fail_sig_jmpbuf, signum); +} +#endif + /* List of tests to invoke */ static const struct { const char *name; @@ -724,6 +734,16 @@ int main(int argc, char *argv[]) if (have_vfp(av_get_cpu_flags()) || have_neon(av_get_cpu_flags())) checkasm_checked_call = checkasm_checked_call_vfp; #endif +#if ARCH_RISCV + { + struct sigaction act = { + .sa_handler = fail_sig_handler, + .sa_flags = 0, + }; + + sigaction(SIGILL, &act, NULL); + } +#endif if (!tests[0].func || !cpus[0].flag) { fprintf(stderr, "checkasm: no tests to perform\n"); diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h index 117d4dd35c..5a58ee19d0 100644 --- a/tests/checkasm/checkasm.h +++ b/tests/checkasm/checkasm.h @@ -23,6 +23,7 @@ #ifndef TESTS_CHECKASM_CHECKASM_H #define TESTS_CHECKASM_CHECKASM_H +#include #include #include "config.h" @@ -210,12 +211,17 @@ void checkasm_checked_call(void *func, ...); #elif ARCH_RISCV void checkasm_set_function(void *); void *checkasm_get_wrapper(void); +extern _Thread_local sigjmp_buf checkasm_fail_sig_jmpbuf; #if (__riscv_xlen == 64) && defined (__riscv_d) #define declare_new(ret, ...) \ + int __signum; \ ret (*checked_call)(__VA_ARGS__) = checkasm_get_wrapper(); #define call_new(...) \ - (checkasm_set_function(func_new), checked_call(__VA_ARGS__)) + (checkasm_set_function(func_new), \ + (__signum = sigsetjmp(checkasm_fail_sig_jmpbuf, 1)) == 0 \ + ? checked_call(__VA_ARGS__) \ + : (checkasm_fail_func("Crash signal: %d", __signum), 0)) #endif #else #define declare_new(ret, ...) -- 2.40.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".