I tested a bit with OVMF on GCC44 and GCC49. For the series: Reviewed-by: Jordan Justen <[email protected]>
I wonder if Liming or Erik might want to test GCC49 on another (non-OVMF) platform. Possibly with some windows boot testing. On 2016-07-17 03:34:37, Ard Biesheuvel wrote: > This is v3 of the series to enable compiler optimization under GCC for builds > targetting X64. It includes a patch from Steven Shi, taken from his series to > introduce support for GCC 5.x and Clang 3.8/X64 to EDK2. > > The first patch fixes the issue that __builtin_unreachable() is not > implemented by GCC 4.4 or earlier. > > Patch #2 sets a new define for OpensslLib that we will test in patches #3 > and #4 to inhibit the use of the MS varargs ABI when building OpenSSL, which > lacks the ms_abi attributes on its variadic functions. > > Patch #3 is Steven's patch to switch to the flavor of VA_LIST that is > explicitly modeled after the MS implementation. This by itself is an > improvement, since the open coded implementation that performs arithmetic > on the address of explicit arguments to obtain the variadic arguments is > fragile and difficult to maintain, and should be best avoided. > > Patch #4 ports patch #3 to EdkCompatibilityPkg > > Patch #5 enables -Os optimization for X64/RELEASE and X86/DEBUG all the way > back to GCC44. This aligns X64 with IA32, which is already built using -Os > for both DEBUG and RELEASE. > > Note that the reported breakage regarding the use of -Os [0] is likely caused > by the poor man's __builtin_ms_va_list (NO_BUILTIN_VA_FUNCS) that we used for > GCC/X64 before Steven's patch above switches us to a properly defined builtin > type. (The poor man's implementation uses pointer arithmetic involving the > address of the last named argument to calculate pointers to the variadic > arguments and dereferences them to obtain the argument values. I'm quite > surprised it works as well as it does at -O0, to be honest) > > I tested this change with both Ovmf and EmulatorPkg built in various ways > and with various versions, with the caveat that I did not always use a > matching > binutils (i.e., of the same era). Since the issues this series deal with are > all code generation issues, I think this is reasonable, but more testing would > be appreciated. (v2: this still applies, I have tested DEBUG and RELEASE > builds > using GCC44, GCC46, GCC47 and GCC48, but all on the same Ubuntu 14.04 system, > which means they all use the same ld version 2.24.90) > > [0] http://thread.gmane.org/gmane.comp.bios.tianocore.devel/10963 > > Patch #6 explicitly forbids the poor man's MS ABI varargs implementation when > using GCC with optimization enabled. > > Patch #7 drops checks for the NO_BUILTIN_VA_FUNCS macro, which is never > defined > anymore. > > Patch #8 applies the visibility 'protected' GCC pragma globally. Please refer > to > the commit log for the motivation. > > Patch #9 switches GCC/X64 to the PIE small code model, which results in > smaller > code. > > Changes in v3: > - Ensure OpensslLib does not switch to the MS varargs ABI inadvertently > - Switch to -fpie code generation rather than -fpic, which is more suitable > for > executables. Note that this is *not* the -pie linker switch which generates > a RELA section and a _DYNAMIC entrypoint. > - Use 'protected' rather than 'hidden' visibility, which is equally suitable > for > our purposes (inhibiting generation of GOT entries) but interoperates better > with LTO, which we intend to enable for GCC 5 and up > - dropped Laszlo's 'tested-by' from all patches, which was given based on v1 > > Branch can be found here > https://git.linaro.org/people/ard.biesheuvel/uefi-next.git/shortlog/refs/heads/gcc-x64-opt-v3 > > Changes in v2: > - Switch to -Os optimization, both for DEBUG and RELEASE builds. This turns > out > to work fine (as far as I could establish) and gives the best results in terms > of code size. > > Ard Biesheuvel (8): > MdePkg: avoid __builtin_unreachable() on GCC v4.4 > CryptoPkg: set new define to avoid MS ABI VA_LIST on GCC/X64 > EdkCompatibilityPkg: Enable new MS VA intrinsics for GNUC x86 64bits > build > BaseTools/tools_def: enable Os optimization for GCC X64 builds > MdePkg: disallow open coded varargs implementation on optimizing GCC > MdePkg CryptoPkg EdkCompatibilityPkg: retire NO_BUILTIN_VA_FUNCS > define > MdePkg X64: force 'protected' visibility when building with -fpic > BaseTools/tools_def: switch GCC/X64 to the PIE small model > > Shi, Steven (1): > MdePkg: Enable new MS VA intrinsics for GNUC x86 64bits build > > BaseTools/Conf/tools_def.template | 2 +- > CryptoPkg/Library/OpensslLib/OpensslLib.inf | 2 +- > EdkCompatibilityPkg/Foundation/Include/EfiStdArg.h | 28 ++++++++++++++- > MdePkg/Include/Base.h | 36 ++++++++++++++++++-- > MdePkg/Include/X64/ProcessorBind.h | 9 +++++ > 5 files changed, 72 insertions(+), 5 deletions(-) > > -- > 1.9.1 > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

