1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-26 19:01:44 +02:00
FFmpeg/tests/checkasm
Martin Storsjö 65739691b9 checkasm: Generalize crash handling
This replaces the riscv specific handling from
7212466e73 (which essentially is
reverted), with a different implementation of the same (plus a bit
more), based on the corresponding feature in dav1d's checkasm,
supporting both Unix and Windows.

See in particular the dav1d commits
0b6ee30eab2400e4f85b735ad29a68a842c34e21,
0421f787ea592fd2cc74c887f20b8dc31393788b,
8501a4b20135f93a4c3b426468e2240e872949c5 and
d23e87f7aee26ddcf5f7a2e185112031477599a7, authored by Henrik Gramner.

The overall approach compared to the existing implementation for
riscv is the same; set up a signal handler, store the state with
sigsetjmp, jump out of the crashing function with siglongjmp.

The main difference is in what happens when the signal handler
is invoked. In the previous implementation, it would resume from
right before calling the crashing function, and then skip that call
based on the setjmp return value.

In the imported implementation from dav1d, we return to right before
the check_func() call, which will skip testing the current function
(as the pointer is the same as it was before).

Other differences are:
- Support for other signal handling mechanisms (Windows
  AddVectoredExceptionHandler)
- Using RtlCaptureContext/RtlRestoreContext instead of setjmp/longjmp
  on Windows with SEH
- Only catching signals once per function - if more than one
  signal is delivered before signal handling is reenabled, any
  signal is handled as it would without our handler
- Not using an arch specific signal handler written in assembly

