[FFmpeg-devel] [PATCH] put dispatch_tab* in .data (was Re: Build problem)

Dominik 'Rathann' Mierzejewski dominik
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
> issues.
> 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?

Regards,
R.

-- 
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:
 %endrep
 %undef n
 
-align 8
+section .data
 dispatch_tab%3%2: pointer list_of_fft
+section .text
 
 ; 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 mailing list