Acidanthera UEFI Development Kit based on EDK II edk2-stable202311
Go to file
Zenith432 ecbaa856da BaseTools/GenFw: Add X64 GOTPCREL Support to GenFw
Adds support for the following X64 ELF relocations to GenFw
  R_X86_64_GOTPCREL
  R_X86_64_GOTPCRELX
  R_X86_64_REX_GOTPCRELX

Background:
The GCC49 and GCC5 toolchains use the small pie model for X64.  In the
small pie model, gcc emits a GOTPCREL relocation whenever C code takes
the address of a global function.  The emission of GOTPCREL is mitigated
by several factors
1. In GCC49, all global symbols are declared hidden thereby eliminating
the emission of GOTPCREL.
2. In GCC5, LTO is used.  In LTO, the complier first creates intermediate
representation (IR) files.  During the static link stage, the LTO compiler
combines all IR files as a single compilation unit, using linker symbol
assistance to generate code.  Any global symbols defined in the IR that
are not referenced from outside the IR are converted to local symbols -
thereby eliminating the emission of GOTPCREL for them.
3. The linker (binutils ld) further transforms any GOTPCREL used with
the movq opcode to a direct rip-relative relocation used with the leaq
opcode.  This linker optimization can be disabled with the option
-Wl,--no-relax.  Furthermore, gcc is able to emit GOTPCREL with other
opcodes
  - pushq opcode for passing arguments to functions.
  - addq/subq opcodes for pointer arithmetic.
These other opcode uses are not transformed by the linker.
Ultimately, in GCC5 there are some emissions of GOTPCREL that survive
all these mitigations - if C code takes the address of a global function
defined in assembly code - and performs pointer arithmetic on the
address - then the GOTPCREL remains in the final linker product.
A GOTPCREL relocation today causes the build to stop since GenFw does
not handle them.  It is possible to eliminate any remaining GOTPCREL
emissions by manually declaring the global symbols causing them to have
hidden visibility.  This patch is offered instead to allow GenFw to
handle any residual GOTPCREL.

