From: Jan Beulich Date: Fri, 24 Oct 2025 13:11:39 +0000 (+0200) Subject: bfd: replace _bfd_merge_sections() hook with simple boolean X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=caccc182b5e0743dde736560ae87e4891a812818;p=thirdparty%2Fbinutils-gdb.git bfd: replace _bfd_merge_sections() hook with simple boolean There's no need for a hook; what needs doing is uniform, the question is only whether to perform any merging (i.e. whether other parts of a backend are capable of dealing with the effects). Where _bfd_nolink_bfd_merge_sections() was used, false is hardcoded. For ELF no real target override is permitted; true is hardcoded except for the cases where bfd_generic_merge_sections() was used as the hook function before. --- diff --git a/bfd/aout-target.h b/bfd/aout-target.h index c6d9d60ca8a..229e90b0175 100644 --- a/bfd/aout-target.h +++ b/bfd/aout-target.h @@ -495,9 +495,6 @@ MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info) #ifndef MY_bfd_lookup_section_flags #define MY_bfd_lookup_section_flags bfd_generic_lookup_section_flags #endif -#ifndef MY_bfd_merge_sections -#define MY_bfd_merge_sections bfd_generic_merge_sections -#endif #ifndef MY_bfd_is_group_section #define MY_bfd_is_group_section bfd_generic_is_group_section #endif @@ -648,6 +645,7 @@ const bfd_target MY (vec) = 15, /* AR_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, #ifdef TARGET_IS_BIG_ENDIAN_P bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 8f3b0f7c255..1a178c57daf 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -2708,9 +2708,6 @@ bool bfd_set_private_flags (bfd *abfd, flagword flags); #define bfd_lookup_section_flags(link_info, flag_info, section) \ BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section)) -#define bfd_merge_sections(abfd, link_info) \ - BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info)) - #define bfd_is_group_section(abfd, sec) \ BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec)) @@ -7525,6 +7522,11 @@ struct stab_info #define TARGET_KEEP_UNUSED_SECTION_SYMBOLS true #endif +/* Define to TRUE if section merging is supported by the backend. */ +#ifndef TARGET_MERGE_SECTIONS +#define TARGET_MERGE_SECTIONS false +#endif + enum bfd_flavour { /* N.B. Update bfd_flavour_name if you change this. */ @@ -7594,6 +7596,9 @@ typedef struct bfd_target /* TRUE if unused section symbols should be kept. */ bool keep_unused_section_symbols; + /* TRUE if section merging is supported by the backend. */ + bool merge_sections; + /* Entries for byte swapping for data. These are different from the other entry points, since they don't take a BFD as the first argument. Certain other handlers could do the same. */ @@ -7831,7 +7836,6 @@ typedef struct bfd_target NAME##_bfd_link_check_relocs, \ NAME##_bfd_gc_sections, \ NAME##_bfd_lookup_section_flags, \ - NAME##_bfd_merge_sections, \ NAME##_bfd_is_group_section, \ NAME##_bfd_group_name, \ NAME##_bfd_discard_group, \ @@ -7887,9 +7891,6 @@ typedef struct bfd_target bool (*_bfd_lookup_section_flags) (struct bfd_link_info *, struct flag_info *, asection *); - /* Attempt to merge SEC_MERGE sections. */ - bool (*_bfd_merge_sections) (bfd *, struct bfd_link_info *); - /* Is this section a member of a group? */ bool (*_bfd_is_group_section) (bfd *, const struct bfd_section *); diff --git a/bfd/bfd.c b/bfd/bfd.c index 858ab5ce017..11ce75669d3 100644 --- a/bfd/bfd.c +++ b/bfd/bfd.c @@ -2645,9 +2645,6 @@ DESCRIPTION .#define bfd_lookup_section_flags(link_info, flag_info, section) \ . BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section)) . -.#define bfd_merge_sections(abfd, link_info) \ -. BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info)) -. .#define bfd_is_group_section(abfd, sec) \ . BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec)) . diff --git a/bfd/binary.c b/bfd/binary.c index 7fe47b590de..eb5f3b1371e 100644 --- a/bfd/binary.c +++ b/bfd/binary.c @@ -298,7 +298,6 @@ binary_set_section_contents (bfd *abfd, #define binary_bfd_relax_section bfd_generic_relax_section #define binary_bfd_gc_sections bfd_generic_gc_sections #define binary_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define binary_bfd_merge_sections bfd_generic_merge_sections #define binary_bfd_is_group_section bfd_generic_is_group_section #define binary_bfd_group_name bfd_generic_group_name #define binary_bfd_discard_group bfd_generic_discard_group @@ -328,6 +327,7 @@ const bfd_target binary_vec = 16, /* ar_max_namelen */ 255, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */ diff --git a/bfd/cisco-core.c b/bfd/cisco-core.c index 23ce251357e..70c086b1cfd 100644 --- a/bfd/cisco-core.c +++ b/bfd/cisco-core.c @@ -330,6 +330,7 @@ const bfd_target core_cisco_be_vec = 16, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */ diff --git a/bfd/coff-aarch64.c b/bfd/coff-aarch64.c index 48b8bfaf496..0792306cfa0 100644 --- a/bfd/coff-aarch64.c +++ b/bfd/coff-aarch64.c @@ -973,6 +973,7 @@ const bfd_target 15, /* Ar_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, /* Data conversion functions. */ bfd_getl64, bfd_getl_signed_64, bfd_putl64, diff --git a/bfd/coff-alpha.c b/bfd/coff-alpha.c index 3616a3eceef..b20269b077b 100644 --- a/bfd/coff-alpha.c +++ b/bfd/coff-alpha.c @@ -2445,7 +2445,6 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data = /* Relaxing sections is generic. */ #define _bfd_ecoff_bfd_relax_section bfd_generic_relax_section #define _bfd_ecoff_bfd_gc_sections bfd_generic_gc_sections -#define _bfd_ecoff_bfd_merge_sections bfd_generic_merge_sections #define _bfd_ecoff_bfd_is_group_section bfd_generic_is_group_section #define _bfd_ecoff_bfd_group_name bfd_generic_group_name #define _bfd_ecoff_bfd_discard_group bfd_generic_discard_group @@ -2477,6 +2476,7 @@ const bfd_target alpha_ecoff_le_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, 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 */ diff --git a/bfd/coff-i386.c b/bfd/coff-i386.c index 6a41c327ec2..935aeb4ac0d 100644 --- a/bfd/coff-i386.c +++ b/bfd/coff-i386.c @@ -740,6 +740,7 @@ const bfd_target 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getl32, bfd_getl_signed_32, bfd_putl32, @@ -819,6 +820,7 @@ const bfd_target 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getl32, bfd_getl_signed_32, bfd_putl32, diff --git a/bfd/coff-ia64.c b/bfd/coff-ia64.c index b2873ae8684..a457497c385 100644 --- a/bfd/coff-ia64.c +++ b/bfd/coff-ia64.c @@ -174,6 +174,7 @@ const bfd_target 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getl32, bfd_getl_signed_32, bfd_putl32, diff --git a/bfd/coff-loongarch64.c b/bfd/coff-loongarch64.c index a85210864ae..10a902869d8 100644 --- a/bfd/coff-loongarch64.c +++ b/bfd/coff-loongarch64.c @@ -115,6 +115,7 @@ const bfd_target 15, /* Ar_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, /* Data conversion functions. */ bfd_getl64, bfd_getl_signed_64, bfd_putl64, diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c index 1213a159358..80e6990db01 100644 --- a/bfd/coff-mips.c +++ b/bfd/coff-mips.c @@ -1404,9 +1404,6 @@ static const struct ecoff_backend_data mips_ecoff_backend_data = /* Input section flags is not implemented. */ #define _bfd_ecoff_bfd_lookup_section_flags bfd_generic_lookup_section_flags -/* Merging of sections is not done. */ -#define _bfd_ecoff_bfd_merge_sections bfd_generic_merge_sections - #define _bfd_ecoff_bfd_is_group_section bfd_generic_is_group_section #define _bfd_ecoff_bfd_group_name bfd_generic_group_name #define _bfd_ecoff_bfd_discard_group bfd_generic_discard_group @@ -1437,6 +1434,7 @@ const bfd_target mips_ecoff_le_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, 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 */ @@ -1496,6 +1494,7 @@ const bfd_target mips_ecoff_be_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, @@ -1555,6 +1554,7 @@ const bfd_target mips_ecoff_bele_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, 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 */ diff --git a/bfd/coff-riscv64.c b/bfd/coff-riscv64.c index 2356a6bb94d..508fd85f1d8 100644 --- a/bfd/coff-riscv64.c +++ b/bfd/coff-riscv64.c @@ -88,6 +88,7 @@ const bfd_target 15, /* Ar_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, /* Data conversion functions. */ bfd_getl64, bfd_getl_signed_64, bfd_putl64, diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index 803b51c9fc3..fc065d7095d 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -4521,7 +4521,6 @@ coff_find_nearest_line_with_alt #define _bfd_xcoff_bfd_link_split_section _bfd_generic_link_split_section #define _bfd_xcoff_bfd_gc_sections bfd_generic_gc_sections #define _bfd_xcoff_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define _bfd_xcoff_bfd_merge_sections bfd_generic_merge_sections #define _bfd_xcoff_bfd_is_group_section bfd_generic_is_group_section #define _bfd_xcoff_bfd_group_name bfd_generic_group_name #define _bfd_xcoff_bfd_discard_group bfd_generic_discard_group @@ -4655,6 +4654,7 @@ const bfd_target rs6000_xcoff_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, /* data */ bfd_getb64, @@ -4844,6 +4844,7 @@ const bfd_target powerpc_xcoff_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, /* data */ bfd_getb64, diff --git a/bfd/coff-sh.c b/bfd/coff-sh.c index 008d1e7b38f..928d13a4d18 100644 --- a/bfd/coff-sh.c +++ b/bfd/coff-sh.c @@ -3139,6 +3139,7 @@ const bfd_target sh_coff_small_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */ @@ -3197,6 +3198,7 @@ const bfd_target sh_coff_small_le_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, 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 */ diff --git a/bfd/coff-tic30.c b/bfd/coff-tic30.c index 583c7c253c7..957fdf447c4 100644 --- a/bfd/coff-tic30.c +++ b/bfd/coff-tic30.c @@ -200,6 +200,7 @@ const bfd_target tic30_coff_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */ diff --git a/bfd/coff-tic54x.c b/bfd/coff-tic54x.c index 0eb8534e437..9166ed82751 100644 --- a/bfd/coff-tic54x.c +++ b/bfd/coff-tic54x.c @@ -388,6 +388,7 @@ const bfd_target tic54x_coff0_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32, bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */ @@ -450,6 +451,7 @@ const bfd_target tic54x_coff0_beh_vec = #else false, /* keep unused section symbols. */ #endif + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32, bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */ @@ -513,6 +515,7 @@ const bfd_target tic54x_coff1_vec = #else false, /* keep unused section symbols. */ #endif + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32, bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */ @@ -576,6 +579,7 @@ const bfd_target tic54x_coff1_beh_vec = #else false, /* keep unused section symbols. */ #endif + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32, bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */ @@ -639,6 +643,7 @@ const bfd_target tic54x_coff2_vec = #else false, /* keep unused section symbols. */ #endif + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32, bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */ @@ -702,6 +707,7 @@ const bfd_target tic54x_coff2_beh_vec = #else false, /* keep unused section symbols. */ #endif + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32, bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */ diff --git a/bfd/coff-x86_64.c b/bfd/coff-x86_64.c index af47b7fbb76..3d5a82f8b4a 100644 --- a/bfd/coff-x86_64.c +++ b/bfd/coff-x86_64.c @@ -927,6 +927,7 @@ const bfd_target 15, /* Ar_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getl32, bfd_getl_signed_32, bfd_putl32, @@ -1000,6 +1001,7 @@ const bfd_target 15, /* Ar_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getl32, bfd_getl_signed_32, bfd_putl32, diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index 814d25eda90..00cb91a02cc 100644 --- a/bfd/coff64-rs6000.c +++ b/bfd/coff64-rs6000.c @@ -2568,6 +2568,7 @@ const bfd_target rs6000_xcoff64_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, /* data */ bfd_getb64, @@ -2685,7 +2686,6 @@ const bfd_target rs6000_xcoff64_vec = _bfd_generic_link_check_relocs, bfd_generic_gc_sections, bfd_generic_lookup_section_flags, - bfd_generic_merge_sections, bfd_generic_is_group_section, bfd_generic_group_name, bfd_generic_discard_group, @@ -2838,6 +2838,7 @@ const bfd_target rs6000_xcoff64_aix_vec = 15, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, /* data */ bfd_getb64, @@ -2955,7 +2956,6 @@ const bfd_target rs6000_xcoff64_aix_vec = _bfd_generic_link_check_relocs, bfd_generic_gc_sections, bfd_generic_lookup_section_flags, - bfd_generic_merge_sections, bfd_generic_is_group_section, bfd_generic_group_name, bfd_generic_discard_group, diff --git a/bfd/coffcode.h b/bfd/coffcode.h index 5cfdb2dc56b..1e5acc0032c 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -6024,10 +6024,6 @@ static const bfd_coff_backend_data bigobj_swap_table = #define coff_bfd_lookup_section_flags bfd_generic_lookup_section_flags #endif -#ifndef coff_bfd_merge_sections -#define coff_bfd_merge_sections bfd_generic_merge_sections -#endif - #ifndef coff_bfd_is_group_section #define coff_bfd_is_group_section bfd_generic_is_group_section #endif @@ -6082,6 +6078,7 @@ const bfd_target VAR = \ 15, /* AR_max_namelen. */ \ 0, /* match priority. */ \ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ \ + TARGET_MERGE_SECTIONS, \ \ /* Data conversion functions. */ \ bfd_getb64, bfd_getb_signed_64, bfd_putb64, \ @@ -6145,6 +6142,7 @@ const bfd_target VAR = \ 15, /* AR_max_namelen. */ \ 0, /* match priority. */ \ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ \ + TARGET_MERGE_SECTIONS, \ \ /* Data conversion functions. */ \ bfd_getl64, bfd_getl_signed_64, bfd_putl64, \ @@ -6208,6 +6206,7 @@ const bfd_target VAR = \ 15, /* AR_max_namelen. */ \ 0, /* match priority. */ \ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ \ + TARGET_MERGE_SECTIONS, \ \ /* Data conversion functions. */ \ bfd_getl64, bfd_getl_signed_64, bfd_putl64, \ diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h index 839555647b0..3369db5c2cf 100644 --- a/bfd/elfxx-target.h +++ b/bfd/elfxx-target.h @@ -280,9 +280,8 @@ #ifndef bfd_elfNN_bfd_final_link #define bfd_elfNN_bfd_final_link bfd_elf_final_link #endif -#ifndef bfd_elfNN_bfd_merge_sections -#define bfd_elfNN_bfd_merge_sections _bfd_merge_sections -#endif +#undef TARGET_MERGE_SECTIONS +#define TARGET_MERGE_SECTIONS true #else /* ! defined (elf_backend_relocate_section) */ /* If no backend relocate_section routine, use the generic linker. Note - this will prevent the port from being able to use some of @@ -306,9 +305,6 @@ #ifndef bfd_elfNN_bfd_final_link #define bfd_elfNN_bfd_final_link _bfd_generic_final_link #endif -#ifndef bfd_elfNN_bfd_merge_sections -#define bfd_elfNN_bfd_merge_sections bfd_generic_merge_sections -#endif #endif /* ! defined (elf_backend_relocate_section) */ #ifndef bfd_elfNN_bfd_link_just_syms @@ -1027,6 +1023,7 @@ const bfd_target TARGET_BIG_SYM = /* TRUE if unused section symbols should be kept. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, + TARGET_MERGE_SECTIONS, /* Routines to byte-swap various sized integers from the data sections */ bfd_getb64, bfd_getb_signed_64, bfd_putb64, @@ -1132,6 +1129,7 @@ const bfd_target TARGET_LITTLE_SYM = /* TRUE if unused section symbols should be kept. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, + TARGET_MERGE_SECTIONS, /* Routines to byte-swap various sized integers from the data sections */ bfd_getl64, bfd_getl_signed_64, bfd_putl64, diff --git a/bfd/hppabsd-core.c b/bfd/hppabsd-core.c index d9cd1363fa8..45f41c8a139 100644 --- a/bfd/hppabsd-core.c +++ b/bfd/hppabsd-core.c @@ -232,6 +232,7 @@ const bfd_target core_hppabsd_vec = ' ', /* ar_pad_char */ 16, /* ar_max_namelen */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ NO_GET64, NO_GETS64, NO_PUT64, /* 64 bit data */ NO_GET, NO_GETS, NO_PUT, /* 32 bit data */ NO_GET, NO_GETS, NO_PUT, /* 16 bit data */ diff --git a/bfd/hpux-core.c b/bfd/hpux-core.c index 5dca3eff8e9..537e08a2169 100644 --- a/bfd/hpux-core.c +++ b/bfd/hpux-core.c @@ -379,6 +379,7 @@ const bfd_target core_hpux_vec = 16, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ NO_GET64, NO_GETS64, NO_PUT64, /* 64 bit data */ NO_GET, NO_GETS, NO_PUT, /* 32 bit data */ NO_GET, NO_GETS, NO_PUT, /* 16 bit data */ diff --git a/bfd/i386msdos.c b/bfd/i386msdos.c index ba58f0feabc..a4a9c54831c 100644 --- a/bfd/i386msdos.c +++ b/bfd/i386msdos.c @@ -224,7 +224,6 @@ msdos_set_section_contents (bfd *abfd, #define msdos_bfd_relax_section bfd_generic_relax_section #define msdos_bfd_gc_sections bfd_generic_gc_sections #define msdos_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define msdos_bfd_merge_sections bfd_generic_merge_sections #define msdos_bfd_is_group_section bfd_generic_is_group_section #define msdos_bfd_group_name bfd_generic_group_name #define msdos_bfd_discard_group bfd_generic_discard_group @@ -279,6 +278,7 @@ const bfd_target i386_msdos_vec = 16, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, 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 */ diff --git a/bfd/ihex.c b/bfd/ihex.c index 79c5349375c..c612b780f1a 100644 --- a/bfd/ihex.c +++ b/bfd/ihex.c @@ -926,7 +926,6 @@ ihex_set_arch_mach (bfd *abfd, #define ihex_bfd_relax_section bfd_generic_relax_section #define ihex_bfd_gc_sections bfd_generic_gc_sections #define ihex_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define ihex_bfd_merge_sections bfd_generic_merge_sections #define ihex_bfd_is_group_section bfd_generic_is_group_section #define ihex_bfd_group_name bfd_generic_group_name #define ihex_bfd_discard_group bfd_generic_discard_group @@ -957,6 +956,7 @@ const bfd_target ihex_vec = 16, /* AR_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */ diff --git a/bfd/irix-core.c b/bfd/irix-core.c index 4087419d6a8..60da91957e3 100644 --- a/bfd/irix-core.c +++ b/bfd/irix-core.c @@ -295,6 +295,7 @@ const bfd_target core_irix_vec = 16, /* ar_max_namelen */ 0, /* match_priority */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ NO_GET64, NO_GETS64, NO_PUT64, /* 64 bit data */ NO_GET, NO_GETS, NO_PUT, /* 32 bit data */ NO_GET, NO_GETS, NO_PUT, /* 16 bit data */ diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h index 8caec1c76a6..e00bd4353e3 100644 --- a/bfd/libbfd-in.h +++ b/bfd/libbfd-in.h @@ -489,7 +489,6 @@ extern bool _bfd_nolink_bfd_relax_section #define _bfd_nolink_bfd_gc_sections _bfd_bool_bfd_link_false_error extern bool _bfd_nolink_bfd_lookup_section_flags (struct bfd_link_info *, struct flag_info *, asection *) ATTRIBUTE_HIDDEN; -#define _bfd_nolink_bfd_merge_sections _bfd_bool_bfd_link_false_error extern bool _bfd_nolink_bfd_is_group_section (bfd *, const asection *) ATTRIBUTE_HIDDEN; extern const char *_bfd_nolink_bfd_group_name @@ -688,11 +687,6 @@ extern bfd_reloc_status_type _bfd_relocate_contents extern bfd_reloc_status_type _bfd_clear_contents (reloc_howto_type *, bfd *, asection *, bfd_byte *, bfd_vma) ATTRIBUTE_HIDDEN; -/* Attempt to merge SEC_MERGE sections. */ - -extern bool _bfd_merge_sections - (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN; - /* Write out a merged section. */ extern bool _bfd_write_merged_section diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 617df41924e..193c01ef50a 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -495,7 +495,6 @@ extern bool _bfd_nolink_bfd_relax_section #define _bfd_nolink_bfd_gc_sections _bfd_bool_bfd_link_false_error extern bool _bfd_nolink_bfd_lookup_section_flags (struct bfd_link_info *, struct flag_info *, asection *) ATTRIBUTE_HIDDEN; -#define _bfd_nolink_bfd_merge_sections _bfd_bool_bfd_link_false_error extern bool _bfd_nolink_bfd_is_group_section (bfd *, const asection *) ATTRIBUTE_HIDDEN; extern const char *_bfd_nolink_bfd_group_name @@ -694,11 +693,6 @@ extern bfd_reloc_status_type _bfd_relocate_contents extern bfd_reloc_status_type _bfd_clear_contents (reloc_howto_type *, bfd *, asection *, bfd_byte *, bfd_vma) ATTRIBUTE_HIDDEN; -/* Attempt to merge SEC_MERGE sections. */ - -extern bool _bfd_merge_sections - (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN; - /* Write out a merged section. */ extern bool _bfd_write_merged_section @@ -3631,9 +3625,6 @@ bool bfd_generic_gc_sections bool bfd_generic_lookup_section_flags (struct bfd_link_info *, struct flag_info *, asection *) ATTRIBUTE_HIDDEN; -bool bfd_generic_merge_sections - (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN; - bfd_byte *bfd_generic_get_relocated_section_contents (bfd *abfd, struct bfd_link_info *link_info, diff --git a/bfd/mach-o-target.c b/bfd/mach-o-target.c index e402d3a034f..55e0c749224 100644 --- a/bfd/mach-o-target.c +++ b/bfd/mach-o-target.c @@ -48,7 +48,6 @@ #define bfd_mach_o_get_section_contents _bfd_generic_get_section_contents #define bfd_mach_o_bfd_gc_sections bfd_generic_gc_sections #define bfd_mach_o_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define bfd_mach_o_bfd_merge_sections bfd_generic_merge_sections #define bfd_mach_o_bfd_is_group_section bfd_generic_is_group_section #define bfd_mach_o_bfd_group_name bfd_generic_group_name #define bfd_mach_o_bfd_discard_group bfd_generic_discard_group @@ -135,6 +134,7 @@ const bfd_target TARGET_NAME = 16, /* ar_max_namelen. */ TARGET_PRIORITY, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, #if TARGET_BIG_ENDIAN bfd_getb64, bfd_getb_signed_64, bfd_putb64, diff --git a/bfd/merge.c b/bfd/merge.c index d89f4800f8a..0de35da5cf4 100644 --- a/bfd/merge.c +++ b/bfd/merge.c @@ -874,7 +874,7 @@ is_suffix (const struct sec_merge_hash_entry *A, B->str, B->len) == 0; } -/* This is a helper function for _bfd_merge_sections. It attempts to +/* This is a helper function for bfd_merge_sections. It attempts to merge strings matching suffixes of longer strings. */ static struct sec_merge_sec_info * merge_strings (struct sec_merge_info *sinfo) @@ -1058,11 +1058,14 @@ merge_sections (bfd *abfd, /* Finish SEC_MERGE section merging. */ bool -_bfd_merge_sections (bfd *obfd, struct bfd_link_info *info) +bfd_merge_sections (bfd *obfd, struct bfd_link_info *info) { const bfd *ibfd; asection *sec; + if (!obfd->xvec->merge_sections) + return true; + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next) if ((ibfd->flags & DYNAMIC) == 0) for (sec = ibfd->sections; sec != NULL; sec = sec->next) diff --git a/bfd/mmo.c b/bfd/mmo.c index 762aeffd3e0..f63654a4592 100644 --- a/bfd/mmo.c +++ b/bfd/mmo.c @@ -3332,7 +3332,6 @@ mmo_write_object_contents (bfd *abfd) stop anybody from shooting themselves in the foot. */ #define mmo_set_arch_mach bfd_default_set_arch_mach #define mmo_bfd_relax_section bfd_generic_relax_section -#define mmo_bfd_merge_sections bfd_generic_merge_sections #define mmo_bfd_is_group_section bfd_generic_is_group_section #define mmo_bfd_group_name bfd_generic_group_name #define mmo_bfd_discard_group bfd_generic_discard_group @@ -3372,6 +3371,7 @@ const bfd_target mmix_mmo_vec = 16, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */ diff --git a/bfd/netbsd-core.c b/bfd/netbsd-core.c index 2290817d8c1..34afcefd5e7 100644 --- a/bfd/netbsd-core.c +++ b/bfd/netbsd-core.c @@ -279,6 +279,7 @@ const bfd_target core_netbsd_vec = 16, /* ar_max_namelen. */ 0, /* Match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ NO_GET64, NO_GETS64, NO_PUT64, /* 64 bit data. */ NO_GET, NO_GETS, NO_PUT, /* 32 bit data. */ NO_GET, NO_GETS, NO_PUT, /* 16 bit data. */ diff --git a/bfd/osf-core.c b/bfd/osf-core.c index 8433e7cae3e..95e05fe2956 100644 --- a/bfd/osf-core.c +++ b/bfd/osf-core.c @@ -189,6 +189,7 @@ const bfd_target core_osf_vec = 16, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ NO_GET64, NO_GETS64, NO_PUT64, /* 64 bit data */ NO_GET, NO_GETS, NO_PUT, /* 32 bit data */ NO_GET, NO_GETS, NO_PUT, /* 16 bit data */ diff --git a/bfd/pdb.c b/bfd/pdb.c index ac94d372c7f..4446830af53 100644 --- a/bfd/pdb.c +++ b/bfd/pdb.c @@ -822,6 +822,7 @@ const bfd_target pdb_vec = 16, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ 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. */ diff --git a/bfd/pdp11.c b/bfd/pdp11.c index 2d12033f086..67e667e745b 100644 --- a/bfd/pdp11.c +++ b/bfd/pdp11.c @@ -4644,6 +4644,7 @@ const bfd_target MY (vec) = 15, /* AR_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getp32, bfd_getp_signed_32, bfd_putp32, bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */ diff --git a/bfd/pef.c b/bfd/pef.c index 23d26b06095..2054285accd 100644 --- a/bfd/pef.c +++ b/bfd/pef.c @@ -55,7 +55,6 @@ #define bfd_pef_bfd_relax_section bfd_generic_relax_section #define bfd_pef_bfd_gc_sections bfd_generic_gc_sections #define bfd_pef_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define bfd_pef_bfd_merge_sections bfd_generic_merge_sections #define bfd_pef_bfd_is_group_section bfd_generic_is_group_section #define bfd_pef_bfd_group_name bfd_generic_group_name #define bfd_pef_bfd_discard_group bfd_generic_discard_group @@ -1020,6 +1019,7 @@ const bfd_target pef_vec = 16, /* AR_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */ @@ -1156,6 +1156,7 @@ const bfd_target pef_xlib_vec = 16, /* AR_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */ diff --git a/bfd/plugin.c b/bfd/plugin.c index f8ddc616724..45f17fee25a 100644 --- a/bfd/plugin.c +++ b/bfd/plugin.c @@ -99,7 +99,6 @@ dlerror (void) #define bfd_plugin_bfd_link_split_section _bfd_generic_link_split_section #define bfd_plugin_bfd_gc_sections bfd_generic_gc_sections #define bfd_plugin_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define bfd_plugin_bfd_merge_sections bfd_generic_merge_sections #define bfd_plugin_bfd_is_group_section bfd_generic_is_group_section #define bfd_plugin_bfd_group_name bfd_generic_group_name #define bfd_plugin_bfd_discard_group bfd_generic_discard_group @@ -983,6 +982,7 @@ const bfd_target plugin_vec = 15, /* ar_max_namelen. */ 255, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getl32, bfd_getl_signed_32, bfd_putl32, diff --git a/bfd/ppcboot.c b/bfd/ppcboot.c index dd70267640c..b296d0e290d 100644 --- a/bfd/ppcboot.c +++ b/bfd/ppcboot.c @@ -454,7 +454,6 @@ ppcboot_bfd_print_private_bfd_data (bfd *abfd, void * farg) #define ppcboot_bfd_relax_section bfd_generic_relax_section #define ppcboot_bfd_gc_sections bfd_generic_gc_sections #define ppcboot_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define ppcboot_bfd_merge_sections bfd_generic_merge_sections #define ppcboot_bfd_is_group_section bfd_generic_is_group_section #define ppcboot_bfd_group_name bfd_generic_group_name #define ppcboot_bfd_discard_group bfd_generic_discard_group @@ -494,6 +493,7 @@ const bfd_target powerpc_boot_vec = 16, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */ diff --git a/bfd/ptrace-core.c b/bfd/ptrace-core.c index 1d44f9f5d02..7182df68974 100644 --- a/bfd/ptrace-core.c +++ b/bfd/ptrace-core.c @@ -180,6 +180,7 @@ const bfd_target core_ptrace_vec = ' ', /* ar_pad_char */ 16, /* ar_max_namelen */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ NO_GET64, NO_GETS64, NO_PUT64, /* 64 bit data */ NO_GET, NO_GETS, NO_PUT, /* 32 bit data */ NO_GET, NO_GETS, NO_PUT, /* 16 bit data */ diff --git a/bfd/reloc.c b/bfd/reloc.c index aa69a3c2dc9..68a8929413b 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -8426,26 +8426,6 @@ bfd_generic_lookup_section_flags (struct bfd_link_info *info ATTRIBUTE_UNUSED, return true; } -/* -INTERNAL_FUNCTION - bfd_generic_merge_sections - -SYNOPSIS - bool bfd_generic_merge_sections - (bfd *, struct bfd_link_info *); - -DESCRIPTION - Provides default handling for SEC_MERGE section merging for back ends - which don't have SEC_MERGE support -- i.e., does nothing. -*/ - -bool -bfd_generic_merge_sections (bfd *abfd ATTRIBUTE_UNUSED, - struct bfd_link_info *link_info ATTRIBUTE_UNUSED) -{ - return true; -} - /* INTERNAL_FUNCTION bfd_generic_get_relocated_section_contents diff --git a/bfd/som.c b/bfd/som.c index 5c60f605043..bed2e9b5e8b 100644 --- a/bfd/som.c +++ b/bfd/som.c @@ -6771,7 +6771,6 @@ som_bfd_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec) #define som_bfd_final_link _bfd_generic_final_link #define som_bfd_gc_sections bfd_generic_gc_sections #define som_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define som_bfd_merge_sections bfd_generic_merge_sections #define som_bfd_is_group_section bfd_generic_is_group_section #define som_bfd_group_name bfd_generic_group_name #define som_bfd_discard_group bfd_generic_discard_group @@ -6805,6 +6804,7 @@ const bfd_target hppa_som_vec = 14, /* AR_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */ diff --git a/bfd/srec.c b/bfd/srec.c index 1509bebd6c1..9c59ae86ad9 100644 --- a/bfd/srec.c +++ b/bfd/srec.c @@ -1262,7 +1262,6 @@ srec_print_symbol (bfd *abfd, #define srec_bfd_relax_section bfd_generic_relax_section #define srec_bfd_gc_sections bfd_generic_gc_sections #define srec_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define srec_bfd_merge_sections bfd_generic_merge_sections #define srec_bfd_is_group_section bfd_generic_is_group_section #define srec_bfd_group_name bfd_generic_group_name #define srec_bfd_discard_group bfd_generic_discard_group @@ -1292,6 +1291,7 @@ const bfd_target srec_vec = 16, /* AR_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */ @@ -1347,6 +1347,7 @@ const bfd_target symbolsrec_vec = 16, /* AR_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */ diff --git a/bfd/targets.c b/bfd/targets.c index ee629bbe9df..89557a060e8 100644 --- a/bfd/targets.c +++ b/bfd/targets.c @@ -138,6 +138,11 @@ DESCRIPTION .#ifndef TARGET_KEEP_UNUSED_SECTION_SYMBOLS .#define TARGET_KEEP_UNUSED_SECTION_SYMBOLS true .#endif +. +.{* Define to TRUE if section merging is supported by the backend. *} +.#ifndef TARGET_MERGE_SECTIONS +.#define TARGET_MERGE_SECTIONS false +.#endif . This is the structure which defines the type of BFD this is. The <> member of the struct <> itself points here. Each @@ -220,6 +225,9 @@ CODE_FRAGMENT . {* TRUE if unused section symbols should be kept. *} . bool keep_unused_section_symbols; . +. {* TRUE if section merging is supported by the backend. *} +. bool merge_sections; +. . {* Entries for byte swapping for data. These are different from the . other entry points, since they don't take a BFD as the first argument. . Certain other handlers could do the same. *} @@ -461,7 +469,6 @@ BFD_JUMP_TABLE macros. . NAME##_bfd_link_check_relocs, \ . NAME##_bfd_gc_sections, \ . NAME##_bfd_lookup_section_flags, \ -. NAME##_bfd_merge_sections, \ . NAME##_bfd_is_group_section, \ . NAME##_bfd_group_name, \ . NAME##_bfd_discard_group, \ @@ -517,9 +524,6 @@ BFD_JUMP_TABLE macros. . bool (*_bfd_lookup_section_flags) (struct bfd_link_info *, . struct flag_info *, asection *); . -. {* Attempt to merge SEC_MERGE sections. *} -. bool (*_bfd_merge_sections) (bfd *, struct bfd_link_info *); -. . {* Is this section a member of a group? *} . bool (*_bfd_is_group_section) (bfd *, const struct bfd_section *); . diff --git a/bfd/tekhex.c b/bfd/tekhex.c index 4ac61166d0e..99d40fe936c 100644 --- a/bfd/tekhex.c +++ b/bfd/tekhex.c @@ -963,7 +963,6 @@ tekhex_print_symbol (bfd *abfd, #define tekhex_bfd_relax_section bfd_generic_relax_section #define tekhex_bfd_gc_sections bfd_generic_gc_sections #define tekhex_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define tekhex_bfd_merge_sections bfd_generic_merge_sections #define tekhex_bfd_is_group_section bfd_generic_is_group_section #define tekhex_bfd_group_name bfd_generic_group_name #define tekhex_bfd_discard_group bfd_generic_discard_group @@ -993,6 +992,7 @@ const bfd_target tekhex_vec = 16, /* AR_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */ diff --git a/bfd/trad-core.c b/bfd/trad-core.c index f208fc814c0..054224db526 100644 --- a/bfd/trad-core.c +++ b/bfd/trad-core.c @@ -270,6 +270,7 @@ const bfd_target core_trad_vec = 16, /* ar_max_namelen */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ NO_GET64, NO_GETS64, NO_PUT64, /* 64 bit data */ NO_GET, NO_GETS, NO_PUT, /* 32 bit data */ NO_GET, NO_GETS, NO_PUT, /* 16 bit data */ diff --git a/bfd/verilog.c b/bfd/verilog.c index 70cc7c69412..9797a915b29 100644 --- a/bfd/verilog.c +++ b/bfd/verilog.c @@ -392,6 +392,7 @@ const bfd_target verilog_vec = 16, /* AR_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */ diff --git a/bfd/vms-alpha.c b/bfd/vms-alpha.c index 277cba0107e..0e557563efb 100644 --- a/bfd/vms-alpha.c +++ b/bfd/vms-alpha.c @@ -10201,7 +10201,6 @@ bfd_vms_get_data (bfd *abfd) #define alpha_vms_bfd_relax_section bfd_generic_relax_section #define alpha_vms_bfd_gc_sections bfd_generic_gc_sections #define alpha_vms_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define alpha_vms_bfd_merge_sections bfd_generic_merge_sections #define alpha_vms_bfd_is_group_section bfd_generic_is_group_section #define alpha_vms_bfd_group_name bfd_generic_group_name #define alpha_vms_bfd_discard_group bfd_generic_discard_group @@ -10244,6 +10243,7 @@ const bfd_target alpha_vms_vec = 15, /* ar_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + TARGET_MERGE_SECTIONS, bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getl32, bfd_getl_signed_32, bfd_putl32, bfd_getl16, bfd_getl_signed_16, bfd_putl16, diff --git a/bfd/vms-lib.c b/bfd/vms-lib.c index 1206d7e24d4..2ffb4e4acf9 100644 --- a/bfd/vms-lib.c +++ b/bfd/vms-lib.c @@ -2425,6 +2425,7 @@ const bfd_target alpha_vms_lib_txt_vec = 15, /* ar_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getl32, bfd_getl_signed_32, bfd_putl32, bfd_getl16, bfd_getl_signed_16, bfd_putl16, diff --git a/bfd/wasm-module.c b/bfd/wasm-module.c index db4b08147a8..a76b89e0b89 100644 --- a/bfd/wasm-module.c +++ b/bfd/wasm-module.c @@ -805,6 +805,7 @@ const bfd_target wasm_vec = 255, /* AR_max_namelen. */ 0, /* Match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* merge sections */ /* Routines to byte-swap various sized integers from the data sections. */ bfd_getl64, bfd_getl_signed_64, bfd_putl64, bfd_getl32, bfd_getl_signed_32, bfd_putl32, diff --git a/bfd/xsym.c b/bfd/xsym.c index 516ee88e85c..19bea8ad3c6 100644 --- a/bfd/xsym.c +++ b/bfd/xsym.c @@ -46,7 +46,6 @@ #define bfd_sym_bfd_relax_section bfd_generic_relax_section #define bfd_sym_bfd_gc_sections bfd_generic_gc_sections #define bfd_sym_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define bfd_sym_bfd_merge_sections bfd_generic_merge_sections #define bfd_sym_bfd_is_group_section bfd_generic_is_group_section #define bfd_sym_bfd_group_name bfd_generic_group_name #define bfd_sym_bfd_discard_group bfd_generic_discard_group @@ -2299,6 +2298,7 @@ const bfd_target sym_vec = 16, /* AR_max_namelen. */ 0, /* match priority. */ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */ + false, /* TARGET_MERGE_SECTIONS */ bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */ diff --git a/include/bfdlink.h b/include/bfdlink.h index 0c47d09977f..00fe0f8c7c8 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -1017,6 +1017,9 @@ struct bfd_link_order_reloc /* Allocate a new link_order for a section. */ extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *); +/* Attempt to merge SEC_MERGE sections. */ +extern bool bfd_merge_sections (bfd *, struct bfd_link_info *); + struct bfd_section_already_linked; extern bool bfd_section_already_linked_table_init (void);