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.
This commit is contained in:
Tamar Christina 2020-04-27 17:39:31 +01:00
parent 1eb3991427
commit 251dae9107
17 changed files with 205 additions and 75 deletions

View File

@ -1,3 +1,19 @@
2020-04-27 Tamar Christina <tamar.christina@arm.com>
* 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.
2020-04-23 Anton Kolesov <anton.kolesov@synopsys.com> 2020-04-23 Anton Kolesov <anton.kolesov@synopsys.com>
* elf-bfd.h (elfcore_write_arc_v2): Add prototype. * elf-bfd.h (elfcore_write_arc_v2): Add prototype.

View File

@ -701,3 +701,75 @@ const bfd_target
COFF_SWAP_TABLE COFF_SWAP_TABLE
}; };
#ifdef COFF_WITH_PE_BIGOBJ
const bfd_target
TARGET_SYM_BIG =
{
TARGET_NAME_BIG,
bfd_target_coff_flavour,
BFD_ENDIAN_LITTLE, /* data byte order is little */
BFD_ENDIAN_LITTLE, /* header byte order is little */
(HAS_RELOC | EXEC_P | /* object flags */
HAS_LINENO | HAS_DEBUG |
HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS ),
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* section flags */
#ifdef COFF_WITH_PE
| SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
#endif
| SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
#ifdef TARGET_UNDERSCORE
TARGET_UNDERSCORE, /* leading underscore */
#else
0, /* leading underscore */
#endif
'/', /* ar_pad_char */
15, /* ar_max_namelen */
0, /* match priority. */
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
/* Note that we allow an object file to be treated as a core file as well. */
{ /* bfd_check_format */
_bfd_dummy_target,
COFF_CHECK_FORMAT,
bfd_generic_archive_p,
COFF_CHECK_FORMAT
},
{ /* bfd_set_format */
_bfd_bool_bfd_false_error,
coff_mkobject,
_bfd_generic_mkarchive,
_bfd_bool_bfd_false_error
},
{ /* bfd_write_contents */
_bfd_bool_bfd_false_error,
COFF_WRITE_CONTENTS,
_bfd_write_archive_contents,
_bfd_bool_bfd_false_error
},
BFD_JUMP_TABLE_GENERIC (coff),
BFD_JUMP_TABLE_COPY (coff),
BFD_JUMP_TABLE_CORE (_bfd_nocore),
BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
BFD_JUMP_TABLE_SYMBOLS (coff),
BFD_JUMP_TABLE_RELOCS (coff),
BFD_JUMP_TABLE_WRITE (coff),
BFD_JUMP_TABLE_LINK (coff),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
NULL,
&bigobj_swap_table
};
#endif

View File

