#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
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,
#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))
#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. */
/* 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. */
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, \
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 *);
.#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))
.
#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
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 */
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 */
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,
/* 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
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 */
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,
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,
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,
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,
/* 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
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 */
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,
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 */
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,
#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
15, /* ar_max_namelen */
0, /* match priority. */
TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */
+ TARGET_MERGE_SECTIONS,
/* data */
bfd_getb64,
15, /* ar_max_namelen */
0, /* match priority. */
TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */
+ TARGET_MERGE_SECTIONS,
/* data */
bfd_getb64,
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 */
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 */
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 */
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 */
#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 */
#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 */
#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 */
#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 */
#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 */
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,
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,
15, /* ar_max_namelen */
0, /* match priority. */
TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */
+ TARGET_MERGE_SECTIONS,
/* data */
bfd_getb64,
_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,
15, /* ar_max_namelen */
0, /* match priority. */
TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */
+ TARGET_MERGE_SECTIONS,
/* data */
bfd_getb64,
_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,
#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
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, \
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, \
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, \
#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
#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
/* 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,
/* 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,
' ', /* 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 */
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 */
#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
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 */
#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
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. */
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 */
#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
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
#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
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
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,
#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
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,
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)
/* 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)
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
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 */
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. */
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 */
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. */
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. */
#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
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. */
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. */
#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
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,
#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
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 */
' ', /* 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 */
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
#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
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. */
#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
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. */
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. */
.#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
<<xvec>> member of the struct <<bfd>> itself points here. Each
. {* 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. *}
. 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, \
. 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 *);
.
#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
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. */
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 */
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. */
#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
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,
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,
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,
#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
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. */
/* 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);