[PATCH 7/8] bfd: replace _bfd_merge_sections() hook with simple boolean
Jan Beulich
jbeulich@suse.com
Mon Oct 13 09:14:38 GMT 2025
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.
---
With the placement of the TARGET_MERGE_SECTIONS default definition I'm
following TARGET_KEEP_UNUSED_SECTION_SYMBOLS, yet that's somewhat odd.
Format specific settings are generally done only later, requiring an
#undef to be put there first. Which then doesn't really permit target-
specific overrides (for the time being we also don't really need any).
--- a/bfd/aout-target.h
+++ b/bfd/aout-target.h
@@ -495,9 +495,6 @@ MY_bfd_final_link (bfd *abfd, struct bfd
#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,
--- 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))
.
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -2708,9 +2708,6 @@ bool bfd_set_private_flags (bfd *abfd, f
#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 *);
--- 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 */
--- 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 */
--- 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,
--- a/bfd/coff-alpha.c
+++ b/bfd/coff-alpha.c
@@ -2445,7 +2445,6 @@ static const struct ecoff_backend_data a
/* 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 */
--- 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,
--- 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,
--- 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,
--- a/bfd/coff-mips.c
+++ b/bfd/coff-mips.c
@@ -1404,9 +1404,6 @@ static const struct ecoff_backend_data m
/* 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 */
--- 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,
--- 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,
--- 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 */
--- 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 */
--- 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 */
--- 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,
--- 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,
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -6024,10 +6024,6 @@ static const bfd_coff_backend_data bigob
#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, \
--- 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,
--- 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 */
--- 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 */
--- 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 */
--- 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. */
--- 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 */
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
@@ -489,7 +489,6 @@ extern bool _bfd_nolink_bfd_relax_sectio
#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_reloca
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
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -495,7 +495,6 @@ extern bool _bfd_nolink_bfd_relax_sectio
#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_reloca
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,
--- 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,
--- a/bfd/merge.c
+++ b/bfd/merge.c
@@ -874,7 +874,7 @@ is_suffix (const struct sec_merge_hash_e
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)
--- 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 */
--- 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. */
--- 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 */
--- 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. */
--- 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. */
--- 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. */
--- 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,
--- a/bfd/ppcboot.c
+++ b/bfd/ppcboot.c
@@ -454,7 +454,6 @@ ppcboot_bfd_print_private_bfd_data (bfd
#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 */
--- 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 */
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -8428,26 +8428,6 @@ bfd_generic_lookup_section_flags (struct
/*
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
SYNOPSIS
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -6771,7 +6771,6 @@ som_bfd_link_split_section (bfd *abfd AT
#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. */
--- 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. */
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -139,6 +139,11 @@ DESCRIPTION
.#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
<<xvec>> member of the struct <<bfd>> itself points here. Each
module that implements access to a different target under BFD,
@@ -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 *);
.
--- 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. */
--- 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 */
--- 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. */
--- 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,
--- 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,
--- 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,
--- 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. */
--- 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);
More information about the Binutils
mailing list