Coverage Report

Created: 2025-06-24 06:45

/src/binutils-gdb/bfd/elf-hppa.h
Line
Count
Source (jump to first uncovered line)
1
/* Common code for PA ELF implementations.
2
   Copyright (C) 1999-2025 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
#define ELF_HOWTO_TABLE_SIZE       R_PARISC_UNIMPLEMENTED + 1
22
23
/* This file is included by multiple PA ELF BFD backends with different
24
   sizes.
25
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
0
#define ELF_R_TYPE(X)         ELF64_R_TYPE(X)
31
0
#define ELF_R_SYM(X)          ELF64_R_SYM(X)
32
0
#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
0
#define ELF_R_TYPE(X)         ELF32_R_TYPE(X)
39
#define ELF_R_SYM(X)          ELF32_R_SYM(X)
40
0
#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
45
46
/* ELF/PA relocation howto entries.  */
47
48
static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
49
{
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)
53
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
333
};
334
335
0
#define OFFSET_14R_FROM_21L 4
336
0
#define OFFSET_14F_FROM_21L 5
337
338
/* Return the final relocation type for the given base type, instruction
339
   format, and field selector.  */
340
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)
346
0
{
347
0
  elf_hppa_reloc_type final_type = base_type;
348
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
0
  switch (base_type)
353
0
    {
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
0
    case R_PARISC_DIR32:
358
0
    case R_PARISC_DIR64:
359
0
    case R_HPPA_ABS_CALL:
360
0
      switch (format)
361
0
  {
362
0
  case 14:
363
0
    switch (field)
364
0
      {
365
0
      case e_fsel:
366
0
        final_type = R_PARISC_DIR14F;
367
0
        break;
368
0
      case e_rsel:
369
0
      case e_rrsel:
370
0
      case e_rdsel:
371
0
        final_type = R_PARISC_DIR14R;
372
0
        break;
373
0
      case e_rtsel:
374
0
        final_type = R_PARISC_DLTIND14R;
375
0
        break;
376
0
      case e_rtpsel:
377
0
        final_type = R_PARISC_LTOFF_FPTR14DR;
378
0
        break;
379
0
      case e_tsel:
380
0
        final_type = R_PARISC_DLTIND14F;
381
0
        break;
382
0
      case e_rpsel:
383
0
        final_type = R_PARISC_PLABEL14R;
384
0
        break;
385
0
      default:
386
0
        return R_PARISC_NONE;
387
0
      }
388
0
    break;
389
390
0
  case 17:
391
0
    switch (field)
392
0
      {
393
0
      case e_fsel:
394
0
        final_type = R_PARISC_DIR17F;
395
0
        break;
396
0
      case e_rsel:
397
0
      case e_rrsel:
398
0
      case e_rdsel:
399
0
        final_type = R_PARISC_DIR17R;
400
0
        break;
401
0
      default:
402
0
        return R_PARISC_NONE;
403
0
      }
404
0
    break;
405
406
0
  case 21:
407
0
    switch (field)
408
0
      {
409
0
      case e_lsel:
410
0
      case e_lrsel:
411
0
      case e_ldsel:
412
0
      case e_nlsel:
413
0
      case e_nlrsel:
414
0
        final_type = R_PARISC_DIR21L;
415
0
        break;
416
0
      case e_ltsel:
417
0
        final_type = R_PARISC_DLTIND21L;
418
0
        break;
419
0
      case e_ltpsel:
420
0
        final_type = R_PARISC_LTOFF_FPTR21L;
421
0
        break;
422
0
      case e_lpsel:
423
0
        final_type = R_PARISC_PLABEL21L;
424
0
        break;
425
0
      default:
426
0
        return R_PARISC_NONE;
427
0
      }
428
0
    break;
429
430
0
  case 32:
431
0
    switch (field)
432
0
      {
433
0
      case e_fsel:
434
0
        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
0
        if (bfd_arch_bits_per_address (abfd) != 32)
439
0
    final_type = R_PARISC_SECREL32;
440
0
        break;
441
0
      case e_psel:
442
0
        final_type = R_PARISC_PLABEL32;
443
0
        break;
444
0
      default:
445
0
        return R_PARISC_NONE;
446
0
      }
447
0
    break;
448
449
0
  case 64:
450
0
    switch (field)
451
0
      {
452
0
      case e_fsel:
453
0
        final_type = R_PARISC_DIR64;
454
0
        break;
455
0
      case e_psel:
456
0
        final_type = R_PARISC_FPTR64;
457
0
        break;
458
0
      default:
459
0
        return R_PARISC_NONE;
460
0
      }
461
0
    break;
462
463
0
  default:
464
0
    return R_PARISC_NONE;
465
0
  }
466
0
      break;
467
468
0
    case R_HPPA_GOTOFF:
469
0
      switch (format)
470
0
  {
471
0
  case 14:
472
0
    switch (field)
473
0
      {
474
0
      case e_rsel:
475
0
      case e_rrsel:
476
0
      case e_rdsel:
477
        /* R_PARISC_DLTREL14R for elf64, R_PARISC_DPREL14R for elf32.  */
478
0
        final_type = base_type + OFFSET_14R_FROM_21L;
479
0
        break;
480
0
      case e_fsel:
481
        /* R_PARISC_DLTREL14F for elf64, R_PARISC_DPREL14F for elf32.  */
482
0
        final_type = base_type + OFFSET_14F_FROM_21L;
483
0
        break;
484
0
      default:
485
0
        return R_PARISC_NONE;
486
0
      }
487
0
    break;
488
489
0
  case 21:
490
0
    switch (field)
491
0
      {
492
0
      case e_lsel:
493
0
      case e_lrsel:
494
0
      case e_ldsel:
495
0
      case e_nlsel:
496
0
      case e_nlrsel:
497
        /* R_PARISC_DLTREL21L for elf64, R_PARISC_DPREL21L for elf32.  */
498
0
        final_type = base_type;
499
0
        break;
500
0
      default:
501
0
        return R_PARISC_NONE;
502
0
      }
503
0
    break;
504
505
0
  case 64:
506
0
    switch (field)
507
0
      {
508
0
      case e_fsel:
509
0
        final_type = R_PARISC_GPREL64;
510
0
        break;
511
0
      default:
512
0
        return R_PARISC_NONE;
513
0
      }
514
0
    break;
515
516
0
  default:
517
0
    return R_PARISC_NONE;
518
0
  }
519
0
      break;
520
521
0
    case R_HPPA_PCREL_CALL:
522
0
      switch (format)
523
0
  {
524
0
  case 12:
525
0
    switch (field)
526
0
      {
527
0
      case e_fsel:
528
0
        final_type = R_PARISC_PCREL12F;
529
0
        break;
530
0
      default:
531
0
        return R_PARISC_NONE;
532
0
      }
533
0
    break;
534
535
0
  case 14:
536
    /* Contrary to appearances, these are not calls of any sort.
537
       Rather, they are loads/stores with a pcrel reloc.  */
538
0
    switch (field)
539
0
      {
540
0
      case e_rsel:
541
0
      case e_rrsel:
542
0
      case e_rdsel:
543
0
        final_type = R_PARISC_PCREL14R;
544
0
        break;
545
0
      case e_fsel:
546
0
        if (bfd_get_mach (abfd) < 25)
547
0
    final_type = R_PARISC_PCREL14F;
548
0
        else
549
0
    final_type = R_PARISC_PCREL16F;
550
0
        break;
551
0
      default:
552
0
        return R_PARISC_NONE;
553
0
      }
554
0
    break;
555
556
0
  case 17:
557
0
    switch (field)
558
0
      {
559
0
      case e_rsel:
560
0
      case e_rrsel:
561
0
      case e_rdsel:
562
0
        final_type = R_PARISC_PCREL17R;
563
0
        break;
564
0
      case e_fsel:
565
0
        final_type = R_PARISC_PCREL17F;
566
0
        break;
567
0
      default:
568
0
        return R_PARISC_NONE;
569
0
      }
570
0
    break;
571
572
0
  case 21:
573
0
    switch (field)
574
0
      {
575
0
      case e_lsel:
576
0
      case e_lrsel:
577
0
      case e_ldsel:
578
0
      case e_nlsel:
579
0
      case e_nlrsel:
580
0
        final_type = R_PARISC_PCREL21L;
581
0
        break;
582
0
      default:
583
0
        return R_PARISC_NONE;
584
0
      }
585
0
    break;
586
587
0
  case 22:
588
0
    switch (field)
589
0
      {
590
0
      case e_fsel:
591
0
        final_type = R_PARISC_PCREL22F;
592
0
        break;
593
0
      default:
594
0
        return R_PARISC_NONE;
595
0
      }
596
0
    break;
597
598
0
  case 32:
599
0
    switch (field)
600
0
      {
601
0
      case e_fsel:
602
0
        final_type = R_PARISC_PCREL32;
603
0
        break;
604
0
      default:
605
0
        return R_PARISC_NONE;
606
0
      }
607
0
    break;
608
609
0
  case 64:
610
0
    switch (field)
611
0
      {
612
0
      case e_fsel:
613
0
        final_type = R_PARISC_PCREL64;
614
0
        break;
615
0
      default:
616
0
        return R_PARISC_NONE;
617
0
      }
618
0
    break;
619
620
0
  default:
621
0
    return R_PARISC_NONE;
622
0
  }
623
0
      break;
624
625
0
    case R_PARISC_TLS_GD21L:
626
0
      switch (field)
627
0
  {
628
0
    case e_ltsel:
629
0
    case e_lrsel:
630
0
      final_type = R_PARISC_TLS_GD21L;
631
0
      break;
632
0
    case e_rtsel:
633
0
    case e_rrsel:
634
0
      final_type = R_PARISC_TLS_GD14R;
635
0
      break;
636
0
    default:
637
0
      return R_PARISC_NONE;
638
0
  }
639
0
      break;
640
641
0
    case R_PARISC_TLS_LDM21L:
642
0
      switch (field)
643
0
  {
644
0
    case e_ltsel:
645
0
    case e_lrsel:
646
0
      final_type = R_PARISC_TLS_LDM21L;
647
0
      break;
648
0
    case e_rtsel:
649
0
    case e_rrsel:
650
0
      final_type = R_PARISC_TLS_LDM14R;
651
0
      break;
652
0
    default:
653
0
      return R_PARISC_NONE;
654
0
  }
655
0
      break;
656
657
0
    case R_PARISC_TLS_LDO21L:
658
0
      switch (field)
659
0
  {
660
0
    case e_lrsel:
661
0
      final_type = R_PARISC_TLS_LDO21L;
662
0
      break;
663
0
    case e_rrsel:
664
0
      final_type = R_PARISC_TLS_LDO14R;
665
0
      break;
666
0
    default:
667
0
      return R_PARISC_NONE;
668
0
  }
669
0
      break;
670
671
0
    case R_PARISC_TLS_IE21L:
672
0
      switch (field)
673
0
  {
674
0
    case e_ltsel:
675
0
    case e_lrsel:
676
0
      final_type = R_PARISC_TLS_IE21L;
677
0
      break;
678
0
    case e_rtsel:
679
0
    case e_rrsel:
680
0
      final_type = R_PARISC_TLS_IE14R;
681
0
      break;
682
0
    default:
683
0
      return R_PARISC_NONE;
684
0
  }
685
0
      break;
686
687
0
    case R_PARISC_TLS_LE21L:
688
0
      switch (field)
689
0
  {
690
0
    case e_lrsel:
691
0
      final_type = R_PARISC_TLS_LE21L;
692
0
      break;
693
0
    case e_rrsel:
694
0
      final_type = R_PARISC_TLS_LE14R;
695
0
      break;
696
0
    default:
697
0
      return R_PARISC_NONE;
698
0
  }
699
0
      break;
700
701
0
    case R_PARISC_SEGREL32:
702
0
      switch (format)
703
0
  {
704
0
  case 32:
705
0
    switch (field)
706
0
      {
707
0
      case e_fsel:
708
0
        final_type = R_PARISC_SEGREL32;
709
0
        break;
710
0
      default:
711
0
        return R_PARISC_NONE;
712
0
      }
713
0
    break;
714
715
0
  case 64:
716
0
    switch (field)
717
0
      {
718
0
      case e_fsel:
719
0
        final_type = R_PARISC_SEGREL64;
720
0
        break;
721
0
      default:
722
0
        return R_PARISC_NONE;
723
0
      }
724
0
    break;
725
726
0
  default:
727
0
    return R_PARISC_NONE;
728
0
  }
729
0
      break;
730
731
0
    case R_PARISC_GNU_VTENTRY:
732
0
    case R_PARISC_GNU_VTINHERIT:
733
0
    case R_PARISC_SEGBASE:
734
      /* The defaults are fine for these cases.  */
735
0
      break;
736
737
0
    default:
738
0
      return R_PARISC_NONE;
739
0
    }
740
741
0
  return final_type;
742
0
}
Unexecuted instantiation: elf64_hppa_reloc_final_type
Unexecuted instantiation: elf32_hppa_reloc_final_type
743
744
/* Return one (or more) BFD relocations which implement the base
745
   relocation with modifications based on format and field.  */
