[Android] [PATCH 5/8] contrib: ffmpeg: Use --extra-cflags='-mincoming-stack-boundary=4'

Martin Storsjö martin at martin.st
Wed Jul 25 11:44:12 CEST 2012


On Wed, 25 Jul 2012, Rafaël Carré wrote:

> Le 2012-07-25 04:51, Edward Wang a écrit :
>> The issue here is that android-x86 doesn't guarantee an aligned stack, which means some of the inline asm functions will waste an extra register on realigning the stack.
>> 
>> libavcodec does however have stuff in place in all entrypoints that realign the stack on all calls into the library. If you build with --extra-cflags='-mincoming-stack-boundary=4', gcc assumes that the stack actually is aligned already, which the entry points ensure, so this inline asm builds fine.
>> 
>> Pointed-out-by: Martin Storsjö <martin at martin.st>
>> ---
>>  contrib/src/ffmpeg/rules.mak |    9 +++++++++
>>  1 files changed, 9 insertions(+), 0 deletions(-)
>> 
>> diff --git a/contrib/src/ffmpeg/rules.mak b/contrib/src/ffmpeg/rules.mak
>> index ed6d8e8..fb069a3 100644
>> --- a/contrib/src/ffmpeg/rules.mak
>> +++ b/contrib/src/ffmpeg/rules.mak
>> @@ -82,6 +82,15 @@ endif
>>  # Linux
>>  ifdef HAVE_LINUX
>>  FFMPEGCONF += --target-os=linux --enable-pic
>> +
>> +ifeq ($(ANDROID_ABI), x86)
>> +ifdef HAVE_ANDROID
>> +# Android-x86 doesn't guarantee an aligned stack, so we tell gcc to
>> +# assume that the stack actually is aligned already
>
> The comment is a bit misleading, if Android-x86 doesn't guarantee
> alignement, then we can't assume that the stack is aligned (since it is
> not).

Not sure if this is an objection against the patch or just the description 
here. The info in the commit message has all the details - libavcodec has 
entry point stuff which makes sure it is aligned on entry, and hopefully 
gcc keeps it aligned across the calls within the library then.

> info gcc seems to say stack pointer is aligned before making function calls

This would support the assumption that gcc would keep the stack aligned.

// Martin


More information about the Android mailing list