From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from ma1-aaemail-dr-lapp02.apple.com (ma1-aaemail-dr-lapp02.apple.com [17.171.2.68]) by mx.groups.io with SMTP id smtpd.web12.10113.1655918562050371261 for ; Wed, 22 Jun 2022 10:22:42 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@apple.com header.s=20180706 header.b=axZ4Cwh4; spf=pass (domain: apple.com, ip: 17.171.2.68, mailfrom: afish@apple.com) Received: from pps.filterd (ma1-aaemail-dr-lapp02.apple.com [127.0.0.1]) by ma1-aaemail-dr-lapp02.apple.com (8.16.0.42/8.16.0.42) with SMTP id 25MH0NWe064686; Wed, 22 Jun 2022 10:22:30 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=apple.com; h=content-type : mime-version : subject : from : in-reply-to : date : cc : content-transfer-encoding : message-id : references : to; s=20180706; bh=A2CBDUp9kROUryX4krRlEJyhPWvs/zMK8CcZ+PKusVU=; b=axZ4Cwh4Qw6N1+/Z4dnE1Jkt09cf8HL46XokAHbii8x8SipvN+HRzaENLSivHLEA0VGx AUnUk15o65zvJrcdm4AWcoZyjwB9zXRLDXtTBt4ZPy3AcxGJfKT4SzcU7ot3ay7cml6r BD/+tHEeN72YxWN9tYIphgzRy6qFywDKBVoetrGtBV9KNO46HDzkerBj1+sxgUZpREse 300rVVYtaaaY0Z3SKXonl0wVzI9gXGKuwQf839YHt52kzKEbPOv8cq1eMe1w9VbcjhWp 1uKMaXqZwlsoC30LcRLM+HoIHyNC1ykeFZM2ETTYXQsdfwp+DJpO8t9B0+cglXu3XQto 1g== Received: from rn-mailsvcp-mta-lapp04.rno.apple.com (rn-mailsvcp-mta-lapp04.rno.apple.com [10.225.203.152]) by ma1-aaemail-dr-lapp02.apple.com with ESMTP id 3gsbcttg3r-14 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Wed, 22 Jun 2022 10:22:30 -0700 Received: from rn-mailsvcp-mmp-lapp02.rno.apple.com (rn-mailsvcp-mmp-lapp02.rno.apple.com [17.179.253.15]) by rn-mailsvcp-mta-lapp04.rno.apple.com (Oracle Communications Messaging Server 8.1.0.18.20220407 64bit (built Apr 7 2022)) with ESMTPS id <0RDW003612XGG080@rn-mailsvcp-mta-lapp04.rno.apple.com>; Wed, 22 Jun 2022 10:22:28 -0700 (PDT) Received: from process_milters-daemon.rn-mailsvcp-mmp-lapp02.rno.apple.com by rn-mailsvcp-mmp-lapp02.rno.apple.com (Oracle Communications Messaging Server 8.1.0.18.20220407 64bit (built Apr 7 2022)) id <0RDW00K002IK9S00@rn-mailsvcp-mmp-lapp02.rno.apple.com>; Wed, 22 Jun 2022 10:22:28 -0700 (PDT) X-Va-A: X-Va-T-CD: 10fc09905c5c6d5c7f5c6673c74e888d X-Va-E-CD: 34d828171d62a66504fe446d19c636f0 X-Va-R-CD: a2e620c742550a3a5a5b3202624e2dc2 X-Va-CD: 0 X-Va-ID: d131fb73-cc7b-4fca-8bdf-953ed8405fa2 X-V-A: X-V-T-CD: 10fc09905c5c6d5c7f5c6673c74e888d X-V-E-CD: 34d828171d62a66504fe446d19c636f0 X-V-R-CD: a2e620c742550a3a5a5b3202624e2dc2 X-V-CD: 0 X-V-ID: 21423e35-6db8-4ae5-a680-4abd9a52b7d8 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.517,18.0.883 definitions=2022-06-22_04:2022-06-22,2022-06-22 signatures=0 Received: from smtpclient.apple (unknown [17.235.53.23]) by rn-mailsvcp-mmp-lapp02.rno.apple.com (Oracle Communications Messaging Server 8.1.0.18.20220407 64bit (built Apr 7 2022)) with ESMTPSA id <0RDW006MO2XE0O00@rn-mailsvcp-mmp-lapp02.rno.apple.com>; Wed, 22 Jun 2022 10:22:27 -0700 (PDT) MIME-version: 1.0 (Mac OS X Mail 15.0 \(3693.20.0.1.32\)) Subject: Re: [edk2-devel] [PATCH v1 1/1] BaseTools: Suppress read only relocs errors on XCODE5 X64 toolchain From: "Andrew Fish" In-reply-to: <16F9E770868D27D7.32537@groups.io> Date: Wed, 22 Jun 2022 10:22:26 -0700 Cc: =?utf-8?Q?Marvin_H=C3=A4user?= , =?utf-8?Q?Th=C3=A9o_Jehl?= , Bob Feng , Liming Gao , Yuwei Chen , Vitaly Cheptsov , Rebecca Cran , Pedro Falcato , Isaac W Oram Message-id: <5C4BDE52-3FA5-4683-ABF2-FEEB447A6DCE@apple.com> References: <0BC4B9BB-0A4A-40EA-B8D8-FB0A04B38806@posteo.de> <16F9E770868D27D7.32537@groups.io> To: devel@edk2.groups.io, Andrew Fish X-Mailer: Apple Mail (2.3693.20.0.1.32) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.517,18.0.883 definitions=2022-06-22_04:2022-06-22,2022-06-22 signatures=0 Content-type: text/plain; charset=utf-8 Content-transfer-encoding: quoted-printable I reached out to the Xcode ld64 maintainer to make sure it is safe to use -= read_only_relocs suppress this way.=20 Thanks, Andrew Fish > On Jun 18, 2022, at 8:19 PM, Andrew Fish via groups.io wrote: >=20 > Marvin, >=20 > I=E2=80=99ll look into this. >=20 > The history here is the original ld64 flags are what was required for pro= per function. I got them > directly from the main ld64 maintainer.=20 >=20 > Big picture ld64 is the macOS and iOS linker, and it does not have offici= al support for other targets, especially embedded. So the combination of fl= ags are what was required for correctness as not all combination of possibl= e ld64 flags are actually supported. >=20 > Back in the day we made clang open source contributions to get EFIABI sup= ported 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=C3=A4user wro= te: >>=20 >> =EF=BB=BFCC Andrew, Rebecca, mentors >>=20 >> Hey all, >>=20 >> The patch itself looks good to me. The description doesn't really captur= e 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 confir= m the issue has been resolved without regressions. >>=20 >> TL;dr for the rest: Apple ld64 complains because there are relocations t= o read-only segments in a PIE executable. As Mach-O allows mapping read-onl= y 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 an= d now uses CoW with traditional relocs?) and UEFI has no concept of page sh= aring anyway. Hence, it is safe to allow such relocs and silence the warnin= g. All other toolchains should already work this way. >>=20 >> Andrew, Rebecca, if I remember correctly, you pretty much maintain XCODE= 5. I had a conversation with Andrew about related topics before, too. Are y= ou fine with this approach? It seems like it has previously been applied to= IA32 builds already anyway (right from import). >>=20 >> Maybe PIE could be dropped as a whole somehow in the future? For UEFI, i= t basically only adds overhead (or are there blockers to this?). >>=20 >> Best regards, >> Marvin >>=20 >> [1] https://github.com/tianocore/edk2/tree/cc2db6ebfb6d9d85ba4c7b35fba1f= a37fffc0bc2/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/Xcode5ExceptionHa= ndlerAsm.nasm >>=20 >>> On 18. Jun 2022, at 15:21, Th=C3=A9o Jehl wrote: >>>=20 >>> From: Theo Jehl >>>=20 >>> Added -read_only_relocs suppress for XCODE5 X64 toolchain >>> This remove the needs for XCODE5 specific source with relocation fixes >>>=20 >>> Cc: Bob Feng >>> Cc: Liming Gao >>> Cc: Yuwei Chen >>> Cc: Marvin H=C3=A4user >>> Cc: Vitaly Cheptsov >>>=20 >>> Signed-off-by: Theo Jehl >>> --- >>> BaseTools/Conf/tools_def.template | 6 +++--- >>> 1 file changed, 3 insertions(+), 3 deletions(-) >>>=20 >>> diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_d= ef.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 =3D -arch i386 -c = -Os -Wall -Werror -inclu >>> ################## >>> # X64 definitions >>> ################## >>> - DEBUG_XCODE5_X64_DLINK_FLAGS =3D -arch x86_64 -u _$(IMAGE_ENTRY= _POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 -pie -all_load -d= ead_strip -seg1addr 0x240 -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map >>> - NOOPT_XCODE5_X64_DLINK_FLAGS =3D -arch x86_64 -u _$(IMAGE_ENTRY= _POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 -pie -all_load -d= ead_strip -seg1addr 0x240 -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map >>> -RELEASE_XCODE5_X64_DLINK_FLAGS =3D -arch x86_64 -u _$(IMAGE_ENTRY= _POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 -pie -all_load -d= ead_strip -seg1addr 0x240 -map $(DEST_DIR_DEBUG)/$(BASE_NAME).map >>> + DEBUG_XCODE5_X64_DLINK_FLAGS =3D -arch x86_64 -u _$(IMAGE_ENTRY= _POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 -pie -all_load -d= ead_strip -seg1addr 0x240 -read_only_relocs suppress -map $(DEST_DIR_DEBUG)= /$(BASE_NAME).map >>> + NOOPT_XCODE5_X64_DLINK_FLAGS =3D -arch x86_64 -u _$(IMAGE_ENTRY= _POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 -pie -all_load -d= ead_strip -seg1addr 0x240 -read_only_relocs suppress -map $(DEST_DIR_DEBUG)= /$(BASE_NAME).map >>> +RELEASE_XCODE5_X64_DLINK_FLAGS =3D -arch x86_64 -u _$(IMAGE_ENTRY= _POINT) -e _$(IMAGE_ENTRY_POINT) -preload -segalign 0x20 -pie -all_load -d= ead_strip -seg1addr 0x240 -read_only_relocs suppress -map $(DEST_DIR_DEBUG)= /$(BASE_NAME).map >>>=20 >>> *_XCODE5_X64_SLINK_FLAGS =3D -static -o >>> DEBUG_XCODE5_X64_ASM_FLAGS =3D -arch x86_64 -g >>> --=20 >>> 2.32.1 (Apple Git-133) >>>=20 >>=20 >=20 >=20 >=20 >=20 >=20