mirror_edk2/BaseTools/Source/C
Ard Biesheuvel 24d610e677 BaseTools/GenFw: allow AArch64 tiny and small code model relocations
The AArch64 small C model makes extensive use of ADRP/ADD and
ADRP/{LDR,STR} pairs to emit PC-relative symbol references with
a +/- 4 GB range. Since the relocation pair splits the relative
offset into a relative page offset and an absolute offset into
a 4 KB page, we need to take extra care to ensure that the target
of the relocation preserves its alignment relative to a 4 KB
alignment boundary.

Also, due to a problem with the --emit-relocs GNU ld option, where
it does not recalculate the addends for section relative relocations,
the only way to guarantee correct code is by requiring the relative
section offset to be equal in the ELF and PE/COFF versions of the
binary. This affects both the 'tiny' and 'small' GCC code models.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Tested-by: Leif Lindholm <leif.lindholm@linaro.org>
Reviewed-by: Liming Gao <liming.gao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18197 6f19259b-4bc3-4df7-8a09-765794883524
2015-08-10 07:55:18 +00:00
..
BootSectImage BootSectImage.exe, EfiLdrImage.exe and Split.exe tools have incorrect output from the --version option. 2014-08-25 20:06:55 +00:00
Common BaseTools/Common: fix heap overrun in ReadMemoryFileLine () 2015-07-26 08:03:15 +00:00
EfiLdrImage License header updated to match correct format. 2014-08-28 13:53:34 +00:00
EfiRom License header updated to match correct format. 2014-08-28 13:53:34 +00:00
GenBootSector License header updated to match correct format. 2014-08-28 13:53:34 +00:00
GenCrc32 License header updated to match correct format. 2014-08-28 13:53:34 +00:00
GenFfs BaseTools: use GUID identifiable section for FFS alignment padding 2015-07-27 13:50:19 +00:00
GenFv BaseTools/GenFv: optimize away redundant padding 2015-07-27 13:50:30 +00:00
GenFw BaseTools/GenFw: allow AArch64 tiny and small code model relocations 2015-08-10 07:55:18 +00:00
GenPage License header updated to match correct format. 2014-08-28 13:53:34 +00:00
GenSec License header updated to match correct format. 2014-08-28 13:53:34 +00:00
GenVtf License header updated to match correct format. 2014-08-28 13:53:34 +00:00
GnuGenBootSector License header updated to match correct format. 2014-08-28 13:53:34 +00:00
Include BaseTools: use GUID identifiable section for FFS alignment padding 2015-07-27 13:50:19 +00:00
LzmaCompress BaseTools: Fix build on FreeBSD and allow use of non-gcc system compiler 2015-07-08 01:06:25 +00:00
Makefiles BaseTools: Fix build on FreeBSD and allow use of non-gcc system compiler 2015-07-08 01:06:25 +00:00
PyEfiCompressor License header updated to match correct format. 2014-08-28 13:53:34 +00:00
PyUtility License header updated to match correct format. 2014-08-28 13:53:34 +00:00
Split BootSectImage.exe, EfiLdrImage.exe and Split.exe tools have incorrect output from the --version option. 2014-08-25 20:06:55 +00:00
TianoCompress License header updated to match correct format. 2014-08-28 13:53:34 +00:00
VfrCompile BaseTools: Fix build on FreeBSD and allow use of non-gcc system compiler 2015-07-08 01:06:25 +00:00
VolInfo License header updated to match correct format. 2014-08-28 13:53:34 +00:00
GNUmakefile Sync BaseTool trunk (version r2670) into EDKII BaseTools. 2014-07-01 07:10:10 +00:00
Makefile Fix nmake cleanall bugs. 2014-08-25 05:00:34 +00:00