home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / D / GDB / GDB-4.13 / GDB-4 / gdb-4.13 / bfd / aout-target.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-07-14  |  16.0 KB  |  556 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 CONST struct reloc_howto_struct * 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.   obj_aout_subformat (obfd) = obj_aout_subformat (ibfd);
  203.   return true;
  204. }
  205.  
  206. #endif
  207.  
  208. /* Write an object file.
  209.    Section contents have already been written.  We write the
  210.    file header, symbols, and relocation.  */
  211.  
  212. #ifndef MY_write_object_contents
  213. static boolean
  214. MY(write_object_contents) (abfd)
  215.      bfd *abfd;
  216. {
  217.   struct external_exec exec_bytes;
  218.   struct internal_exec *execp = exec_hdr (abfd);
  219.  
  220. #if CHOOSE_RELOC_SIZE
  221.   CHOOSE_RELOC_SIZE(abfd);
  222. #else
  223.   obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
  224. #endif
  225.  
  226.   WRITE_HEADERS(abfd, execp);
  227.  
  228.   return true;
  229. }
  230. #define MY_write_object_contents MY(write_object_contents)
  231. #endif
  232.  
  233. #ifndef MY_set_sizes
  234. static boolean
  235. MY(set_sizes) (abfd)
  236.      bfd *abfd;
  237. {
  238.   adata(abfd).page_size = PAGE_SIZE;
  239.  
  240. #ifdef SEGMENT_SIZE
  241.   adata(abfd).segment_size = SEGMENT_SIZE;
  242. #else
  243.   adata(abfd).segment_size = PAGE_SIZE;
  244. #endif
  245.  
  246. #ifdef ZMAGIC_DISK_BLOCK_SIZE
  247.   adata(abfd).zmagic_disk_block_size = ZMAGIC_DISK_BLOCK_SIZE;
  248. #else
  249.   adata(abfd).zmagic_disk_block_size = PAGE_SIZE;
  250. #endif
  251.  
  252.   adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;
  253.   return true;
  254. }
  255. #define MY_set_sizes MY(set_sizes)
  256. #endif
  257.  
  258. #ifndef MY_exec_hdr_flags
  259. #define MY_exec_hdr_flags 0
  260. #endif
  261.  
  262. #ifndef MY_backend_data
  263.  
  264. #ifndef MY_text_includes_header
  265. #define MY_text_includes_header 0
  266. #endif
  267. #ifndef MY_add_dynamic_symbols
  268. #define MY_add_dynamic_symbols 0
  269. #endif
  270. #ifndef MY_add_one_symbol
  271. #define MY_add_one_symbol 0
  272. #endif
  273. #ifndef MY_link_dynamic_object
  274. #define MY_link_dynamic_object 0
  275. #endif
  276. #ifndef MY_write_dynamic_symbol
  277. #define MY_write_dynamic_symbol 0
  278. #endif
  279. #ifndef MY_check_dynamic_reloc
  280. #define MY_check_dynamic_reloc 0
  281. #endif
  282. #ifndef MY_finish_dynamic_link
  283. #define MY_finish_dynamic_link 0
  284. #endif
  285.  
  286. static CONST struct aout_backend_data MY(backend_data) = {
  287.   0,                /* zmagic contiguous */
  288.   MY_text_includes_header,
  289.   MY_exec_hdr_flags,
  290.   0,                /* text vma? */
  291.   MY_set_sizes,
  292.   0,                /* exec header is counted */
  293.   MY_add_dynamic_symbols,
  294.   MY_add_one_symbol,
  295.   MY_link_dynamic_object,
  296.   MY_write_dynamic_symbol,
  297.   MY_check_dynamic_reloc,
  298.   MY_finish_dynamic_link
  299. };
  300. #define MY_backend_data &MY(backend_data)
  301. #endif
  302.  
  303. #ifndef MY_final_link_callback
  304.  
  305. /* Callback for the final_link routine to set the section offsets.  */
  306.  
  307. static void MY_final_link_callback
  308.   PARAMS ((bfd *, file_ptr *, file_ptr *, file_ptr *));
  309.  
  310. static void
  311. MY_final_link_callback (abfd, ptreloff, pdreloff, psymoff)
  312.      bfd *abfd;
  313.      file_ptr *ptreloff;
  314.      file_ptr *pdreloff;
  315.      file_ptr *psymoff;
  316. {
  317.   struct internal_exec *execp = exec_hdr (abfd);
  318.  
  319.   *ptreloff = N_TRELOFF (*execp);
  320.   *pdreloff = N_DRELOFF (*execp);
  321.   *psymoff = N_SYMOFF (*execp);
  322. }
  323.  
  324. #endif
  325.  
  326. #ifndef MY_bfd_final_link
  327.  
  328. /* Final link routine.  We need to use a call back to get the correct
  329.    offsets in the output file.  */
  330.  
  331. static boolean
  332. MY_bfd_final_link (abfd, info)
  333.      bfd *abfd;
  334.      struct bfd_link_info *info;
  335. {
  336.   return NAME(aout,final_link) (abfd, info, MY_final_link_callback);
  337. }
  338.  
  339. #endif
  340.  
  341. /* We assume BFD generic archive files.  */
  342. #ifndef    MY_openr_next_archived_file
  343. #define    MY_openr_next_archived_file    bfd_generic_openr_next_archived_file
  344. #endif
  345. #ifndef    MY_generic_stat_arch_elt
  346. #define    MY_generic_stat_arch_elt    bfd_generic_stat_arch_elt
  347. #endif
  348. #ifndef    MY_slurp_armap
  349. #define    MY_slurp_armap            bfd_slurp_bsd_armap
  350. #endif
  351. #ifndef    MY_slurp_extended_name_table
  352. #define    MY_slurp_extended_name_table    _bfd_slurp_extended_name_table
  353. #endif
  354. #ifndef    MY_write_armap
  355. #define    MY_write_armap        bsd_write_armap
  356. #endif
  357. #ifndef    MY_truncate_arname
  358. #define    MY_truncate_arname        bfd_bsd_truncate_arname
  359. #endif
  360.  
  361. /* No core file defined here -- configure in trad-core.c separately.  */
  362. #ifndef    MY_core_file_failing_command
  363. #define    MY_core_file_failing_command _bfd_nocore_core_file_failing_command
  364. #endif
  365. #ifndef    MY_core_file_failing_signal
  366. #define    MY_core_file_failing_signal    _bfd_nocore_core_file_failing_signal
  367. #endif
  368. #ifndef    MY_core_file_matches_executable_p
  369. #define    MY_core_file_matches_executable_p    \
  370.                 _bfd_nocore_core_file_matches_executable_p
  371. #endif
  372. #ifndef    MY_core_file_p
  373. #define    MY_core_file_p        _bfd_dummy_target
  374. #endif
  375.  
  376. #ifndef MY_bfd_debug_info_start
  377. #define MY_bfd_debug_info_start        bfd_void
  378. #endif
  379. #ifndef MY_bfd_debug_info_end
  380. #define MY_bfd_debug_info_end        bfd_void
  381. #endif
  382. #ifndef MY_bfd_debug_info_accumulate
  383. #define MY_bfd_debug_info_accumulate    \
  384.             (void (*) PARAMS ((bfd*, struct sec *))) bfd_void
  385. #endif
  386.  
  387. #ifndef MY_core_file_failing_command
  388. #define MY_core_file_failing_command NAME(aout,core_file_failing_command)
  389. #endif
  390. #ifndef MY_core_file_failing_signal
  391. #define MY_core_file_failing_signal NAME(aout,core_file_failing_signal)
  392. #endif
  393. #ifndef MY_core_file_matches_executable_p
  394. #define MY_core_file_matches_executable_p NAME(aout,core_file_matches_executable_p)
  395. #endif
  396. #ifndef MY_set_section_contents
  397. #define MY_set_section_contents NAME(aout,set_section_contents)
  398. #endif
  399. #ifndef MY_get_section_contents
  400. #define MY_get_section_contents NAME(aout,get_section_contents)
  401. #endif
  402. #ifndef MY_new_section_hook
  403. #define MY_new_section_hook NAME(aout,new_section_hook)
  404. #endif
  405. #ifndef MY_get_symtab_upper_bound
  406. #define MY_get_symtab_upper_bound NAME(aout,get_symtab_upper_bound)
  407. #endif
  408. #ifndef MY_get_symtab
  409. #define MY_get_symtab NAME(aout,get_symtab)
  410. #endif
  411. #ifndef MY_get_reloc_upper_bound
  412. #define MY_get_reloc_upper_bound NAME(aout,get_reloc_upper_bound)
  413. #endif
  414. #ifndef MY_canonicalize_reloc
  415. #define MY_canonicalize_reloc NAME(aout,canonicalize_reloc)
  416. #endif
  417. #ifndef MY_make_empty_symbol
  418. #define MY_make_empty_symbol NAME(aout,make_empty_symbol)
  419. #endif
  420. #ifndef MY_print_symbol
  421. #define MY_print_symbol NAME(aout,print_symbol)
  422. #endif
  423. #ifndef MY_get_symbol_info
  424. #define MY_get_symbol_info NAME(aout,get_symbol_info)
  425. #endif
  426. #ifndef MY_get_lineno
  427. #define MY_get_lineno NAME(aout,get_lineno)
  428. #endif
  429. #ifndef MY_set_arch_mach
  430. #define MY_set_arch_mach NAME(aout,set_arch_mach)
  431. #endif
  432. #ifndef MY_find_nearest_line
  433. #define MY_find_nearest_line NAME(aout,find_nearest_line)
  434. #endif
  435. #ifndef MY_sizeof_headers
  436. #define MY_sizeof_headers NAME(aout,sizeof_headers)
  437. #endif
  438. #ifndef MY_bfd_get_relocated_section_contents
  439. #define MY_bfd_get_relocated_section_contents \
  440.             bfd_generic_get_relocated_section_contents
  441. #endif
  442. #ifndef MY_bfd_relax_section
  443. #define MY_bfd_relax_section bfd_generic_relax_section
  444. #endif
  445. #ifndef MY_bfd_reloc_type_lookup
  446. #define MY_bfd_reloc_type_lookup NAME(aout,reloc_type_lookup)
  447. #endif
  448. #ifndef MY_bfd_make_debug_symbol
  449. #define MY_bfd_make_debug_symbol 0
  450. #endif
  451. #ifndef MY_bfd_link_hash_table_create
  452. #define MY_bfd_link_hash_table_create NAME(aout,link_hash_table_create)
  453. #endif
  454. #ifndef MY_bfd_link_add_symbols
  455. #define MY_bfd_link_add_symbols NAME(aout,link_add_symbols)
  456. #endif
  457.  
  458. #ifndef MY_bfd_copy_private_bfd_data
  459. #define MY_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data
  460. #endif
  461.  
  462. #ifndef MY_bfd_is_local_label
  463. #define MY_bfd_is_local_label bfd_generic_is_local_label
  464. #endif
  465.  
  466. #ifndef MY_bfd_free_cached_info
  467. #define MY_bfd_free_cached_info NAME(aout,bfd_free_cached_info)
  468. #endif
  469.  
  470. #ifndef MY_close_and_cleanup
  471. #define MY_close_and_cleanup MY_bfd_free_cached_info
  472. #endif
  473.  
  474. #ifndef MY_get_dynamic_symtab_upper_bound
  475. #define MY_get_dynamic_symtab_upper_bound \
  476.   _bfd_nodynamic_get_dynamic_symtab_upper_bound
  477. #endif
  478. #ifndef MY_canonicalize_dynamic_symtab
  479. #define MY_canonicalize_dynamic_symtab \
  480.   _bfd_nodynamic_canonicalize_dynamic_symtab
  481. #endif
  482. #ifndef MY_get_dynamic_reloc_upper_bound
  483. #define MY_get_dynamic_reloc_upper_bound \
  484.   _bfd_nodynamic_get_dynamic_reloc_upper_bound
  485. #endif
  486. #ifndef MY_canonicalize_dynamic_reloc
  487. #define MY_canonicalize_dynamic_reloc \
  488.   _bfd_nodynamic_canonicalize_dynamic_reloc
  489. #endif
  490.  
  491. /* Aout symbols normally have leading underscores */
  492. #ifndef MY_symbol_leading_char 
  493. #define MY_symbol_leading_char '_'
  494. #endif
  495.  
  496. /* Aout archives normally use spaces for padding */
  497. #ifndef AR_PAD_CHAR
  498. #define AR_PAD_CHAR ' '
  499. #endif
  500.  
  501. #ifndef MY_BFD_TARGET
  502. const bfd_target MY(vec) =
  503. {
  504.   TARGETNAME,        /* name */
  505.   bfd_target_aout_flavour,
  506. #ifdef TARGET_IS_BIG_ENDIAN_P
  507.   true,                /* target byte order (big) */
  508.   true,                /* target headers byte order (big) */
  509. #else
  510.   false,            /* target byte order (little) */
  511.   false,            /* target headers byte order (little) */
  512. #endif
  513.   (HAS_RELOC | EXEC_P |        /* object flags */
  514.    HAS_LINENO | HAS_DEBUG |
  515.    HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
  516.   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
  517.   MY_symbol_leading_char,
  518.   AR_PAD_CHAR,            /* ar_pad_char */
  519.   15,                /* ar_max_namelen */
  520.   3,                /* minimum alignment */
  521. #ifdef TARGET_IS_BIG_ENDIAN_P
  522.   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  523.      bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  524.      bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
  525.   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  526.      bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  527.      bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
  528. #else
  529.   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
  530.      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
  531.      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
  532.   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
  533.      bfd_getl32, bfd_getl_signed_32, bfd_putl32,
  534.      bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
  535. #endif
  536.     {_bfd_dummy_target, MY_object_p, /* bfd_check_format */
  537.        bfd_generic_archive_p, MY_core_file_p},
  538.     {bfd_false, MY_mkobject,    /* bfd_set_format */
  539.        _bfd_generic_mkarchive, bfd_false},
  540.     {bfd_false, MY_write_object_contents, /* bfd_write_contents */
  541.        _bfd_write_archive_contents, bfd_false},
  542.  
  543.      BFD_JUMP_TABLE_GENERIC (MY),
  544.      BFD_JUMP_TABLE_COPY (MY),
  545.      BFD_JUMP_TABLE_CORE (MY),
  546.      BFD_JUMP_TABLE_ARCHIVE (MY),
  547.      BFD_JUMP_TABLE_SYMBOLS (MY),
  548.      BFD_JUMP_TABLE_RELOCS (MY),
  549.      BFD_JUMP_TABLE_WRITE (MY),
  550.      BFD_JUMP_TABLE_LINK (MY),
  551.      BFD_JUMP_TABLE_DYNAMIC (MY),
  552.  
  553.   (PTR) MY_backend_data,
  554. };
  555. #endif /* MY_BFD_TARGET */
  556.