Subversion Repositories Kolibri OS

Rev

Rev 5197 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /* Target definitions for 32-bit ELF
  2.    Copyright (C) 1993-2015 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 3 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., 51 Franklin Street - Fifth Floor, Boston,
  19.    MA 02110-1301, USA.  */
  20.  
  21.  
  22. /* This structure contains everything that BFD knows about a target.
  23.    It includes things like its byte order, name, what routines to call
  24.    to do various operations, etc.  Every BFD points to a target structure
  25.    with its "xvec" member.
  26.  
  27.    There are two such structures here:  one for big-endian machines and
  28.    one for little-endian machines.   */
  29.  
  30. #ifndef bfd_elf32_close_and_cleanup
  31. #define bfd_elf32_close_and_cleanup _bfd_elf_close_and_cleanup
  32. #endif
  33. #ifndef bfd_elf32_bfd_free_cached_info
  34. #define bfd_elf32_bfd_free_cached_info _bfd_free_cached_info
  35. #endif
  36. #ifndef bfd_elf32_get_section_contents
  37. #define bfd_elf32_get_section_contents _bfd_generic_get_section_contents
  38. #endif
  39.  
  40. #define bfd_elf32_canonicalize_dynamic_symtab \
  41.   _bfd_elf_canonicalize_dynamic_symtab
  42. #ifndef bfd_elf32_get_synthetic_symtab
  43. #define bfd_elf32_get_synthetic_symtab \
  44.   _bfd_elf_get_synthetic_symtab
  45. #endif
  46. #ifndef bfd_elf32_canonicalize_reloc
  47. #define bfd_elf32_canonicalize_reloc    _bfd_elf_canonicalize_reloc
  48. #endif
  49. #ifndef bfd_elf32_find_nearest_line
  50. #define bfd_elf32_find_nearest_line     _bfd_elf_find_nearest_line
  51. #endif
  52. #ifndef bfd_elf32_find_line
  53. #define bfd_elf32_find_line             _bfd_elf_find_line
  54. #endif
  55. #ifndef bfd_elf32_find_inliner_info
  56. #define bfd_elf32_find_inliner_info     _bfd_elf_find_inliner_info
  57. #endif
  58. #define bfd_elf32_read_minisymbols      _bfd_elf_read_minisymbols
  59. #define bfd_elf32_minisymbol_to_symbol  _bfd_elf_minisymbol_to_symbol
  60. #define bfd_elf32_get_dynamic_symtab_upper_bound \
  61.   _bfd_elf_get_dynamic_symtab_upper_bound
  62. #define bfd_elf32_get_lineno            _bfd_elf_get_lineno
  63. #ifndef bfd_elf32_get_reloc_upper_bound
  64. #define bfd_elf32_get_reloc_upper_bound _bfd_elf_get_reloc_upper_bound
  65. #endif
  66. #ifndef bfd_elf32_get_symbol_info
  67. #define bfd_elf32_get_symbol_info       _bfd_elf_get_symbol_info
  68. #endif
  69. #ifndef bfd_elf32_get_symbol_version_string
  70. #define bfd_elf32_get_symbol_version_string \
  71.   _bfd_elf_get_symbol_version_string
  72. #endif
  73. #define bfd_elf32_canonicalize_symtab   _bfd_elf_canonicalize_symtab
  74. #define bfd_elf32_get_symtab_upper_bound _bfd_elf_get_symtab_upper_bound
  75. #define bfd_elf32_make_empty_symbol     _bfd_elf_make_empty_symbol
  76. #ifndef bfd_elf32_new_section_hook
  77. #define bfd_elf32_new_section_hook      _bfd_elf_new_section_hook
  78. #endif
  79. #define bfd_elf32_set_arch_mach         _bfd_elf_set_arch_mach
  80. #ifndef bfd_elf32_set_section_contents
  81. #define bfd_elf32_set_section_contents  _bfd_elf_set_section_contents
  82. #endif
  83. #define bfd_elf32_sizeof_headers        _bfd_elf_sizeof_headers
  84. #define bfd_elf32_write_object_contents _bfd_elf_write_object_contents
  85. #define bfd_elf32_write_corefile_contents _bfd_elf_write_corefile_contents
  86.  
  87. #define bfd_elf32_get_section_contents_in_window \
  88.   _bfd_generic_get_section_contents_in_window
  89.  
  90. #ifndef elf_backend_can_refcount
  91. #define elf_backend_can_refcount 0
  92. #endif
  93. #ifndef elf_backend_want_got_plt
  94. #define elf_backend_want_got_plt 0
  95. #endif
  96. #ifndef elf_backend_plt_readonly
  97. #define elf_backend_plt_readonly 0
  98. #endif
  99. #ifndef elf_backend_want_plt_sym
  100. #define elf_backend_want_plt_sym 0
  101. #endif
  102. #ifndef elf_backend_plt_not_loaded
  103. #define elf_backend_plt_not_loaded 0
  104. #endif
  105. #ifndef elf_backend_plt_alignment
  106. #define elf_backend_plt_alignment 2
  107. #endif
  108. #ifndef elf_backend_want_dynbss
  109. #define elf_backend_want_dynbss 1
  110. #endif
  111. #ifndef elf_backend_want_p_paddr_set_to_zero
  112. #define elf_backend_want_p_paddr_set_to_zero 0
  113. #endif
  114. #ifndef elf_backend_default_execstack
  115. #define elf_backend_default_execstack 1
  116. #endif
  117. #ifndef elf_backend_caches_rawsize
  118. #define elf_backend_caches_rawsize 0
  119. #endif
  120. #ifndef elf_backend_extern_protected_data
  121. #define elf_backend_extern_protected_data 0
  122. #endif
  123. #ifndef elf_backend_stack_align
  124. #define elf_backend_stack_align 16
  125. #endif
  126.  
  127. #define bfd_elf32_bfd_debug_info_start  bfd_void
  128. #define bfd_elf32_bfd_debug_info_end    bfd_void
  129. #define bfd_elf32_bfd_debug_info_accumulate \
  130.   ((void (*) (bfd*, struct bfd_section *)) bfd_void)
  131.  
  132. #ifndef bfd_elf32_bfd_get_relocated_section_contents
  133. #define bfd_elf32_bfd_get_relocated_section_contents \
  134.   bfd_generic_get_relocated_section_contents
  135. #endif
  136.  
  137. #ifndef bfd_elf32_bfd_relax_section
  138. #define bfd_elf32_bfd_relax_section bfd_generic_relax_section
  139. #endif
  140.  
  141. #ifndef elf_backend_can_gc_sections
  142. #define elf_backend_can_gc_sections 0
  143. #endif
  144. #ifndef elf_backend_can_refcount
  145. #define elf_backend_can_refcount 0
  146. #endif
  147. #ifndef elf_backend_want_got_sym
  148. #define elf_backend_want_got_sym 1
  149. #endif
  150. #ifndef elf_backend_gc_keep
  151. #define elf_backend_gc_keep             _bfd_elf_gc_keep
  152. #endif
  153. #ifndef elf_backend_gc_mark_dynamic_ref
  154. #define elf_backend_gc_mark_dynamic_ref bfd_elf_gc_mark_dynamic_ref_symbol
  155. #endif
  156. #ifndef elf_backend_gc_mark_hook
  157. #define elf_backend_gc_mark_hook        _bfd_elf_gc_mark_hook
  158. #endif
  159. #ifndef elf_backend_gc_mark_extra_sections
  160. #define elf_backend_gc_mark_extra_sections _bfd_elf_gc_mark_extra_sections
  161. #endif
  162. #ifndef elf_backend_gc_sweep_hook
  163. #define elf_backend_gc_sweep_hook       NULL
  164. #endif
  165. #ifndef bfd_elf32_bfd_gc_sections
  166. #define bfd_elf32_bfd_gc_sections bfd_elf_gc_sections
  167. #endif
  168.  
  169. #ifndef bfd_elf32_bfd_merge_sections
  170. #define bfd_elf32_bfd_merge_sections \
  171.   _bfd_elf_merge_sections
  172. #endif
  173.  
  174. #ifndef bfd_elf32_bfd_is_group_section
  175. #define bfd_elf32_bfd_is_group_section bfd_elf_is_group_section
  176. #endif
  177.  
  178. #ifndef bfd_elf32_bfd_discard_group
  179. #define bfd_elf32_bfd_discard_group bfd_generic_discard_group
  180. #endif
  181.  
  182. #ifndef bfd_elf32_section_already_linked
  183. #define bfd_elf32_section_already_linked \
  184.   _bfd_elf_section_already_linked
  185. #endif
  186.  
  187. #ifndef bfd_elf32_bfd_define_common_symbol
  188. #define bfd_elf32_bfd_define_common_symbol bfd_generic_define_common_symbol
  189. #endif
  190.  
  191. #ifndef bfd_elf32_bfd_lookup_section_flags
  192. #define bfd_elf32_bfd_lookup_section_flags bfd_elf_lookup_section_flags
  193. #endif
  194.  
  195. #ifndef bfd_elf32_bfd_make_debug_symbol
  196. #define bfd_elf32_bfd_make_debug_symbol \
  197.   ((asymbol * (*) (bfd *, void *, unsigned long)) bfd_nullvoidptr)
  198. #endif
  199.  
  200. #ifndef bfd_elf32_bfd_copy_private_symbol_data
  201. #define bfd_elf32_bfd_copy_private_symbol_data \
  202.   _bfd_elf_copy_private_symbol_data
  203. #endif
  204.  
  205. #ifndef bfd_elf32_bfd_copy_private_section_data
  206. #define bfd_elf32_bfd_copy_private_section_data \
  207.   _bfd_elf_copy_private_section_data
  208. #endif
  209. #ifndef bfd_elf32_bfd_copy_private_header_data
  210. #define bfd_elf32_bfd_copy_private_header_data \
  211.   _bfd_elf_copy_private_header_data
  212. #endif
  213. #ifndef bfd_elf32_bfd_copy_private_bfd_data
  214. #define bfd_elf32_bfd_copy_private_bfd_data \
  215.   _bfd_elf_copy_private_bfd_data
  216. #endif
  217. #ifndef bfd_elf32_bfd_print_private_bfd_data
  218. #define bfd_elf32_bfd_print_private_bfd_data \
  219.   _bfd_elf_print_private_bfd_data
  220. #endif
  221. #ifndef bfd_elf32_bfd_merge_private_bfd_data
  222. #define bfd_elf32_bfd_merge_private_bfd_data \
  223.   ((bfd_boolean (*) (bfd *, bfd *)) bfd_true)
  224. #endif
  225. #ifndef bfd_elf32_bfd_set_private_flags
  226. #define bfd_elf32_bfd_set_private_flags \
  227.   ((bfd_boolean (*) (bfd *, flagword)) bfd_true)
  228. #endif
  229. #ifndef bfd_elf32_bfd_is_local_label_name
  230. #define bfd_elf32_bfd_is_local_label_name _bfd_elf_is_local_label_name
  231. #endif
  232. #ifndef bfd_elf32_bfd_is_target_special_symbol
  233. #define bfd_elf32_bfd_is_target_special_symbol \
  234.   ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
  235. #endif
  236.  
  237. #ifndef bfd_elf32_get_dynamic_reloc_upper_bound
  238. #define bfd_elf32_get_dynamic_reloc_upper_bound \
  239.   _bfd_elf_get_dynamic_reloc_upper_bound
  240. #endif
  241. #ifndef bfd_elf32_canonicalize_dynamic_reloc
  242. #define bfd_elf32_canonicalize_dynamic_reloc \
  243.   _bfd_elf_canonicalize_dynamic_reloc
  244. #endif
  245.  
  246. #ifdef elf_backend_relocate_section
  247. #ifndef bfd_elf32_bfd_link_hash_table_create
  248. #define bfd_elf32_bfd_link_hash_table_create _bfd_elf_link_hash_table_create
  249. #endif
  250. #ifndef bfd_elf32_bfd_link_add_symbols
  251. #define bfd_elf32_bfd_link_add_symbols  bfd_elf_link_add_symbols
  252. #endif
  253. #ifndef bfd_elf32_bfd_final_link
  254. #define bfd_elf32_bfd_final_link        bfd_elf_final_link
  255. #endif
  256. #else /* ! defined (elf_backend_relocate_section) */
  257. /* If no backend relocate_section routine, use the generic linker.
  258.    Note - this will prevent the port from being able to use some of
  259.    the other features of the ELF linker, because the generic hash structure
  260.    does not have the fields needed by the ELF linker.  In particular it
  261.    means that linking directly to S-records will not work.  */
  262. #ifndef bfd_elf32_bfd_link_hash_table_create
  263. #define bfd_elf32_bfd_link_hash_table_create \
  264.   _bfd_generic_link_hash_table_create
  265. #endif
  266. #ifndef bfd_elf32_bfd_link_add_symbols
  267. #define bfd_elf32_bfd_link_add_symbols  _bfd_generic_link_add_symbols
  268. #endif
  269. #ifndef bfd_elf32_bfd_final_link
  270. #define bfd_elf32_bfd_final_link        _bfd_generic_final_link
  271. #endif
  272. #endif /* ! defined (elf_backend_relocate_section) */
  273.  
  274. #ifndef bfd_elf32_bfd_link_just_syms
  275. #define bfd_elf32_bfd_link_just_syms    _bfd_elf_link_just_syms
  276. #endif
  277.  
  278. #ifndef bfd_elf32_bfd_copy_link_hash_symbol_type
  279. #define bfd_elf32_bfd_copy_link_hash_symbol_type \
  280.   _bfd_elf_copy_link_hash_symbol_type
  281. #endif
  282.  
  283. #ifndef bfd_elf32_bfd_link_split_section
  284. #define bfd_elf32_bfd_link_split_section _bfd_generic_link_split_section
  285. #endif
  286.  
  287. #ifndef bfd_elf32_archive_p
  288. #define bfd_elf32_archive_p bfd_generic_archive_p
  289. #endif
  290.  
  291. #ifndef bfd_elf32_write_archive_contents
  292. #define bfd_elf32_write_archive_contents _bfd_write_archive_contents
  293. #endif
  294.  
  295. #ifndef bfd_elf32_mkobject
  296. #define bfd_elf32_mkobject bfd_elf_make_object
  297. #endif
  298.  
  299. #ifndef bfd_elf32_mkcorefile
  300. #define bfd_elf32_mkcorefile bfd_elf_mkcorefile
  301. #endif
  302.  
  303. #ifndef bfd_elf32_mkarchive
  304. #define bfd_elf32_mkarchive _bfd_generic_mkarchive
  305. #endif
  306.  
  307. #ifndef bfd_elf32_print_symbol
  308. #define bfd_elf32_print_symbol bfd_elf_print_symbol
  309. #endif
  310.  
  311. #ifndef elf_symbol_leading_char
  312. #define elf_symbol_leading_char 0
  313. #endif
  314.  
  315. #ifndef elf_info_to_howto
  316. #define elf_info_to_howto 0
  317. #endif
  318.  
  319. #ifndef elf_info_to_howto_rel
  320. #define elf_info_to_howto_rel 0
  321. #endif
  322.  
  323. #ifndef elf_backend_arch_data
  324. #define elf_backend_arch_data NULL
  325. #endif
  326.  
  327. #ifndef ELF_TARGET_ID
  328. #define ELF_TARGET_ID   GENERIC_ELF_DATA
  329. #endif
  330.  
  331. #ifndef ELF_OSABI
  332. #define ELF_OSABI ELFOSABI_NONE
  333. #endif
  334.  
  335. #ifndef ELF_MAXPAGESIZE
  336. # error ELF_MAXPAGESIZE is not defined
  337. #define ELF_MAXPAGESIZE 1
  338. #endif
  339.  
  340. #ifndef ELF_COMMONPAGESIZE
  341. #define ELF_COMMONPAGESIZE ELF_MAXPAGESIZE
  342. #endif
  343.  
  344. #ifndef ELF_MINPAGESIZE
  345. #define ELF_MINPAGESIZE ELF_COMMONPAGESIZE
  346. #endif
  347.  
  348. #if ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE
  349. # error ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE
  350. #endif
  351. #if ELF_MINPAGESIZE > ELF_COMMONPAGESIZE
  352. # error ELF_MINPAGESIZE > ELF_COMMONPAGESIZE
  353. #endif
  354.  
  355. #ifndef ELF_DYNAMIC_SEC_FLAGS
  356. /* Note that we set the SEC_IN_MEMORY flag for these sections.  */
  357. #define ELF_DYNAMIC_SEC_FLAGS                   \
  358.   (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS      \
  359.    | SEC_IN_MEMORY | SEC_LINKER_CREATED)
  360. #endif
  361.  
  362. #ifndef elf_backend_collect
  363. #define elf_backend_collect FALSE
  364. #endif
  365. #ifndef elf_backend_type_change_ok
  366. #define elf_backend_type_change_ok FALSE
  367. #endif
  368.  
  369. #ifndef elf_backend_sym_is_global
  370. #define elf_backend_sym_is_global       0
  371. #endif
  372. #ifndef elf_backend_object_p
  373. #define elf_backend_object_p            0
  374. #endif
  375. #ifndef elf_backend_symbol_processing
  376. #define elf_backend_symbol_processing   0
  377. #endif
  378. #ifndef elf_backend_symbol_table_processing
  379. #define elf_backend_symbol_table_processing     0
  380. #endif
  381. #ifndef elf_backend_get_symbol_type
  382. #define elf_backend_get_symbol_type 0
  383. #endif
  384. #ifndef elf_backend_archive_symbol_lookup
  385. #define elf_backend_archive_symbol_lookup _bfd_elf_archive_symbol_lookup
  386. #endif
  387. #ifndef elf_backend_name_local_section_symbols
  388. #define elf_backend_name_local_section_symbols  0
  389. #endif
  390. #ifndef elf_backend_section_processing
  391. #define elf_backend_section_processing  0
  392. #endif
  393. #ifndef elf_backend_section_from_shdr
  394. #define elf_backend_section_from_shdr   _bfd_elf_make_section_from_shdr
  395. #endif
  396. #ifndef elf_backend_section_flags
  397. #define elf_backend_section_flags       0
  398. #endif
  399. #ifndef elf_backend_get_sec_type_attr
  400. #define elf_backend_get_sec_type_attr   _bfd_elf_get_sec_type_attr
  401. #endif
  402. #ifndef elf_backend_section_from_phdr
  403. #define elf_backend_section_from_phdr   _bfd_elf_make_section_from_phdr
  404. #endif
  405. #ifndef elf_backend_fake_sections
  406. #define elf_backend_fake_sections       0
  407. #endif
  408. #ifndef elf_backend_section_from_bfd_section
  409. #define elf_backend_section_from_bfd_section    0
  410. #endif
  411. #ifndef elf_backend_add_symbol_hook
  412. #define elf_backend_add_symbol_hook     0
  413. #endif
  414. #ifndef elf_backend_link_output_symbol_hook
  415. #define elf_backend_link_output_symbol_hook 0
  416. #endif
  417. #ifndef elf_backend_create_dynamic_sections
  418. #define elf_backend_create_dynamic_sections 0
  419. #endif
  420. #ifndef elf_backend_omit_section_dynsym
  421. #define elf_backend_omit_section_dynsym _bfd_elf_link_omit_section_dynsym
  422. #endif
  423. #ifndef elf_backend_relocs_compatible
  424. #define elf_backend_relocs_compatible _bfd_elf_default_relocs_compatible
  425. #endif
  426. #ifndef elf_backend_check_relocs
  427. #define elf_backend_check_relocs        0
  428. #endif
  429. #ifndef elf_backend_check_directives
  430. #define elf_backend_check_directives    0
  431. #endif
  432. #ifndef elf_backend_notice_as_needed
  433. #define elf_backend_notice_as_needed    _bfd_elf_notice_as_needed
  434. #endif
  435. #ifndef elf_backend_adjust_dynamic_symbol
  436. #define elf_backend_adjust_dynamic_symbol 0
  437. #endif
  438. #ifndef elf_backend_always_size_sections
  439. #define elf_backend_always_size_sections 0
  440. #endif
  441. #ifndef elf_backend_size_dynamic_sections
  442. #define elf_backend_size_dynamic_sections 0
  443. #endif
  444. #ifndef elf_backend_init_index_section
  445. #define elf_backend_init_index_section \
  446.  ((void (*) (bfd *, struct bfd_link_info *)) bfd_void)
  447. #endif
  448. #ifndef elf_backend_relocate_section
  449. #define elf_backend_relocate_section    0
  450. #endif
  451. #ifndef elf_backend_finish_dynamic_symbol
  452. #define elf_backend_finish_dynamic_symbol       0
  453. #endif
  454. #ifndef elf_backend_finish_dynamic_sections
  455. #define elf_backend_finish_dynamic_sections     0
  456. #endif
  457. #ifndef elf_backend_begin_write_processing
  458. #define elf_backend_begin_write_processing      0
  459. #endif
  460. #ifndef elf_backend_final_write_processing
  461. #define elf_backend_final_write_processing      0
  462. #endif
  463. #ifndef elf_backend_additional_program_headers
  464. #define elf_backend_additional_program_headers  0
  465. #endif
  466. #ifndef elf_backend_modify_segment_map
  467. #define elf_backend_modify_segment_map  0
  468. #endif
  469. #ifndef elf_backend_modify_program_headers
  470. #define elf_backend_modify_program_headers      0
  471. #endif
  472. #ifndef elf_backend_ecoff_debug_swap
  473. #define elf_backend_ecoff_debug_swap    0
  474. #endif
  475. #ifndef elf_backend_bfd_from_remote_memory
  476. #define elf_backend_bfd_from_remote_memory _bfd_elf32_bfd_from_remote_memory
  477. #endif
  478. #ifndef elf_backend_got_header_size
  479. #define elf_backend_got_header_size     0
  480. #endif
  481. #ifndef elf_backend_got_elt_size
  482. #define elf_backend_got_elt_size _bfd_elf_default_got_elt_size
  483. #endif
  484. #ifndef elf_backend_obj_attrs_vendor
  485. #define elf_backend_obj_attrs_vendor            NULL
  486. #endif
  487. #ifndef elf_backend_obj_attrs_section
  488. #define elf_backend_obj_attrs_section           NULL
  489. #endif
  490. #ifndef elf_backend_obj_attrs_arg_type
  491. #define elf_backend_obj_attrs_arg_type          NULL
  492. #endif
  493. #ifndef elf_backend_obj_attrs_section_type
  494. #define elf_backend_obj_attrs_section_type              SHT_GNU_ATTRIBUTES
  495. #endif
  496. #ifndef elf_backend_obj_attrs_order
  497. #define elf_backend_obj_attrs_order             NULL
  498. #endif
  499. #ifndef elf_backend_obj_attrs_handle_unknown
  500. #define elf_backend_obj_attrs_handle_unknown    NULL
  501. #endif
  502. #ifndef elf_backend_static_tls_alignment
  503. #define elf_backend_static_tls_alignment        1
  504. #endif
  505. #ifndef elf_backend_post_process_headers
  506. #define elf_backend_post_process_headers        _bfd_elf_post_process_headers
  507. #endif
  508. #ifndef elf_backend_print_symbol_all
  509. #define elf_backend_print_symbol_all            NULL
  510. #endif
  511. #ifndef elf_backend_output_arch_local_syms
  512. #define elf_backend_output_arch_local_syms      NULL
  513. #endif
  514. #ifndef elf_backend_output_arch_syms
  515. #define elf_backend_output_arch_syms            NULL
  516. #endif
  517. #ifndef elf_backend_copy_indirect_symbol
  518. #define elf_backend_copy_indirect_symbol  _bfd_elf_link_hash_copy_indirect
  519. #endif
  520. #ifndef elf_backend_hide_symbol
  521. #define elf_backend_hide_symbol         _bfd_elf_link_hash_hide_symbol
  522. #endif
  523. #ifndef elf_backend_fixup_symbol
  524. #define elf_backend_fixup_symbol                NULL
  525. #endif
  526. #ifndef elf_backend_merge_symbol_attribute
  527. #define elf_backend_merge_symbol_attribute      NULL
  528. #endif
  529. #ifndef elf_backend_get_target_dtag
  530. #define elf_backend_get_target_dtag             NULL
  531. #endif
  532. #ifndef elf_backend_ignore_undef_symbol
  533. #define elf_backend_ignore_undef_symbol         NULL
  534. #endif
  535. #ifndef elf_backend_emit_relocs
  536. #define elf_backend_emit_relocs                 _bfd_elf_link_output_relocs
  537. #endif
  538. #ifndef elf_backend_count_relocs
  539. #define elf_backend_count_relocs                NULL
  540. #endif
  541. #ifndef elf_backend_sort_relocs_p
  542. #define elf_backend_sort_relocs_p               NULL
  543. #endif
  544. #ifndef elf_backend_grok_prstatus
  545. #define elf_backend_grok_prstatus               NULL
  546. #endif
  547. #ifndef elf_backend_grok_psinfo
  548. #define elf_backend_grok_psinfo                 NULL
  549. #endif
  550. #ifndef elf_backend_write_core_note
  551. #define elf_backend_write_core_note             NULL
  552. #endif
  553. #ifndef elf_backend_lookup_section_flags_hook
  554. #define elf_backend_lookup_section_flags_hook   NULL
  555. #endif
  556. #ifndef elf_backend_reloc_type_class
  557. #define elf_backend_reloc_type_class            _bfd_elf_reloc_type_class
  558. #endif
  559. #ifndef elf_backend_discard_info
  560. #define elf_backend_discard_info                NULL
  561. #endif
  562. #ifndef elf_backend_ignore_discarded_relocs
  563. #define elf_backend_ignore_discarded_relocs     NULL
  564. #endif
  565. #ifndef elf_backend_action_discarded
  566. #define elf_backend_action_discarded _bfd_elf_default_action_discarded
  567. #endif
  568. #ifndef elf_backend_eh_frame_address_size
  569. #define elf_backend_eh_frame_address_size _bfd_elf_eh_frame_address_size
  570. #endif
  571. #ifndef elf_backend_can_make_relative_eh_frame
  572. #define elf_backend_can_make_relative_eh_frame  _bfd_elf_can_make_relative
  573. #endif
  574. #ifndef elf_backend_can_make_lsda_relative_eh_frame
  575. #define elf_backend_can_make_lsda_relative_eh_frame     _bfd_elf_can_make_relative
  576. #endif
  577. #ifndef elf_backend_encode_eh_address
  578. #define elf_backend_encode_eh_address           _bfd_elf_encode_eh_address
  579. #endif
  580. #ifndef elf_backend_write_section
  581. #define elf_backend_write_section               NULL
  582. #endif
  583. #ifndef elf_backend_mips_irix_compat
  584. #define elf_backend_mips_irix_compat            NULL
  585. #endif
  586. #ifndef elf_backend_mips_rtype_to_howto
  587. #define elf_backend_mips_rtype_to_howto         NULL
  588. #endif
  589.  
  590. /* Previously, backends could only use SHT_REL or SHT_RELA relocation
  591.    sections, but not both.  They defined USE_REL to indicate SHT_REL
  592.    sections, and left it undefined to indicated SHT_RELA sections.
  593.    For backwards compatibility, we still support this usage.  */
  594. #ifndef USE_REL
  595. #define USE_REL 0
  596. #endif
  597.  
  598. /* Use these in new code.  */
  599. #ifndef elf_backend_may_use_rel_p
  600. #define elf_backend_may_use_rel_p USE_REL
  601. #endif
  602. #ifndef elf_backend_may_use_rela_p
  603. #define elf_backend_may_use_rela_p !USE_REL
  604. #endif
  605. #ifndef elf_backend_default_use_rela_p
  606. #define elf_backend_default_use_rela_p !USE_REL
  607. #endif
  608. #ifndef elf_backend_rela_plts_and_copies_p
  609. #define elf_backend_rela_plts_and_copies_p elf_backend_default_use_rela_p
  610. #endif
  611.  
  612. #ifndef elf_backend_rela_normal
  613. #define elf_backend_rela_normal 0
  614. #endif
  615.  
  616. #ifndef elf_backend_plt_sym_val
  617. #define elf_backend_plt_sym_val NULL
  618. #endif
  619. #ifndef elf_backend_relplt_name
  620. #define elf_backend_relplt_name NULL
  621. #endif
  622.  
  623. #ifndef ELF_MACHINE_ALT1
  624. #define ELF_MACHINE_ALT1 0
  625. #endif
  626.  
  627. #ifndef ELF_MACHINE_ALT2
  628. #define ELF_MACHINE_ALT2 0
  629. #endif
  630.  
  631. #ifndef elf_backend_size_info
  632. #define elf_backend_size_info _bfd_elf32_size_info
  633. #endif
  634.  
  635. #ifndef elf_backend_special_sections
  636. #define elf_backend_special_sections NULL
  637. #endif
  638.  
  639. #ifndef elf_backend_sign_extend_vma
  640. #define elf_backend_sign_extend_vma 0
  641. #endif
  642.  
  643. #ifndef elf_backend_link_order_error_handler
  644. #define elf_backend_link_order_error_handler _bfd_default_error_handler
  645. #endif
  646.  
  647. #ifndef elf_backend_common_definition
  648. #define elf_backend_common_definition _bfd_elf_common_definition
  649. #endif
  650.  
  651. #ifndef elf_backend_common_section_index
  652. #define elf_backend_common_section_index _bfd_elf_common_section_index
  653. #endif
  654.  
  655. #ifndef elf_backend_common_section
  656. #define elf_backend_common_section _bfd_elf_common_section
  657. #endif
  658.  
  659. #ifndef elf_backend_merge_symbol
  660. #define elf_backend_merge_symbol NULL
  661. #endif
  662.  
  663. #ifndef elf_backend_hash_symbol
  664. #define elf_backend_hash_symbol _bfd_elf_hash_symbol
  665. #endif
  666.  
  667. #ifndef elf_backend_is_function_type
  668. #define elf_backend_is_function_type _bfd_elf_is_function_type
  669. #endif
  670.  
  671. #ifndef elf_backend_maybe_function_sym
  672. #define elf_backend_maybe_function_sym _bfd_elf_maybe_function_sym
  673. #endif
  674.  
  675. #ifndef elf_backend_get_reloc_section
  676. #define elf_backend_get_reloc_section _bfd_elf_get_reloc_section
  677. #endif
  678.  
  679. #ifndef elf_backend_compact_eh_encoding
  680. #define elf_backend_compact_eh_encoding NULL
  681. #endif
  682.  
  683. #ifndef elf_backend_cant_unwind_opcode
  684. #define elf_backend_cant_unwind_opcode 0
  685. #endif
  686.  
  687. #ifndef elf_match_priority
  688. #define elf_match_priority \
  689.   (ELF_ARCH == bfd_arch_unknown ? 2 : ELF_OSABI == ELFOSABI_NONE ? 1 : 0)
  690. #endif
  691.  
  692. extern const struct elf_size_info _bfd_elf32_size_info;
  693.  
  694. static struct elf_backend_data elf32_bed =
  695. {
  696.   ELF_ARCH,                     /* arch */
  697.   ELF_TARGET_ID,                /* target_id */
  698.   ELF_MACHINE_CODE,             /* elf_machine_code */
  699.   ELF_OSABI,                    /* elf_osabi  */
  700.   ELF_MAXPAGESIZE,              /* maxpagesize */
  701.   ELF_MINPAGESIZE,              /* minpagesize */
  702.   ELF_COMMONPAGESIZE,           /* commonpagesize */
  703.   ELF_DYNAMIC_SEC_FLAGS,        /* dynamic_sec_flags */
  704.   elf_backend_arch_data,
  705.   elf_info_to_howto,
  706.   elf_info_to_howto_rel,
  707.   elf_backend_sym_is_global,
  708.   elf_backend_object_p,
  709.   elf_backend_symbol_processing,
  710.   elf_backend_symbol_table_processing,
  711.   elf_backend_get_symbol_type,
  712.   elf_backend_archive_symbol_lookup,
  713.   elf_backend_name_local_section_symbols,
  714.   elf_backend_section_processing,
  715.   elf_backend_section_from_shdr,
  716.   elf_backend_section_flags,
  717.   elf_backend_get_sec_type_attr,
  718.   elf_backend_section_from_phdr,
  719.   elf_backend_fake_sections,
  720.   elf_backend_section_from_bfd_section,
  721.   elf_backend_add_symbol_hook,
  722.   elf_backend_link_output_symbol_hook,
  723.   elf_backend_create_dynamic_sections,
  724.   elf_backend_omit_section_dynsym,
  725.   elf_backend_relocs_compatible,
  726.   elf_backend_check_relocs,
  727.   elf_backend_check_directives,
  728.   elf_backend_notice_as_needed,
  729.   elf_backend_adjust_dynamic_symbol,
  730.   elf_backend_always_size_sections,
  731.   elf_backend_size_dynamic_sections,
  732.   elf_backend_init_index_section,
  733.   elf_backend_relocate_section,
  734.   elf_backend_finish_dynamic_symbol,
  735.   elf_backend_finish_dynamic_sections,
  736.   elf_backend_begin_write_processing,
  737.   elf_backend_final_write_processing,
  738.   elf_backend_additional_program_headers,
  739.   elf_backend_modify_segment_map,
  740.   elf_backend_modify_program_headers,
  741.   elf_backend_gc_keep,
  742.   elf_backend_gc_mark_dynamic_ref,
  743.   elf_backend_gc_mark_hook,
  744.   elf_backend_gc_mark_extra_sections,
  745.   elf_backend_gc_sweep_hook,
  746.   elf_backend_post_process_headers,
  747.   elf_backend_print_symbol_all,
  748.   elf_backend_output_arch_local_syms,
  749.   elf_backend_output_arch_syms,
  750.   elf_backend_copy_indirect_symbol,
  751.   elf_backend_hide_symbol,
  752.   elf_backend_fixup_symbol,
  753.   elf_backend_merge_symbol_attribute,
  754.   elf_backend_get_target_dtag,
  755.   elf_backend_ignore_undef_symbol,
  756.   elf_backend_emit_relocs,
  757.   elf_backend_count_relocs,
  758.   elf_backend_sort_relocs_p,
  759.   elf_backend_grok_prstatus,
  760.   elf_backend_grok_psinfo,
  761.   elf_backend_write_core_note,
  762.   elf_backend_lookup_section_flags_hook,
  763.   elf_backend_reloc_type_class,
  764.   elf_backend_discard_info,
  765.   elf_backend_ignore_discarded_relocs,
  766.   elf_backend_action_discarded,
  767.   elf_backend_eh_frame_address_size,
  768.   elf_backend_can_make_relative_eh_frame,
  769.   elf_backend_can_make_lsda_relative_eh_frame,
  770.   elf_backend_encode_eh_address,
  771.   elf_backend_write_section,
  772.   elf_backend_mips_irix_compat,
  773.   elf_backend_mips_rtype_to_howto,
  774.   elf_backend_ecoff_debug_swap,
  775.   elf_backend_bfd_from_remote_memory,
  776.   elf_backend_plt_sym_val,
  777.   elf_backend_common_definition,
  778.   elf_backend_common_section_index,
  779.   elf_backend_common_section,
  780.   elf_backend_merge_symbol,
  781.   elf_backend_hash_symbol,
  782.   elf_backend_is_function_type,
  783.   elf_backend_maybe_function_sym,
  784.   elf_backend_get_reloc_section,
  785.   elf_backend_link_order_error_handler,
  786.   elf_backend_relplt_name,
  787.   ELF_MACHINE_ALT1,
  788.   ELF_MACHINE_ALT2,
  789.   &elf_backend_size_info,
  790.   elf_backend_special_sections,
  791.   elf_backend_got_header_size,
  792.   elf_backend_got_elt_size,
  793.   elf_backend_obj_attrs_vendor,
  794.   elf_backend_obj_attrs_section,
  795.   elf_backend_obj_attrs_arg_type,
  796.   elf_backend_obj_attrs_section_type,
  797.   elf_backend_obj_attrs_order,
  798.   elf_backend_obj_attrs_handle_unknown,
  799.   elf_backend_compact_eh_encoding,
  800.   elf_backend_cant_unwind_opcode,
  801.   elf_backend_static_tls_alignment,
  802.   elf_backend_stack_align,
  803.   elf_backend_collect,
  804.   elf_backend_type_change_ok,
  805.   elf_backend_may_use_rel_p,
  806.   elf_backend_may_use_rela_p,
  807.   elf_backend_default_use_rela_p,
  808.   elf_backend_rela_plts_and_copies_p,
  809.   elf_backend_rela_normal,
  810.   elf_backend_sign_extend_vma,
  811.   elf_backend_want_got_plt,
  812.   elf_backend_plt_readonly,
  813.   elf_backend_want_plt_sym,
  814.   elf_backend_plt_not_loaded,
  815.   elf_backend_plt_alignment,
  816.   elf_backend_can_gc_sections,
  817.   elf_backend_can_refcount,
  818.   elf_backend_want_got_sym,
  819.   elf_backend_want_dynbss,
  820.   elf_backend_want_p_paddr_set_to_zero,
  821.   elf_backend_default_execstack,
  822.   elf_backend_caches_rawsize,
  823.   elf_backend_extern_protected_data
  824. };
  825.  
  826. /* Forward declaration for use when initialising alternative_target field.  */
  827. #ifdef TARGET_LITTLE_SYM
  828. extern const bfd_target TARGET_LITTLE_SYM;
  829. #endif
  830.  
  831. #ifdef TARGET_BIG_SYM
  832. const bfd_target TARGET_BIG_SYM =
  833. {
  834.   /* name: identify kind of target */
  835.   TARGET_BIG_NAME,
  836.  
  837.   /* flavour: general indication about file */
  838.   bfd_target_elf_flavour,
  839.  
  840.   /* byteorder: data is big endian */
  841.   BFD_ENDIAN_BIG,
  842.  
  843.   /* header_byteorder: header is also big endian */
  844.   BFD_ENDIAN_BIG,
  845.  
  846.   /* object_flags: mask of all file flags */
  847.   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
  848.    | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS
  849.    | BFD_COMPRESS_GABI),
  850.  
  851.   /* section_flags: mask of all section flags */
  852.   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
  853.    | SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_EXCLUDE | SEC_SORT_ENTRIES
  854.    | SEC_SMALL_DATA | SEC_MERGE | SEC_STRINGS | SEC_GROUP),
  855.  
  856.    /* leading_symbol_char: is the first char of a user symbol
  857.       predictable, and if so what is it */
  858.   elf_symbol_leading_char,
  859.  
  860.   /* ar_pad_char: pad character for filenames within an archive header
  861.      FIXME:  this really has nothing to do with ELF, this is a characteristic
  862.      of the archiver and/or os and should be independently tunable */
  863.   '/',
  864.  
  865.   /* ar_max_namelen: maximum number of characters in an archive header
  866.      FIXME:  this really has nothing to do with ELF, this is a characteristic
  867.      of the archiver and should be independently tunable.  The System V ABI,
  868.      Chapter 7 (Formats & Protocols), Archive section sets this as 15.  */
  869.   15,
  870.  
  871.   elf_match_priority,
  872.  
  873.   /* Routines to byte-swap various sized integers from the data sections */
  874.   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  875.     bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  876.     bfd_getb16, bfd_getb_signed_16, bfd_putb16,
  877.  
  878.   /* Routines to byte-swap various sized integers from the file headers */
  879.   bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  880.     bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  881.     bfd_getb16, bfd_getb_signed_16, bfd_putb16,
  882.  
  883.   /* bfd_check_format: check the format of a file being read */
  884.   { _bfd_dummy_target,          /* unknown format */
  885.     bfd_elf32_object_p,         /* assembler/linker output (object file) */
  886.     bfd_elf32_archive_p,        /* an archive */
  887.     bfd_elf32_core_file_p       /* a core file */
  888.   },
  889.  
  890.   /* bfd_set_format: set the format of a file being written */
  891.   { bfd_false,
  892.     bfd_elf32_mkobject,
  893.     bfd_elf32_mkarchive,
  894.     bfd_elf32_mkcorefile
  895.   },
  896.  
  897.   /* bfd_write_contents: write cached information into a file being written */
  898.   { bfd_false,
  899.     bfd_elf32_write_object_contents,
  900.     bfd_elf32_write_archive_contents,
  901.     bfd_elf32_write_corefile_contents,
  902.   },
  903.  
  904.   BFD_JUMP_TABLE_GENERIC (bfd_elf32),
  905.   BFD_JUMP_TABLE_COPY (bfd_elf32),
  906.   BFD_JUMP_TABLE_CORE (bfd_elf32),
  907. #ifdef bfd_elf32_archive_functions
  908.   BFD_JUMP_TABLE_ARCHIVE (bfd_elf32_archive),
  909. #else
  910.   BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
  911. #endif
  912.   BFD_JUMP_TABLE_SYMBOLS (bfd_elf32),
  913.   BFD_JUMP_TABLE_RELOCS (bfd_elf32),
  914.   BFD_JUMP_TABLE_WRITE (bfd_elf32),
  915.   BFD_JUMP_TABLE_LINK (bfd_elf32),
  916.   BFD_JUMP_TABLE_DYNAMIC (bfd_elf32),
  917.  
  918.   /* Alternative endian target.  */
  919. #ifdef TARGET_LITTLE_SYM
  920.   & TARGET_LITTLE_SYM,
  921. #else
  922.   NULL,
  923. #endif
  924.  
  925.   /* backend_data: */
  926.   &elf32_bed
  927. };
  928. #endif
  929.  
  930. #ifdef TARGET_LITTLE_SYM
  931. const bfd_target TARGET_LITTLE_SYM =
  932. {
  933.   /* name: identify kind of target */
  934.   TARGET_LITTLE_NAME,
  935.  
  936.   /* flavour: general indication about file */
  937.   bfd_target_elf_flavour,
  938.  
  939.   /* byteorder: data is little endian */
  940.   BFD_ENDIAN_LITTLE,
  941.  
  942.   /* header_byteorder: header is also little endian */
  943.   BFD_ENDIAN_LITTLE,
  944.  
  945.   /* object_flags: mask of all file flags */
  946.   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
  947.    | DYNAMIC | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS
  948.    | BFD_COMPRESS_GABI),
  949.  
  950.   /* section_flags: mask of all section flags */
  951.   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
  952.    | SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_EXCLUDE | SEC_SORT_ENTRIES
  953.    | SEC_SMALL_DATA | SEC_MERGE | SEC_STRINGS | SEC_GROUP),
  954.  
  955.    /* leading_symbol_char: is the first char of a user symbol
  956.       predictable, and if so what is it */
  957.   elf_symbol_leading_char,
  958.  
  959.   /* ar_pad_char: pad character for filenames within an archive header
  960.      FIXME:  this really has nothing to do with ELF, this is a characteristic
  961.      of the archiver and/or os and should be independently tunable */
  962.   '/',
  963.  
  964.   /* ar_max_namelen: maximum number of characters in an archive header
  965.      FIXME:  this really has nothing to do with ELF, this is a characteristic
  966.      of the archiver and should be independently tunable.  The System V ABI,
  967.      Chapter 7 (Formats & Protocols), Archive section sets this as 15.  */
  968.   15,
  969.  
  970.   elf_match_priority,
  971.  
  972.   /* Routines to byte-swap various sized integers from the data sections */
  973.   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
  974.     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
  975.     bfd_getl16, bfd_getl_signed_16, bfd_putl16,
  976.  
  977.   /* Routines to byte-swap various sized integers from the file headers */
  978.   bfd_getl64, bfd_getl_signed_64, bfd_putl64,
  979.     bfd_getl32, bfd_getl_signed_32, bfd_putl32,
  980.     bfd_getl16, bfd_getl_signed_16, bfd_putl16,
  981.  
  982.   /* bfd_check_format: check the format of a file being read */
  983.   { _bfd_dummy_target,          /* unknown format */
  984.     bfd_elf32_object_p,         /* assembler/linker output (object file) */
  985.     bfd_elf32_archive_p,        /* an archive */
  986.     bfd_elf32_core_file_p       /* a core file */
  987.   },
  988.  
  989.   /* bfd_set_format: set the format of a file being written */
  990.   { bfd_false,
  991.     bfd_elf32_mkobject,
  992.     bfd_elf32_mkarchive,
  993.     bfd_elf32_mkcorefile
  994.   },
  995.  
  996.   /* bfd_write_contents: write cached information into a file being written */
  997.   { bfd_false,
  998.     bfd_elf32_write_object_contents,
  999.     bfd_elf32_write_archive_contents,
  1000.     bfd_elf32_write_corefile_contents,
  1001.   },
  1002.  
  1003.   BFD_JUMP_TABLE_GENERIC (bfd_elf32),
  1004.   BFD_JUMP_TABLE_COPY (bfd_elf32),
  1005.   BFD_JUMP_TABLE_CORE (bfd_elf32),
  1006. #ifdef bfd_elf32_archive_functions
  1007.   BFD_JUMP_TABLE_ARCHIVE (bfd_elf32_archive),
  1008. #else
  1009.   BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
  1010. #endif
  1011.   BFD_JUMP_TABLE_SYMBOLS (bfd_elf32),
  1012.   BFD_JUMP_TABLE_RELOCS (bfd_elf32),
  1013.   BFD_JUMP_TABLE_WRITE (bfd_elf32),
  1014.   BFD_JUMP_TABLE_LINK (bfd_elf32),
  1015.   BFD_JUMP_TABLE_DYNAMIC (bfd_elf32),
  1016.  
  1017.   /* Alternative endian target.  */
  1018. #ifdef TARGET_BIG_SYM
  1019.   & TARGET_BIG_SYM,
  1020. #else
  1021.   NULL,
  1022. #endif
  1023.  
  1024.   /* backend_data: */
  1025.   &elf32_bed
  1026. };
  1027. #endif
  1028.