746
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)
754
0
{
755
0
  elf_hppa_reloc_type *finaltype;
756
0
  elf_hppa_reloc_type **final_types;
757
0
  size_t amt = sizeof (elf_hppa_reloc_type *) * 2;
758
759
  /* Allocate slots for the BFD relocation.  */
760
0
  final_types = bfd_alloc (abfd, amt);
761
0
  if (final_types == NULL)
762
0
    return NULL;
763
764
  /* Allocate space for the relocation itself.  */
765
0
  amt = sizeof (elf_hppa_reloc_type);
766
0
  finaltype = bfd_alloc (abfd, amt);
767
0
  if (finaltype == NULL)
768
0
    return NULL;
769
770
  /* Some reasonable defaults.  */
771
0
  final_types[0] = finaltype;
772
0
  final_types[1] = NULL;
773
774
0
  *finaltype = elf_hppa_reloc_final_type (abfd, base_type, format, field);
775
776
0
  return final_types;
777
0
}
Unexecuted instantiation: _bfd_elf64_hppa_gen_reloc_type
Unexecuted instantiation: _bfd_elf32_hppa_gen_reloc_type
778
779
/* Translate from an elf into field into a howto relocation pointer.  */
780
781
static bool
782
elf_hppa_info_to_howto (bfd *abfd,
783
      arelent *bfd_reloc,
784
      Elf_Internal_Rela *elf_reloc)