@ -824,3 +824,76 @@ const bfd_target
COFF_SWAP_TABLE COFF_SWAP_TABLE
}; };
/* Entry for big object files. */
#ifdef COFF_WITH_PE_BIGOBJ
const bfd_target
TARGET_SYM_BIG =
{
TARGET_NAME_BIG,
bfd_target_coff_flavour,
BFD_ENDIAN_LITTLE, /* Data byte order is little. */
BFD_ENDIAN_LITTLE, /* Header byte order is little. */
(HAS_RELOC | EXEC_P /* Object flags. */
| HAS_LINENO | HAS_DEBUG
| HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags. */
#if defined(COFF_WITH_PE)
| SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
#endif
| SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
#ifdef TARGET_UNDERSCORE
TARGET_UNDERSCORE, /* Leading underscore. */
#else
0, /* Leading underscore. */
#endif
'/', /* Ar_pad_char. */
15, /* Ar_max_namelen. */
0, /* match priority. */
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */
/* Note that we allow an object file to be treated as a core file as well. */
{ /* bfd_check_format. */
_bfd_dummy_target,
amd64coff_object_p,
bfd_generic_archive_p,
amd64coff_object_p
},
{ /* bfd_set_format. */
_bfd_bool_bfd_false_error,
coff_mkobject,
_bfd_generic_mkarchive,
_bfd_bool_bfd_false_error
},
{ /* bfd_write_contents. */
_bfd_bool_bfd_false_error,
coff_write_object_contents,
_bfd_write_archive_contents,
_bfd_bool_bfd_false_error
},
BFD_JUMP_TABLE_GENERIC (coff),
BFD_JUMP_TABLE_COPY (coff),
BFD_JUMP_TABLE_CORE (_bfd_nocore),
BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
BFD_JUMP_TABLE_SYMBOLS (coff),
BFD_JUMP_TABLE_RELOCS (coff),
BFD_JUMP_TABLE_WRITE (coff),
BFD_JUMP_TABLE_LINK (coff),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
NULL,
&bigobj_swap_table
};
#endif

View File

@ -701,7 +701,7 @@ case "${targ}" in
;; ;;
x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin) x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin)
targ_defvec=x86_64_pe_vec targ_defvec=x86_64_pe_vec
targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_be_vec x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec" targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_big_vec x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec"
want64=true want64=true
targ_underscore=no targ_underscore=no
;; ;;
@ -751,7 +751,7 @@ case "${targ}" in
;; ;;
i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe) i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe)
targ_defvec=i386_pe_vec targ_defvec=i386_pe_vec
targ_selvecs="i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec" targ_selvecs="i386_pe_vec i386_pe_big_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec"
targ_underscore=yes targ_underscore=yes
;; ;;
i[3-7]86-*-vxworks*) i[3-7]86-*-vxworks*)

3
bfd/configure vendored
View File

@ -14764,6 +14764,7 @@ do
i386_mach_o_vec) tb="$tb mach-o-i386.lo" ;; i386_mach_o_vec) tb="$tb mach-o-i386.lo" ;;
i386_msdos_vec) tb="$tb i386msdos.lo" ;; i386_msdos_vec) tb="$tb i386msdos.lo" ;;
i386_pe_vec) tb="$tb pe-i386.lo peigen.lo $coff" ;; i386_pe_vec) tb="$tb pe-i386.lo peigen.lo $coff" ;;
i386_pe_big_vec) tb="$tb pe-i386.lo peigen.lo $coff" ;;
i386_pei_vec) tb="$tb pei-i386.lo peigen.lo $coff" ;; i386_pei_vec) tb="$tb pei-i386.lo peigen.lo $coff" ;;
iamcu_elf32_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; iamcu_elf32_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
ia64_elf32_be_vec) tb="$tb elf32-ia64.lo elfxx-ia64.lo elf32.lo $elf" ;; ia64_elf32_be_vec) tb="$tb elf32-ia64.lo elfxx-ia64.lo elf32.lo $elf" ;;
@ -14947,7 +14948,7 @@ do
x86_64_elf64_sol2_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; x86_64_elf64_sol2_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
x86_64_mach_o_vec) tb="$tb mach-o-x86-64.lo" ;; x86_64_mach_o_vec) tb="$tb mach-o-x86-64.lo" ;;
x86_64_pe_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; x86_64_pe_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
x86_64_pe_be_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; x86_64_pe_big_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
x86_64_pei_vec) tb="$tb pei-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; x86_64_pei_vec) tb="$tb pei-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
xc16x_elf32_vec) tb="$tb elf32-xc16x.lo elf32.lo $elf" ;; xc16x_elf32_vec) tb="$tb elf32-xc16x.lo elf32.lo $elf" ;;
xgate_elf32_vec) tb="$tb elf32-xgate.lo elf32.lo $elf" ;; xgate_elf32_vec) tb="$tb elf32-xgate.lo elf32.lo $elf" ;;

View File

