On 15 August 2015 at 22:43, Scott Duplichan <sc...@notabs.org> wrote:
> Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] wrote:
>
> ]Sent: Friday, August 14, 2015 02:15 PM
> ]To: edk2-de...@ml01.01.org; yingke.d....@intel.com
> ]Cc: wp...@windriver.com; sc...@notabs.org; Ard Biesheuvel 
> <ard.biesheu...@linaro.org>; jordan.l.jus...@intel.com; 
> ]liming....@intel.com; dw...@infradead.org
> ]Subject: [edk2] [PATCH 00/15] unify GCC command line options
> ]
> ]This got a bit out of hand after I noticed the ELFGCC and UNIXGCC
> ]toolchains that needed some tlc as well.
> ]
> ]Anyway, this series aims to refactor the toolchains definitions for
> ]UNIXGCC, GCC44, GCC45, GCC46, GCC47, GCC48, GCC49, CLANG35, ELFGCC,
> ]CYGGCC and CYGGCCxASL so that they share as much of the settings as
> ]possible. Currently, there is very little coordination between these,
> ]which means for instance that the 4 KB alignment feature is only supported
> ]on GCC4x at the moment.
> ]
> ]The primary difference between these toolchains is that GCC4x and ELFGCC
> ]are entirely ELF based, whereas the other are PE/COFF based (but only when
> ]building for IA32 or X64)
> ]
> ]Note that this series does not remove any toolchains, nor should it result
> ]in major changes in the command lines that are passed to the various tools.
> ]However, things may be reordered, and (in case of ELFGCC), missing 
> functionality
> ]such as increased section alignment has been added so there are some changes
> ]there.
> ]
> ]Patch #2 fixes a problem in the GenFv tool where it may access unallocated
> ]memory while rebasing the FFS when using large section and file alignment.
> ]
> ]Patch #3 removes an unused DEFINE from tools_def
> ]
> ]Patch #4 moved some warning flags that were applied to GCC4x 4.6 and up to
> ]all GCC versions.
> ]
> ]Patch #5 is the first big refactor patch that introduces PE and ELF variants
> ]for some CC flags.
> ]
> ]Patch #6 unifies the IA32 and X64 CC flags for all toolchains listed above.
> ]
> ]Patch #7 fixes the issue mentioned by Bill where the underscore decoration
> ]is erroneously applied on X64 as well.
> ]
> ]Patch #8 is the second refactor the introduces PE and ELF variants for the
> ]various DLINK flags.
> ]
> ]Patch #9 removes the explicit 64 byte alignment applied to GCC 4.9. The 
> latest
> ]GenFw and linker script propagate the alignment automatically, i.e., if 
> objects
> ]with such alignment requirement are present, GCC will set the ELF header
> ]accordingly, and this value will be used for the PE/COFF section alignment
> ]as well.
> ]
> ]Patch #10 unifies the IA32 and X64 linker flags for all toolchains listed 
> above.
> ]
> ]Patch #11 unifies the ARM and AARCH64 CC flags, i.e., it removes all the
> ]redundant definitions.
> ]
> ]Patch #12 and #10 but for the linker.
> ]
> ]Patch #13 unifies the ASM flags for all archs.
> ]
> ]Patch #14 brings the remaining configuration options of ELFGCC in line with
> ]the GCC4x series.
> ]
> ]Patch #15 is a PoC that allows Ovmf/X64 to be built with 4 KB section 
> alignment
> ]for DXE_RUNTIME modules using UNIXGCC and ELFGCC, as is required to support
> ]the properties table memprotection feature.
> ]
> ]Branch can be found here
> ]https://git.linaro.org/people/ard.biesheuvel/uefi-next.git/shortlog/refs/heads/unify-gcc
> ]
> ]
> ]Ard Biesheuvel (14):
> ]  BaseTools/GenFv: use PE/COFF virtual section size if raw size is
> ]    larger
> ]  BaseTools: remove unused definition of GCC_WINDRES_FLAGS
> ]  BaseTools: merge warning flags for all GCC versions
> ]  BaseTools GCC: refactor tools_def internal GCC defines for CC flags
> ]  BaseTools: unify all IA32 and X64 CC flags for ELF based GCC
> ]  BaseTools: use leading underscore for symbol names where appropriate
> ]  BaseTools GCC: refactor tools_def internal GCC defines for [AS]DLINK
> ]  BaseTools: remove GCC 4.9 specific linker alignment override
> ]  BaseTools: unify all IA32 and X64 [AS]DLINK[2] flags for ELF based GCC
> ]  BaseTools: unify ARM and AARCH64 GCC compiler flags
> ]  BaseTools: unify ARM and AARCH64 DLINK flags for all GCC versions
> ]  BaseTools: unify ASM flags for all GCC versions
> ]  BaseTools: align ELFGCC with GCC4x toolchains
> ]  OvmfPkg/X64: enable 4 KB alignment for DXE_RUNTIME modules
> ]
> ]Scott Duplichan (1):
> ]  BaseTools: Fix GCC49 build failure
> ]
> ] BaseTools/Conf/tools_def.template           | 412 ++++++++------------
> ] BaseTools/Source/C/GenFv/GenFvInternalLib.c |   2 +-
> ] OvmfPkg/OvmfPkgX64.dsc                      |   7 +
> ] 3 files changed, 181 insertions(+), 240 deletions(-)
> ]
> ]--
> ]1.9.1
>
> Thanks for this much needed tool chain definition consolidation. I ran
> a build test with and without the patch. The build test uses GCC44-49
> and Microsoft tool chains. Log files are here: http://notabs.org/uefi/tmp/.
>

Thanks a lot for giving it a spin.

> Here is what is see in the log files with respect to the patch:
> 1) GCC49 X64 and IA32
>    GenFw: ERROR 3000: Invalid Unsupported section alignment.

I cannot reproduce this, unfortunately. Can you please check whether
your BaseTools are up to date? There have been some changes recently
to GenFw regarding section alignment which may cause this. My gcc is
4.9.1 btw (Ubuntu)

My Jenkins job has a 'git clean -dxf BaseTools/; make -C BaseTools' at
the beginning so they are up to date, although I think that for GenFw,
the git clean is not necessary. (Some other tools don't rebuild
correctly if any of the common C code is modified)

> 2) GCC46 ARM
>    unrecognized command line option '-mno-unaligned-access'
>

Could you send me the output of gcc -v for this compiler? Mine is
Linaro 4.6.3 which supports it fine, but the feature may be a Linaro
contribution that only made it into 4.7 upstream. In any case, we
cannot tolerate unaligned accesses so we may need to deprecate 4.6 or
mandate that the Linaro version be used if older versions emit
unaligned accesses.

Regards,
Ard.
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to