On Mon, 22 May 2023 at 16:31, Gerd Hoffmann <kra...@redhat.com> wrote: > > Hi, > > > > Recent clang does have a '-fdirect-access-external-data' switch which > > > should suppress these references, maybe in combination with > > > -fvisibility=hidden? > > > > I'll try that. > > Works (test patch below for reference). >
Excellent, thanks for confirming. So basically, -fdirect-access-external-data forces the behavior in Clang that became the default behavior in GCC 5, which is to assume that an external variable reference can be resolved without the GOT, which is usually true for hosted binaries (given that shared libraries rarely export data symbols but only code symbols, so data symbols can be assumed to be part of the same executable). It is always true for EDK2 as we don't use runtime linking at all. So I think we should add this for all Clang configurations that enable PIE codegen. We don't support GCC < 5 anyway so this gives us uniform behavior for all ELF based toolchains used for x86. > > diff --git a/BaseTools/Conf/tools_def.template > b/BaseTools/Conf/tools_def.template > index 503a6687c1f0..f19992f68a84 100755 > --- a/BaseTools/Conf/tools_def.template > +++ b/BaseTools/Conf/tools_def.template > @@ -1929,7 +1929,7 @@ RELEASE_CLANGDWARF_X64_CC_FLAGS = > DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 "-DEFI > RELEASE_CLANGDWARF_X64_DLINK_FLAGS = DEF(CLANGDWARF_IA32_X64_DLINK_FLAGS) > -flto -Wl,-O3 -Wl,-melf_x86_64 -Wl,--oformat,elf64-x86-64 -Wl,-pie > -mcmodel=small -Wl,--apply-dynamic-relocs > RELEASE_CLANGDWARF_X64_DLINK2_FLAGS = DEF(CLANGDWARF_X64_DLINK2_FLAGS) -O3 > -fuse-ld=lld > > -NOOPT_CLANGDWARF_X64_CC_FLAGS = DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 > "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -fpie -O0 > DEF(CLANGDWARF_X64_TARGET) -g > +NOOPT_CLANGDWARF_X64_CC_FLAGS = DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 > "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -fpie -O0 > DEF(CLANGDWARF_X64_TARGET) -g -fdirect-access-external-data > NOOPT_CLANGDWARF_X64_DLINK_FLAGS = DEF(CLANGDWARF_IA32_X64_DLINK_FLAGS) > -Wl,-O0 -Wl,-melf_x86_64 -Wl,--oformat,elf64-x86-64 -Wl,-pie -mcmodel=small > -Wl,--apply-dynamic-relocs > NOOPT_CLANGDWARF_X64_DLINK2_FLAGS = DEF(CLANGDWARF_X64_DLINK2_FLAGS) -O0 > -fuse-ld=lld > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#105156): https://edk2.groups.io/g/devel/message/105156 Mute This Topic: https://groups.io/mt/98257896/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-