I reached out to the Xcode ld64 maintainer to make sure it is safe to use -read_only_relocs suppress this way.
Thanks, Andrew Fish > On Jun 18, 2022, at 8:19 PM, Andrew Fish via groups.io > <afish=apple....@groups.io> wrote: > > Marvin, > > I’ll look into this. > > The history here is the original ld64 flags are what was required for proper > function. I got them > directly from the main ld64 maintainer. > > Big picture ld64 is the macOS and iOS linker, and it does not have official > support for other targets, especially embedded. So the combination of flags > are what was required for correctness as not all combination of possible ld64 > flags are actually supported. > > Back in the day we made clang open source contributions to get EFIABI > supported in clang, but we have always used the stock ld64, with help from > the author. >> On Jun 18, 2022, at 8:03 PM, Marvin Häuser <mhaeu...@posteo.de> wrote: >> >> CC Andrew, Rebecca, mentors >> >> Hey all, >> >> The patch itself looks good to me. The description doesn't really capture >> the issue, nor why this is an adequate solution. This should also remove the >> mentioned XCODE5-specific code as part of a single series [1] to confirm the >> issue has been resolved without regressions. >> >> TL;dr for the rest: Apple ld64 complains because there are relocations to >> read-only segments in a PIE executable. As Mach-O allows mapping read-only >> segments of PIEs to multiple virtual addresses (in different processes), >> this is prohibited right at link-time for obvious reasons. PE/COFF doesn't >> really have such a feature (I think Windows used to use static addresses and >> now uses CoW with traditional relocs?) and UEFI has no concept of page >> sharing anyway. Hence, it is safe to allow such relocs and silence the >> warning. All other toolchains should already work this way. >> >> Andrew, Rebecca, if I remember correctly, you pretty much maintain XCODE5. I >> had a conversation with Andrew about related topics before, too. Are you >> fine with this approach? It seems like it has previously been applied to >> IA32 builds already anyway (right from import). >> >> Maybe PIE could be dropped as a whole somehow in the future? For UEFI, it >> basically only adds overhead (or are there blockers to this?). >> >> Best regards, >> Marvin >> >> [1] >> https://github.com/tianocore/edk2/tree/cc2db6ebfb6d9d85ba4c7b35fba1fa37fffc0bc2/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/Xcode5ExceptionHandlerAsm.nasm >> >>> On 18. Jun 2022, at 15:21, Théo Jehl <theojeh...@gmail.com> wrote: >>> >>> From: Theo Jehl <theojeh...@gmail.com> >>> >>> Added -read_only_relocs suppress for XCODE5 X64 toolchain >>> This remove the needs for XCODE5 specific source with relocation fixes >>> >>> Cc: Bob Feng <bob.c.f...@intel.com> >>> Cc: Liming Gao <gaolim...@byosoft.com.cn> >>> Cc: Yuwei Chen <yuwei.c...@intel.com> >>> Cc: Marvin Häuser <mhaeu...@posteo.de> >>> Cc: Vitaly Cheptsov <vit9...@protonmail.com> >>> >>> Signed-off-by: Theo Jehl <theojeh...@gmail.com> >>> --- >>> BaseTools/Conf/tools_def.template | 6 +++--- >>> 1 file changed, 3 insertions(+), 3 deletions(-) >>> >>> diff --git a/BaseTools/Conf/tools_def.template >>> b/BaseTools/Conf/tools_def.template >>> index 5ed19810b727..be35094cecc3 100755 >>> --- a/BaseTools/Conf/tools_def.template >>> +++ b/BaseTools/Conf/tools_def.template >>> @@ -2977,9 +2977,9 @@ RELEASE_XCODE5_IA32_CC_FLAGS = -arch i386 -c -Os >>> -Wall -Werror -inclu >>> ################## >>> # X64 definitions >>> ################## >>> - DEBUG_XCODE5_X64_DLINK_FLAGS = -arch x86_64 -u >>> _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 >>> -pie -all_load -dead_strip -seg1addr 0x240 -map >>> $(DEST_DIR_DEBUG)/$(BASE_NAME).map >>> - NOOPT_XCODE5_X64_DLINK_FLAGS = -arch x86_64 -u >>> _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 >>> -pie -all_load -dead_strip -seg1addr 0x240 -map >>> $(DEST_DIR_DEBUG)/$(BASE_NAME).map >>> -RELEASE_XCODE5_X64_DLINK_FLAGS = -arch x86_64 -u >>> _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 >>> -pie -all_load -dead_strip -seg1addr 0x240 -map >>> $(DEST_DIR_DEBUG)/$(BASE_NAME).map >>> + DEBUG_XCODE5_X64_DLINK_FLAGS = -arch x86_64 -u >>> _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 >>> -pie -all_load -dead_strip -seg1addr 0x240 -read_only_relocs suppress -map >>> $(DEST_DIR_DEBUG)/$(BASE_NAME).map >>> + NOOPT_XCODE5_X64_DLINK_FLAGS = -arch x86_64 -u >>> _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 >>> -pie -all_load -dead_strip -seg1addr 0x240 -read_only_relocs suppress -map >>> $(DEST_DIR_DEBUG)/$(BASE_NAME).map >>> +RELEASE_XCODE5_X64_DLINK_FLAGS = -arch x86_64 -u >>> _$(IMAGE_ENTRY_POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 >>> -pie -all_load -dead_strip -seg1addr 0x240 -read_only_relocs suppress -map >>> $(DEST_DIR_DEBUG)/$(BASE_NAME).map >>> >>> *_XCODE5_X64_SLINK_FLAGS = -static -o >>> DEBUG_XCODE5_X64_ASM_FLAGS = -arch x86_64 -g >>> -- >>> 2.32.1 (Apple Git-133) >>> >> > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#90691): https://edk2.groups.io/g/devel/message/90691 Mute This Topic: https://groups.io/mt/91840126/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-