[FFmpeg-devel] [FFmpeg-cvslog] tests/checkasm: Add partial support for wasm

Martin Storsjö martin at martin.st
Wed Dec 4 11:56:08 EET 2024


On Wed, 4 Dec 2024, Zhao Zhili wrote:

> ffmpeg | branch: master | Zhao Zhili <zhilizhao at tencent.com> | Wed Nov 20 20:45:35 2024 +0800| [ea3d21c349db5bbfee7840857de81e4b2fc757fa] | committer: Zhao Zhili
>
> tests/checkasm: Add partial support for wasm
>
> WASI mssing signal and siglongjmp support. This patch workaround
> build error and add simd128 flag. Please note that many tests use
> large array on stack, so you need to increase the stack size when
> build checkasm, e.g., --extra-ldflags='-Wl,-z,stack-size=10485760'
>
> Signed-off-by: Zhao Zhili <zhilizhao at tencent.com>
>
>> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ea3d21c349db5bbfee7840857de81e4b2fc757fa
> ---
>
> tests/checkasm/checkasm.c |  8 ++++++++
> tests/checkasm/checkasm.h | 15 +++++++++++++--
> 2 files changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
> index f30c53cec2..544e3ee9ba 100644
> --- a/tests/checkasm/checkasm.c
> +++ b/tests/checkasm/checkasm.c
> @@ -363,6 +363,8 @@ static const struct {
> #elif ARCH_LOONGARCH
>     { "LSX",      "lsx",      AV_CPU_FLAG_LSX },
>     { "LASX",     "lasx",     AV_CPU_FLAG_LASX },
> +#elif ARCH_WASM
> +    { "SIMD128",    "simd128",  AV_CPU_FLAG_SIMD128 },
> #endif
>     { NULL }
> };
> @@ -770,6 +772,8 @@ static LONG NTAPI signal_handler(EXCEPTION_POINTERS *e) {
> }
> #endif
> #else
> +
> +#ifndef _WASI_EMULATED_SIGNAL
> static void signal_handler(int s);
>
> static const struct sigaction signal_handler_act = {
> @@ -784,6 +788,8 @@ static void signal_handler(int s) {
>         checkasm_load_context(s);
>     }
> }
> +#endif // _WASI_EMULATED_SIGNAL
> +
> #endif
>
> /* Compares a string with a wildcard pattern. */
> @@ -933,10 +939,12 @@ int main(int argc, char *argv[])
>     AddVectoredExceptionHandler(0, signal_handler);
> #endif
> #else
> +#ifndef _WASI_EMULATED_SIGNAL
>     sigaction(SIGBUS,  &signal_handler_act, NULL);
>     sigaction(SIGFPE,  &signal_handler_act, NULL);
>     sigaction(SIGILL,  &signal_handler_act, NULL);
>     sigaction(SIGSEGV, &signal_handler_act, NULL);
> +#endif // _WASI_EMULATED_SIGNAL
> #endif
> #if HAVE_PRCTL && defined(PR_SET_UNALIGN)
>     prctl(PR_SET_UNALIGN, PR_UNALIGN_SIGBUS);
> diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
> index 0ba5c3040d..a1bd19c54a 100644
> --- a/tests/checkasm/checkasm.h
> +++ b/tests/checkasm/checkasm.h
> @@ -66,12 +66,23 @@ typedef struct { CONTEXT c; int status; } checkasm_context;
> #define checkasm_save_context() 0
> #define checkasm_load_context() do {} while (0)
> #endif
> -#else
> +#else  // _WIN32
> +
> +#ifdef _WASI_EMULATED_SIGNAL

Why the nested #else + #ifdef, why not #elif defined()? I think that would 
keep the logic slightly less complex.

// Martin



More information about the ffmpeg-devel mailing list