785
450
{
786
450
  unsigned int r_type = ELF32_R_TYPE (elf_reloc->r_info);
787
450
  unsigned int type = r_type;
788
450
  reloc_howto_type *howto = NULL;
789
790
450
  if (r_type < (unsigned int) R_PARISC_UNIMPLEMENTED)
791
450
    {
792
450
      howto = &elf_hppa_howto_table[r_type];
793
450
      type = howto->type;
794
450
    }
795
450
  if (type >= (unsigned int) R_PARISC_UNIMPLEMENTED)
796
0
    {
797
      /* xgettext:c-format */
798
0
      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
799
0
        abfd, r_type);
800
0
      bfd_set_error (bfd_error_bad_value);
801
0
      return false;
802
0
    }
803
450
  bfd_reloc->howto = howto;
804
450
  return true;
805
450
}
Unexecuted instantiation: elf64-hppa.c:elf_hppa_info_to_howto
elf32-hppa.c:elf_hppa_info_to_howto
Line
Count
Source
785
450
{
786
450
  unsigned int r_type = ELF32_R_TYPE (elf_reloc->r_info);
787
450
  unsigned int type = r_type;
788
450
  reloc_howto_type *howto = NULL;
789
790
450
  if (r_type < (unsigned int) R_PARISC_UNIMPLEMENTED)
791
450
    {
792
450
      howto = &elf_hppa_howto_table[r_type];
793
450
      type = howto->type;
794
450
    }
795
450
  if (type >= (unsigned int) R_PARISC_UNIMPLEMENTED)
796
0
    {
797
      /* xgettext:c-format */
798
0
      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
799
0
        abfd, r_type);
800
0
      bfd_set_error (bfd_error_bad_value);
801
0
      return false;
802
0
    }
