[edk2-devel] [PATCH v4 01/10] BaseTools: add BASETOOLS define

Gerd Hoffmann kraxel at redhat.com
Mon May 22 13:38:39 UTC 2023


On Mon, May 22, 2023 at 02:55:43PM +0200, Ard Biesheuvel wrote:
> On Mon, 22 May 2023 at 14:28, Gerd Hoffmann <kraxel at redhat.com> wrote:
> >
> >   Hi,
> >
> > So, after a way to long time gap, I finally found the time to look at
> > this again.  This time tried both gcc and clang.
> >
> > Just dropping the visibility hidden #pragma works fine for gcc.  It also
> > works with clang for DEBUG and RELEASE builds, but not for NOOPT builds.
> 
> So what failures are you seeing in this case?

"GenFw" -e UEFI_DRIVER -o /home/kraxel/projects/edk2/Build/OvmfX64/NOOPT_CLANGDWARF/X64/FatPkg/EnhancedFatDxe/Fat/OUTPUT/Fat.efi /home/kraxel/projects/edk2/Build/OvmfX64/NOOPT_CLANGDWARF/X64/FatPkg/EnhancedFatDxe/Fat/DEBUG/Fat.dll
GenFw: ERROR 3000: Unsupported
  FindElfGOTSectionFromGOTEntryElfRva: GOT entries found in multiple sections.
make: *** [GNUmakefile:450: /home/kraxel/projects/edk2/Build/OvmfX64/NOOPT_CLANGDWARF/X64/FatPkg/EnhancedFatDxe/Fat/OUTPUT/Fat.efi] Error 1

> I assume this is using LLD.

Yes, there is '-fuse-ld=lld' on the clang command line.

> So the problem with LLD is that it does not update the static
> relocations it emits into the executables, so even if the linker
> relaxes any GOT based references, the relocation entry still claims
> that a GOT based reference exists.

# objdump -x /home/kraxel/projects/edk2/Build/OvmfX64/NOOPT_CLANGDWARF/X64/FatPkg/EnhancedFatDxe/Fat/DEBUG/Fat.dll | grep -i got | head
000000000000134e R_X86_64_REX_GOTPCRELX  gBS-0x0000000000000004
0000000000001ab9 R_X86_64_REX_GOTPCRELX  gBS-0x0000000000000004
0000000000001bbf R_X86_64_REX_GOTPCRELX  gBS-0x0000000000000004
00000000000021c7 R_X86_64_REX_GOTPCRELX  FatFsLock-0x0000000000000004
0000000000003eb1 R_X86_64_REX_GOTPCRELX  gFatDriverBinding-0x0000000000000004
0000000000003ebc R_X86_64_REX_GOTPCRELX  gEfiDiskIoProtocolGuid-0x0000000000000004
0000000000004695 R_X86_64_REX_GOTPCRELX  FatFsLock-0x0000000000000004
0000000000004bfc R_X86_64_REX_GOTPCRELX  FatFsLock-0x0000000000000004
0000000000004c6e R_X86_64_REX_GOTPCRELX  FatFileInterface-0x0000000000000004
0000000000004d74 R_X86_64_REX_GOTPCRELX  FatFsLock-0x0000000000000004

> 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.

take care,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#105126): https://edk2.groups.io/g/devel/message/105126
Mute This Topic: https://groups.io/mt/98257896/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list