Cc: Shi Steven <steven.shi@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Zenith432 <zenith432@users.sourceforge.net>
Reviewed-by: Liming Gao <liming.gao@intel.com>
2018-07-11 16:22:08 +08:00
AppPkg AppPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:35 +08:00
ArmPkg ArmPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:35 +08:00
ArmPlatformPkg ArmPlatformPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:36 +08:00
ArmVirtPkg ArmVirtPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:36 +08:00
BaseTools BaseTools/GenFw: Add X64 GOTPCREL Support to GenFw 2018-07-11 16:22:08 +08:00
BeagleBoardPkg BeagleBoardPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:37 +08:00
Conf
CorebootModulePkg CorebootModulePkg/CbSupportDxe: Remove SCI_EN setting 2018-06-11 16:16:30 +08:00
CorebootPayloadPkg CorebootPayloadPkg: Conditionally add DebugAgentLib for DXE drivers 2018-03-30 07:28:18 +08:00
CryptoPkg CryptoPkg: Clean up source files 2018-06-28 11:19:40 +08:00
DuetPkg DuetPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:38 +08:00
EdkCompatibilityPkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
EdkShellBinPkg EdkShellBinPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:38 +08:00
EdkShellPkg EdkShellPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:42 +08:00
EmbeddedPkg EmbeddedPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:43 +08:00
EmulatorPkg EmulatorPkg/SmbiosLib: Declare the correct library class. 2018-05-24 13:33:56 -07:00
FatBinPkg FatBinPkg: Clean up source files 2018-06-28 11:19:41 +08:00
FatPkg FatPkg: Clean up source files 2018-06-28 11:19:41 +08:00
IntelFrameworkModulePkg IntelFrameworkModulePkg: Removing ipf from edk2. 2018-06-29 16:19:44 +08:00
IntelFrameworkPkg IntelFrameworkPkg: Removing ipf from edk2. 2018-06-29 16:19:45 +08:00
IntelFsp2Pkg IntelFsp2Pkg: Clean up source files 2018-06-28 11:19:43 +08:00
IntelFsp2WrapperPkg IntelFsp2WrapperPkg: Clean up source files 2018-06-28 11:19:44 +08:00
IntelFspPkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
IntelFspWrapperPkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
IntelSiliconPkg IntelSiliconPkg: Clean up source files 2018-06-28 11:19:44 +08:00
MdeModulePkg MdeModulePkg CapsuleApp: Fix NestedCapsuleHeader->Flags assigned wrong 2018-07-11 15:31:05 +08:00
MdePkg MdePkg/BaseLib: Add bit field population calculating methods 2018-07-09 10:29:45 +08:00
NetworkPkg NetworkPkg: Clean up source files 2018-06-28 11:19:49 +08:00
Nt32Pkg Nt32Pkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:45 +08:00
Omap35xxPkg Omap35xxPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:46 +08:00
OptionRomPkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
OvmfPkg OvmfPkg/QemuFlashFvbServicesRuntimeDxe: Restore C-bit when SEV is active 2018-07-06 20:08:24 +02:00
PcAtChipsetPkg PcAtChipsetPkg: Clean up source files 2018-06-28 11:19:49 +08:00
QuarkPlatformPkg QuarkPlatformPkg/PlatformFlashAccessLib: Add progress API 2018-05-28 12:23:23 -07:00
QuarkSocPkg QuarkSocPkg/QNCSmmDispatcher: Fix use after free issue #2 2017-08-16 19:42:17 -07:00
SecurityPkg SecurityPkg/OpalPassword: Fixed input correct password not works issue 2018-07-11 11:16:06 +08:00
ShellBinPkg ShellBinPkg: Clean up source files 2018-06-28 11:19:51 +08:00
ShellPkg ShellPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:49 +08:00
SignedCapsulePkg SignedCapsulePkg RecoveryModuleLoadPei: Fix typo 'Press' to 'Process' 2018-07-11 15:31:01 +08:00
SourceLevelDebugPkg SourceLevelDebugPkg: Removing ipf from edk2. 2018-06-29 16:19:50 +08:00
StdLib StdLib: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:51 +08:00
StdLibPrivateInternalFiles StdLibPrivateInternalFiles: Removing ipf from edk2. 2018-06-29 16:19:51 +08:00
UefiCpuPkg UefiCpuPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:52 +08:00
UnixPkg
Vlv2DeviceRefCodePkg edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
Vlv2TbltDevicePkg Vlv2TbltDevicePkg: Set SMM Stack size to 16 KB 2018-06-24 16:18:36 -07:00
.gitignore edk2: Add .DS_Store to .gitignore for macOS 2017-05-19 15:14:34 -07:00
.gitmodules CryptoPkg: Adding OpenSSL as one submodule of EDKII repo 2018-01-18 14:06:15 +08:00
BuildNotes2.txt
Contributions.txt edk2: Fix typo in Contributions.txt 2017-08-16 17:50:44 +08:00
License.txt edk2: Move License.txt file to root 2017-08-03 11:02:17 -07:00
Maintainers.txt Maintainers.txt: add Laszlo Ersek to stewards 2018-04-24 09:56:59 +01:00
Readme.md edk2: Add Readme.md to root of edk2 repository 2017-08-03 11:02:25 -07:00
StandaloneMmPkg Maintainers.txt: Add StandaloneMmPkg and maintainers 2018-03-21 01:13:40 +00:00
edksetup.bat BaseTools: suppress usage instructions with rebuild options 2017-07-04 10:16:13 +08:00
edksetup.sh BaseTools/edksetup.sh: fix invalid test for current working directory 2017-08-10 12:54:58 +08:00

Readme.md

EDK II Project

A modern, feature-rich, cross-platform firmware development environment for the UEFI and PI specifications from www.uefi.org.

Contributions to the EDK II open source project are covered by the TianoCore Contribution Agreement 1.1

The majority of the content in the EDK II open source project uses a BSD 2-Clause License. The EDK II open source project contains the following components that are covered by additional licenses:

The EDK II Project is composed of packages. The maintainers for each package are listed in Maintainers.txt.

Resources