• Martin Storsjö's avatar
    libavcodec: Set hidden visibility on global symbols accessed from AArch64 assembly · e4ac156b
    Martin Storsjö authored
    The AArch64 assembly accesses those symbols directly, without
    indirection via e.g. the GOT on ELF. In order for this not to
    require text relocations, those symbols need to be resolved fully
    at link time, i.e. those symbols can't be interposable.
    
    Normally, so far, this is achieved when linking shared libraries
    in two ways; we have a version script (libavcodec/libavcodec.v) which
    marks all symbols that don't start with av* as local. Additionally,
    we try to add -Wl,-Bsymbolic to the linker options if supported,
    making sure that such symbol references are resolved fully at link
    time, instead of making them interposable.
    
    When the libavcodec static library is linked into another shared
    library, there's no guarantee that it uses similar options (even though
    that would be favourable), which would end up requiring text relocations
    in the AArch64 assembly.
    
    Explicitly mark the symbols that are accessed from AArch64 assembly
    as hidden, so that they are resolved fully at link time even without
    the version script and -Wl,-Bsymbolic.
    Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
    e4ac156b
attributes_internal.h 1.11 KB