@ -500,6 +500,7 @@ do
i386_mach_o_vec) tb="$tb mach-o-i386.lo" ;; i386_mach_o_vec) tb="$tb mach-o-i386.lo" ;;
i386_msdos_vec) tb="$tb i386msdos.lo" ;; i386_msdos_vec) tb="$tb i386msdos.lo" ;;
i386_pe_vec) tb="$tb pe-i386.lo peigen.lo $coff" ;; i386_pe_vec) tb="$tb pe-i386.lo peigen.lo $coff" ;;
i386_pe_big_vec) tb="$tb pe-i386.lo peigen.lo $coff" ;;
i386_pei_vec) tb="$tb pei-i386.lo peigen.lo $coff" ;; i386_pei_vec) tb="$tb pei-i386.lo peigen.lo $coff" ;;
iamcu_elf32_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;; iamcu_elf32_vec) tb="$tb elf32-i386.lo $elfxx_x86 elf32.lo $elf" ;;
ia64_elf32_be_vec) tb="$tb elf32-ia64.lo elfxx-ia64.lo elf32.lo $elf" ;; ia64_elf32_be_vec) tb="$tb elf32-ia64.lo elfxx-ia64.lo elf32.lo $elf" ;;
@ -683,7 +684,7 @@ do
x86_64_elf64_sol2_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;; x86_64_elf64_sol2_vec) tb="$tb elf64-x86-64.lo $elfxx_x86 elf64.lo $elf"; target_size=64 ;;
x86_64_mach_o_vec) tb="$tb mach-o-x86-64.lo" ;; x86_64_mach_o_vec) tb="$tb mach-o-x86-64.lo" ;;
x86_64_pe_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; x86_64_pe_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
x86_64_pe_be_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; x86_64_pe_big_vec) tb="$tb pe-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
x86_64_pei_vec) tb="$tb pei-x86_64.lo pex64igen.lo $coff"; target_size=64 ;; x86_64_pei_vec) tb="$tb pei-x86_64.lo pex64igen.lo $coff"; target_size=64 ;;
xc16x_elf32_vec) tb="$tb elf32-xc16x.lo elf32.lo $elf" ;; xc16x_elf32_vec) tb="$tb elf32-xc16x.lo elf32.lo $elf" ;;
xgate_elf32_vec) tb="$tb elf32-xgate.lo elf32.lo $elf" ;; xgate_elf32_vec) tb="$tb elf32-xgate.lo elf32.lo $elf" ;;

View File

@ -23,7 +23,10 @@
#define TARGET_SYM i386_pe_vec #define TARGET_SYM i386_pe_vec
#define TARGET_NAME "pe-i386" #define TARGET_NAME "pe-i386"
#define TARGET_SYM_BIG i386_pe_big_vec
#define TARGET_NAME_BIG "pe-bigobj-i386"
#define COFF_WITH_PE #define COFF_WITH_PE
#define COFF_WITH_PE_BIGOBJ
#define PCRELOFFSET TRUE #define PCRELOFFSET TRUE
#define TARGET_UNDERSCORE '_' #define TARGET_UNDERSCORE '_'
#define COFF_LONG_SECTION_NAMES #define COFF_LONG_SECTION_NAMES

View File