803
450
  bfd_reloc->howto = howto;
804
450
  return true;
805
450
}
806
807
/* Translate from an elf into field into a howto relocation pointer.  */
808
809
static bool
810
elf_hppa_info_to_howto_rel (bfd *abfd,
811
          arelent *bfd_reloc,
812
          Elf_Internal_Rela *elf_reloc)
813
0
{
814
0
  unsigned int r_type = ELF_R_TYPE (elf_reloc->r_info);
815
0
  unsigned int type = r_type;
816
0
  reloc_howto_type *howto = NULL;
817
818
0
  if (r_type < (unsigned int) R_PARISC_UNIMPLEMENTED)
819
0
    {
820
0
      howto = &elf_hppa_howto_table[r_type];
821
0
      type = howto->type;
822
0
    }
823
0
  if (type >= (unsigned int) R_PARISC_UNIMPLEMENTED)
824
0
    {
825
      /* xgettext:c-format */
826
0
      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
827
0
        abfd, r_type);
828
0
      bfd_set_error (bfd_error_bad_value);
829
0
      return false;
830
0
    }
831
0
  bfd_reloc->howto = howto;
832
0
  return true;
833
0
}
Unexecuted instantiation: elf64-hppa.c:elf_hppa_info_to_howto_rel
Unexecuted instantiation: elf32-hppa.c:elf_hppa_info_to_howto_rel
834
835
/* Return the address of the howto table entry to perform the CODE
836
   relocation for an ARCH machine.  */
