From: "Laszlo Ersek" <lersek@redhat.com>
To: "Gao, Liming" <liming.gao@intel.com>
Cc: Andrew Fish <afish@apple.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>,
Tom Lendacky <thomas.lendacky@amd.com>
Subject: Re: [edk2-devel] [Patch 11/12] OvmfPkg: Enable CLANG9 tool chain
Date: Fri, 11 Oct 2019 11:37:25 +0200 [thread overview]
Message-ID: <43b303eb-fd74-7480-aa6d-6907300af3e0@redhat.com> (raw)
In-Reply-To: <4A89E2EF3DFEDB4C8BFDE51014F606A14E514EAB@SHSMSX104.ccr.corp.intel.com>
Hi Liming,
On 10/09/19 16:44, Gao, Liming wrote:
> The difference between XCODE/CLANG and GCCXX is the linker. Current
> patches are introduced for the different linker. Clang supports most
> usage of GCC compiler. So, CLANG and XCODE uses GCC family. When I
> enable XCODE or CLANG tool chain in the platform, I don't find other
> incompatible behavior with GCC compiler. So, I think it is safe to let
> CLANG inherit GCC option except for these two cases. When you make new
> changes, and verify them with GCC compiler, that's enough. You don't
> need to specially verify them with XCODE or CLANG. In most case, GCC
> compiler pass, XCODE or CLANG can also pass.
I'd like to provide a counter-example for this.
Consider the issue that Tom reported, at
http://mid.mail-archive.com/8eb55d97-0ba3-c217-a160-c24730b9f036@amd.com
https://edk2.groups.io/g/devel/message/48762
in point (2).
(Both links point to the same message, just in different archives.)
Let me summarize that problem.
- In BZ#849, an XCODE toolchain bug was reported, and a workaround was
requested.
- The workaround was commit 2db0ccc2d7fe ("UefiCpuPkg: Update
CpuExceptionHandlerLib pass XCODE5 tool chain", 2018-01-16).
- The workaround is binary patching (self-modification) in the exception
handler's assembly code.
- Unfortunately, this code is also linked into SEC modules, which run
from flash. Therefore, self-modification is not permitted, and the
workaround is not good enough for SEC. (Nor for PEI modules that run
from flash.)
Now, let's consider how we could mitigate this issue for *temporarily*,
for all toolchains *except* XCODE5, until the issue is fixed. Clearly,
toolchains other than XCODE5 have no problems with the original assembly
code (i.e., with the 64-bit absolute address relocations). Therefore, we
could consider reverting the commit, and capturing the results of the
revert in a *separate* NASM source file. This source file (that is, the
original, pre-2db0ccc2d7fe assembly code) would apply to all toolchain
families, except the XCODE family.
Let's say the new NASM source files would be called
- X64/ExceptionHandlerAsmGeneric.nasm -- all except XCODE,
- X64/ExceptionHandlerAsmXcode.nasm -- XCODE,
replacing the current file
- X64/ExceptionHandlerAsm.nasm
So, how can we use the new files, in the INF file
UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.inf
?
We could attempt,
> [Sources.X64]
> X64/ExceptionHandlerAsmGeneric.nasm | GCC
> X64/ExceptionHandlerAsmXcode.nasm | XCODE
> X64/ExceptionHandlerAsmGeneric.nasm | INTEL
> X64/ExceptionHandlerAsmGeneric.nasm | MSFT
Unfortunately, this does not work.
While it solves the issue on GCC, INTEL and MSFT, it breaks on XCODE:
XCODE picks up *both* the GCC line and the XCODE line. And that's
because XCODE inherits GCC, and there is presently no way to express
"real GCC only".
But, at least, this suggests a solution too. In
"BaseTools/Conf/tools_def.template", for *every* toolchain that
specifies FAMILY=GCC, we should spell out an explicit BUILDRULEFAMILY.
Like this:
> @@ -1995,6 +1995,7 @@
> #
> ####################################################################################
> *_GCC48_*_*_FAMILY = GCC
> +*_GCC48_*_*_BUILDRULEFAMILY = GENUINE_GCC
>
> *_GCC48_*_MAKE_PATH = DEF(GCC_HOST_PREFIX)make
> *_GCC48_*_*_DLL = ENV(GCC48_DLL)
> @@ -2134,6 +2135,7 @@
> #
> ####################################################################################
> *_GCC49_*_*_FAMILY = GCC
> +*_GCC49_*_*_BUILDRULEFAMILY = GENUINE_GCC
>
> *_GCC49_*_MAKE_PATH = DEF(GCC_HOST_PREFIX)make
> *_GCC49_*_*_DLL = ENV(GCC49_DLL)
> @@ -2280,6 +2282,7 @@
> #
> ####################################################################################
> *_GCC5_*_*_FAMILY = GCC
> +*_GCC5_*_*_BUILDRULEFAMILY = GENUINE_GCC
>
> *_GCC5_*_MAKE_PATH = DEF(GCC_HOST_PREFIX)make
> *_GCC5_*_*_DLL = ENV(GCC5_DLL)
> @@ -2437,6 +2440,7 @@
> #
> ####################################################################################
> *_CLANG35_*_*_FAMILY = GCC
> +*_CLANG35_*_*_BUILDRULEFAMILY = CLANG
>
> *_CLANG35_*_MAKE_PATH = make
> *_CLANG35_*_*_DLL = ENV(CLANG35_DLL)
> @@ -2517,6 +2521,8 @@
> #
> ####################################################################################
> *_CLANG38_*_*_FAMILY = GCC
> +*_CLANG38_*_*_BUILDRULEFAMILY = CLANG
> +
> *_CLANG38_*_MAKE_PATH = make
> *_CLANG38_*_*_DLL = ENV(CLANG38_DLL)
> *_CLANG38_*_ASL_PATH = DEF(UNIX_IASL_BIN)
And then we could write:
> [Sources.X64]
> X64/ExceptionHandlerAsmGeneric.nasm | GENUINE_GCC
> X64/ExceptionHandlerAsmGeneric.nasm | CLANG
> X64/ExceptionHandlerAsmXcode.nasm | XCODE
> X64/ExceptionHandlerAsmGeneric.nasm | INTEL
> X64/ExceptionHandlerAsmGeneric.nasm | MSFT
replacing plain "GCC", which XCODE inherits, with "GENUINE_GCC" and
"CLANG", neither of which XCODE inherits.
Would you accept the above patch, for
"BaseTools/Conf/tools_def.template"?
Thanks,
Laszlo
next prev parent reply other threads:[~2019-10-11 9:37 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-27 7:46 [Patch 00/12] New Cross OS tool chain CLANG9 Liming Gao
2019-09-27 7:46 ` [Patch 01/12] BaseTools tools_def.template: Remove unnecessary $(DEST_DIR_DEBUG) path Liming Gao
2019-09-27 7:46 ` [Patch 02/12] BaseTools tools_def: Add CLANG9 tool chain to directly generate PE image Liming Gao
2019-09-27 10:13 ` [edk2-devel] " Philippe Mathieu-Daudé
2019-09-27 7:46 ` [Patch 03/12] BaseTools GenFw: Fix the issue to update the wrong size as SectionSize Liming Gao
2019-09-27 10:15 ` [edk2-devel] " Philippe Mathieu-Daudé
2019-09-27 7:46 ` [Patch 04/12] MdePkg Base.h: Add definition for CLANG9 tool chain Liming Gao
2019-09-27 7:46 ` [Patch 05/12] MdePkg BaseIoLibIntrinsic: Remove __inline__ attribute for IO functions Liming Gao
2019-09-30 20:35 ` [edk2-devel] " Laszlo Ersek
2019-09-30 21:11 ` Andrew Fish
2019-10-08 14:47 ` Liming Gao
2019-10-08 20:22 ` Laszlo Ersek
2019-10-10 12:32 ` Liming Gao
2019-10-10 16:32 ` Laszlo Ersek
2019-10-11 1:28 ` Liming Gao
2019-10-11 19:22 ` Jordan Justen
2019-10-12 6:18 ` Liming Gao
2019-09-27 7:46 ` [Patch 06/12] MdeModulePkg LzmaCustomDecompressLib: Update macro to be same in CLANG tool Liming Gao
2019-09-27 7:46 ` [Patch 07/12] MdeModulePkg RegularExpressionDxe: Disable warning for CLANG9 tool chain Liming Gao
2019-09-27 7:46 ` [Patch 08/12] CryptoPkg: Append options to make CLANG9 tool chain pass build Liming Gao
2019-09-27 7:46 ` [Patch 09/12] CryptoPkg IntrinsicLib: Make _fltused always be used Liming Gao
2019-09-27 8:34 ` [edk2-devel] " Yao, Jiewen
2019-09-29 6:32 ` Liming Gao
2019-09-27 7:46 ` [Patch 10/12] EmulatorPkg: Enable CLANG9 tool chain Liming Gao
2019-09-27 7:46 ` [Patch 11/12] OvmfPkg: " Liming Gao
2019-09-30 20:42 ` [edk2-devel] " Laszlo Ersek
2019-10-08 15:02 ` Liming Gao
2019-10-08 22:29 ` Laszlo Ersek
2019-10-08 23:08 ` Andrew Fish
2019-10-09 13:43 ` Laszlo Ersek
2019-10-09 14:44 ` Liming Gao
2019-10-09 16:22 ` [edk2-devel] [Patch 11/12] OvmfPkg: Enable CLANG9 tool chain - Andrew Fish
2019-10-10 7:35 ` Laszlo Ersek
2019-10-10 12:18 ` Liming Gao
2019-10-10 16:29 ` [edk2-devel] [Patch 11/12] OvmfPkg: Enable CLANG9 tool chain Andrew Fish
2019-10-10 16:43 ` [edk2-devel] [Patch 11/12] OvmfPkg: Enable CLANG9 tool chain - Laszlo Ersek
2019-10-11 1:47 ` Liming Gao
2019-10-11 9:57 ` Laszlo Ersek
2019-10-11 9:37 ` Laszlo Ersek [this message]
2019-10-12 8:22 ` [edk2-devel] [Patch 11/12] OvmfPkg: Enable CLANG9 tool chain Liming Gao
2019-09-27 7:46 ` [Patch 12/12] OvmfPkg SecMain: Add build option "-fno-omit-frame-pointer" for CLANG9 X64 Liming Gao
2019-09-30 21:09 ` [edk2-devel] " Laszlo Ersek
2019-10-08 15:09 ` Liming Gao
[not found] ` <15CBB488DC5DB3E9.15045@groups.io>
2019-10-10 14:08 ` Liming Gao
2019-10-10 17:35 ` Laszlo Ersek
2019-10-11 1:30 ` Liming Gao
2019-10-11 9:48 ` Laszlo Ersek
2019-09-27 8:33 ` [edk2-devel] [Patch 00/12] New Cross OS tool chain CLANG9 Yao, Jiewen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43b303eb-fd74-7480-aa6d-6907300af3e0@redhat.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox