1 /* 32-bit ELF support for S+core.
2    Copyright (C) 2009-2021 Free Software Foundation, Inc.
3    Contributed by
4    Brain.lin (brain.lin@sunplusct.com)
5    Mei Ligang (ligang@sunnorth.com.cn)
6    Pei-Lin Tsai (pltsai@sunplus.com)
7 
8    This file is part of BFD, the Binary File Descriptor library.
9 
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14 
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19 
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
23    MA 02110-1301, USA.  */
24 
25 #include "elf/common.h"
26 #include "elf/internal.h"
27 
28 extern void
29 s7_bfd_score_elf_hide_symbol (struct bfd_link_info *,
30 			      struct elf_link_hash_entry *,
31 			      bool);
32 
33 extern bool
34 s7_bfd_score_info_to_howto (bfd *, arelent *, Elf_Internal_Rela *);
35 
36 extern int
37 s7_bfd_score_elf_relocate_section (bfd *,
38 				   struct bfd_link_info *,
39 				   bfd *,
40 				   asection *,
41 				   bfd_byte *,
42 				   Elf_Internal_Rela *,
43 				   Elf_Internal_Sym *,
44 				   asection **);
45 
46 extern bool
47 s7_bfd_score_elf_check_relocs (bfd *,
48 			       struct bfd_link_info *,
49 			       asection *,
50 			       const Elf_Internal_Rela *);
51 
52 extern bool
53 s7_bfd_score_elf_add_symbol_hook (bfd *,
54 				  struct bfd_link_info *,
55 				  Elf_Internal_Sym *,
56 				  const char **,
57 				  flagword *,
58 				  asection **,
59 				  bfd_vma *);
60 
61 extern void
62 s7_bfd_score_elf_symbol_processing (bfd *, asymbol *);
63 
64 extern int
65 s7_bfd_score_elf_link_output_symbol_hook (struct bfd_link_info *,
66 					  const char *,
67 					  Elf_Internal_Sym *,
68 					  asection *,
69 					  struct elf_link_hash_entry *);
70 
71 extern bool
72 s7_bfd_score_elf_section_from_bfd_section (bfd *,
73 					   asection *,
74 					   int *);
75 
76 extern bool
77 s7_bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *,
78 					struct elf_link_hash_entry *);
79 
80 extern bool
81 s7_bfd_score_elf_always_size_sections (bfd *, struct bfd_link_info *);
82 
83 extern bool
84 s7_bfd_score_elf_size_dynamic_sections (bfd *, struct bfd_link_info *);
85 
86 extern bool
87 s7_bfd_score_elf_create_dynamic_sections (bfd *, struct bfd_link_info *);
88 
89 extern bool
90 s7_bfd_score_elf_finish_dynamic_symbol (bfd *,
91 					struct bfd_link_info *,
92 					struct elf_link_hash_entry *,
93 					Elf_Internal_Sym *);
94 
95 extern bool
96 s7_bfd_score_elf_finish_dynamic_sections (bfd *, struct bfd_link_info *);
97 
98 extern bool
99 s7_bfd_score_elf_fake_sections (bfd *,
100 				Elf_Internal_Shdr *,
101 				asection *);
102 
103 extern bool
104 s7_bfd_score_elf_section_processing (bfd *, Elf_Internal_Shdr *);
105 
106 extern bool
107 s7_bfd_score_elf_write_section (bfd *, asection *, bfd_byte *);
108 
109 extern void
110 s7_bfd_score_elf_copy_indirect_symbol (struct bfd_link_info *,
111 				       struct elf_link_hash_entry *,
112 				       struct elf_link_hash_entry *);
113 
114 extern bool
115 s7_bfd_score_elf_discard_info (bfd *, struct elf_reloc_cookie *,
116 			       struct bfd_link_info *);
117 
118 extern bool
119 s7_bfd_score_elf_ignore_discarded_relocs (asection *);
120 
121 extern asection *
122 s7_bfd_score_elf_gc_mark_hook (asection *,
123 			       struct bfd_link_info *,
124 			       Elf_Internal_Rela *,
125 			       struct elf_link_hash_entry *,
126 			       Elf_Internal_Sym *);
127 
128 extern bool
129 s7_bfd_score_elf_grok_prstatus (bfd *, Elf_Internal_Note *);
130 
131 extern bool
132 s7_bfd_score_elf_grok_psinfo (bfd *, Elf_Internal_Note *);
133 
134 extern reloc_howto_type *
135 s7_elf32_score_reloc_type_lookup (bfd *, bfd_reloc_code_real_type);
136 
137 extern struct bfd_link_hash_table *
138 s7_elf32_score_link_hash_table_create (bfd *);
139 
140 extern bool
141 s7_elf32_score_print_private_bfd_data (bfd *, void *);
142 
143 extern bool
144 s7_elf32_score_merge_private_bfd_data (bfd *, struct bfd_link_info *);
145 
146 extern bool
147 s7_elf32_score_new_section_hook (bfd *, asection *);
148 
149 extern bool
150 _bfd_score_elf_common_definition (Elf_Internal_Sym *);
151 
152 #define elf_backend_common_definition   _bfd_score_elf_common_definition
153