home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / gnu / gdb-4.14-src.lha / gdb-4.14 / bfd / aout-target.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-18  |  16.3 KB  |  567 lines

  1. /* Define a target vector and some small routines for a variant of a.out.
  2.    Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
  3.  
  4. This file is part of BFD, the Binary File Descriptor library.
  5.  
  6. This program is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2 of the License, or
  9. (at your option) any later version.
  10.  
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with this program; if not, write to the Free Software
  18. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20. #include "aout/aout64.h"
  21. #include "aout/stab_gnu.h"
  22. #include "aout/ar.h"
  23. /*#include "libaout.h"*/
  24.  
  25. extern reloc_howto_type * NAME(aout,reloc_type_lookup) ();
  26.  
  27. /* Set parameters about this a.out file that are machine-dependent.
  28.    This routine is called from some_aout_object_p just before it returns.  */
  29. #ifndef MY_callback
  30. static const bfd_target *
  31. MY(callback) (abfd)
  32.      bfd *abfd;
  33. {
  34.   struct internal_exec *execp = exec_hdr (abfd);
  35.   unsigned int arch_align_power;
  36.   unsigned long arch_align;
  37.  
  38.   /* Calculate the file positions of the parts of a newly read aout header */
  39.   obj_textsec (abfd)->_raw_size = N_TXTSIZE(*execp);
  40.  
  41.   /* The virtual memory addresses of the sections */
  42.   obj_textsec (abfd)->vma = N_TXTADDR(*execp);
  43.   obj_datasec (abfd)->vma = N_DATADDR(*execp);
  44.   obj_bsssec  (abfd)->vma = N_BSSADDR(*execp);
  45.  
  46.   /* The file offsets of the sections */
  47.   obj_textsec (abfd)->filepos = N_TXTOFF (*execp);
  48.   obj_datasec (abfd)->filepos = N_DATOFF (*execp);
  49.  
  50.   /* The file offsets of the relocation info */
  51.   obj_textsec (abfd)->rel_filepos = N_TRELOFF(*execp);
  52.   obj_datasec (abfd)->rel_filepos = N_DRELOFF(*execp);
  53.  
  54.   /* The file offsets of the string table and symbol table.  */
  55.   obj_sym_filepos (abfd) = N_SYMOFF (*execp);
  56.   obj_str_filepos (abfd) = N_STROFF (*execp);
  57.   
  58.   /* Determine the architecture and machine type of the object file.  */
  59. #ifdef SET_ARCH_MACH
  60.   SET_ARCH_MACH(abfd, *execp);
  61. #else
  62.   bfd_default_set_arch_mach(abfd, DEFAULT_ARCH, 0);
  63. #endif
  64.  
  65.   /* Now that we know the architecture, set the alignments of the
  66.      sections.  This is normally done by NAME(aout,new_section_hook),
  67.      but when the initial sections were created the architecture had
  68.      not yet been set.  However, for backward compatibility, we don't
  69.      set the alignment power any higher than as required by the size
  70.      of the section.  */
  71.   arch_align_power = bfd_get_arch_info (abfd)->section_align_power;
  72.   arch_align = 1 << arch_align_power;
  73.   if ((BFD_ALIGN (obj_textsec (abfd)->_raw_size, arch_align)
  74.        == obj_textsec (abfd)->_raw_size)
  75.       && (BFD_ALIGN (obj_datasec (abfd)->_raw_size, arch_align)
  76.       == obj_datasec (abfd)->_raw_size)
  77.       && (BFD_ALIGN (obj_bsssec (abfd)->_raw_size, arch_align)
  78.       == obj_bsssec (abfd)->_raw_size))
  79.     {
  80.       obj_textsec (abfd)->alignment_power = arch_align_power;
  81.       obj_datasec (abfd)->alignment_power = arch_align_power;
  82.       obj_bsssec (abfd)->alignment_power = arch_align_power;
  83.     }
  84.  
  85.   /* Don't set sizes now -- can't be sure until we know arch & mach.
  86.      Sizes get set in set_sizes callback, later.  */
  87. #if 0
  88.   adata(abfd).page_size = PAGE_SIZE;
  89. #ifdef SEGMENT_SIZE
  90.   adata(abfd).segment_size = SEGMENT_SIZE;
  91. #else
  92.   adata(abfd).segment_size = PAGE_SIZE;
  93. #endif
  94.   adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;
  95. #endif
  96.  
  97.   return abfd->xvec;
  98. }
  99. #endif
  100.  
  101. #ifndef MY_object_p
  102. /* Finish up the reading of an a.out file header */
  103.  
  104. static const bfd_target *
  105. MY(object_p) (abfd)
  106.      bfd *abfd;
  107. {
  108.   struct external_exec exec_bytes;    /* Raw exec header from file */
  109.   struct internal_exec exec;        /* Cleaned-up exec header */
  110.   const bfd_target *target;
  111.  
  112.   if (bfd_read ((PTR) &exec_bytes, 1, EXEC_BYTES_SIZE, abfd)
  113.       != EXEC_BYTES_SIZE) {
  114.     if (bfd_get_error () != bfd_error_system_call)
  115.       bfd_set_error (bfd_error_wrong_format);
  116.     return 0;
  117.   }
  118.  
  119. #ifdef SWAP_MAGIC
  120.   exec.a_info = SWAP_MAGIC (exec_bytes.e_info);
  121. #else
  122.   exec.a_info = bfd_h_get_32 (abfd, exec_bytes.e_info);
  123. #endif /* SWAP_MAGIC */
  124.  
  125.   if (N_BADMAG (exec)) return 0;
  126. #ifdef MACHTYPE_OK
  127.   if (!(MACHTYPE_OK (N_MACHTYPE (exec)))) return 0;
  128. #endif
  129.  
  130.   NAME(aout,swap_exec_header_in)(abfd, &exec_bytes, &exec);
  131.  
  132. #ifdef SWAP_MAGIC
  133.   /* swap_exec_header_in read in a_info with the wrong byte order */
  134.   exec.a_info = SWAP_MAGIC (exec_bytes.e_info);
  135. #endif /* SWAP_MAGIC */
  136.  
  137.   target = NAME(aout,some_aout_object_p) (abfd, &exec, MY(callback));
  138.  
  139. #ifdef ENTRY_CAN_BE_ZERO
  140.   /* The NEWSOS3 entry-point is/was 0, which (amongst other lossage)
  141.    * means that it isn't obvious if EXEC_P should be set.
  142.    * All of the following must be true for an executable:
  143.    * There must be no relocations, the bfd can be neither an
  144.    * archive nor an archive element, and the file must be executable. */
  145.  
  146.   if (exec.a_trsize + exec.a_drsize == 0
  147.       && bfd_get_format(abfd) == bfd_object && abfd->my_archive == NULL)
  148.     {
  149.       struct stat buf;
  150. #ifndef S_IXUSR
  151. #define S_IXUSR 0100    /* Execute by owner.  */
  152. #endif
  153.       if (stat(abfd->filename, &buf) == 0 && (buf.st_mode & S_IXUSR))
  154.     abfd->flags |= EXEC_P;
  155.     }
  156. #endif /* ENTRY_CAN_BE_ZERO */
  157.  
  158.   return target;
  159. }
  160. #define MY_object_p MY(object_p)
  161. #endif
  162.  
  163.  
  164. #ifndef MY_mkobject
  165. static boolean
  166. MY(mkobject) (abfd)
  167.      bfd *abfd;
  168. {
  169.   if (NAME(aout,mkobject)(abfd) == false)
  170.     return false;
  171. #if 0 /* Sizes get set in set_sizes callback, later, after we know
  172.      the architecture and machine.  */
  173.   adata(abfd).page_size = PAGE_SIZE;
  174. #ifdef SEGMENT_SIZE
  175.   adata(abfd).segment_size = SEGMENT_SIZE;
  176. #else
  177.   adata(abfd).segment_size = PAGE_SIZE;
  178. #endif
  179.   adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;
  180. #endif
  181.   return true;
  182. }
  183. #define MY_mkobject MY(mkobject)
  184. #endif
  185.  
  186. #ifndef MY_bfd_copy_private_section_data
  187.  
  188. /* Copy private section data.  This actually does nothing with the
  189.    sections.  It copies the subformat field.  We copy it here, because
  190.    we need to know whether this is a QMAGIC file before we set the
  191.    section contents, and copy_private_bfd_data is not called until
  192.    after the section contents have been set.  */
  193.  
  194. /*ARGSUSED*/
  195. static boolean
  196. MY_bfd_copy_private_section_data (ibfd, isec, obfd, osec)
  197.      bfd *ibfd;
  198.      asection *isec;
  199.      bfd *obfd;
  200.      asection *osec;
  201. {
  202.   if (bfd_get_flavour (obfd) == bfd_target_aout_flavour)
  203.     obj_aout_subformat (obfd) = obj_aout_subformat (ibfd);
  204.   return true;
  205. }
  206.  
  207. #endif
  208.  
  209. /* Write an object file.
  210.    Section contents have already been written.  We write the
  211.    file header, symbols, and relocation.  */
  212.  
  213. #ifndef MY_write_object_contents
  214. static boolean
  215. MY(write_object_contents) (abfd)
  216.      bfd *abfd;
  217. {
  218.   struct external_exec exec_bytes;
  219.   struct internal_exec *execp = exec_hdr (abfd);
  220.  
  221. #if CHOOSE_RELOC_SIZE
  222.   CHOOSE_RELOC_SIZE(abfd);
  223. #else
  224.   obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
  225. #endif
  226.  
  227.   WRITE_HEADERS(abfd, execp);
  228.  
  229.   return true;
  230. }
  231. #define MY_write_object_contents MY(write_object_contents)
  232. #endif
  233.  
  234. #ifndef MY_set_sizes
  235. static boolean
  236. MY(set_sizes) (abfd)
  237.      bfd *abfd;
  238. {
  239.   adata(abfd).page_size = PAGE_SIZE;
  240.  
  241. #ifdef SEGMENT_SIZE
  242.   adata(abfd).segment_size = SEGMENT_SIZE;
  243. #else
  244.   adata(abfd).segment_size = PAGE_SIZE;
  245. #endif
  246.  
  247. #ifdef ZMAGIC_DISK_BLOCK_SIZE
  248.   adata(abfd).zmagic_disk_block_size = ZMAGIC_DISK_BLOCK_SIZE;
  249. #else
  250.   adata(abfd).zmagic_disk_block_size = PAGE_SIZE;
  251. #endif
  252.  
  253.   adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;
  254.   return true;
  255. }
  256. #define MY_set_sizes MY(set_sizes)
  257. #endif
  258.  
  259. #ifndef MY_exec_hdr_flags
  260. #define MY_exec_hdr_flags 0
  261. #endif
  262.  
  263. #ifndef MY_backend_data
  264.  
  265. #ifndef MY_zmagic_contiguous
  266. #define MY_zmagic_contiguous 0
  267. #endif
  268. #ifndef MY_text_includes_header
  269. #define MY_text_includes_header 0
  270. #endif
  271. #ifndef MY_add_dynamic_symbols
  272. #define MY_add_dynamic_symbols 0
  273. #endif
  274. #ifndef MY_add_one_symbol
  275. #define MY_add_one_symbol 0
  276. #endif
  277. #ifndef MY_link_dynamic_object
  278. #define MY_link_dynamic_object 0
  279. #endif
  280. #ifndef MY_write_dynamic_symbol
  281. #define MY_write_dynamic_symbol 0
  282. #endif
  283. #ifndef MY_check_dynamic_reloc
  284. #define MY_check_dynamic_reloc 0
  285. #endif
  286. #ifndef MY_finish_dynamic_link
  287. #define MY_finish_dynamic_link 0
  288. #endif
  289.  
  290. static CONST struct aout_backend_data MY(backend_data) = {
  291.   MY_zmagic_contiguous,
  292.   MY_text_includes_header,
  293.   MY_exec_hdr_flags,
  294.   0,                /* text vma? */
  295.   MY_set_sizes,
  296.   0,                /* exec header is counted */
  297.   MY_add_dynamic_symbols,
  298.   MY_add_one_symbol,
  299.   MY_link_dynamic_object,
  300.   MY_write_dynamic_symbol,
  301.   MY_check_dynamic_reloc,
  302.   MY_finish_dynamic_link
  303. };
  304. #define MY_backend_data &MY(backend_data)
  305. #endif
  306.  
  307. #ifndef MY_final_link_callback
  308.  
  309. /* Callback for the final_link routine to set the section offsets.  */
  310.  
  311. static void MY_final_link_callback
  312.   PARAMS ((bfd *, file_ptr *, file_ptr *, file_ptr *));
  313.  
  314. static void
  315. MY_final_link_callback (abfd, ptreloff, pdreloff, psymoff)
  316.      bfd *abfd;
  317.      file_ptr *ptreloff;
  318.      file_ptr *pdreloff;
  319.      file_ptr *psymoff;
  320. {
  321.   struct internal_exec *execp = exec_hdr (abfd);
  322.  
  323.   *ptreloff = N_TRELOFF (*execp);
  324.   *pdreloff = N_DRELOFF (*execp);
  325.   *psymoff = N_SYMOFF (*execp);
  326. }
  327.  
  328. #endif
  329.  
  330. #ifndef MY_bfd_final_link
  331.  
  332. /* Final link routine.  We need to use a call back to get the correct
  333.    offsets in the output file.  */
  334.  
  335. static boolean
  336. MY_bfd_final_link (abfd, info)
  337.      bfd *abfd;
  338.      struct bfd_link_info *info;
  339. {
  340.   return NAME(aout,final_link) (abfd, info, MY_final_link_callback);
  341. }
  342.  
  343. #endif
  344.  
  345. /* We assume BFD generic archive files.  */
  346. #ifndef    MY_openr_next_archived_file
  347. #define    MY_openr_next_archived_file    bfd_generic_openr_next_archived_file
  348. #endif
  349. #ifndef    MY_generic_stat_arch_elt
  350. #define    MY_generic_stat_arch_elt    bfd_generic_stat_arch_elt
  351. #endif
  352. #ifndef    MY_slurp_armap
  353. #define    MY_slurp_armap            bfd_slurp_bsd_armap
  354. #endif
  355. #ifndef    MY_slurp_extended_name_table
  356. #define    MY_slurp_extended_name_table    _bfd_slurp_extended_name_table
  357. #endif
  358. #ifndef MY_construct_extended_name_table
  359. #define MY_construct_extended_name_table \
  360.   _bfd_archive_bsd_construct_extended_name_table
  361. #endif
  362. #ifndef    MY_write_armap
  363. #define    MY_write_armap        bsd_write_armap
  364. #endif
  365. #ifndef    MY_truncate_arname
  366. #define    MY_truncate_arname        bfd_bsd_truncate_arname
  367. #endif
  368. #ifndef MY_update_armap_timestamp
  369. #define MY_update_armap_timestamp _bfd_archive_bsd_update_armap_timestamp
  370. #endif
  371.  
  372. /* No core file defined here -- configure in trad-core.c separately.  */
  373. #ifndef    MY_core_file_failing_command
  374. #define    MY_core_file_failing_command _bfd_nocore_core_file_failing_command
  375. #endif
  376. #ifndef    MY_core_file_failing_signal
  377. #define    MY_core_file_failing_signal    _bfd_nocore_core_file_failing_signal
  378. #endif
  379. #ifndef    MY_core_file_matches_executable_p
  380. #define    MY_core_file_matches_executable_p    \
  381.                 _bfd_nocore_core_file_matches_executable_p
  382. #endif
  383. #ifndef    MY_core_file_p
  384. #define    MY_core_file_p        _bfd_dummy_target
  385. #endif
  386.  
  387. #ifndef MY_bfd_debug_info_start
  388. #define MY_bfd_debug_info_start        bfd_void
  389. #endif
  390. #ifndef MY_bfd_debug_info_end
  391. #define MY_bfd_debug_info_end        bfd_void
  392. #endif
  393. #ifndef MY_bfd_debug_info_accumulate
  394. #define MY_bfd_debug_info_accumulate    \
  395.             (void (*) PARAMS ((bfd*, struct sec *))) bfd_void
  396. #endif
  397.  
  398. #ifndef MY_core_file_failing_command
  399. #define MY_core_file_failing_command NAME(aout,core_file_failing_command)
  400. #endif
  401. #ifndef MY_core_file_failing_signal
  402. #define MY_core_file_failing_signal NAME(aout,core_file_failing_signal)
  403. #endif
  404. #ifndef MY_core_file_matches_executable_p
  405. #define MY_core_file_matches_executable_p NAME(aout,core_file_matches_executable_p)
  406. #endif
  407. #ifndef MY_set_section_contents
  408. #define MY_set_section_contents NAME(aout,set_section_contents)
  409. #endif
  410. #ifndef MY_get_section_contents
  411. #define MY_get_section_contents NAME(aout,get_section_contents)
  412. #endif
  413. #ifndef MY_new_section_hook
  414. #define MY_new_section_hook NAME(aout,new_section_hook)
  415. #endif
  416. #ifndef MY_get_symtab_upper_bound
  417. #define MY_get_symtab_upper_bound NAME(aout,get_symtab_upper_bound)
  418. #endif
  419. #ifndef MY_get_symtab
  420. #define MY_get_symtab NAME(aout,get_symtab)
  421. #endif
  422. #ifndef MY_get_reloc_upper_bound
  423. #define MY_get_reloc_upper_bound NAME(aout,get_reloc_upper_bound)
  424. #endif
  425. #ifndef MY_canonicalize_reloc
  426. #define MY_canonicalize_reloc NAME(aout,canonicalize_reloc)
  427. #endif
  428. #ifndef MY_make_empty_symbol
  429. #define MY_make_empty_symbol NAME(aout,make_empty_symbol)
  430. #endif
  431. #ifndef MY_print_symbol
  432. #define MY_print_symbol NAME(aout,print_symbol)
  433. #endif
  434. #ifndef MY_get_symbol_info
  435. #define MY_get_symbol_info NAME(aout,get_symbol_info)
  436. #endif
  437. #ifndef MY_get_lineno
  438. #define MY_get_lineno NAME(aout,get_lineno)
  439. #endif
  440. #ifndef MY_set_arch_mach
  441. #define MY_set_arch_mach NAME(aout,set_arch_mach)
  442. #endif
  443. #ifndef MY_find_nearest_line
  444. #define MY_find_nearest_line NAME(aout,find_nearest_line)
  445. #endif
  446. #ifndef MY_sizeof_headers
  447. #define MY_sizeof_headers NAME(aout,sizeof_headers)
  448. #endif
  449. #ifndef MY_bfd_get_relocated_section_contents
  450. #define MY_bfd_get_relocated_section_contents \
  451.             bfd_generic_get_relocated_section_contents
  452. #endif
  453. #ifndef MY_bfd_relax_section
  454. #define MY_bfd_relax_section bfd_generic_relax_section
  455. #endif
  456. #ifndef MY_bfd_reloc_type_lookup
  457. #define MY_bfd_reloc_type_lookup NAME(aout,reloc_type_lookup)
  458. #endif
  459. #ifndef MY_bfd_make_debug_symbol
  460. #define MY_bfd_make_debug_symbol 0
  461. #endif
  462. #ifndef MY_bfd_link_hash_table_create
  463. #define MY_bfd_link_hash_table_create NAME(aout,link_hash_table_create)
  464. #endif
  465. #ifndef MY_bfd_link_add_symbols
  466. #define MY_bfd_link_add_symbols NAME(aout,link_add_symbols)
  467. #endif
  468.  
  469. #ifndef MY_bfd_copy_private_bfd_data
  470. #define MY_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data
  471. #endif
  472.  
  473. #ifndef MY_bfd_is_local_label
  474. #define MY_bfd_is_local_label bfd_generic_is_local_label
  475. #endif
  476.  
  477. #ifndef MY_bfd_free_cached_info
  478. #define MY_bfd_free_cached_info NAME(aout,bfd_free_cached_info)
  479. #endif
  480.  
  481. #ifndef MY_close_and_cleanup
  482. #define MY_close_and_cleanup MY_bfd_free_cached_info
  483. #endif
  484.  
  485. #ifndef MY_get_dynamic_symtab_upper_bound
  486. #define MY_get_dynamic_symtab_upper_bound \
  487.   _bfd_nodynamic_get_dynamic_symtab_upper_bound
  488. #endif
  489. #ifndef MY_canonicalize_dynamic_symtab
  490. #define MY_canonicalize_dynamic_symtab \
  491.   _bfd_nodynamic_canonicalize_dynamic_symtab
  492. #endif
  493. #ifndef MY_get_dynamic_reloc_upper_bound
  494. #define MY_get_dynamic_reloc_upper_bound \
  495.   _bfd_nodynamic_get_dynamic_reloc_upper_bound
  496. #endif
  497. #ifndef MY_canonicalize_dynamic_reloc
  498. #define MY_canonicalize_dynamic_reloc \
  499.   _bfd_nodynamic_canonicalize_dynamic_reloc
  500. #endif
  501.  
  502. /* Aout symbols normally have leading underscores */
  503. #ifndef MY_symbol_leading_char 
  504. #define MY_symbol_leading_char '_'
  505. #endif
  506.  
  507. /* Aout archives normally use spaces for padding */
  508. #ifndef AR_PAD_CHAR
  509. #define AR_PAD_CHAR ' '
  510. #endif
  511.  
  512. #ifndef MY_BFD_TARGET
  513. const bfd_target MY(vec) =
  514. {
  515.   TARGETNAME,        /* name */
  516.   bfd_target_aout_flavour,
  517. #ifdef TARGET_IS_BIG_ENDIAN_P
  518.   true,                /* target byte order (big) */
  519.   true,                /* target headers byte order (big) */
  520. #else
  521.   false,            /* target byte order (little) */
  522.   false,            /* target headers byte order (little) */
  523. #endif
  524.   (HAS_RELOC | EXEC_P |        /* object flags */
  525.    HAS_LINENO | HAS_DEBUG |
  526.    HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
  527.   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
  528.   MY_symbol_leading_char,
  529.   AR_PAD_CHAR,            /* ar_pad_char */
  530.   15,                /* ar_max_namelen */
  531.   3,                /* minimum alignment */
  532. #ifdef TARGET_IS_BIG_ENDIAN_P
  533.   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  534.      bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  535.      bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
  536.   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  537.      bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  538.      bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
  539. #else
  540.   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
  541.      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
  542.      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
  543.   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
  544.      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
  545.      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
  546. #endif
  547.     {_bfd_dummy_target, MY_object_p, /* bfd_check_format */
  548.        bfd_generic_archive_p, MY_core_file_p},
  549.     {bfd_false, MY_mkobject,    /* bfd_set_format */
  550.        _bfd_generic_mkarchive, bfd_false},
  551.     {bfd_false, MY_write_object_contents, /* bfd_write_contents */
  552.        _bfd_write_archive_contents, bfd_false},
  553.  
  554.      BFD_JUMP_TABLE_GENERIC (MY),
  555.      BFD_JUMP_TABLE_COPY (MY),
  556.      BFD_JUMP_TABLE_CORE (MY),
  557.      BFD_JUMP_TABLE_ARCHIVE (MY),
  558.      BFD_JUMP_TABLE_SYMBOLS (MY),
  559.      BFD_JUMP_TABLE_RELOCS (MY),
  560.      BFD_JUMP_TABLE_WRITE (MY),
  561.      BFD_JUMP_TABLE_LINK (MY),
  562.      BFD_JUMP_TABLE_DYNAMIC (MY),
  563.  
  564.   (PTR) MY_backend_data,
  565. };
  566. #endif /* MY_BFD_TARGET */
  567.