837
838
static reloc_howto_type *
839
elf_hppa_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
840
          bfd_reloc_code_real_type code)
841
0
{
842
0
  if ((int) code < (int) R_PARISC_UNIMPLEMENTED)
843
0
    {
844
0
      BFD_ASSERT ((int) elf_hppa_howto_table[(int) code].type == (int) code);
845
0
      return &elf_hppa_howto_table[(int) code];
846
0
    }
847
0
  return NULL;
848
0
}
Unexecuted instantiation: elf64-hppa.c:elf_hppa_reloc_type_lookup
Unexecuted instantiation: elf32-hppa.c:elf_hppa_reloc_type_lookup
849
850
static reloc_howto_type *
851
elf_hppa_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
852
          const char *r_name)
853
0
{
854
0
  unsigned int i;
855
856
0
  for (i = 0;
857
0
       i < sizeof (elf_hppa_howto_table) / sizeof (elf_hppa_howto_table[0]);
858
0
       i++)
859
0
    if (elf_hppa_howto_table[i].name != NULL
860
0
  && strcasecmp (elf_hppa_howto_table[i].name, r_name) == 0)
861
0
      return &elf_hppa_howto_table[i];
862
863
0
  return NULL;
864
0
}
Unexecuted instantiation: elf64-hppa.c:elf_hppa_reloc_name_lookup
Unexecuted instantiation: elf32-hppa.c:elf_hppa_reloc_name_lookup
865
866
/* Return TRUE if SYM represents a local label symbol.  */
867
868
static bool
869
elf_hppa_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
870
0
{
871
0
  if (name[0] == 'L' && name[1] == '$')
872
0
    return true;
873
0
  return _bfd_elf_is_local_label_name (abfd, name);
874
0
}
Unexecuted instantiation: elf64-hppa.c:elf_hppa_is_local_label_name
Unexecuted instantiation: elf32-hppa.c:elf_hppa_is_local_label_name
875
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.  */
878
879
static bool
880
elf_hppa_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
881
0
{
882
0
  const char *name;
883
884
0
  name = bfd_section_name (sec);
885
886
0
  if (strcmp (name, ".PARISC.unwind") == 0)
887
0
    {
888
0
      int indx;
889
0
      asection *asec;
890
891
#if ARCH_SIZE == 64
892
0
      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
0
      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.
901
902
   Ugh.  We can not use elf_section_data (sec)->this_idx at this
903
   point because it is not initialized yet.
904
905
   So we (gasp) recompute it here.  Hopefully nobody ever changes the
906
   way sections are numbered in elf.c!  */
907
0
      for (asec = abfd->sections, indx = 1; asec; asec = asec->next, indx++)
908
0
  {
909
0
    if (asec->name && strcmp (asec->name, ".text") == 0)
910
0
      {
911
0
        hdr->sh_info = indx;
912
0
        hdr->sh_flags |= SHF_INFO_LINK;
913
0
        break;
914
0
      }
915
0
  }
916
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
0
      hdr->sh_entsize = 4;
922
0
    }
923
0
  return true;
924
0
}
Unexecuted instantiation: elf64-hppa.c:elf_hppa_fake_sections
Unexecuted instantiation: elf32-hppa.c:elf_hppa_fake_sections
925
926
static bool
927
elf_hppa_final_write_processing (bfd *abfd)
928
1
{
929
1
  int mach = bfd_get_mach (abfd);
930
931
1
  elf_elfheader (abfd)->e_flags &= ~(EF_PARISC_ARCH | EF_PARISC_TRAPNIL
932
1
             | EF_PARISC_EXT | EF_PARISC_LSB
933
1
             | EF_PARISC_WIDE | EF_PARISC_NO_KABP
934
1
             | EF_PARISC_LAZYSWAP);
935
936
1
  if (mach == 10)
937
0
    elf_elfheader (abfd)->e_flags |= EFA_PARISC_1_0;
938
1
  else if (mach == 11)
939
1
    elf_elfheader (abfd)->e_flags |= EFA_PARISC_1_1;
940
0
  else if (mach == 20)
941
0
    elf_elfheader (abfd)->e_flags |= EFA_PARISC_2_0;
942
0
  else if (mach == 25)
943
0
    elf_elfheader (abfd)->e_flags |= (EF_PARISC_WIDE
944
0
              | 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
0
              | EF_PARISC_TRAPNIL);
950
1
  return _bfd_elf_final_write_processing (abfd);
951
1
}
Unexecuted instantiation: elf64-hppa.c:elf_hppa_final_write_processing
elf32-hppa.c:elf_hppa_final_write_processing
Line
Count
Source
928
1
{
929
1
  int mach = bfd_get_mach (abfd);
930
931
1
  elf_elfheader (abfd)->e_flags &= ~(EF_PARISC_ARCH | EF_PARISC_TRAPNIL
932
1
             | EF_PARISC_EXT | EF_PARISC_LSB
933
1
             | EF_PARISC_WIDE | EF_PARISC_NO_KABP
934
1
             | EF_PARISC_LAZYSWAP);
935
936
1
  if (mach == 10)
937
0
    elf_elfheader (abfd)->e_flags |= EFA_PARISC_1_0;
938
1
  else if (mach == 11)
939
1
    elf_elfheader (abfd)->e_flags |= EFA_PARISC_1_1;
940
0
  else if (mach == 20)
941
0
    elf_elfheader (abfd)->e_flags |= EFA_PARISC_2_0;
942
0
  else if (mach == 25)
943
0
    elf_elfheader (abfd)->e_flags |= (EF_PARISC_WIDE
944
0
              | 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
0
              | EF_PARISC_TRAPNIL);
950
1
  return _bfd_elf_final_write_processing (abfd);
951
1
}
952
953
/* Comparison function for qsort to sort unwind section during a
954
   final link.  */
