Automatic date update in version.in
[binutils-gdb.git] / bfd / elf-hppa.h
blob747c5b1a18cef72414c0c97268e4a26a77e8eedb
1 /* Common code for PA ELF implementations.
2 Copyright (C) 1999-2023 Free Software Foundation, Inc.
4 This file is part of BFD, the Binary File Descriptor library.
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.
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.
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. */
21 #define ELF_HOWTO_TABLE_SIZE R_PARISC_UNIMPLEMENTED + 1
23 /* This file is included by multiple PA ELF BFD backends with different
24 sizes.
26 Most of the routines are written to be size independent, but sometimes
27 external constraints require 32 or 64 bit specific code. We remap
28 the definitions/functions as necessary here. */
29 #if ARCH_SIZE == 64
30 #define ELF_R_TYPE(X) ELF64_R_TYPE(X)
31 #define ELF_R_SYM(X) ELF64_R_SYM(X)
32 #define elf_hppa_reloc_final_type elf64_hppa_reloc_final_type
33 #define _bfd_elf_hppa_gen_reloc_type _bfd_elf64_hppa_gen_reloc_type
34 #define elf_hppa_relocate_section elf64_hppa_relocate_section
35 #define elf_hppa_final_link elf64_hppa_final_link
36 #endif
37 #if ARCH_SIZE == 32
38 #define ELF_R_TYPE(X) ELF32_R_TYPE(X)
39 #define ELF_R_SYM(X) ELF32_R_SYM(X)
40 #define elf_hppa_reloc_final_type elf32_hppa_reloc_final_type
41 #define _bfd_elf_hppa_gen_reloc_type _bfd_elf32_hppa_gen_reloc_type
42 #define elf_hppa_relocate_section elf32_hppa_relocate_section
43 #define elf_hppa_final_link elf32_hppa_final_link
44 #endif
46 /* ELF/PA relocation howto entries. */
48 static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
50 #define HOW(type, size, bitsize, pc_rel, complain, mask) \
51 HOWTO (type, 0, size, bitsize, pc_rel, 0, complain_overflow_ ## complain, \
52 bfd_elf_generic_reloc, #type, false, 0, mask, false)
54 /* The values in DIR32 are to placate the check in
55 _bfd_stab_section_find_nearest_line. */
56 HOW (R_PARISC_NONE, 0, 0, false, dont, 0),
57 HOW (R_PARISC_DIR32, 4, 32, false, bitfield, 0xffffffff),
58 HOW (R_PARISC_DIR21L, 4, 21, false, bitfield, 0),
59 HOW (R_PARISC_DIR17R, 4, 17, false, bitfield, 0),
60 HOW (R_PARISC_DIR17F, 4, 17, false, bitfield, 0),
61 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
62 HOW (R_PARISC_DIR14R, 4, 14, false, bitfield, 0),
63 HOW (R_PARISC_DIR14F, 4, 14, false, bitfield, 0),
64 /* 8 */
65 HOW (R_PARISC_PCREL12F, 4, 12, true, bitfield, 0),
66 HOW (R_PARISC_PCREL32, 4, 32, true, bitfield, 0),
67 HOW (R_PARISC_PCREL21L, 4, 21, true, bitfield, 0),
68 HOW (R_PARISC_PCREL17R, 4, 17, true, bitfield, 0),
69 HOW (R_PARISC_PCREL17F, 4, 17, true, bitfield, 0),
70 HOW (R_PARISC_PCREL17C, 4, 17, true, bitfield, 0),
71 HOW (R_PARISC_PCREL14R, 4, 14, true, bitfield, 0),
72 HOW (R_PARISC_PCREL14F, 4, 14, true, bitfield, 0),
73 /* 16 */
74 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
75 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
76 HOW (R_PARISC_DPREL21L, 4, 21, false, bitfield, 0),
77 HOW (R_PARISC_DPREL14WR, 4, 14, false, bitfield, 0),
78 HOW (R_PARISC_DPREL14DR, 4, 14, false, bitfield, 0),
79 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
80 HOW (R_PARISC_DPREL14R, 4, 14, false, bitfield, 0),
81 HOW (R_PARISC_DPREL14F, 4, 14, false, bitfield, 0),
82 /* 24 */
83 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
84 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
85 HOW (R_PARISC_DLTREL21L, 4, 21, false, bitfield, 0),
86 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
87 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
88 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
89 HOW (R_PARISC_DLTREL14R, 4, 14, false, bitfield, 0),
90 HOW (R_PARISC_DLTREL14F, 4, 14, false, bitfield, 0),
91 /* 32 */
92 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
93 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
94 HOW (R_PARISC_DLTIND21L, 4, 21, false, bitfield, 0),
95 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
96 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
97 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
98 HOW (R_PARISC_DLTIND14R, 4, 14, false, bitfield, 0),
99 HOW (R_PARISC_DLTIND14F, 4, 14, false, bitfield, 0),
100 /* 40 */
101 HOW (R_PARISC_SETBASE, 0, 0, false, bitfield, 0),
102 HOW (R_PARISC_SECREL32, 4, 32, false, bitfield, 0xffffffff),
103 HOW (R_PARISC_BASEREL21L, 4, 21, false, bitfield, 0),
104 HOW (R_PARISC_BASEREL17R, 4, 17, false, bitfield, 0),
105 HOW (R_PARISC_BASEREL17F, 4, 17, false, bitfield, 0),
106 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
107 HOW (R_PARISC_BASEREL14R, 4, 14, false, bitfield, 0),
108 HOW (R_PARISC_BASEREL14F, 4, 14, false, bitfield, 0),
109 /* 48 */
110 HOW (R_PARISC_SEGBASE, 0, 0, false, bitfield, 0),
111 HOW (R_PARISC_SEGREL32, 4, 32, false, bitfield, 0),
112 HOW (R_PARISC_PLTOFF21L, 4, 21, false, bitfield, 0),
113 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
114 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
115 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
116 HOW (R_PARISC_PLTOFF14R, 4, 14, false, bitfield, 0),
117 HOW (R_PARISC_PLTOFF14F, 4, 14, false, bitfield, 0),
118 /* 56 */
119 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
120 HOW (R_PARISC_LTOFF_FPTR32, 4, 32, false, bitfield, 0),
121 HOW (R_PARISC_LTOFF_FPTR21L, 4, 21, false, bitfield, 0),
122 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
123 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
124 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
125 HOW (R_PARISC_LTOFF_FPTR14R, 4, 14, false, bitfield, 0),
126 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
127 /* 64 */
128 HOW (R_PARISC_FPTR64, 8, 64, false, bitfield, 0),
129 HOW (R_PARISC_PLABEL32, 4, 32, false, bitfield, 0),
130 HOW (R_PARISC_PLABEL21L, 4, 21, false, bitfield, 0),
131 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
132 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
133 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
134 HOW (R_PARISC_PLABEL14R, 4, 14, false, bitfield, 0),
135 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
136 /* 72 */
137 HOW (R_PARISC_PCREL64, 8, 64, false, bitfield, 0),
138 HOW (R_PARISC_PCREL22C, 4, 22, false, bitfield, 0),
139 HOW (R_PARISC_PCREL22F, 4, 22, false, bitfield, 0),
140 HOW (R_PARISC_PCREL14WR, 4, 14, false, bitfield, 0),
141 HOW (R_PARISC_PCREL14DR, 4, 14, false, bitfield, 0),
142 HOW (R_PARISC_PCREL16F, 4, 16, false, bitfield, 0),
143 HOW (R_PARISC_PCREL16WF, 4, 16, false, bitfield, 0),
144 HOW (R_PARISC_PCREL16DF, 4, 16, false, bitfield, 0),
145 /* 80 */
146 HOW (R_PARISC_DIR64, 8, 64, false, bitfield, 0),
147 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
148 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
149 HOW (R_PARISC_DIR14WR, 4, 14, false, bitfield, 0),
150 HOW (R_PARISC_DIR14DR, 4, 14, false, bitfield, 0),
151 HOW (R_PARISC_DIR16F, 4, 16, false, bitfield, 0),
152 HOW (R_PARISC_DIR16WF, 4, 16, false, bitfield, 0),
153 HOW (R_PARISC_DIR16DF, 4, 16, false, bitfield, 0),
154 /* 88 */
155 HOW (R_PARISC_GPREL64, 8, 64, false, bitfield, 0),
156 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
157 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
158 HOW (R_PARISC_DLTREL14WR, 4, 14, false, bitfield, 0),
159 HOW (R_PARISC_DLTREL14DR, 4, 14, false, bitfield, 0),
160 HOW (R_PARISC_GPREL16F, 4, 16, false, bitfield, 0),
161 HOW (R_PARISC_GPREL16WF, 4, 16, false, bitfield, 0),
162 HOW (R_PARISC_GPREL16DF, 4, 16, false, bitfield, 0),
163 /* 96 */
164 HOW (R_PARISC_LTOFF64, 8, 64, false, bitfield, 0),
165 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
166 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
167 HOW (R_PARISC_DLTIND14WR, 4, 14, false, bitfield, 0),
168 HOW (R_PARISC_DLTIND14DR, 4, 14, false, bitfield, 0),
169 HOW (R_PARISC_LTOFF16F, 4, 16, false, bitfield, 0),
170 HOW (R_PARISC_LTOFF16WF, 4, 16, false, bitfield, 0),
171 HOW (R_PARISC_LTOFF16DF, 4, 16, false, bitfield, 0),
172 /* 104 */
173 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
174 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
175 HOW (R_PARISC_BASEREL14WR, 4, 14, false, bitfield, 0),
176 HOW (R_PARISC_BASEREL14DR, 4, 14, false, bitfield, 0),
177 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
178 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
179 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
180 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
181 /* 112 */
182 HOW (R_PARISC_SEGREL64, 8, 64, false, bitfield, 0),
183 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
184 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
185 HOW (R_PARISC_PLTOFF14WR, 4, 14, false, bitfield, 0),
186 HOW (R_PARISC_PLTOFF14DR, 4, 14, false, bitfield, 0),
187 HOW (R_PARISC_PLTOFF16F, 4, 16, false, bitfield, 0),
188 HOW (R_PARISC_PLTOFF16WF, 4, 16, false, bitfield, 0),
189 HOW (R_PARISC_PLTOFF16DF, 4, 16, false, bitfield, 0),
190 /* 120 */
191 HOW (R_PARISC_LTOFF_FPTR64, 8, 64, false, bitfield, 0),
192 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
193 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
194 HOW (R_PARISC_LTOFF_FPTR14WR, 4, 14, false, bitfield, 0),
195 HOW (R_PARISC_LTOFF_FPTR14DR, 4, 14, false, bitfield, 0),
196 HOW (R_PARISC_LTOFF_FPTR16F, 4, 16, false, bitfield, 0),
197 HOW (R_PARISC_LTOFF_FPTR16WF, 4, 16, false, bitfield, 0),
198 HOW (R_PARISC_LTOFF_FPTR16DF, 4, 16, false, bitfield, 0),
199 /* 128 */
200 HOW (R_PARISC_COPY, 0, 0, false, bitfield, 0),
201 HOW (R_PARISC_IPLT, 0, 0, false, bitfield, 0),
202 HOW (R_PARISC_EPLT, 0, 0, false, bitfield, 0),
203 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
204 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
205 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
206 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
207 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
208 /* 136 */
209 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
210 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
211 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
212 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
213 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
214 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
215 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
216 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
217 /* 144 */
218 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
219 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
220 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
221 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
222 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
223 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
224 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
225 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
226 /* 152 */
227 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
228 HOW (R_PARISC_TPREL32, 4, 32, false, dont, 0),
229 HOW (R_PARISC_TPREL21L, 4, 21, false, bitfield, 0),
230 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
231 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
232 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
233 HOW (R_PARISC_TPREL14R, 4, 14, false, bitfield, 0),
234 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
235 /* 160 */
236 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
237 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
238 HOW (R_PARISC_LTOFF_TP21L, 4, 21, false, bitfield, 0),
239 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
240 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
241 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
242 HOW (R_PARISC_LTOFF_TP14R, 4, 14, false, bitfield, 0),
243 HOW (R_PARISC_LTOFF_TP14F, 4, 14, false, bitfield, 0),
244 /* 168 */
245 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
246 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
247 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
248 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
249 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
250 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
251 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
252 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
253 /* 176 */
254 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
255 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
256 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
257 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
258 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
259 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
260 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
261 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
262 /* 184 */
263 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
264 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
265 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
266 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
267 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
268 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
269 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
270 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
271 /* 192 */
272 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
273 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
274 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
275 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
276 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
277 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
278 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
279 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
280 /* 200 */
281 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
282 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
283 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
284 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
285 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
286 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
287 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
288 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
289 /* 208 */
290 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
291 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
292 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
293 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
294 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, dont, 0),
295 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
296 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
297 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
298 /* 216 */
299 HOW (R_PARISC_TPREL64, 8, 64, false, bitfield, 0),
300 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
301 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
302 HOW (R_PARISC_TPREL14WR, 4, 14, false, dont, 0),
303 HOW (R_PARISC_TPREL14DR, 4, 14, false, bitfield, 0),
304 HOW (R_PARISC_TPREL16F, 4, 16, false, bitfield, 0),
305 HOW (R_PARISC_TPREL16WF, 4, 16, false, dont, 0),
306 HOW (R_PARISC_TPREL16DF, 4, 16, false, bitfield, 0),
307 /* 224 */
308 HOW (R_PARISC_LTOFF_TP64, 8, 64, false, bitfield, 0),
309 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
310 HOW (R_PARISC_UNIMPLEMENTED, 0, 0, false, bitfield, 0),
311 HOW (R_PARISC_LTOFF_TP14WR, 4, 14, false, bitfield, 0),
312 HOW (R_PARISC_LTOFF_TP14DR, 4, 14, false, bitfield, 0),
313 HOW (R_PARISC_LTOFF_TP16F, 4, 16, false, dont, 0),
314 HOW (R_PARISC_LTOFF_TP16WF, 4, 16, false, bitfield, 0),
315 HOW (R_PARISC_LTOFF_TP16DF, 4, 16, false, bitfield, 0),
316 /* 232 */
317 HOW (R_PARISC_GNU_VTENTRY, 0, 0, false, dont, 0),
318 HOW (R_PARISC_GNU_VTINHERIT, 0, 0, false, dont, 0),
319 HOW (R_PARISC_TLS_GD21L, 4, 21, false, bitfield, 0),
320 HOW (R_PARISC_TLS_GD14R, 4, 14, false, bitfield, 0),
321 HOW (R_PARISC_TLS_GDCALL, 0, 0, false, dont, 0),
322 HOW (R_PARISC_TLS_LDM21L, 4, 21, false, bitfield, 0),
323 HOW (R_PARISC_TLS_LDM14R, 4, 14, false, bitfield, 0),
324 HOW (R_PARISC_TLS_LDMCALL, 0, 0, false, dont, 0),
325 /* 240 */
326 HOW (R_PARISC_TLS_LDO21L, 4, 21, false, bitfield, 0),
327 HOW (R_PARISC_TLS_LDO14R, 4, 14, false, bitfield, 0),
328 HOW (R_PARISC_TLS_DTPMOD32, 4, 32, false, bitfield, 0),
329 HOW (R_PARISC_TLS_DTPMOD64, 8, 64, false, bitfield, 0),
330 HOW (R_PARISC_TLS_DTPOFF32, 4, 32, false, bitfield, 0),
331 HOW (R_PARISC_TLS_DTPOFF64, 8, 64, false, bitfield, 0)
332 #undef HOW
335 #define OFFSET_14R_FROM_21L 4
336 #define OFFSET_14F_FROM_21L 5
338 /* Return the final relocation type for the given base type, instruction
339 format, and field selector. */
341 elf_hppa_reloc_type
342 elf_hppa_reloc_final_type (bfd *abfd,
343 elf_hppa_reloc_type base_type,
344 int format,
345 unsigned int field)
347 elf_hppa_reloc_type final_type = base_type;
349 /* Just a tangle of nested switch statements to deal with the braindamage
350 that a different field selector means a completely different relocation
351 for PA ELF. */
352 switch (base_type)
354 /* We have been using generic relocation types. However, that may not
355 really make sense. Anyway, we need to support both R_PARISC_DIR64
356 and R_PARISC_DIR32 here. */
357 case R_PARISC_DIR32:
358 case R_PARISC_DIR64:
359 case R_HPPA_ABS_CALL:
360 switch (format)
362 case 14:
363 switch (field)
365 case e_fsel:
366 final_type = R_PARISC_DIR14F;
367 break;
368 case e_rsel:
369 case e_rrsel:
370 case e_rdsel:
371 final_type = R_PARISC_DIR14R;
372 break;
373 case e_rtsel:
374 final_type = R_PARISC_DLTIND14R;
375 break;
376 case e_rtpsel:
377 final_type = R_PARISC_LTOFF_FPTR14DR;
378 break;
379 case e_tsel:
380 final_type = R_PARISC_DLTIND14F;
381 break;
382 case e_rpsel:
383 final_type = R_PARISC_PLABEL14R;
384 break;
385 default:
386 return R_PARISC_NONE;
388 break;
390 case 17:
391 switch (field)
393 case e_fsel:
394 final_type = R_PARISC_DIR17F;
395 break;
396 case e_rsel:
397 case e_rrsel:
398 case e_rdsel:
399 final_type = R_PARISC_DIR17R;
400 break;
401 default:
402 return R_PARISC_NONE;
404 break;
406 case 21:
407 switch (field)
409 case e_lsel:
410 case e_lrsel:
411 case e_ldsel:
412 case e_nlsel:
413 case e_nlrsel:
414 final_type = R_PARISC_DIR21L;
415 break;
416 case e_ltsel:
417 final_type = R_PARISC_DLTIND21L;
418 break;
419 case e_ltpsel:
420 final_type = R_PARISC_LTOFF_FPTR21L;
421 break;
422 case e_lpsel:
423 final_type = R_PARISC_PLABEL21L;
424 break;
425 default:
426 return R_PARISC_NONE;
428 break;
430 case 32:
431 switch (field)
433 case e_fsel:
434 final_type = R_PARISC_DIR32;
435 /* When in 64bit mode, a 32bit relocation is supposed to
436 be a section relative relocation. Dwarf2 (for example)
437 uses 32bit section relative relocations. */
438 if (bfd_arch_bits_per_address (abfd) != 32)
439 final_type = R_PARISC_SECREL32;
440 break;
441 case e_psel:
442 final_type = R_PARISC_PLABEL32;
443 break;
444 default:
445 return R_PARISC_NONE;
447 break;
449 case 64:
450 switch (field)
452 case e_fsel:
453 final_type = R_PARISC_DIR64;
454 break;
455 case e_psel:
456 final_type = R_PARISC_FPTR64;
457 break;
458 default:
459 return R_PARISC_NONE;
461 break;
463 default:
464 return R_PARISC_NONE;
466 break;
468 case R_HPPA_GOTOFF:
469 switch (format)
471 case 14:
472 switch (field)
474 case e_rsel:
475 case e_rrsel:
476 case e_rdsel:
477 /* R_PARISC_DLTREL14R for elf64, R_PARISC_DPREL14R for elf32. */
478 final_type = base_type + OFFSET_14R_FROM_21L;
479 break;
480 case e_fsel:
481 /* R_PARISC_DLTREL14F for elf64, R_PARISC_DPREL14F for elf32. */
482 final_type = base_type + OFFSET_14F_FROM_21L;
483 break;
484 default:
485 return R_PARISC_NONE;
487 break;
489 case 21:
490 switch (field)
492 case e_lsel:
493 case e_lrsel:
494 case e_ldsel:
495 case e_nlsel:
496 case e_nlrsel:
497 /* R_PARISC_DLTREL21L for elf64, R_PARISC_DPREL21L for elf32. */
498 final_type = base_type;
499 break;
500 default:
501 return R_PARISC_NONE;
503 break;
505 case 64:
506 switch (field)
508 case e_fsel:
509 final_type = R_PARISC_GPREL64;
510 break;
511 default:
512 return R_PARISC_NONE;
514 break;
516 default:
517 return R_PARISC_NONE;
519 break;
521 case R_HPPA_PCREL_CALL:
522 switch (format)
524 case 12:
525 switch (field)
527 case e_fsel:
528 final_type = R_PARISC_PCREL12F;
529 break;
530 default:
531 return R_PARISC_NONE;
533 break;
535 case 14:
536 /* Contrary to appearances, these are not calls of any sort.
537 Rather, they are loads/stores with a pcrel reloc. */
538 switch (field)
540 case e_rsel:
541 case e_rrsel:
542 case e_rdsel:
543 final_type = R_PARISC_PCREL14R;
544 break;
545 case e_fsel:
546 if (bfd_get_mach (abfd) < 25)
547 final_type = R_PARISC_PCREL14F;
548 else
549 final_type = R_PARISC_PCREL16F;
550 break;
551 default:
552 return R_PARISC_NONE;
554 break;
556 case 17:
557 switch (field)
559 case e_rsel:
560 case e_rrsel:
561 case e_rdsel:
562 final_type = R_PARISC_PCREL17R;
563 break;
564 case e_fsel:
565 final_type = R_PARISC_PCREL17F;
566 break;
567 default:
568 return R_PARISC_NONE;
570 break;
572 case 21:
573 switch (field)
575 case e_lsel:
576 case e_lrsel:
577 case e_ldsel:
578 case e_nlsel:
579 case e_nlrsel:
580 final_type = R_PARISC_PCREL21L;
581 break;
582 default:
583 return R_PARISC_NONE;
585 break;
587 case 22:
588 switch (field)
590 case e_fsel:
591 final_type = R_PARISC_PCREL22F;
592 break;
593 default:
594 return R_PARISC_NONE;
596 break;
598 case 32:
599 switch (field)
601 case e_fsel:
602 final_type = R_PARISC_PCREL32;
603 break;
604 default:
605 return R_PARISC_NONE;
607 break;
609 case 64:
610 switch (field)
612 case e_fsel:
613 final_type = R_PARISC_PCREL64;
614 break;
615 default:
616 return R_PARISC_NONE;
618 break;
620 default:
621 return R_PARISC_NONE;
623 break;
625 case R_PARISC_TLS_GD21L:
626 switch (field)
628 case e_ltsel:
629 case e_lrsel:
630 final_type = R_PARISC_TLS_GD21L;
631 break;
632 case e_rtsel:
633 case e_rrsel:
634 final_type = R_PARISC_TLS_GD14R;
635 break;
636 default:
637 return R_PARISC_NONE;
639 break;
641 case R_PARISC_TLS_LDM21L:
642 switch (field)
644 case e_ltsel:
645 case e_lrsel:
646 final_type = R_PARISC_TLS_LDM21L;
647 break;
648 case e_rtsel:
649 case e_rrsel:
650 final_type = R_PARISC_TLS_LDM14R;
651 break;
652 default:
653 return R_PARISC_NONE;
655 break;
657 case R_PARISC_TLS_LDO21L:
658 switch (field)
660 case e_lrsel:
661 final_type = R_PARISC_TLS_LDO21L;
662 break;
663 case e_rrsel:
664 final_type = R_PARISC_TLS_LDO14R;
665 break;
666 default:
667 return R_PARISC_NONE;
669 break;
671 case R_PARISC_TLS_IE21L:
672 switch (field)
674 case e_ltsel:
675 case e_lrsel:
676 final_type = R_PARISC_TLS_IE21L;
677 break;
678 case e_rtsel:
679 case e_rrsel:
680 final_type = R_PARISC_TLS_IE14R;
681 break;
682 default:
683 return R_PARISC_NONE;
685 break;
687 case R_PARISC_TLS_LE21L:
688 switch (field)
690 case e_lrsel:
691 final_type = R_PARISC_TLS_LE21L;
692 break;
693 case e_rrsel:
694 final_type = R_PARISC_TLS_LE14R;
695 break;
696 default:
697 return R_PARISC_NONE;
699 break;
701 case R_PARISC_SEGREL32:
702 switch (format)
704 case 32:
705 switch (field)
707 case e_fsel:
708 final_type = R_PARISC_SEGREL32;
709 break;
710 default:
711 return R_PARISC_NONE;
713 break;
715 case 64:
716 switch (field)
718 case e_fsel:
719 final_type = R_PARISC_SEGREL64;
720 break;
721 default:
722 return R_PARISC_NONE;
724 break;
726 default:
727 return R_PARISC_NONE;
729 break;
731 case R_PARISC_GNU_VTENTRY:
732 case R_PARISC_GNU_VTINHERIT:
733 case R_PARISC_SEGBASE:
734 /* The defaults are fine for these cases. */
735 break;
737 default:
738 return R_PARISC_NONE;
741 return final_type;
744 /* Return one (or more) BFD relocations which implement the base
745 relocation with modifications based on format and field. */
747 elf_hppa_reloc_type **
748 _bfd_elf_hppa_gen_reloc_type (bfd *abfd,
749 elf_hppa_reloc_type base_type,
750 int format,
751 unsigned int field,
752 int ignore ATTRIBUTE_UNUSED,
753 asymbol *sym ATTRIBUTE_UNUSED)
755 elf_hppa_reloc_type *finaltype;
756 elf_hppa_reloc_type **final_types;
757 size_t amt = sizeof (elf_hppa_reloc_type *) * 2;
759 /* Allocate slots for the BFD relocation. */
760 final_types = bfd_alloc (abfd, amt);
761 if (final_types == NULL)
762 return NULL;
764 /* Allocate space for the relocation itself. */
765 amt = sizeof (elf_hppa_reloc_type);
766 finaltype = bfd_alloc (abfd, amt);
767 if (finaltype == NULL)
768 return NULL;
770 /* Some reasonable defaults. */
771 final_types[0] = finaltype;
772 final_types[1] = NULL;
774 *finaltype = elf_hppa_reloc_final_type (abfd, base_type, format, field);
776 return final_types;
779 /* Translate from an elf into field into a howto relocation pointer. */
781 static bool
782 elf_hppa_info_to_howto (bfd *abfd,
783 arelent *bfd_reloc,
784 Elf_Internal_Rela *elf_reloc)
786 unsigned int r_type = ELF32_R_TYPE (elf_reloc->r_info);
787 unsigned int type = r_type;
788 reloc_howto_type *howto = NULL;
790 if (r_type < (unsigned int) R_PARISC_UNIMPLEMENTED)
792 howto = &elf_hppa_howto_table[r_type];
793 type = howto->type;
795 if (type >= (unsigned int) R_PARISC_UNIMPLEMENTED)
797 /* xgettext:c-format */
798 _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
799 abfd, r_type);
800 bfd_set_error (bfd_error_bad_value);
801 return false;
803 bfd_reloc->howto = howto;
804 return true;
807 /* Translate from an elf into field into a howto relocation pointer. */
809 static bool
810 elf_hppa_info_to_howto_rel (bfd *abfd,
811 arelent *bfd_reloc,
812 Elf_Internal_Rela *elf_reloc)
814 unsigned int r_type = ELF_R_TYPE (elf_reloc->r_info);
815 unsigned int type = r_type;
816 reloc_howto_type *howto = NULL;
818 if (r_type < (unsigned int) R_PARISC_UNIMPLEMENTED)
820 howto = &elf_hppa_howto_table[r_type];
821 type = howto->type;
823 if (type >= (unsigned int) R_PARISC_UNIMPLEMENTED)
825 /* xgettext:c-format */
826 _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
827 abfd, r_type);
828 bfd_set_error (bfd_error_bad_value);
829 return false;
831 bfd_reloc->howto = howto;
832 return true;
835 /* Return the address of the howto table entry to perform the CODE
836 relocation for an ARCH machine. */
838 static reloc_howto_type *
839 elf_hppa_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
840 bfd_reloc_code_real_type code)
842 if ((int) code < (int) R_PARISC_UNIMPLEMENTED)
844 BFD_ASSERT ((int) elf_hppa_howto_table[(int) code].type == (int) code);
845 return &elf_hppa_howto_table[(int) code];
847 return NULL;
850 static reloc_howto_type *
851 elf_hppa_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
852 const char *r_name)
854 unsigned int i;
856 for (i = 0;
857 i < sizeof (elf_hppa_howto_table) / sizeof (elf_hppa_howto_table[0]);
858 i++)
859 if (elf_hppa_howto_table[i].name != NULL
860 && strcasecmp (elf_hppa_howto_table[i].name, r_name) == 0)
861 return &elf_hppa_howto_table[i];
863 return NULL;
866 /* Return TRUE if SYM represents a local label symbol. */
868 static bool
869 elf_hppa_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
871 if (name[0] == 'L' && name[1] == '$')
872 return true;
873 return _bfd_elf_is_local_label_name (abfd, name);
876 /* Set the correct type for an ELF section. We do this by the
877 section name, which is a hack, but ought to work. */
879 static bool
880 elf_hppa_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
882 const char *name;
884 name = bfd_section_name (sec);
886 if (strcmp (name, ".PARISC.unwind") == 0)
888 int indx;
889 asection *asec;
891 #if ARCH_SIZE == 64
892 hdr->sh_type = SHT_PARISC_UNWIND;
893 #else
894 /* Note - it is not clear why this is not SHT_PARISC_UNWIND as well.
895 Presumably it is a historical constraint, so leave it as it is. */
896 hdr->sh_type = SHT_PROGBITS;
897 #endif
898 /* ?!? How are unwinds supposed to work for symbols in arbitrary
899 sections? Or what if we have multiple .text sections in a single
900 .o file? HP really messed up on this one.
902 Ugh. We can not use elf_section_data (sec)->this_idx at this
903 point because it is not initialized yet.
905 So we (gasp) recompute it here. Hopefully nobody ever changes the
906 way sections are numbered in elf.c! */
907 for (asec = abfd->sections, indx = 1; asec; asec = asec->next, indx++)
909 if (asec->name && strcmp (asec->name, ".text") == 0)
911 hdr->sh_info = indx;
912 hdr->sh_flags |= SHF_INFO_LINK;
913 break;
917 /* The unwind table entries are 16 bytes long, so it is not clear
918 why this field is set to 4. (The ELF spec says that the sh_entsize
919 field is a byte quantity, but this is a processor specific section,
920 so it is allowed to change the rules). Leave as it is for now. */
921 hdr->sh_entsize = 4;
923 return true;
926 static bool
927 elf_hppa_final_write_processing (bfd *abfd)
929 int mach = bfd_get_mach (abfd);
931 elf_elfheader (abfd)->e_flags &= ~(EF_PARISC_ARCH | EF_PARISC_TRAPNIL
932 | EF_PARISC_EXT | EF_PARISC_LSB
933 | EF_PARISC_WIDE | EF_PARISC_NO_KABP
934 | EF_PARISC_LAZYSWAP);
936 if (mach == 10)
937 elf_elfheader (abfd)->e_flags |= EFA_PARISC_1_0;
938 else if (mach == 11)
939 elf_elfheader (abfd)->e_flags |= EFA_PARISC_1_1;
940 else if (mach == 20)
941 elf_elfheader (abfd)->e_flags |= EFA_PARISC_2_0;
942 else if (mach == 25)
943 elf_elfheader (abfd)->e_flags |= (EF_PARISC_WIDE
944 | EFA_PARISC_2_0
945 /* The GNU tools have trapped without
946 option since 1993, so need to take
947 a step backwards with the ELF
948 based toolchains. */
949 | EF_PARISC_TRAPNIL);
950 return _bfd_elf_final_write_processing (abfd);
953 /* Comparison function for qsort to sort unwind section during a
954 final link. */
956 static int
957 hppa_unwind_entry_compare (const void *a, const void *b)
959 const bfd_byte *ap, *bp;
960 unsigned long av, bv;
962 ap = a;
963 av = (unsigned long) ap[0] << 24;
964 av |= (unsigned long) ap[1] << 16;
965 av |= (unsigned long) ap[2] << 8;
966 av |= (unsigned long) ap[3];
968 bp = b;
969 bv = (unsigned long) bp[0] << 24;
970 bv |= (unsigned long) bp[1] << 16;
971 bv |= (unsigned long) bp[2] << 8;
972 bv |= (unsigned long) bp[3];
974 return av < bv ? -1 : av > bv ? 1 : 0;
977 static bool
978 elf_hppa_sort_unwind (bfd *abfd)
980 asection *s;
982 /* Magic section names, but this is much safer than having
983 relocate_section remember where SEGREL32 relocs occurred.
984 Consider what happens if someone inept creates a linker script
985 that puts unwind information in .text. */
986 s = bfd_get_section_by_name (abfd, ".PARISC.unwind");
987 if (s != NULL && (s->flags & SEC_HAS_CONTENTS) != 0)
990 bfd_size_type size;
991 bfd_byte *contents;
993 if (!bfd_malloc_and_get_section (abfd, s, &contents))
994 return false;
996 size = s->size;
997 qsort (contents, (size_t) (size / 16), 16, hppa_unwind_entry_compare);
999 if (! bfd_set_section_contents (abfd, s, contents, (file_ptr) 0, size))
1000 return false;
1003 return true;
1006 /* What to do when ld finds relocations against symbols defined in
1007 discarded sections. */
1009 static unsigned int
1010 elf_hppa_action_discarded (asection *sec)
1012 /* Ignore relocations in .data.rel.ro.local. This section can contain
1013 PLABEL32 relocations to functions in discarded COMDAT groups. */
1014 if (strcmp (".data.rel.ro.local", sec->name) == 0)
1015 return 0;
1017 if (strcmp (".PARISC.unwind", sec->name) == 0)
1018 return 0;
1020 return _bfd_elf_default_action_discarded (sec);