On Thu, Jul 14, 2022 at 12:14:38AM +0300, Martin Storsjö wrote: > 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: Martin Storsjö > --- > Moved the attribute to libavutil/internal.h, renamed to a different > namespace (not av_ prefixed), moved the attribute on ff_vp9_subpel_filters > to the header, as suggested. > --- > libavcodec/aacsbrdata.h | 2 +- > libavcodec/fft.h | 2 +- > libavcodec/vp9dsp.h | 2 +- > libavutil/internal.h | 6 ++++++ > 4 files changed, 9 insertions(+), 3 deletions(-) This seems to break build on linux x86-64, i guess iam missing something MAN doc/ffprobe-all.1 In file included from libavcodec/x86/vp9dsp_init_16bpp.c:26:0: ./libavcodec/vp9dsp.h:123:50: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ff_vp9_subpel_filters’ extern const int16_t attribute_visibility_hidden ff_vp9_subpel_filters[3][16][8]; ^~~~~~~~~~~~~~~~~~~~~ ffbuild/common.mak:81: recipe for target 'libavcodec/x86/vp9dsp_init_16bpp.o' failed make: *** [libavcodec/x86/vp9dsp_init_16bpp.o] Error 1 make: *** Waiting for unfinished jobs.... In file included from libavcodec/x86/vp9dsp_init_16bpp_template.c:26:0, from libavcodec/x86/vp9dsp_init_12bpp.c:25: ./libavcodec/vp9dsp.h:123:50: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ff_vp9_subpel_filters’ extern const int16_t attribute_visibility_hidden ff_vp9_subpel_filters[3][16][8]; ^~~~~~~~~~~~~~~~~~~~~ In file included from libavcodec/x86/vp9dsp_init_16bpp_template.c:26:0, from libavcodec/x86/vp9dsp_init_10bpp.c:25: ./libavcodec/vp9dsp.h:123:50: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ff_vp9_subpel_filters’ extern const int16_t attribute_visibility_hidden ff_vp9_subpel_filters[3][16][8]; ^~~~~~~~~~~~~~~~~~~~~ ffbuild/common.mak:81: recipe for target 'libavcodec/x86/vp9dsp_init_12bpp.o' failed make: *** [libavcodec/x86/vp9dsp_init_12bpp.o] Error 1 ffbuild/common.mak:81: recipe for target 'libavcodec/x86/vp9dsp_init_10bpp.o' failed make: *** [libavcodec/x86/vp9dsp_init_10bpp.o] Error 1 In file included from libavcodec/x86/vp9dsp_init.c:26:0: ./libavcodec/vp9dsp.h:123:50: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ff_vp9_subpel_filters’ extern const int16_t attribute_visibility_hidden ff_vp9_subpel_filters[3][16][8]; ^~~~~~~~~~~~~~~~~~~~~ ffbuild/common.mak:81: recipe for target 'libavcodec/x86/vp9dsp_init.o' failed make: *** [libavcodec/x86/vp9dsp_init.o] Error 1 [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Dictatorship: All citizens are under surveillance, all their steps and actions recorded, for the politicians to enforce control. Democracy: All politicians are under surveillance, all their steps and actions recorded, for the citizens to enforce control.