[FFmpeg-devel] [PATCH] put dispatch_tab* in .data (was Re: Build problem)
Dominik 'Rathann' Mierzejewski
Sun Feb 8 19:10:33 CET 2009
On Wednesday, 04 February 2009 at 11:00, Reimar D?ffinger wrote:
> On Wed, Feb 04, 2009 at 09:25:46AM +0000, M?ns Rullg?rd wrote:
> > Art Clarke <aclarke at xuggle.com> writes:
> > > Hi folks,
> > >
> > > I installed yasm on our Mac build boxes today, and noticed the
> > > following error doing x86_64 builds:
> > >
> > >>> ld: pointer in read-only segment not allowed in slidable image, used in dispatch_tab_sse from libavcodec/x86/fft_mmx.o
> > >
> > > I was wondering if people already knew why this occurs (a perusal of
> > > the archives suggested not). If I don't have yasm installed or
> > > available on the path the build works fine. Any thoughts or anyone
> > > else seeing this?
> > Yes, Apple is stupid as usual. What that error message means is that
> > it doesn't allow relocations in read-only sections, which is utterly
> > silly.
> Well, in that specific case it might also be because the data gets
> placed in .text and not .rodata on OSX, supposedly because of alignment
> Try changing libavcodec/x86/x86inc.asm to use .rodata or .data, maybe
> one of them work...
FWIW, the original code results in a shared library with text relocations
in read-only segment on x86_64. Putting dispatch_tab* in .rodata doesn't
change that, because both .text and .rodata end up in the same segment
that has READ and EXECUTE bits set. Putting dispatch_tab* in .data
gets rid of them. IOW, what about the attached patch?
MPlayer http://mplayerhq.hu | RPMFusion http://rpmfusion.org
There should be a science of discontent. People need hard times and
oppression to develop psychic muscles.
-- from "Collected Sayings of Muad'Dib" by the Princess Irulan
-------------- next part --------------
diff -up ffmpeg-20090204/libavcodec/x86/fft_mmx.asm.pic ffmpeg-20090204/libavcodec/x86/fft_mmx.asm
--- ffmpeg-20090204/libavcodec/x86/fft_mmx.asm.pic 2008-12-19 04:01:08.000000000 +0100
+++ ffmpeg-20090204/libavcodec/x86/fft_mmx.asm 2009-02-08 18:51:15.000000000 +0100
@@ -446,8 +446,9 @@ fft %+ n %+ %3%2:
dispatch_tab%3%2: pointer list_of_fft
; On x86_32, this function does the register saving and restoring for all of fft.
; The others pass args in registers and don't spill anything.
More information about the ffmpeg-devel