| From 2f7f1e73c10f9057be27ec6ffe92aaf8084d176f Mon Sep 17 00:00:00 2001 |
| From: Liming Gao <liming.gao@intel.com> |
| Date: Wed, 23 Aug 2017 16:04:04 +0800 |
| Subject: [PATCH] BaseTools: Add the missing -pie link option in GCC tool chain |
| |
| https://bugzilla.tianocore.org/show_bug.cgi?id=671 |
| GCC tool chain uses -fpie in CC_FLAGS. So, add -pie in DLINK_FLAGS. |
| More discussion in |
| https://lists.01.org/pipermail/edk2-devel/2017-August/013508.html |
| |
| 3.13 Options for Linking |
| ======================== |
| '-pie' |
| Produce a position independent executable on targets that support |
| it. For predictable results, you must also specify the same set |
| of options used for compilation ('-fpie', '-fPIE', or model suboptions) when you specify this linker option. |
| |
| 3.18 Options for Code Generation Conventions |
| ============================================ |
| '-fpie' |
| '-fPIE' |
| These options are similar to '-fpic' and '-fPIC', but generated |
| position independent code can be only linked into executables. |
| Usually these options are used when '-pie' GCC option is used |
| during linking. |
| '-fpie' and '-fPIE' both define the macros '__pie__' and |
| '__PIE__'. The macros have the value 1 for '-fpie' and 2 for |
| '-fPIE'. |
| |
| Contributed-under: TianoCore Contribution Agreement 1.1 |
| Signed-off-by: Liming Gao <liming.gao@intel.com> |
| Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com> |
| Tested-by: Laszlo Ersek <lersek@redhat.com> |
| Reviewed-by: Laszlo Ersek <lersek@redhat.com> |
| --- |
| BaseTools/Conf/tools_def.template | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template |
| index 1fa3ca3..998ed5c 100755 |
| --- a/BaseTools/Conf/tools_def.template |
| +++ b/BaseTools/Conf/tools_def.template |
| @@ -4375,7 +4375,7 @@ DEFINE GCC44_IA32_X64_DLINK_COMMON = -nostdlib -Wl,-n,-q,--gc-sections -z comm
|
| DEFINE GCC44_IA32_X64_ASLDLINK_FLAGS = DEF(GCC44_IA32_X64_DLINK_COMMON) -Wl,--entry,ReferenceAcpiTable -u ReferenceAcpiTable
|
| DEFINE GCC44_IA32_X64_DLINK_FLAGS = DEF(GCC44_IA32_X64_DLINK_COMMON) -Wl,--entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map
|
| DEFINE GCC44_IA32_DLINK2_FLAGS = -Wl,--defsym=PECOFF_HEADER_SIZE=0x220 DEF(GCC_DLINK2_FLAGS_COMMON)
|
| -DEFINE GCC44_X64_DLINK_FLAGS = DEF(GCC44_IA32_X64_DLINK_FLAGS) -Wl,-melf_x86_64,--oformat=elf64-x86-64
|
| +DEFINE GCC44_X64_DLINK_FLAGS = DEF(GCC44_IA32_X64_DLINK_FLAGS) -Wl,-melf_x86_64,--oformat=elf64-x86-64,-pie
|
| DEFINE GCC44_X64_DLINK2_FLAGS = -Wl,--defsym=PECOFF_HEADER_SIZE=0x228 DEF(GCC_DLINK2_FLAGS_COMMON)
|
| DEFINE GCC44_ASM_FLAGS = DEF(GCC_ASM_FLAGS)
|
|
|
| @@ -4455,7 +4455,7 @@ DEFINE GCC49_IA32_X64_DLINK_COMMON = -nostdlib -Wl,-n,-q,--gc-sections -z comm
|
| DEFINE GCC49_IA32_X64_ASLDLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_COMMON) -Wl,--entry,ReferenceAcpiTable -u ReferenceAcpiTable
|
| DEFINE GCC49_IA32_X64_DLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_COMMON) -Wl,--entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map
|
| DEFINE GCC49_IA32_DLINK2_FLAGS = DEF(GCC48_IA32_DLINK2_FLAGS)
|
| -DEFINE GCC49_X64_DLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_FLAGS) -Wl,-melf_x86_64,--oformat=elf64-x86-64
|
| +DEFINE GCC49_X64_DLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_FLAGS) -Wl,-melf_x86_64,--oformat=elf64-x86-64,-pie
|
| DEFINE GCC49_X64_DLINK2_FLAGS = DEF(GCC48_X64_DLINK2_FLAGS)
|
| DEFINE GCC49_ASM_FLAGS = DEF(GCC48_ASM_FLAGS)
|
| DEFINE GCC49_ARM_ASM_FLAGS = DEF(GCC48_ARM_ASM_FLAGS)
|
| -- |
| 2.7.4 |
| |