955
956
static int
957
hppa_unwind_entry_compare (const void *a, const void *b)
958
0
{
959
0
  const bfd_byte *ap, *bp;
960
0
  unsigned long av, bv;
961
962
0
  ap = a;
963
0
  av = (unsigned long) ap[0] << 24;
964
0
  av |= (unsigned long) ap[1] << 16;
965
0
  av |= (unsigned long) ap[2] << 8;
966
0
  av |= (unsigned long) ap[3];
967
968
0
  bp = b;
969
0
  bv = (unsigned long) bp[0] << 24;
970
0
  bv |= (unsigned long) bp[1] << 16;
971
0
  bv |= (unsigned long) bp[2] << 8;
972
0
  bv |= (unsigned long) bp[3];
973
974
0
  return av < bv ? -1 : av > bv ? 1 : 0;
975
0
}
Unexecuted instantiation: elf64-hppa.c:hppa_unwind_entry_compare
Unexecuted instantiation: elf32-hppa.c:hppa_unwind_entry_compare
976
977
static bool
978
elf_hppa_sort_unwind (bfd *abfd)
979
0
{
980
0
  asection *s;
981
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
0
  s = bfd_get_section_by_name (abfd, ".PARISC.unwind");
987
0
  if (s != NULL && (s->flags & SEC_HAS_CONTENTS) != 0)
988
989
0
    {
990
0
      bfd_size_type size;
991
0
      bfd_byte *contents;
992
993
0
      if (!bfd_malloc_and_get_section (abfd, s, &contents))
994
0
  return false;
995
996
0
      size = s->size;
997
0
      qsort (contents, (size_t) (size / 16), 16, hppa_unwind_entry_compare);
998
999
0
      if (! bfd_set_section_contents (abfd, s, contents, (file_ptr) 0, size))
1000
0
  return false;
1001
0
    }
1002
1003
0
  return true;
1004
0
}
Unexecuted instantiation: elf64-hppa.c:elf_hppa_sort_unwind
Unexecuted instantiation: elf32-hppa.c:elf_hppa_sort_unwind
1005
1006
/* What to do when ld finds relocations against symbols defined in
1007
   discarded sections.  */
1008
1009
static unsigned int
1010
elf_hppa_action_discarded (asection *sec)
1011
0
{
1012
  /* Ignore relocations in .data.rel.ro.local.  This section can contain
1013
     PLABEL32 relocations to functions in discarded COMDAT groups.  */
1014
0
  if (strcmp (".data.rel.ro.local", sec->name) == 0)
1015
0
    return 0;
1016
1017
0
  if (strcmp (".PARISC.unwind", sec->name) == 0)
1018
0
    return 0;
1019
1020
0
  return _bfd_elf_default_action_discarded (sec);
1021
0
}
Unexecuted instantiation: elf64-hppa.c:elf_hppa_action_discarded
Unexecuted instantiation: elf32-hppa.c:elf_hppa_action_discarded