[FFmpeg-devel] [PATCH] avcodec/aarch64: Access externs via GOT with PIC
Martin Storsjö
martin at martin.st
Mon Jul 11 01:28:44 EEST 2022
On Mon, 11 Jul 2022, Martin Storsjö wrote:
> Hi,
>
> Thanks for your patch! While the patch probably is worthwhile to pursue,
> ffmpeg does work on Android 6 and newer (with the aarch64 assembly), so
> there's some gaps/misses in the reasoning in the patch description.
>
> On Sun, 10 Jul 2022, Triang3l wrote:
>
>> To support PIC, all AArch64 assembly code in FFmpeg uses the `movrel` macro
>> to obtain addresses of labels, such as lookup table constants, in a way
>> that with CONFIG_PIC being 1, PC-relative addresses of labels are computed
>> via the `adrp` instruction.
>
>> This approach, however, is suitable only for labels defined in the same
>> object file. For `adrp` to work directly between object files, the linker
>> has to perform a text relocation.
>
> No, it doesn't. It's fully possible to build such libraries without text
> relocations currently.
>
> My memory of the situation was that we're linking our shared libraries with
> -Wl,-Bsymbolic, which means that those symbol references are bound at link
> time, so the offset from adrp to the target symbol is fixed at link time, and
> no text relocation is needed.
>
> However I did try to link such shared libraries, removing the -Wl,-Bsymbolic
> argument, and it still succeeds. So I'm a bit unsure what really makes it
> work for me when it isn't working for you.
Andreas Rheinhardt kindly reminded me that when linking libavcodec.so, we
add -Wl,--version-script,libavcodec/libavcodec.ver, which makes e.g.
ff_cos_32 a non-exported symbol, which means that it can't be interposed,
and thus the relocation can be fixed at link time.
If I remove that argument, I can reproduce the linker errors, and adding
-Wl,-Bsymbolic fixes it.
I wonder if we could mark these symbols as ELF hidden, so that they
wouldn't need to be interposable at all, even when you link the static
library into a separate shared library?
// Martin
More information about the ffmpeg-devel
mailing list