From patchwork Wed Jul 12 19:52:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?R=C3=A9mi_Denis-Courmont?= X-Patchwork-Id: 42615 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6da1:b0:131:a7d0:bc6d with SMTP id gl33csp2425568pzb; Wed, 12 Jul 2023 12:52:59 -0700 (PDT) X-Google-Smtp-Source: APBJJlHryxBSXuoJko1S/2gaW+YTDWKEbv3WQaRGNdrFJbYXFbESL8WAtMI1imrjavTfhIXj7fgM X-Received: by 2002:a17:907:2991:b0:969:e95e:e4f3 with SMTP id eu17-20020a170907299100b00969e95ee4f3mr17930683ejc.55.1689191579482; Wed, 12 Jul 2023 12:52:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689191579; cv=none; d=google.com; s=arc-20160816; b=d5fa7B4lK6SCKgjb5OjVo83i/h/VRiMI4yzbn7QyLc11FjwaZZlOqXHwarUI8RK6AB rFBDDvKvE3Jyf/24RvyYresD/agu/xozvDi0/jb1Dd0zuwYbLHUwAj8C5gWyiPqyBeyI lSCesNgvqE3GI9+E9miZCqFhpz7SbTxxU4cQOez3cPsr5nMHX5l/vp+frGdtY1uvmRdZ Qa1LGBSYECiGZXq9MsvSg2gwnI0HDPRLKUV592kUUuUUGIezts2J4I9bBYbDdPZAQRFW NwewLq1GSXTPJzLyPrC6TKOr62fUCr5aQH5FQwVg5xdN5WtYLA/hPTUxN17/ulv1HZU2 NIVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :delivered-to; bh=MzhjjA/wfqowTKXbXyRPZkwlLe3FPO3iC70X//NvdIU=; fh=hQcp50obTJ8bXC1it5NuEN23RGKfx0/zZ3s2gmreL+A=; b=lbimdIcZQEehIP+KP9YK0GJYSqOPTPdlC1KUdp0aPcJGwFduNjZrKZpurRLR4fSAS1 t2iP6DvNuv6GHFvj0H48b5qub0PnAPRr6a1U6vSFZRmPQ8lLLsYLvBnH2XUznguLzAWP 7reegO+gdQV1m3dlKNj17bhKQq3Ib1DeVT3uBlfSKqK5d9/yfXCJfFNPAsirtqPVmd9M ihO1JSrI9c5RPDT5GoAlMWMzxO52YM0IIW7hCqa6ayQUAWIK+uoTn+DtE5hTSzp6hkIb oNbjw0/eiyfi0vUY8XHTS5r/8YdOTLO5uhk6Ho6sOuibRx8WZbFCsNyXHxc2y/oAOVdu PbvA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id gh7-20020a170906e08700b0099238b86ef1si5632329ejb.164.2023.07.12.12.52.58; Wed, 12 Jul 2023 12:52:59 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 04F1768C319; Wed, 12 Jul 2023 22:52:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org 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_Denis-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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 9EA26qCFdDKg 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, ...)