Daniel, Alain, Keshav, Did any of you have a chance to see if this toolchain fixes your build issues on GCC 4.9?
Dennis, Do you have any concerns with adding the GCC49 toolchain? Thanks, -Jordan On Mon, Jul 21, 2014 at 2:48 PM, Jordan Justen <[email protected]> wrote: > GCC 4.9 may use 64-byte (0x40) alignment for data sections. > > Therefore we use a different link script for GCC 4.9. The only > difference from the gcc4.4-ld-script is the alignment for data > sections. > > When using the GCC48 toolchain with GCC 4.9, this error would be > encountered by GenFw: >> GenFw: ERROR 3000: Invalid >> Unsupported section alignment. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Jordan Justen <[email protected]> > Cc: [email protected] > Cc: Alain Kalker <[email protected]> > Cc: Keshav Amburay <[email protected]> > Cc: "Mendyke, DanielX" <[email protected]> > --- > > These patches are available in the gcc-4.9 branch of: > https://github.com/jljusten/edk2.git > > BaseTools/Conf/tools_def.template | 145 > +++++++++++++++++++++++++++++++++++++ > BaseTools/Scripts/gcc4.9-ld-script | 44 +++++++++++ > 2 files changed, 189 insertions(+) > create mode 100644 BaseTools/Scripts/gcc4.9-ld-script > > diff --git a/BaseTools/Conf/tools_def.template > b/BaseTools/Conf/tools_def.template > index f99ddf6..f9e1e6c 100644 > --- a/BaseTools/Conf/tools_def.template > +++ b/BaseTools/Conf/tools_def.template > @@ -162,6 +162,9 @@ DEFINE GCC47_X64_PREFIX = /usr/bin/ > DEFINE GCC48_IA32_PREFIX = /usr/bin/ > DEFINE GCC48_X64_PREFIX = /usr/bin/ > > +DEFINE GCC49_IA32_PREFIX = /usr/bin/ > +DEFINE GCC49_X64_PREFIX = /usr/bin/ > + > DEFINE UNIX_IASL_BIN = ENV(IASL_PREFIX)iasl > DEFINE WIN_ASL_BIN_DIR = C:\ASL > DEFINE WIN_IASL_BIN = DEF(WIN_ASL_BIN_DIR)\iasl.exe > @@ -307,6 +310,12 @@ DEFINE SOURCERY_CYGWIN_TOOLS = /cygdrive/c/Program > Files/CodeSourcery/Sourcery G > # Required to build platforms or ACPI tables: > # Intel(r) ACPI Compiler v20101013 from > # > http://www.acpica.org/downloads/previous_releases.php > +# GCC49 -Linux- Requires: > +# GCC 4.9 > +# Optional: > +# Required to build platforms or ACPI tables: > +# Intel(r) ACPI Compiler v20101013 from > +# > http://www.acpica.org/downloads/previous_releases.php > # ELFGCC -Linux- Requires: > # GCC(this tool chain uses whatever version of > gcc and binutils that is installed in /usr/bin) > # Optional: > @@ -3216,6 +3225,22 @@ DEFINE GCC48_AARCH64_DLINK_FLAGS = > DEF(GCC_ARM_AARCH64_DLINK_COMMON) > DEFINE GCC48_ARM_ASLDLINK_FLAGS = DEF(GCC47_ARM_ASLDLINK_FLAGS) > DEFINE GCC48_AARCH64_ASLDLINK_FLAGS = DEF(GCC_ARM_AARCH64_ASLDLINK_FLAGS) > > +DEFINE GCC49_IA32_CC_FLAGS = DEF(GCC48_IA32_CC_FLAGS) > +DEFINE GCC49_X64_CC_FLAGS = DEF(GCC48_X64_CC_FLAGS) > +DEFINE GCC49_IA32_X64_DLINK_COMMON = -nostdlib -n -q --gc-sections > --script=$(EDK_TOOLS_PATH)/Scripts/gcc4.9-ld-script > +DEFINE GCC49_IA32_X64_ASLDLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_COMMON) > --entry ReferenceAcpiTable -u ReferenceAcpiTable > +DEFINE GCC49_IA32_X64_DLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_COMMON) > --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Map > $(DEST_DIR_DEBUG)/$(BASE_NAME).map > +DEFINE GCC49_X64_DLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_FLAGS) > -melf_x86_64 --oformat=elf64-x86-64 > +DEFINE GCC49_ASM_FLAGS = DEF(GCC48_ASM_FLAGS) > +DEFINE GCC49_ARM_ASM_FLAGS = DEF(GCC48_ARM_ASM_FLAGS) > +DEFINE GCC49_AARCH64_ASM_FLAGS = DEF(GCC48_AARCH64_ASM_FLAGS) > +DEFINE GCC49_ARM_CC_FLAGS = DEF(GCC48_ARM_CC_FLAGS) > +DEFINE GCC49_AARCH64_CC_FLAGS = DEF(GCC48_AARCH64_CC_FLAGS) > +DEFINE GCC49_ARM_DLINK_FLAGS = DEF(GCC48_ARM_DLINK_FLAGS) > +DEFINE GCC49_AARCH64_DLINK_FLAGS = DEF(GCC_ARM_AARCH64_DLINK_COMMON) > +DEFINE GCC49_ARM_ASLDLINK_FLAGS = DEF(GCC48_ARM_ASLDLINK_FLAGS) > +DEFINE GCC49_AARCH64_ASLDLINK_FLAGS = DEF(GCC_ARM_AARCH64_ASLDLINK_FLAGS) > + > > #################################################################################### > # > # Unix GCC And Intel Linux ACPI Compiler > @@ -3769,6 +3794,126 @@ RELEASE_GCC48_AARCH64_CC_FLAGS = > DEF(GCC48_AARCH64_CC_FLAGS) -Wno-unused-but-s > > > #################################################################################### > # > +# GCC 4.9 - This configuration is used to compile under Linux to produce > +# PE/COFF binaries using GCC 4.9. > +# > +#################################################################################### > +*_GCC49_*_*_FAMILY = GCC > + > +*_GCC49_*_MAKE_PATH = make > +*_GCC49_*_ASL_PATH = DEF(UNIX_IASL_BIN) > + > +*_GCC49_*_PP_FLAGS = DEF(GCC_PP_FLAGS) > +*_GCC49_*_ASLPP_FLAGS = DEF(GCC_ASLPP_FLAGS) > +*_GCC49_*_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) > +*_GCC49_*_VFRPP_FLAGS = DEF(GCC_VFRPP_FLAGS) > +*_GCC49_*_APP_FLAGS = > +*_GCC49_*_ASL_FLAGS = DEF(IASL_FLAGS) > +*_GCC49_*_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS) > + > +################## > +# GCC49 IA32 definitions > +################## > +*_GCC49_IA32_OBJCOPY_PATH = DEF(GCC49_IA32_PREFIX)objcopy > +*_GCC49_IA32_CC_PATH = DEF(GCC49_IA32_PREFIX)gcc > +*_GCC49_IA32_SLINK_PATH = DEF(GCC49_IA32_PREFIX)ar > +*_GCC49_IA32_DLINK_PATH = DEF(GCC49_IA32_PREFIX)ld > +*_GCC49_IA32_ASLDLINK_PATH = DEF(GCC49_IA32_PREFIX)ld > +*_GCC49_IA32_ASM_PATH = DEF(GCC49_IA32_PREFIX)gcc > +*_GCC49_IA32_PP_PATH = DEF(GCC49_IA32_PREFIX)gcc > +*_GCC49_IA32_VFRPP_PATH = DEF(GCC49_IA32_PREFIX)gcc > +*_GCC49_IA32_ASLCC_PATH = DEF(GCC49_IA32_PREFIX)gcc > +*_GCC49_IA32_ASLPP_PATH = DEF(GCC49_IA32_PREFIX)gcc > +*_GCC49_IA32_RC_PATH = DEF(GCC49_IA32_PREFIX)objcopy > + > +*_GCC49_IA32_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m32 > +*_GCC49_IA32_ASLDLINK_FLAGS = DEF(GCC49_IA32_X64_ASLDLINK_FLAGS) -m > elf_i386 > +*_GCC49_IA32_ASM_FLAGS = DEF(GCC49_ASM_FLAGS) -m32 -march=i386 > +*_GCC49_IA32_CC_FLAGS = DEF(GCC49_IA32_CC_FLAGS) -Os > +*_GCC49_IA32_DLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_FLAGS) -m > elf_i386 --oformat=elf32-i386 > +*_GCC49_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS) > +*_GCC49_IA32_OBJCOPY_FLAGS = > + > +################## > +# GCC49 X64 definitions > +################## > +*_GCC49_X64_OBJCOPY_PATH = DEF(GCC49_X64_PREFIX)objcopy > +*_GCC49_X64_CC_PATH = DEF(GCC49_X64_PREFIX)gcc > +*_GCC49_X64_SLINK_PATH = DEF(GCC49_X64_PREFIX)ar > +*_GCC49_X64_DLINK_PATH = DEF(GCC49_X64_PREFIX)ld > +*_GCC49_X64_ASLDLINK_PATH = DEF(GCC49_X64_PREFIX)ld > +*_GCC49_X64_ASM_PATH = DEF(GCC49_X64_PREFIX)gcc > +*_GCC49_X64_PP_PATH = DEF(GCC49_X64_PREFIX)gcc > +*_GCC49_X64_VFRPP_PATH = DEF(GCC49_X64_PREFIX)gcc > +*_GCC49_X64_ASLCC_PATH = DEF(GCC49_X64_PREFIX)gcc > +*_GCC49_X64_ASLPP_PATH = DEF(GCC49_X64_PREFIX)gcc > +*_GCC49_X64_RC_PATH = DEF(GCC49_X64_PREFIX)objcopy > + > +*_GCC49_X64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m64 > +*_GCC49_X64_ASLDLINK_FLAGS = DEF(GCC49_IA32_X64_ASLDLINK_FLAGS) -m > elf_x86_64 > +*_GCC49_X64_ASM_FLAGS = DEF(GCC49_ASM_FLAGS) -m64 > +*_GCC49_X64_CC_FLAGS = DEF(GCC49_X64_CC_FLAGS) > +*_GCC49_X64_DLINK_FLAGS = DEF(GCC49_X64_DLINK_FLAGS) > +*_GCC49_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS) > +*_GCC49_X64_OBJCOPY_FLAGS = > + > +################## > +# GCC49 ARM definitions > +################## > +*_GCC49_ARM_CC_PATH = ENV(GCC49_ARM_PREFIX)gcc > +*_GCC49_ARM_SLINK_PATH = ENV(GCC49_ARM_PREFIX)ar > +*_GCC49_ARM_DLINK_PATH = ENV(GCC49_ARM_PREFIX)ld > +*_GCC49_ARM_ASLDLINK_PATH = ENV(GCC49_ARM_PREFIX)ld > +*_GCC49_ARM_ASM_PATH = ENV(GCC49_ARM_PREFIX)gcc > +*_GCC49_ARM_PP_PATH = ENV(GCC49_ARM_PREFIX)gcc > +*_GCC49_ARM_VFRPP_PATH = ENV(GCC49_ARM_PREFIX)gcc > +*_GCC49_ARM_ASLCC_PATH = ENV(GCC49_ARM_PREFIX)gcc > +*_GCC49_ARM_ASLPP_PATH = ENV(GCC49_ARM_PREFIX)gcc > +*_GCC49_ARM_RC_PATH = ENV(GCC49_ARM_PREFIX)objcopy > + > +*_GCC49_ARM_ARCHCC_FLAGS = -mthumb > +*_GCC49_ARM_PLATFORM_FLAGS = -march=armv7-a > + > +*_GCC49_ARM_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) > +*_GCC49_ARM_ASLDLINK_FLAGS = DEF(GCC49_ARM_ASLDLINK_FLAGS) > +*_GCC49_ARM_ASM_FLAGS = DEF(GCC49_ARM_ASM_FLAGS) > +*_GCC49_ARM_DLINK_FLAGS = DEF(GCC49_ARM_DLINK_FLAGS) > +*_GCC49_ARM_PLATFORM_FLAGS = -march=armv7-a > +*_GCC49_ARM_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) > DEF(GCC_PP_FLAGS) > +*_GCC49_ARM_RC_FLAGS = DEF(GCC_ARM_RC_FLAGS) > +*_GCC49_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) > DEF(GCC_VFRPP_FLAGS) > + > + DEBUG_GCC49_ARM_CC_FLAGS = DEF(GCC49_ARM_CC_FLAGS) -O0 > +RELEASE_GCC49_ARM_CC_FLAGS = DEF(GCC49_ARM_CC_FLAGS) > -Wno-unused-but-set-variable > + > +################## > +# GCC49 AARCH64 definitions > +################## > +*_GCC49_AARCH64_CC_PATH = ENV(GCC49_AARCH64_PREFIX)gcc > +*_GCC49_AARCH64_SLINK_PATH = ENV(GCC49_AARCH64_PREFIX)ar > +*_GCC49_AARCH64_DLINK_PATH = ENV(GCC49_AARCH64_PREFIX)ld > +*_GCC49_AARCH64_ASLDLINK_PATH = ENV(GCC49_AARCH64_PREFIX)ld > +*_GCC49_AARCH64_ASM_PATH = ENV(GCC49_AARCH64_PREFIX)gcc > +*_GCC49_AARCH64_PP_PATH = ENV(GCC49_AARCH64_PREFIX)gcc > +*_GCC49_AARCH64_VFRPP_PATH = ENV(GCC49_AARCH64_PREFIX)gcc > +*_GCC49_AARCH64_ASLCC_PATH = ENV(GCC49_AARCH64_PREFIX)gcc > +*_GCC49_AARCH64_ASLPP_PATH = ENV(GCC49_AARCH64_PREFIX)gcc > +*_GCC49_AARCH64_RC_PATH = ENV(GCC49_AARCH64_PREFIX)objcopy > + > +*_GCC49_AARCH64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) > +*_GCC49_AARCH64_ASLDLINK_FLAGS = DEF(GCC49_AARCH64_ASLDLINK_FLAGS) > +*_GCC49_AARCH64_ASM_FLAGS = DEF(GCC49_AARCH64_ASM_FLAGS) > +*_GCC49_AARCH64_DLINK_FLAGS = DEF(GCC49_AARCH64_DLINK_FLAGS) > +*_GCC49_AARCH64_PLATFORM_FLAGS = > +*_GCC49_AARCH64_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) > DEF(GCC_PP_FLAGS) > +*_GCC49_AARCH64_RC_FLAGS = DEF(GCC_AARCH64_RC_FLAGS) > +*_GCC49_AARCH64_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) > DEF(GCC_VFRPP_FLAGS) > + > + DEBUG_GCC49_AARCH64_CC_FLAGS = DEF(GCC49_AARCH64_CC_FLAGS) -O0 > +RELEASE_GCC49_AARCH64_CC_FLAGS = DEF(GCC49_AARCH64_CC_FLAGS) > -Wno-unused-but-set-variable > + > +#################################################################################### > +# > # Cygwin GCC And Intel ACPI Compiler > # > > #################################################################################### > diff --git a/BaseTools/Scripts/gcc4.9-ld-script > b/BaseTools/Scripts/gcc4.9-ld-script > new file mode 100644 > index 0000000..b692328 > --- /dev/null > +++ b/BaseTools/Scripts/gcc4.9-ld-script > @@ -0,0 +1,44 @@ > +/* OUTPUT_FORMAT(efi-bsdrv-x86_64) */ > +SECTIONS > +{ > + /* . = 0 + SIZEOF_HEADERS; */ > + . = 0x280; > + .text ALIGN(0x20) : > + { > + *(.text .stub .text.* .gnu.linkonce.t.*) > + . = ALIGN(0x20); > + } =0x90909090 > + .data ALIGN(0x40) : > + { > + *( > + .rodata .rodata.* .gnu.linkonce.r.* > + .data .data.* .gnu.linkonce.d.* > + .bss .bss.* > + *COM* > + ) > + . = ALIGN(0x20); > + } > + .eh_frame ALIGN(0x20) : > + { > + KEEP (*(.eh_frame)) > + } > + .got ALIGN(0x20) : > + { > + *(.got .got.*) > + . = ALIGN(0x20); > + } > + .rela ALIGN(0x20) : > + { > + *(.rela .rela.*) > + } > + /DISCARD/ : { > + *(.note.GNU-stack) *(.gnu_debuglink) > + *(.interp) > + *(.dynsym) > + *(.dynstr) > + *(.dynamic) > + *(.hash) > + *(.comment) > + } > +} > + > -- > 2.0.1 > > > ------------------------------------------------------------------------------ > Want fast and easy access to all the code in your enterprise? Index and > search up to 200,000 lines of code with a free copy of Black Duck > Code Sight - the same software that powers the world's largest code > search on Ohloh, the Black Duck Open Hub! Try it now. > http://p.sf.net/sfu/bds > _______________________________________________ > edk2-buildtools-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/edk2-buildtools-devel ------------------------------------------------------------------------------ Infragistics Professional Build stunning WinForms apps today! Reboot your WinForms applications with our WinForms controls. Build a bridge from your legacy apps to the future. http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
