Hey Andrew, thanks for verifying! If my last mail was not clear, this is already done for IA32 builds, by the way. I suspect more trouble appeared there due to the lack of IP-relative addressing.
Theo wanted to prepare a V2 with an enhanced commit message and a 2nd patch to remove the related hacks, I believe. Best regards, Marvin > On 22. Jun 2022, at 19:22, Andrew Fish <af...@apple.com> wrote: > > 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 (#90718): https://edk2.groups.io/g/devel/message/90718 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] -=-=-=-=-=-=-=-=-=-=-=-