On 05/22/20 22:01, Laszlo Ersek wrote: > On 05/22/20 12:12, Ard Biesheuvel wrote: >> GCC 10 enabled a feature by default that was introduced in GCC 9, >> which results in atomic operations to be emitted as function calls >> to intrinsics provided by a runtime library. >> >> Atomics are hardly used in EDK2, which runs on a single CPU anyway, >> and any benefit that would result from reusing library code that >> implements these operations is defeated by the fact that every EDK2 >> module will need to have its own copy anyway. >> >> So let's disable this feature on GCC versions that support the >> pragma to do so (GCC 10.2 and up) >> >> Link: https://bugzilla.tianocore.org/show_bug.cgi?id=2723 >> Signed-off-by: Ard Biesheuvel <ard.biesheu...@arm.com> >> --- >> The GCC support for this pragma has already been pulled into the 10.2 >> release branch. I think we should consider adding this to the stable >> tag, so that the issue can easily be resolved by upgrading the compiler. >> Whether we add the intrinsics too is a separate matter, but we can >> revisit that later. >> >> MdePkg/Include/AArch64/ProcessorBind.h | 11 +++++++++++ >> 1 file changed, 11 insertions(+) >> >> diff --git a/MdePkg/Include/AArch64/ProcessorBind.h >> b/MdePkg/Include/AArch64/ProcessorBind.h >> index 896bf273ac7a..a3ca8f09e51c 100644 >> --- a/MdePkg/Include/AArch64/ProcessorBind.h >> +++ b/MdePkg/Include/AArch64/ProcessorBind.h >> @@ -24,6 +24,17 @@ >> #pragma pack() >> #endif >> >> +#if defined(__GNUC__) && !defined(__clang__) >> + >> +// >> +// Disable GCC outline atomics >> +// Link: https://bugzilla.tianocore.org/show_bug.cgi?id=2723 >> +// >> +#if __GNUC__ > 10 || (__GNUC__ == 10 && __GNUC_MINOR__ >= 2) >> +#pragma GCC target "no-outline-atomics" >> +#endif >> +#endif >> + >> #if defined(_MSC_EXTENSIONS) >> >> // >> > > Reviewed-by: Laszlo Ersek <ler...@redhat.com> > > But I think it should be merged later, after GCC 10.2 is out. > > (Obviously I don't "insist" that we follow this approach, I'm just OK > with it.)
Oh and I think both this patch and the assembly language implementation for the atomics should be delayed after the stable tag. gcc-10 is a new toolchain; so even if we don't introduce a new toolchain tag such as GCC10 for it, whatever we do in order to make it work, that's feature enablement in my book. Thanks, Laszlo -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#60170): https://edk2.groups.io/g/devel/message/60170 Mute This Topic: https://groups.io/mt/74396053/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-