[FFmpeg-devel] Stack variables alignment check in libavcodec/dsputil.c

Michael Niedermayer michaelni
Sun Aug 12 00:26:15 CEST 2007


On Sat, Aug 11, 2007 at 07:14:29PM -0300, Ramiro Polla wrote:
> Michael Niedermayer wrote:
> [...]
>> avcodec_encode/decode_* are just small wraper functions and a register 
>> less
>> doesnt matter
>> and for execute i actually would suggest to make pthread.c and co
>> do the stack alignment so that no changes to functions which are passed
>> to execute() are needed that practically means adding the attribute to 
>> worker() in pthread.c
> MinGW finally released gcc 4.2, and as promised here's my patch to fix this 
> alignment issue (based on Ga?l Chardon's patch).
> Zuxy, are you working on this too? Could you test it further too? 
> Everything worked fine with all my tests (w32threads and pthreads) from 
> within MSVC++.

why is the realignment not always done?
what effect does it have on object size?

> Index: libavcodec/dsputil.c
> ===================================================================
> --- libavcodec/dsputil.c	(revision 10074)
> +++ libavcodec/dsputil.c	(working copy)
> @@ -3823,7 +3823,7 @@
>      for(i=0; i<64; i++) inv_zigzag_direct16[ff_zigzag_direct[i]]= i+1;
>  }
> -int ff_check_alignment(void){
> +int attribute_align_arg ff_check_alignment(void){
>      static int did_fail=0;
>      DECLARE_ALIGNED_16(int, aligned);

this IS wrong, it defeats the purpose of the function which is to check that
the stack of the caller is properly aligned

Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Everything should be made as simple as possible, but not simpler.
-- Albert Einstein
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20070812/9370aa8f/attachment.pgp>

More information about the ffmpeg-devel mailing list