[FFmpeg-devel] Memory leak using bitstream filters with shared libs
Måns Rullgård
mans
Sun Mar 9 04:42:46 CET 2008
Uoti Urpala <uoti.urpala at pp1.inet.fi> writes:
> On Sat, 2008-03-08 at 19:23 -0500, Rich Felker wrote:
>> It's actually an implementation bug since the C language requires that
>> the addresses match. I suspect it's binutils doing something stupid
>> due to -Bsymbolic. Anyway this sort of problem is common enough that
>
> It's binutils doing what -Bsymbolic is documented to do - binding
> references to global symbols to the definition within the shared
> library. If the main program is compiled without -fPIC then functions
> are normally bound to the main program's PLT entry (if one exists for
> the function in question), and that's what other code will use.
I can't see a reason why both bits of code can't use similar
indirection to pick up the real address of the function.
The code in question in utils.c is compiled to
mov 0x2755d4(%rip),%rax
whereas the relevant instruction from ffmpeg.c is
movq $0x4038a0,0x48(%rsp)
The address 0x4038a0 is a PLT entry with a jump instruction:
jmpq *0x20e9a2(%rip)
Why can't the movq instruction reference the GOT instead of using the
PLT entry? I realise this would prohibit lazy binding of this symbol,
but surely there's a way to handle that.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-devel
mailing list