Signed-off-by: Martin Storsjö <martin@martin.st>
2024-01-11 14:48:53 +02:00
..
aarch64 checkasm: aarch64: Check for stack overflows 2020-05-15 21:22:36 +03:00
arm checkasm: arm: Check for stack overflows 2020-05-15 21:22:34 +03:00
riscv checkasm: Generalize crash handling 2024-01-11 14:48:53 +02:00
x86 x86: replace explicit REP_RETs with RETs 2023-02-01 04:23:55 +01:00
.gitignore Split global .gitignore file into per-directory files 2016-05-13 14:55:56 +02:00
aacencdsp.c checkasm: test for abs_pow34 2023-12-11 18:42:07 +02:00
aacpsdsp.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
ac3dsp.c checkasm: Fix the signature of float_to_fixed24 2023-12-02 18:16:09 +02:00
af_afir.c checkasm: test for dcmul_add 2023-11-27 17:55:24 +02:00
alacdsp.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
audiodsp.c checkasm/audiodsp: Be strict about MMX 2022-10-11 14:18:54 +02:00
av_tx.c x86/tx_float: add 15xN PFA FFT AVX SIMD 2022-09-23 12:35:27 +02:00
blockdsp.c checkasm/blockdsp: Be strict about MMX 2022-10-11 14:18:54 +02:00
bswapdsp.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
checkasm.c checkasm: Generalize crash handling 2024-01-11 14:48:53 +02:00
checkasm.h checkasm: Generalize crash handling 2024-01-11 14:48:53 +02:00
exrdsp.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
fixed_dsp.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
flacdsp.c checkasm/flacdsp: add LPC test 2023-11-18 22:01:59 +02:00
float_dsp.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
fmtconvert.c avcodec/fmtconvert: Remove unused AVCodecContext parameter 2022-09-21 20:26:40 +02:00
g722dsp.c checkasm: add a g722dsp test 2017-07-13 17:00:19 -03:00
h264chroma.c checkasm: add h264chroma tests 2023-05-20 20:07:21 +02:00
h264dsp.c lavc/h264: move some shared code from h264dec to h264_parse 2022-01-26 15:23:30 +01:00
h264pred.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
h264qpel.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
hevc_add_res.c checkasm: pass context as pointer 2023-04-13 15:17:04 +03:00
hevc_deblock.c tests/checkasm/hevc_*: Avoid using declare_func_emms where possible 2023-09-04 11:04:45 +02:00
hevc_idct.c tests/checkasm/hevc_*: Avoid using declare_func_emms where possible 2023-09-04 11:04:45 +02:00
hevc_pel.c tests/checkasm/hevc_*: Avoid using declare_func_emms where possible 2023-09-04 11:04:45 +02:00
hevc_sao.c tests/checkasm/hevc_*: Avoid using declare_func_emms where possible 2023-09-04 11:04:45 +02:00
huffyuvdsp.c checkasm/huffyuvdsp: test for add_hfyu_left_pred_bgr32 2023-11-15 16:51:07 +02:00
idctdsp.c avcodec/idctdsp: Avoid inclusion of avcodec.h 2023-09-11 00:26:34 +02:00
jpeg2000dsp.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
llauddsp.c checkasm: add lossless audio DSP 2023-11-16 16:53:44 +02:00
llviddsp.c checkasm: pass context as pointer 2023-04-13 15:17:04 +03:00
llviddspenc.c tests/checkasm/llvidencdsp: Don't use declare_func_emms 2023-09-04 11:04:45 +02:00
lpc.c tests/checkasm/lpc: correct arithmetic when randomizing buffers 2022-09-23 01:50:59 +02:00
Makefile checkasm/takdsp: add decorrelate_ls test 2023-12-21 22:42:34 +02:00
motion.c checkasm/motion: Don't allocate AVCodecContext 2023-09-28 00:17:47 +02:00
opusdsp.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
pixblockdsp.c checkasm/pixblockdsp: Be strict about MMX 2022-10-11 14:18:54 +02:00
sbrdsp.c checkasm: test the noise case of sbrdsp.hf_apply_noise 2023-11-13 18:34:29 +02:00
sw_gbrp.c swscale/x86/input.asm: add x86-optimized planer rgb2yuv functions 2022-01-11 16:34:33 -03:00
sw_rgb.c Remove unnecessary mem.h inclusions 2021-07-22 14:47:57 +02:00
sw_scale.c tests/checkasm/sw_scale: Avoid declare_func_emms where possible 2023-09-04 11:04:45 +02:00
synth_filter.c dca_core: convert to lavu/tx 2022-11-06 14:39:36 +01:00
takdsp.c avcodec/takdsp: fix const correctness 2023-12-22 09:28:04 -03:00
utvideodsp.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
v210dec.c checkasm/v210dec: add extra space to the destination arrays 2022-12-21 00:36:49 +01:00
v210enc.c checkasm/v210enc: test the entire width of 10-bit planar input arrays 2022-12-01 18:19:03 +01:00
vc1dsp.c checkasm/vc1dsp: Use declare_func_emms only when needed 2022-10-11 14:18:54 +02:00
vf_blend.c avfilter/vf_blend: Move ff_blend_init into a header 2022-05-06 05:19:49 +02:00
vf_bwdif.c avfilter/bwdif: Add proper BWDIFDSPContext 2023-09-28 00:17:47 +02:00
vf_colorspace.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
vf_convolution.c libavfilter/x86/vf_convolution: add sobel filter optimization and unit test with intel AVX512 VNNI 2022-11-14 10:04:16 +08:00
vf_eq.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
vf_gblur.c avfilter/vf_gblur: Move ff_gblur_init into a header 2022-05-06 05:19:49 +02:00
vf_hflip.c avfilter/vf_hflip: Move ff_hflip_init into a header 2022-05-06 05:19:50 +02:00
vf_nlmeans.c avfilter/vf_nlmeans: Move ff_nlmeans_init into a header 2022-05-06 05:19:50 +02:00
vf_threshold.c avfilter/vf_threshold: Move ff_threshold_init into a header 2022-05-06 05:19:50 +02:00
videodsp.c lavu: move LOCAL_ALIGNED from internal.h to mem_internal.h 2021-01-01 14:11:01 +01:00
vorbisdsp.c tests/checkasm: add a test for VorbisDSPContext 2022-09-19 21:28:23 -03:00
vp8dsp.c checkasm/vp8dsp: Use declare_func_emms only when needed 2022-10-08 09:33:36 +02:00
vp9dsp.c avutil/internal: Don't auto-include emms.h 2023-09-04 11:04:45 +02:00