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]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to