[FFmpeg-devel] Compiling with Sun cc
Loren Merritt
lorenm
Fri Oct 3 09:04:20 CEST 2008
On Thu, 2 Oct 2008, Roman V. Shaposhnik wrote:
> On Fri, 2008-10-03 at 06:46 +0300, Uoti Urpala wrote:
>> On Thu, 2008-10-02 at 20:10 -0700, Roman V. Shaposhnik wrote:
>>>
>>> Well, it is very controversial thing, for one. The trouble is, that even
>>> gcc can not really guarantee it, since initial stack assumptions are not
>>> controlled by the compiler, but rather by the combination of an OS
>>> and how linking was done.
>>
>> The initial stack state is irrelevant.
>> GCC will always align the stack at the start of main().
>
> Huh? Meaning that it does so in crt*.o? And tough luck if you link
> with a different crt* modules?
main() is in ffmpeg.o not crt*.o
I confirm that gcc compiles main() as if it had force_align_arg_pointer.
>> The only way stack alignment can fail is if
>> GCC-generated code is called from a function compiled with another
>> compiler
>
> Or written by hand, or generate by JIT compiler, or...
There isn't a single asm statement in ffmpeg that calls back to C. And if
we ever need that, someone handwriting asm can preserve whatever they want,
including alignment.
>> FFmpeg uses that attribute for functions that can be called from outside
>> the library and require the stack to be aligned.
>
> Tracing all the entry points in a library such as libavcodec could
> be quite tricky. And arbitrary force_align_arg_pointer is
> expensive.
Forbidding SSE is expensive too.
Even if the only way to guarantee alignment was to force_align_arg_pointer
every nonstatic function (or every function that declares aligned data),
that would still be a necessary cost.
--Loren Merritt
More information about the ffmpeg-devel
mailing list