@ -25,6 +25,8 @@
#define TARGET_SYM x86_64_pe_vec #define TARGET_SYM x86_64_pe_vec
#define TARGET_NAME "pe-x86-64" #define TARGET_NAME "pe-x86-64"
#define TARGET_SYM_BIG x86_64_pe_big_vec
#define TARGET_NAME_BIG "pe-bigobj-x86-64"
#define COFF_WITH_PE #define COFF_WITH_PE
#define COFF_WITH_pex64 #define COFF_WITH_pex64
#define COFF_WITH_PE_BIGOBJ #define COFF_WITH_PE_BIGOBJ
@ -66,67 +68,3 @@ extern bfd_boolean pex64_bfd_print_pdata (bfd *, void *);
#include "coff-x86_64.c" #include "coff-x86_64.c"
/* Entry for big object files. */
const bfd_target
x86_64_pe_be_vec =
{
"pe-bigobj-x86-64", /* Name. */
bfd_target_coff_flavour,
BFD_ENDIAN_LITTLE, /* Data byte order is little. */
BFD_ENDIAN_LITTLE, /* Header byte order is little. */
(HAS_RELOC | EXEC_P /* Object flags. */
| HAS_LINENO | HAS_DEBUG
| HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags. */
| SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
| SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
TARGET_UNDERSCORE, /* Leading underscore. */
'/', /* Ar_pad_char. */
15, /* Ar_max_namelen. */
0, /* match priority. */
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */
/* Note that we allow an object file to be treated as a core file as well. */
{ /* bfd_check_format. */
_bfd_dummy_target,
amd64coff_object_p,
bfd_generic_archive_p,
amd64coff_object_p
},
{ /* bfd_set_format. */
_bfd_bool_bfd_false_error,
coff_mkobject,
_bfd_generic_mkarchive,
_bfd_bool_bfd_false_error
},
{ /* bfd_write_contents. */
_bfd_bool_bfd_false_error,
coff_write_object_contents,
_bfd_write_archive_contents,
_bfd_bool_bfd_false_error
},
BFD_JUMP_TABLE_GENERIC (coff),
BFD_JUMP_TABLE_COPY (coff),
BFD_JUMP_TABLE_CORE (_bfd_nocore),
BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
BFD_JUMP_TABLE_SYMBOLS (coff),
BFD_JUMP_TABLE_RELOCS (coff),
BFD_JUMP_TABLE_WRITE (coff),
BFD_JUMP_TABLE_LINK (coff),
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
NULL,
&bigobj_swap_table
};

View File

@ -742,6 +742,7 @@ extern const bfd_target i386_elf32_vxworks_vec;
extern const bfd_target i386_mach_o_vec; extern const bfd_target i386_mach_o_vec;
extern const bfd_target i386_msdos_vec; extern const bfd_target i386_msdos_vec;
extern const bfd_target i386_pe_vec; extern const bfd_target i386_pe_vec;
extern const bfd_target i386_pe_big_vec;
extern const bfd_target i386_pei_vec; extern const bfd_target i386_pei_vec;
extern const bfd_target iamcu_elf32_vec; extern const bfd_target iamcu_elf32_vec;
extern const bfd_target ia64_elf32_be_vec; extern const bfd_target ia64_elf32_be_vec;
@ -926,7 +927,7 @@ extern const bfd_target x86_64_elf64_nacl_vec;
extern const bfd_target x86_64_elf64_sol2_vec; extern const bfd_target x86_64_elf64_sol2_vec;
extern const bfd_target x86_64_mach_o_vec; extern const bfd_target x86_64_mach_o_vec;
extern const bfd_target x86_64_pe_vec; extern const bfd_target x86_64_pe_vec;
extern const bfd_target x86_64_pe_be_vec; extern const bfd_target x86_64_pe_big_vec;
extern const bfd_target x86_64_pei_vec; extern const bfd_target x86_64_pei_vec;
extern const bfd_target xc16x_elf32_vec; extern const bfd_target xc16x_elf32_vec;
extern const bfd_target xgate_elf32_vec; extern const bfd_target xgate_elf32_vec;
@ -1091,6 +1092,7 @@ static const bfd_target * const _bfd_target_vector[] =
&i386_mach_o_vec, &i386_mach_o_vec,
&i386_msdos_vec, &i386_msdos_vec,
&i386_pe_vec, &i386_pe_vec,
&i386_pe_big_vec,
&i386_pei_vec, &i386_pei_vec,
&iamcu_elf32_vec, &iamcu_elf32_vec,
@ -1343,7 +1345,7 @@ static const bfd_target * const _bfd_target_vector[] =
&x86_64_elf64_sol2_vec, &x86_64_elf64_sol2_vec,
&x86_64_mach_o_vec, &x86_64_mach_o_vec,
&x86_64_pe_vec, &x86_64_pe_vec,
&x86_64_pe_be_vec, &x86_64_pe_big_vec,
&x86_64_pei_vec, &x86_64_pei_vec,
#endif #endif

View File

@ -1,3 +1,11 @@
2020-04-27 Tamar Christina <tamar.christina@arm.com>
* 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.
2020-04-27 Nick Clifton <nickc@redhat.com> 2020-04-27 Nick Clifton <nickc@redhat.com>
PR 25878 PR 25878

View File

@ -13,6 +13,8 @@
(if such output is being generated). Added the ability to generate (if such output is being generated). Added the ability to generate
version 5 .debug_line sections. version 5 .debug_line sections.
* Add -mbig-obj support to i386 MingW targets.
Changes in 2.34: Changes in 2.34:
* Add -malign-branch-boundary=NUM, -malign-branch=TYPE[+TYPE...], * Add -malign-branch-boundary=NUM, -malign-branch=TYPE[+TYPE...],

View File

@ -13506,7 +13506,7 @@ i386_target_format (void)
if (flag_code == CODE_64BIT) if (flag_code == CODE_64BIT)
return use_big_obj ? "pe-bigobj-x86-64" : "pe-x86-64"; return use_big_obj ? "pe-bigobj-x86-64" : "pe-x86-64";
else else
return "pe-i386"; return use_big_obj ? "pe-bigobj-i386" : "pe-i386";
# elif defined (TE_GO32) # elif defined (TE_GO32)
case bfd_target_coff_flavour: case bfd_target_coff_flavour:
return "coff-go32"; return "coff-go32";

View File

@ -390,9 +390,10 @@ with default visibility can be preempted. The resulting code is
slightly bigger. This option only affects the handling of branch slightly bigger. This option only affects the handling of branch
instructions. instructions.
@cindex @samp{-mbig-obj} option, i386
@cindex @samp{-mbig-obj} option, x86-64 @cindex @samp{-mbig-obj} option, x86-64
@item -mbig-obj @item -mbig-obj
On x86-64 PE/COFF target this option forces the use of big object file On PE/COFF target this option forces the use of big object file
format, which allows more than 32768 sections. format, which allows more than 32768 sections.
@cindex @samp{-momit-lock-prefix=} option, i386 @cindex @samp{-momit-lock-prefix=} option, i386

View File

@ -1,6 +1,6 @@
#as: -mbig-obj #as: -mbig-obj
#objdump: -h #objdump: -h
#name: PE x64 big obj #name: PE big obj
.*: *file format pe-bigobj-.* .*: *file format pe-bigobj-.*

View File

@ -55,7 +55,6 @@ if ([istarget "x86_64-*-mingw*"]) then {
# Big obj # Big obj
if ([istarget "x86_64-*-mingw*"]) then { if ([istarget "*-*-mingw*"]) then {
# Currently only supported on x86_64
run_dump_test "big-obj" run_dump_test "big-obj"
} }

View File

@ -1,3 +1,7 @@
2020-04-27 Tamar Christina <tamar.christina@arm.com>
* pe-dll.c (pe_detail_list): Add pe-bigobj-i386.
2020-04-22 Max Filippov <jcmvbkbc@gmail.com> 2020-04-22 Max Filippov <jcmvbkbc@gmail.com>
PR ld/25861 PR ld/25861

View File

@ -280,6 +280,16 @@ static pe_details_type pe_detail_list[] =
FALSE, FALSE,
autofilter_symbollist_i386 autofilter_symbollist_i386
}, },
#else
{
"pei-i386",
"pe-bigobj-i386",
7 /* R_IMAGEBASE */,
PE_ARCH_i386,
bfd_arch_i386,
TRUE,
autofilter_symbollist_i386
},
#endif #endif
{ {
"pei-shl", "pei-shl",