[Ffmpeg-devel] [Patch] fix swscale shared lib on x86-64
Michael Niedermayer
michaelni
Tue Sep 19 00:20:40 CEST 2006
Hi
On Mon, Sep 18, 2006 at 12:00:22PM -0400, sean wrote:
> building swscale on x86-64 fails:
>
> /usr/bin/ld: yuv2rgb.o: relocation R_X86_64_PC32 against
> `mmx_00ffw' can not be used when making a shared object;
> recompile with -fPIC
> /usr/bin/ld: final link failed: Bad value
>
> With a lot of help from the binutils list, here a patch that
> allows libswscale to build. It adds
> __attribute__((visibility("hidden"))).
>
>
> Alan Modra < amodra at bigpond.net.au > described what the
> problem is:
>
> >>>mmx_00ffw is just a constant in yuv2rgb.c:
> >>>> >>
> >>>> >>uint64_t attribute_used __attribute__((aligned(8)))
> >>>> >>mmx_00ffw = 0x00ff00ff00ff00ffULL;
>
>
> >The trouble is that this variable is used in asm
> statements >using rip addressing, and the variable is
> global. ELF >shared libraries have particular rules
> regarding global >symbol resolution; A global symbol in a
> shared library may >be overridden by the same symbol in the
> main app code (or >another shared lib). rip addressing
> won't work in this
> >situation for two reasons: a) the rip offset is in
> >read-only code, so relocating the offset means the library
> >can't share that page of text, and more seriously, b) the
> >rip offset is only 32-bit so might not reach to the app
> >symbol or another library sym (64-bit address space).
>
> Works on x86-64. Dunno if it breaks anything on i386.
does -fvisibility=PROTECTED also fix this? if so id suggest to add this
to the flags if supported, this should also have other positive effects
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
In the past you could go to a library and read, borrow or copy any book
Today you'd get arrested for mere telling someone where the library is
More information about the ffmpeg-devel
mailing list