From 251dae91074170036c1a76c5e5df1f45197d7feb Mon Sep 17 00:00:00 2001 From: Tamar Christina Date: Mon, 27 Apr 2020 17:39:31 +0100 Subject: x86: Add i386 PE big-object support The 64-bit version of binutils got support for the PE COFF BIG OBJ format a couple of years ago. The BIG OBJ format is a slightly different COFF format which extends the size of the number of section field in the header from a uint16_t to a uint32_t and so greatly increases the number of sections allowed. However the 32-bit version of bfd never got support for this. The GHC Haskell compiler generates a great deal of symbols due to it's use of -ffunction-sections and -fdata-sections. This meant that we could not build the 32-bit version of the GHC Compiler for many releases now as binutils didn't have this support. This patch adds the support to the 32-bit port of binutils as well and also does come cleanup in the code. bfd/ChangeLog: * coff-i386.c (COFF_WITH_PE_BIGOBJ): New. * coff-x86_64.c (COFF_WITH_PE_BIGOBJ): New. * config.bfd (targ_selvecs): Rename x86_64_pe_be_vec to x86_64_pe_big_vec as it not a big-endian format. (vec i386_pe_big_vec): New. * configure.ac: Likewise. * targets.c: Likewise. * configure: Regenerate. * pe-i386.c (TARGET_SYM_BIG, TARGET_NAME_BIG, COFF_WITH_PE_BIGOBJ): New. * pe-x86_64.c (TARGET_SYM_BIG, TARGET_NAME_BIG): New. (x86_64_pe_be_vec): Moved. gas/ChangeLog: * NEWS: Add news entry for big-obj. * config/tc-i386.c (i386_target_format): Support new format. * doc/c-i386.texi: Add i386 support. * testsuite/gas/pe/big-obj.d: Rename test to not be x64 specific. * testsuite/gas/pe/pe.exp (big-obj): Make test run on i386 as well. ld/ChangeLog: * pe-dll.c (pe_detail_list): Add pe-bigobj-i386. --- gas/config/tc-i386.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gas/config/tc-i386.c') diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index a692c45..32fd6c1 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -13506,7 +13506,7 @@ i386_target_format (void) if (flag_code == CODE_64BIT) return use_big_obj ? "pe-bigobj-x86-64" : "pe-x86-64"; else - return "pe-i386"; + return use_big_obj ? "pe-bigobj-i386" : "pe-i386"; # elif defined (TE_GO32) case bfd_target_coff_flavour: return "coff-go32"; -- cgit v1.1