15796c8dcSSimon Schubert /* BFD back-end for binary objects.
25796c8dcSSimon Schubert Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3*a45ae5f8SJohn Marino 2004, 2005, 2006, 2007, 2009, 2011 Free Software Foundation, Inc.
45796c8dcSSimon Schubert Written by Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>
55796c8dcSSimon Schubert
65796c8dcSSimon Schubert This file is part of BFD, the Binary File Descriptor library.
75796c8dcSSimon Schubert
85796c8dcSSimon Schubert This program is free software; you can redistribute it and/or modify
95796c8dcSSimon Schubert it under the terms of the GNU General Public License as published by
105796c8dcSSimon Schubert the Free Software Foundation; either version 3 of the License, or
115796c8dcSSimon Schubert (at your option) any later version.
125796c8dcSSimon Schubert
135796c8dcSSimon Schubert This program is distributed in the hope that it will be useful,
145796c8dcSSimon Schubert but WITHOUT ANY WARRANTY; without even the implied warranty of
155796c8dcSSimon Schubert MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
165796c8dcSSimon Schubert GNU General Public License for more details.
175796c8dcSSimon Schubert
185796c8dcSSimon Schubert You should have received a copy of the GNU General Public License
195796c8dcSSimon Schubert along with this program; if not, write to the Free Software
205796c8dcSSimon Schubert Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
215796c8dcSSimon Schubert MA 02110-1301, USA. */
225796c8dcSSimon Schubert
235796c8dcSSimon Schubert /* This is a BFD backend which may be used to write binary objects.
245796c8dcSSimon Schubert It may only be used for output, not input. The intention is that
255796c8dcSSimon Schubert this may be used as an output format for objcopy in order to
265796c8dcSSimon Schubert generate raw binary data.
275796c8dcSSimon Schubert
285796c8dcSSimon Schubert This is very simple. The only complication is that the real data
295796c8dcSSimon Schubert will start at some address X, and in some cases we will not want to
305796c8dcSSimon Schubert include X zeroes just to get to that point. Since the start
315796c8dcSSimon Schubert address is not meaningful for this object file format, we use it
325796c8dcSSimon Schubert instead to indicate the number of zeroes to skip at the start of
335796c8dcSSimon Schubert the file. objcopy cooperates by specially setting the start
345796c8dcSSimon Schubert address to zero by default. */
355796c8dcSSimon Schubert
365796c8dcSSimon Schubert #include "sysdep.h"
375796c8dcSSimon Schubert #include "bfd.h"
385796c8dcSSimon Schubert #include "safe-ctype.h"
395796c8dcSSimon Schubert #include "libbfd.h"
405796c8dcSSimon Schubert
415796c8dcSSimon Schubert /* Any bfd we create by reading a binary file has three symbols:
425796c8dcSSimon Schubert a start symbol, an end symbol, and an absolute length symbol. */
435796c8dcSSimon Schubert #define BIN_SYMS 3
445796c8dcSSimon Schubert
455796c8dcSSimon Schubert /* Create a binary object. Invoked via bfd_set_format. */
465796c8dcSSimon Schubert
475796c8dcSSimon Schubert static bfd_boolean
binary_mkobject(bfd * abfd ATTRIBUTE_UNUSED)485796c8dcSSimon Schubert binary_mkobject (bfd *abfd ATTRIBUTE_UNUSED)
495796c8dcSSimon Schubert {
505796c8dcSSimon Schubert return TRUE;
515796c8dcSSimon Schubert }
525796c8dcSSimon Schubert
535796c8dcSSimon Schubert /* Any file may be considered to be a binary file, provided the target
545796c8dcSSimon Schubert was not defaulted. That is, it must be explicitly specified as
555796c8dcSSimon Schubert being binary. */
565796c8dcSSimon Schubert
575796c8dcSSimon Schubert static const bfd_target *
binary_object_p(bfd * abfd)585796c8dcSSimon Schubert binary_object_p (bfd *abfd)
595796c8dcSSimon Schubert {
605796c8dcSSimon Schubert struct stat statbuf;
615796c8dcSSimon Schubert asection *sec;
625796c8dcSSimon Schubert flagword flags;
635796c8dcSSimon Schubert
645796c8dcSSimon Schubert if (abfd->target_defaulted)
655796c8dcSSimon Schubert {
665796c8dcSSimon Schubert bfd_set_error (bfd_error_wrong_format);
675796c8dcSSimon Schubert return NULL;
685796c8dcSSimon Schubert }
695796c8dcSSimon Schubert
705796c8dcSSimon Schubert abfd->symcount = BIN_SYMS;
715796c8dcSSimon Schubert
725796c8dcSSimon Schubert /* Find the file size. */
735796c8dcSSimon Schubert if (bfd_stat (abfd, &statbuf) < 0)
745796c8dcSSimon Schubert {
755796c8dcSSimon Schubert bfd_set_error (bfd_error_system_call);
765796c8dcSSimon Schubert return NULL;
775796c8dcSSimon Schubert }
785796c8dcSSimon Schubert
795796c8dcSSimon Schubert /* One data section. */
805796c8dcSSimon Schubert flags = SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS;
815796c8dcSSimon Schubert sec = bfd_make_section_with_flags (abfd, ".data", flags);
825796c8dcSSimon Schubert if (sec == NULL)
835796c8dcSSimon Schubert return NULL;
845796c8dcSSimon Schubert sec->vma = 0;
855796c8dcSSimon Schubert sec->size = statbuf.st_size;
865796c8dcSSimon Schubert sec->filepos = 0;
875796c8dcSSimon Schubert
885796c8dcSSimon Schubert abfd->tdata.any = (void *) sec;
895796c8dcSSimon Schubert
905796c8dcSSimon Schubert return abfd->xvec;
915796c8dcSSimon Schubert }
925796c8dcSSimon Schubert
935796c8dcSSimon Schubert #define binary_close_and_cleanup _bfd_generic_close_and_cleanup
945796c8dcSSimon Schubert #define binary_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
955796c8dcSSimon Schubert #define binary_new_section_hook _bfd_generic_new_section_hook
965796c8dcSSimon Schubert
975796c8dcSSimon Schubert /* Get contents of the only section. */
985796c8dcSSimon Schubert
995796c8dcSSimon Schubert static bfd_boolean
binary_get_section_contents(bfd * abfd,asection * section ATTRIBUTE_UNUSED,void * location,file_ptr offset,bfd_size_type count)1005796c8dcSSimon Schubert binary_get_section_contents (bfd *abfd,
1015796c8dcSSimon Schubert asection *section ATTRIBUTE_UNUSED,
1025796c8dcSSimon Schubert void * location,
1035796c8dcSSimon Schubert file_ptr offset,
1045796c8dcSSimon Schubert bfd_size_type count)
1055796c8dcSSimon Schubert {
1065796c8dcSSimon Schubert if (bfd_seek (abfd, offset, SEEK_SET) != 0
1075796c8dcSSimon Schubert || bfd_bread (location, count, abfd) != count)
1085796c8dcSSimon Schubert return FALSE;
1095796c8dcSSimon Schubert return TRUE;
1105796c8dcSSimon Schubert }
1115796c8dcSSimon Schubert
1125796c8dcSSimon Schubert /* Return the amount of memory needed to read the symbol table. */
1135796c8dcSSimon Schubert
1145796c8dcSSimon Schubert static long
binary_get_symtab_upper_bound(bfd * abfd ATTRIBUTE_UNUSED)1155796c8dcSSimon Schubert binary_get_symtab_upper_bound (bfd *abfd ATTRIBUTE_UNUSED)
1165796c8dcSSimon Schubert {
1175796c8dcSSimon Schubert return (BIN_SYMS + 1) * sizeof (asymbol *);
1185796c8dcSSimon Schubert }
1195796c8dcSSimon Schubert
1205796c8dcSSimon Schubert /* Create a symbol name based on the bfd's filename. */
1215796c8dcSSimon Schubert
1225796c8dcSSimon Schubert static char *
mangle_name(bfd * abfd,char * suffix)1235796c8dcSSimon Schubert mangle_name (bfd *abfd, char *suffix)
1245796c8dcSSimon Schubert {
1255796c8dcSSimon Schubert bfd_size_type size;
1265796c8dcSSimon Schubert char *buf;
1275796c8dcSSimon Schubert char *p;
1285796c8dcSSimon Schubert
1295796c8dcSSimon Schubert size = (strlen (bfd_get_filename (abfd))
1305796c8dcSSimon Schubert + strlen (suffix)
1315796c8dcSSimon Schubert + sizeof "_binary__");
1325796c8dcSSimon Schubert
1335796c8dcSSimon Schubert buf = (char *) bfd_alloc (abfd, size);
1345796c8dcSSimon Schubert if (buf == NULL)
1355796c8dcSSimon Schubert return "";
1365796c8dcSSimon Schubert
1375796c8dcSSimon Schubert sprintf (buf, "_binary_%s_%s", bfd_get_filename (abfd), suffix);
1385796c8dcSSimon Schubert
1395796c8dcSSimon Schubert /* Change any non-alphanumeric characters to underscores. */
1405796c8dcSSimon Schubert for (p = buf; *p; p++)
1415796c8dcSSimon Schubert if (! ISALNUM (*p))
1425796c8dcSSimon Schubert *p = '_';
1435796c8dcSSimon Schubert
1445796c8dcSSimon Schubert return buf;
1455796c8dcSSimon Schubert }
1465796c8dcSSimon Schubert
1475796c8dcSSimon Schubert /* Return the symbol table. */
1485796c8dcSSimon Schubert
1495796c8dcSSimon Schubert static long
binary_canonicalize_symtab(bfd * abfd,asymbol ** alocation)1505796c8dcSSimon Schubert binary_canonicalize_symtab (bfd *abfd, asymbol **alocation)
1515796c8dcSSimon Schubert {
1525796c8dcSSimon Schubert asection *sec = (asection *) abfd->tdata.any;
1535796c8dcSSimon Schubert asymbol *syms;
1545796c8dcSSimon Schubert unsigned int i;
1555796c8dcSSimon Schubert bfd_size_type amt = BIN_SYMS * sizeof (asymbol);
1565796c8dcSSimon Schubert
1575796c8dcSSimon Schubert syms = (asymbol *) bfd_alloc (abfd, amt);
1585796c8dcSSimon Schubert if (syms == NULL)
1595796c8dcSSimon Schubert return -1;
1605796c8dcSSimon Schubert
1615796c8dcSSimon Schubert /* Start symbol. */
1625796c8dcSSimon Schubert syms[0].the_bfd = abfd;
1635796c8dcSSimon Schubert syms[0].name = mangle_name (abfd, "start");
1645796c8dcSSimon Schubert syms[0].value = 0;
1655796c8dcSSimon Schubert syms[0].flags = BSF_GLOBAL;
1665796c8dcSSimon Schubert syms[0].section = sec;
1675796c8dcSSimon Schubert syms[0].udata.p = NULL;
1685796c8dcSSimon Schubert
1695796c8dcSSimon Schubert /* End symbol. */
1705796c8dcSSimon Schubert syms[1].the_bfd = abfd;
1715796c8dcSSimon Schubert syms[1].name = mangle_name (abfd, "end");
1725796c8dcSSimon Schubert syms[1].value = sec->size;
1735796c8dcSSimon Schubert syms[1].flags = BSF_GLOBAL;
1745796c8dcSSimon Schubert syms[1].section = sec;
1755796c8dcSSimon Schubert syms[1].udata.p = NULL;
1765796c8dcSSimon Schubert
1775796c8dcSSimon Schubert /* Size symbol. */
1785796c8dcSSimon Schubert syms[2].the_bfd = abfd;
1795796c8dcSSimon Schubert syms[2].name = mangle_name (abfd, "size");
1805796c8dcSSimon Schubert syms[2].value = sec->size;
1815796c8dcSSimon Schubert syms[2].flags = BSF_GLOBAL;
1825796c8dcSSimon Schubert syms[2].section = bfd_abs_section_ptr;
1835796c8dcSSimon Schubert syms[2].udata.p = NULL;
1845796c8dcSSimon Schubert
1855796c8dcSSimon Schubert for (i = 0; i < BIN_SYMS; i++)
1865796c8dcSSimon Schubert *alocation++ = syms++;
1875796c8dcSSimon Schubert *alocation = NULL;
1885796c8dcSSimon Schubert
1895796c8dcSSimon Schubert return BIN_SYMS;
1905796c8dcSSimon Schubert }
1915796c8dcSSimon Schubert
1925796c8dcSSimon Schubert #define binary_make_empty_symbol _bfd_generic_make_empty_symbol
1935796c8dcSSimon Schubert #define binary_print_symbol _bfd_nosymbols_print_symbol
1945796c8dcSSimon Schubert
1955796c8dcSSimon Schubert /* Get information about a symbol. */
1965796c8dcSSimon Schubert
1975796c8dcSSimon Schubert static void
binary_get_symbol_info(bfd * ignore_abfd ATTRIBUTE_UNUSED,asymbol * symbol,symbol_info * ret)1985796c8dcSSimon Schubert binary_get_symbol_info (bfd *ignore_abfd ATTRIBUTE_UNUSED,
1995796c8dcSSimon Schubert asymbol *symbol,
2005796c8dcSSimon Schubert symbol_info *ret)
2015796c8dcSSimon Schubert {
2025796c8dcSSimon Schubert bfd_symbol_info (symbol, ret);
2035796c8dcSSimon Schubert }
2045796c8dcSSimon Schubert
2055796c8dcSSimon Schubert #define binary_bfd_is_local_label_name bfd_generic_is_local_label_name
2065796c8dcSSimon Schubert #define binary_get_lineno _bfd_nosymbols_get_lineno
2075796c8dcSSimon Schubert #define binary_find_nearest_line _bfd_nosymbols_find_nearest_line
2085796c8dcSSimon Schubert #define binary_find_inliner_info _bfd_nosymbols_find_inliner_info
2095796c8dcSSimon Schubert #define binary_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol
2105796c8dcSSimon Schubert #define binary_read_minisymbols _bfd_generic_read_minisymbols
2115796c8dcSSimon Schubert #define binary_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol
2125796c8dcSSimon Schubert #define binary_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
2135796c8dcSSimon Schubert
2145796c8dcSSimon Schubert /* Set the architecture of a binary file. */
2155796c8dcSSimon Schubert #define binary_set_arch_mach _bfd_generic_set_arch_mach
2165796c8dcSSimon Schubert
2175796c8dcSSimon Schubert /* Write section contents of a binary file. */
2185796c8dcSSimon Schubert
2195796c8dcSSimon Schubert static bfd_boolean
binary_set_section_contents(bfd * abfd,asection * sec,const void * data,file_ptr offset,bfd_size_type size)2205796c8dcSSimon Schubert binary_set_section_contents (bfd *abfd,
2215796c8dcSSimon Schubert asection *sec,
2225796c8dcSSimon Schubert const void * data,
2235796c8dcSSimon Schubert file_ptr offset,
2245796c8dcSSimon Schubert bfd_size_type size)
2255796c8dcSSimon Schubert {
2265796c8dcSSimon Schubert if (size == 0)
2275796c8dcSSimon Schubert return TRUE;
2285796c8dcSSimon Schubert
2295796c8dcSSimon Schubert if (! abfd->output_has_begun)
2305796c8dcSSimon Schubert {
2315796c8dcSSimon Schubert bfd_boolean found_low;
2325796c8dcSSimon Schubert bfd_vma low;
2335796c8dcSSimon Schubert asection *s;
2345796c8dcSSimon Schubert
2355796c8dcSSimon Schubert /* The lowest section LMA sets the virtual address of the start
2365796c8dcSSimon Schubert of the file. We use this to set the file position of all the
2375796c8dcSSimon Schubert sections. */
2385796c8dcSSimon Schubert found_low = FALSE;
2395796c8dcSSimon Schubert low = 0;
2405796c8dcSSimon Schubert for (s = abfd->sections; s != NULL; s = s->next)
2415796c8dcSSimon Schubert if (((s->flags
2425796c8dcSSimon Schubert & (SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC | SEC_NEVER_LOAD))
2435796c8dcSSimon Schubert == (SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC))
2445796c8dcSSimon Schubert && (s->size > 0)
2455796c8dcSSimon Schubert && (! found_low || s->lma < low))
2465796c8dcSSimon Schubert {
2475796c8dcSSimon Schubert low = s->lma;
2485796c8dcSSimon Schubert found_low = TRUE;
2495796c8dcSSimon Schubert }
2505796c8dcSSimon Schubert
2515796c8dcSSimon Schubert for (s = abfd->sections; s != NULL; s = s->next)
2525796c8dcSSimon Schubert {
2535796c8dcSSimon Schubert s->filepos = s->lma - low;
2545796c8dcSSimon Schubert
2555796c8dcSSimon Schubert /* Skip following warning check for sections that will not
2565796c8dcSSimon Schubert occupy file space. */
2575796c8dcSSimon Schubert if ((s->flags
2585796c8dcSSimon Schubert & (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_NEVER_LOAD))
2595796c8dcSSimon Schubert != (SEC_HAS_CONTENTS | SEC_ALLOC)
2605796c8dcSSimon Schubert || (s->size == 0))
2615796c8dcSSimon Schubert continue;
2625796c8dcSSimon Schubert
2635796c8dcSSimon Schubert /* If attempting to generate a binary file from a bfd with
2645796c8dcSSimon Schubert LMA's all over the place, huge (sparse?) binary files may
2655796c8dcSSimon Schubert result. This condition attempts to detect this situation
2665796c8dcSSimon Schubert and print a warning. Better heuristics would be nice to
2675796c8dcSSimon Schubert have. */
2685796c8dcSSimon Schubert
2695796c8dcSSimon Schubert if (s->filepos < 0)
2705796c8dcSSimon Schubert (*_bfd_error_handler)
2715796c8dcSSimon Schubert (_("Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx."),
2725796c8dcSSimon Schubert bfd_get_section_name (abfd, s),
2735796c8dcSSimon Schubert (unsigned long) s->filepos);
2745796c8dcSSimon Schubert }
2755796c8dcSSimon Schubert
2765796c8dcSSimon Schubert abfd->output_has_begun = TRUE;
2775796c8dcSSimon Schubert }
2785796c8dcSSimon Schubert
2795796c8dcSSimon Schubert /* We don't want to output anything for a section that is neither
2805796c8dcSSimon Schubert loaded nor allocated. The contents of such a section are not
2815796c8dcSSimon Schubert meaningful in the binary format. */
2825796c8dcSSimon Schubert if ((sec->flags & (SEC_LOAD | SEC_ALLOC)) == 0)
2835796c8dcSSimon Schubert return TRUE;
2845796c8dcSSimon Schubert if ((sec->flags & SEC_NEVER_LOAD) != 0)
2855796c8dcSSimon Schubert return TRUE;
2865796c8dcSSimon Schubert
2875796c8dcSSimon Schubert return _bfd_generic_set_section_contents (abfd, sec, data, offset, size);
2885796c8dcSSimon Schubert }
2895796c8dcSSimon Schubert
2905796c8dcSSimon Schubert /* No space is required for header information. */
2915796c8dcSSimon Schubert
2925796c8dcSSimon Schubert static int
binary_sizeof_headers(bfd * abfd ATTRIBUTE_UNUSED,struct bfd_link_info * info ATTRIBUTE_UNUSED)2935796c8dcSSimon Schubert binary_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
2945796c8dcSSimon Schubert struct bfd_link_info *info ATTRIBUTE_UNUSED)
2955796c8dcSSimon Schubert {
2965796c8dcSSimon Schubert return 0;
2975796c8dcSSimon Schubert }
2985796c8dcSSimon Schubert
2995796c8dcSSimon Schubert #define binary_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
3005796c8dcSSimon Schubert #define binary_bfd_relax_section bfd_generic_relax_section
3015796c8dcSSimon Schubert #define binary_bfd_gc_sections bfd_generic_gc_sections
302*a45ae5f8SJohn Marino #define binary_bfd_lookup_section_flags bfd_generic_lookup_section_flags
3035796c8dcSSimon Schubert #define binary_bfd_merge_sections bfd_generic_merge_sections
3045796c8dcSSimon Schubert #define binary_bfd_is_group_section bfd_generic_is_group_section
3055796c8dcSSimon Schubert #define binary_bfd_discard_group bfd_generic_discard_group
3065796c8dcSSimon Schubert #define binary_section_already_linked _bfd_generic_section_already_linked
3075796c8dcSSimon Schubert #define binary_bfd_define_common_symbol bfd_generic_define_common_symbol
3085796c8dcSSimon Schubert #define binary_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
3095796c8dcSSimon Schubert #define binary_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
3105796c8dcSSimon Schubert #define binary_bfd_link_just_syms _bfd_generic_link_just_syms
311cf7f2e2dSJohn Marino #define binary_bfd_copy_link_hash_symbol_type \
312cf7f2e2dSJohn Marino _bfd_generic_copy_link_hash_symbol_type
3135796c8dcSSimon Schubert #define binary_bfd_link_add_symbols _bfd_generic_link_add_symbols
3145796c8dcSSimon Schubert #define binary_bfd_final_link _bfd_generic_final_link
3155796c8dcSSimon Schubert #define binary_bfd_link_split_section _bfd_generic_link_split_section
3165796c8dcSSimon Schubert #define binary_get_section_contents_in_window _bfd_generic_get_section_contents_in_window
3175796c8dcSSimon Schubert
3185796c8dcSSimon Schubert const bfd_target binary_vec =
3195796c8dcSSimon Schubert {
3205796c8dcSSimon Schubert "binary", /* name */
3215796c8dcSSimon Schubert bfd_target_unknown_flavour, /* flavour */
3225796c8dcSSimon Schubert BFD_ENDIAN_UNKNOWN, /* byteorder */
3235796c8dcSSimon Schubert BFD_ENDIAN_UNKNOWN, /* header_byteorder */
3245796c8dcSSimon Schubert EXEC_P, /* object_flags */
3255796c8dcSSimon Schubert (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE | SEC_DATA
3265796c8dcSSimon Schubert | SEC_ROM | SEC_HAS_CONTENTS), /* section_flags */
3275796c8dcSSimon Schubert 0, /* symbol_leading_char */
3285796c8dcSSimon Schubert ' ', /* ar_pad_char */
3295796c8dcSSimon Schubert 16, /* ar_max_namelen */
330*a45ae5f8SJohn Marino 255, /* match priority. */
3315796c8dcSSimon Schubert bfd_getb64, bfd_getb_signed_64, bfd_putb64,
3325796c8dcSSimon Schubert bfd_getb32, bfd_getb_signed_32, bfd_putb32,
3335796c8dcSSimon Schubert bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
3345796c8dcSSimon Schubert bfd_getb64, bfd_getb_signed_64, bfd_putb64,
3355796c8dcSSimon Schubert bfd_getb32, bfd_getb_signed_32, bfd_putb32,
3365796c8dcSSimon Schubert bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
3375796c8dcSSimon Schubert { /* bfd_check_format */
3385796c8dcSSimon Schubert _bfd_dummy_target,
3395796c8dcSSimon Schubert binary_object_p,
3405796c8dcSSimon Schubert _bfd_dummy_target,
3415796c8dcSSimon Schubert _bfd_dummy_target,
3425796c8dcSSimon Schubert },
3435796c8dcSSimon Schubert { /* bfd_set_format */
3445796c8dcSSimon Schubert bfd_false,
3455796c8dcSSimon Schubert binary_mkobject,
3465796c8dcSSimon Schubert bfd_false,
3475796c8dcSSimon Schubert bfd_false,
3485796c8dcSSimon Schubert },
3495796c8dcSSimon Schubert { /* bfd_write_contents */
3505796c8dcSSimon Schubert bfd_false,
3515796c8dcSSimon Schubert bfd_true,
3525796c8dcSSimon Schubert bfd_false,
3535796c8dcSSimon Schubert bfd_false,
3545796c8dcSSimon Schubert },
3555796c8dcSSimon Schubert
3565796c8dcSSimon Schubert BFD_JUMP_TABLE_GENERIC (binary),
3575796c8dcSSimon Schubert BFD_JUMP_TABLE_COPY (_bfd_generic),
3585796c8dcSSimon Schubert BFD_JUMP_TABLE_CORE (_bfd_nocore),
3595796c8dcSSimon Schubert BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
3605796c8dcSSimon Schubert BFD_JUMP_TABLE_SYMBOLS (binary),
3615796c8dcSSimon Schubert BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
3625796c8dcSSimon Schubert BFD_JUMP_TABLE_WRITE (binary),
3635796c8dcSSimon Schubert BFD_JUMP_TABLE_LINK (binary),
3645796c8dcSSimon Schubert BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
3655796c8dcSSimon Schubert
3665796c8dcSSimon Schubert NULL,
3675796c8dcSSimon Schubert
3685796c8dcSSimon Schubert NULL
3695796c8dcSSimon Schubert };
370