mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
78db8405c0
Many of the routines within hevcdsp_epel_neon and hevcdsp_qpel_neon store temporary buffers on the stack. When consuming it, many of these functions use the stack pointer as incremental pointer for reading the data (instead of storing it in another register), which is rather unusual. Technically, this is fine as long as the pointer remains properly aligned. However in the case of ff_hevc_put_hevc_qpel_uni_w_hv64_8_neon_i8mm, after incrementing sp when reading data (within each 16 pixel wide stripe) it would then reset the stack pointer back to a lower value, for reading the next 16 pixel wide stripe, expecting the data to remain untouched. This can't be assumed; data on the stack below the stack pointer can be clobbered (e.g. by a signal handler). Some OS ABIs allow for a little margin that won't be touched, aka a red zone, but not all do. The ones that do, guarantee 16 or 128 bytes, not 9 KB. Convert this function to use a separate pointer register to iterate through the data, retaining the stack pointer to point at the bottom of the data we require to remain untouched. Signed-off-by: Martin Storsjö <martin@martin.st> |
||
---|---|---|
.. | ||
aacpsdsp_init_aarch64.c | ||
aacpsdsp_neon.S | ||
cabac.h | ||
fmtconvert_init.c | ||
fmtconvert_neon.S | ||
h264chroma_init_aarch64.c | ||
h264cmc_neon.S | ||
h264dsp_init_aarch64.c | ||
h264dsp_neon.S | ||
h264idct_neon.S | ||
h264pred_init.c | ||
h264pred_neon.S | ||
h264qpel_init_aarch64.c | ||
h264qpel_neon.S | ||
hevcdsp_deblock_neon.S | ||
hevcdsp_epel_neon.S | ||
hevcdsp_idct_neon.S | ||
hevcdsp_init_aarch64.c | ||
hevcdsp_qpel_neon.S | ||
hevcdsp_sao_neon.S | ||
hpeldsp_init_aarch64.c | ||
hpeldsp_neon.S | ||
idct.h | ||
idctdsp_init_aarch64.c | ||
idctdsp_neon.S | ||
Makefile | ||
me_cmp_init_aarch64.c | ||
me_cmp_neon.S | ||
mpegaudiodsp_init.c | ||
mpegaudiodsp_neon.S | ||
neon.S | ||
neontest.c | ||
opusdsp_init.c | ||
opusdsp_neon.S | ||
pixblockdsp_init_aarch64.c | ||
pixblockdsp_neon.S | ||
rv40dsp_init_aarch64.c | ||
sbrdsp_init_aarch64.c | ||
sbrdsp_neon.S | ||
simple_idct_neon.S | ||
synth_filter_init.c | ||
synth_filter_neon.S | ||
vc1dsp_init_aarch64.c | ||
vc1dsp_neon.S | ||
videodsp_init.c | ||
videodsp.S | ||
vorbisdsp_init.c | ||
vorbisdsp_neon.S | ||
vp8dsp_init_aarch64.c | ||
vp8dsp_neon.S | ||
vp8dsp.h | ||
vp9dsp_init_10bpp_aarch64.c | ||
vp9dsp_init_12bpp_aarch64.c | ||
vp9dsp_init_16bpp_aarch64_template.c | ||
vp9dsp_init_aarch64.c | ||
vp9dsp_init.h | ||
vp9itxfm_16bpp_neon.S | ||
vp9itxfm_neon.S | ||
vp9lpf_16bpp_neon.S | ||
vp9lpf_neon.S | ||
vp9mc_16bpp_neon.S | ||
vp9mc_aarch64.S | ||
vp9mc_neon.S |