From 167ad85bf06582759e8dfe021aac9da79b81340d Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Mon, 2 Dec 2013 14:30:32 +0100 Subject: Add pe/x86_64 bigobj file format. bfd/ * peicode.h (pe_ILF_object_p): Adjust, as the version number has been read. (pe_bfd_object_p): Also read version number to detect ILF. * pe-x86_64.c (COFF_WITH_PE_BIGOBJ): Define. (x86_64pe_bigobj_vec): Define * coffcode.h (bfd_coff_backend_data): Add _bfd_coff_max_nscns field. (bfd_coff_max_nscns): New macro. (coff_compute_section_file_positions): Use unsigned int for target_index. Compare with bfd_coff_max_nscns. (bfd_coff_std_swap_table, ticoff0_swap_table, ticoff1_swap_table): Set a value for _bfd_coff_max_nscns. (header_bigobj_classid): New constant. (coff_bigobj_swap_filehdr_in, coff_bigobj_swap_filehdr_out) (coff_bigobj_swap_sym_in, coff_bigobj_swap_sym_out) (coff_bigobj_swap_aux_in, coff_bigobj_swap_aux_out): New functions. (bigobj_swap_table): New table. * libcoff.h: Regenerate. * coff-sh.c (bfd_coff_small_swap_table): Likewise. * coff-alpha.c (alpha_ecoff_backend_data): Add value for _bfd_coff_max_nscns. * coff-mips.c (mips_ecoff_backend_data): Likewise. * coff-rs6000.c (bfd_xcoff_backend_data) (bfd_pmac_xcoff_backend_data): Likewise. * coff64-rs6000.c (bfd_xcoff_backend_data) (bfd_xcoff_aix5_backend_data): Likewise. * targets.c (x86_64pe_bigobj_vec): Declare. * configure.in (x86_64pe_bigobj_vec): New vector. * configure: Regenerate. * config.bfd: Add bigobj object format for Windows targets. gas/ * config/tc-i386.c (use_big_obj): Declare. (OPTION_MBIG_OBJ): Define. (md_longopts): Add -mbig-obj option. (md_parse_option): Handle it. (md_show_usage): Display help for this option. (i386_target_format): Use bigobj for x86-64 if -mbig-obj. * doc/c-i386.texi: Document the option. gas/testsuite/ * gas/pe/big-obj.d, gas/pe/big-obj.s: Add test. * gas/pe/pe.exp: Add test. include/coff/ * pe.h (struct external_ANON_OBJECT_HEADER_BIGOBJ): Declare. (FILHSZ_BIGOBJ): Define. (struct external_SYMBOL_EX): Declare. (SYMENT_BIGOBJ, SYMESZ_BIGOBJ): Define. (union external_AUX_SYMBOL_EX): Declare. (AUXENT_BIGOBJ, AUXESZ_BIGOBJ): Define. * internal.h (struct internal_filehdr): Change type of f_nscns. --- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/pe/big-obj.d | 11 +++++++++++ gas/testsuite/gas/pe/big-obj.s | 16 ++++++++++++++++ gas/testsuite/gas/pe/pe.exp | 8 ++++++++ 4 files changed, 40 insertions(+) create mode 100644 gas/testsuite/gas/pe/big-obj.d create mode 100644 gas/testsuite/gas/pe/big-obj.s (limited to 'gas/testsuite') diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 9e87cc0..161d49e 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-03-13 Tristan Gingold + + * gas/pe/big-obj.d, gas/pe/big-obj.s: Add test. + * gas/pe/pe.exp: Add test. + 2014-03-12 Nick Clifton PR gas/16688 diff --git a/gas/testsuite/gas/pe/big-obj.d b/gas/testsuite/gas/pe/big-obj.d new file mode 100644 index 0000000..95ff1d8 --- /dev/null +++ b/gas/testsuite/gas/pe/big-obj.d @@ -0,0 +1,11 @@ +#as: -mbig-obj +#objdump: -h +#name: PE x64 big obj + +.*: *file format pe-bigobj-.* + +Sections: +#... +5000. \.data\$a49999 .* + CONTENTS, ALLOC, LOAD, DATA + diff --git a/gas/testsuite/gas/pe/big-obj.s b/gas/testsuite/gas/pe/big-obj.s new file mode 100644 index 0000000..07edc91 --- /dev/null +++ b/gas/testsuite/gas/pe/big-obj.s @@ -0,0 +1,16 @@ + .file "big-obj.s" + + .irp n,0,1,2,3,4 + .irp m,0,1,2,3,4,5,6,7,8,9 + .irp c,0,1,2,3,4,5,6,7,8,9 + .irp d,0,1,2,3,4,5,6,7,8,9 + .irp u,0,1,2,3,4,5,6,7,8,9 + .globl a\n\m\c\d\u + .section .data$a\n\m\c\d\u,"w" +a\n\m\c\d\u : + .byte 1 + .endr + .endr + .endr + .endr + .endr diff --git a/gas/testsuite/gas/pe/pe.exp b/gas/testsuite/gas/pe/pe.exp index 0b70ee6..c1c5f49 100644 --- a/gas/testsuite/gas/pe/pe.exp +++ b/gas/testsuite/gas/pe/pe.exp @@ -48,3 +48,11 @@ if ([istarget "x86_64-*-mingw*"]) then { run_dump_test "peseh-x64-5" run_dump_test "peseh-x64-6" } + +# Big obj + + +if ([istarget "x86_64-*-mingw*"]) then { + # Currently only supported on x86_64 + run_dump_test "big-obj" +} -- cgit v1.1