1 /* Common code for PA ELF implementations.
2 Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
3 Free Software Foundation, Inc.
5 This file is part of BFD, the Binary File Descriptor library.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 MA 02110-1301, USA. */
22 #define ELF_HOWTO_TABLE_SIZE R_PARISC_UNIMPLEMENTED + 1
24 /* This file is included by multiple PA ELF BFD backends with different
27 Most of the routines are written to be size independent, but sometimes
28 external constraints require 32 or 64 bit specific code. We remap
29 the definitions/functions as necessary here. */
31 #define ELF_R_TYPE(X) ELF64_R_TYPE(X)
32 #define ELF_R_SYM(X) ELF64_R_SYM(X)
33 #define elf_hppa_reloc_final_type elf64_hppa_reloc_final_type
34 #define _bfd_elf_hppa_gen_reloc_type _bfd_elf64_hppa_gen_reloc_type
35 #define elf_hppa_relocate_section elf64_hppa_relocate_section
36 #define elf_hppa_final_link elf64_hppa_final_link
39 #define ELF_R_TYPE(X) ELF32_R_TYPE(X)
40 #define ELF_R_SYM(X) ELF32_R_SYM(X)
41 #define elf_hppa_reloc_final_type elf32_hppa_reloc_final_type
42 #define _bfd_elf_hppa_gen_reloc_type _bfd_elf32_hppa_gen_reloc_type
43 #define elf_hppa_relocate_section elf32_hppa_relocate_section
44 #define elf_hppa_final_link elf32_hppa_final_link
47 /* ELF/PA relocation howto entries. */
49 static reloc_howto_type elf_hppa_howto_table
[ELF_HOWTO_TABLE_SIZE
] =
51 { R_PARISC_NONE
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
52 bfd_elf_generic_reloc
, "R_PARISC_NONE", FALSE
, 0, 0, FALSE
},
54 /* The values in DIR32 are to placate the check in
55 _bfd_stab_section_find_nearest_line. */
56 { R_PARISC_DIR32
, 0, 2, 32, FALSE
, 0, complain_overflow_bitfield
,
57 bfd_elf_generic_reloc
, "R_PARISC_DIR32", FALSE
, 0, 0xffffffff, FALSE
},
58 { R_PARISC_DIR21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
59 bfd_elf_generic_reloc
, "R_PARISC_DIR21L", FALSE
, 0, 0, FALSE
},
60 { R_PARISC_DIR17R
, 0, 2, 17, FALSE
, 0, complain_overflow_bitfield
,
61 bfd_elf_generic_reloc
, "R_PARISC_DIR17R", FALSE
, 0, 0, FALSE
},
62 { R_PARISC_DIR17F
, 0, 2, 17, FALSE
, 0, complain_overflow_bitfield
,
63 bfd_elf_generic_reloc
, "R_PARISC_DIR17F", FALSE
, 0, 0, FALSE
},
64 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
65 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
66 { R_PARISC_DIR14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
67 bfd_elf_generic_reloc
, "R_PARISC_DIR14R", FALSE
, 0, 0, FALSE
},
68 { R_PARISC_DIR14F
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
69 bfd_elf_generic_reloc
, "R_PARISC_DIR14F", FALSE
, 0, 0, FALSE
},
71 { R_PARISC_PCREL12F
, 0, 2, 12, TRUE
, 0, complain_overflow_bitfield
,
72 bfd_elf_generic_reloc
, "R_PARISC_PCREL12F", FALSE
, 0, 0, FALSE
},
73 { R_PARISC_PCREL32
, 0, 2, 32, TRUE
, 0, complain_overflow_bitfield
,
74 bfd_elf_generic_reloc
, "R_PARISC_PCREL32", FALSE
, 0, 0, FALSE
},
75 { R_PARISC_PCREL21L
, 0, 2, 21, TRUE
, 0, complain_overflow_bitfield
,
76 bfd_elf_generic_reloc
, "R_PARISC_PCREL21L", FALSE
, 0, 0, FALSE
},
77 { R_PARISC_PCREL17R
, 0, 2, 17, TRUE
, 0, complain_overflow_bitfield
,
78 bfd_elf_generic_reloc
, "R_PARISC_PCREL17R", FALSE
, 0, 0, FALSE
},
79 { R_PARISC_PCREL17F
, 0, 2, 17, TRUE
, 0, complain_overflow_bitfield
,
80 bfd_elf_generic_reloc
, "R_PARISC_PCREL17F", FALSE
, 0, 0, FALSE
},
81 { R_PARISC_PCREL17C
, 0, 2, 17, TRUE
, 0, complain_overflow_bitfield
,
82 bfd_elf_generic_reloc
, "R_PARISC_PCREL17C", FALSE
, 0, 0, FALSE
},
83 { R_PARISC_PCREL14R
, 0, 2, 14, TRUE
, 0, complain_overflow_bitfield
,
84 bfd_elf_generic_reloc
, "R_PARISC_PCREL14R", FALSE
, 0, 0, FALSE
},
85 { R_PARISC_PCREL14F
, 0, 2, 14, TRUE
, 0, complain_overflow_bitfield
,
86 bfd_elf_generic_reloc
, "R_PARISC_PCREL14F", FALSE
, 0, 0, FALSE
},
88 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
89 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
90 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
91 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
92 { R_PARISC_DPREL21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
93 bfd_elf_generic_reloc
, "R_PARISC_DPREL21L", FALSE
, 0, 0, FALSE
},
94 { R_PARISC_DPREL14WR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
95 bfd_elf_generic_reloc
, "R_PARISC_DPREL14WR", FALSE
, 0, 0, FALSE
},
96 { R_PARISC_DPREL14DR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
97 bfd_elf_generic_reloc
, "R_PARISC_DPREL14DR", FALSE
, 0, 0, FALSE
},
98 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
99 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
100 { R_PARISC_DPREL14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
101 bfd_elf_generic_reloc
, "R_PARISC_DPREL14R", FALSE
, 0, 0, FALSE
},
102 { R_PARISC_DPREL14F
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
103 bfd_elf_generic_reloc
, "R_PARISC_DPREL14F", FALSE
, 0, 0, FALSE
},
105 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
106 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
107 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
108 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
109 { R_PARISC_DLTREL21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
110 bfd_elf_generic_reloc
, "R_PARISC_DLTREL21L", FALSE
, 0, 0, FALSE
},
111 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
112 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
113 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
114 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
115 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
116 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
117 { R_PARISC_DLTREL14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
118 bfd_elf_generic_reloc
, "R_PARISC_DLTREL14R", FALSE
, 0, 0, FALSE
},
119 { R_PARISC_DLTREL14F
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
120 bfd_elf_generic_reloc
, "R_PARISC_DLTREL14F", FALSE
, 0, 0, FALSE
},
122 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
123 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
124 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
125 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
126 { R_PARISC_DLTIND21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
127 bfd_elf_generic_reloc
, "R_PARISC_DLTIND21L", FALSE
, 0, 0, FALSE
},
128 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
129 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
130 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
131 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
132 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
133 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
134 { R_PARISC_DLTIND14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
135 bfd_elf_generic_reloc
, "R_PARISC_DLTIND14R", FALSE
, 0, 0, FALSE
},
136 { R_PARISC_DLTIND14F
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
137 bfd_elf_generic_reloc
, "R_PARISC_DLTIND14F", FALSE
, 0, 0, FALSE
},
139 { R_PARISC_SETBASE
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
140 bfd_elf_generic_reloc
, "R_PARISC_SETBASE", FALSE
, 0, 0, FALSE
},
141 { R_PARISC_SECREL32
, 0, 2, 32, FALSE
, 0, complain_overflow_bitfield
,
142 bfd_elf_generic_reloc
, "R_PARISC_SECREL32", FALSE
, 0, 0xffffffff, FALSE
},
143 { R_PARISC_BASEREL21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
144 bfd_elf_generic_reloc
, "R_PARISC_BASEREL21L", FALSE
, 0, 0, FALSE
},
145 { R_PARISC_BASEREL17R
, 0, 2, 17, FALSE
, 0, complain_overflow_bitfield
,
146 bfd_elf_generic_reloc
, "R_PARISC_BASEREL17R", FALSE
, 0, 0, FALSE
},
147 { R_PARISC_BASEREL17F
, 0, 2, 17, FALSE
, 0, complain_overflow_bitfield
,
148 bfd_elf_generic_reloc
, "R_PARISC_BASEREL17F", FALSE
, 0, 0, FALSE
},
149 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
150 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
151 { R_PARISC_BASEREL14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
152 bfd_elf_generic_reloc
, "R_PARISC_BASEREL14R", FALSE
, 0, 0, FALSE
},
153 { R_PARISC_BASEREL14F
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
154 bfd_elf_generic_reloc
, "R_PARISC_BASEREL14F", FALSE
, 0, 0, FALSE
},
156 { R_PARISC_SEGBASE
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
157 bfd_elf_generic_reloc
, "R_PARISC_SEGBASE", FALSE
, 0, 0, FALSE
},
158 { R_PARISC_SEGREL32
, 0, 2, 32, FALSE
, 0, complain_overflow_bitfield
,
159 bfd_elf_generic_reloc
, "R_PARISC_SEGREL32", FALSE
, 0, 0, FALSE
},
160 { R_PARISC_PLTOFF21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
161 bfd_elf_generic_reloc
, "R_PARISC_PLTOFF21L", FALSE
, 0, 0, FALSE
},
162 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
163 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
164 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
165 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
166 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
167 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
168 { R_PARISC_PLTOFF14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
169 bfd_elf_generic_reloc
, "R_PARISC_PLTOFF14R", FALSE
, 0, 0, FALSE
},
170 { R_PARISC_PLTOFF14F
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
171 bfd_elf_generic_reloc
, "R_PARISC_PLTOFF14F", FALSE
, 0, 0, FALSE
},
173 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
174 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
175 { R_PARISC_LTOFF_FPTR32
, 0, 2, 32, FALSE
, 0, complain_overflow_bitfield
,
176 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR32", FALSE
, 0, 0, FALSE
},
177 { R_PARISC_LTOFF_FPTR21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
178 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR21L", FALSE
, 0, 0, FALSE
},
179 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
180 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
181 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
182 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
183 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
184 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
185 { R_PARISC_LTOFF_FPTR14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
186 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR14R", FALSE
, 0, 0, FALSE
},
187 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
188 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
190 { R_PARISC_FPTR64
, 0, 4, 64, FALSE
, 0, complain_overflow_bitfield
,
191 bfd_elf_generic_reloc
, "R_PARISC_FPTR64", FALSE
, 0, 0, FALSE
},
192 { R_PARISC_PLABEL32
, 0, 2, 32, FALSE
, 0, complain_overflow_bitfield
,
193 bfd_elf_generic_reloc
, "R_PARISC_PLABEL32", FALSE
, 0, 0, FALSE
},
194 { R_PARISC_PLABEL21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
195 bfd_elf_generic_reloc
, "R_PARISC_PLABEL21L", FALSE
, 0, 0, FALSE
},
196 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
197 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
198 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
199 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
200 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
201 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
202 { R_PARISC_PLABEL14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
203 bfd_elf_generic_reloc
, "R_PARISC_PLABEL14R", FALSE
, 0, 0, FALSE
},
204 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
205 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
207 { R_PARISC_PCREL64
, 0, 4, 64, FALSE
, 0, complain_overflow_bitfield
,
208 bfd_elf_generic_reloc
, "R_PARISC_PCREL64", FALSE
, 0, 0, FALSE
},
209 { R_PARISC_PCREL22C
, 0, 2, 22, FALSE
, 0, complain_overflow_bitfield
,
210 bfd_elf_generic_reloc
, "R_PARISC_PCREL22C", FALSE
, 0, 0, FALSE
},
211 { R_PARISC_PCREL22F
, 0, 2, 22, FALSE
, 0, complain_overflow_bitfield
,
212 bfd_elf_generic_reloc
, "R_PARISC_PCREL22F", FALSE
, 0, 0, FALSE
},
213 { R_PARISC_PCREL14WR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
214 bfd_elf_generic_reloc
, "R_PARISC_PCREL14WR", FALSE
, 0, 0, FALSE
},
215 { R_PARISC_PCREL14DR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
216 bfd_elf_generic_reloc
, "R_PARISC_PCREL14DR", FALSE
, 0, 0, FALSE
},
217 { R_PARISC_PCREL16F
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
218 bfd_elf_generic_reloc
, "R_PARISC_PCREL16F", FALSE
, 0, 0, FALSE
},
219 { R_PARISC_PCREL16WF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
220 bfd_elf_generic_reloc
, "R_PARISC_PCREL16WF", FALSE
, 0, 0, FALSE
},
221 { R_PARISC_PCREL16DF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
222 bfd_elf_generic_reloc
, "R_PARISC_PCREL16DF", FALSE
, 0, 0, FALSE
},
224 { R_PARISC_DIR64
, 0, 4, 64, FALSE
, 0, complain_overflow_bitfield
,
225 bfd_elf_generic_reloc
, "R_PARISC_DIR64", FALSE
, 0, 0, FALSE
},
226 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
227 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
228 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
229 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
230 { R_PARISC_DIR14WR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
231 bfd_elf_generic_reloc
, "R_PARISC_DIR14WR", FALSE
, 0, 0, FALSE
},
232 { R_PARISC_DIR14DR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
233 bfd_elf_generic_reloc
, "R_PARISC_DIR14DR", FALSE
, 0, 0, FALSE
},
234 { R_PARISC_DIR16F
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
235 bfd_elf_generic_reloc
, "R_PARISC_DIR16F", FALSE
, 0, 0, FALSE
},
236 { R_PARISC_DIR16WF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
237 bfd_elf_generic_reloc
, "R_PARISC_DIR16WF", FALSE
, 0, 0, FALSE
},
238 { R_PARISC_DIR16DF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
239 bfd_elf_generic_reloc
, "R_PARISC_DIR16DF", FALSE
, 0, 0, FALSE
},
241 { R_PARISC_GPREL64
, 0, 4, 64, FALSE
, 0, complain_overflow_bitfield
,
242 bfd_elf_generic_reloc
, "R_PARISC_GPREL64", FALSE
, 0, 0, FALSE
},
243 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
244 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
245 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
246 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
247 { R_PARISC_DLTREL14WR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
248 bfd_elf_generic_reloc
, "R_PARISC_DLTREL14WR", FALSE
, 0, 0, FALSE
},
249 { R_PARISC_DLTREL14DR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
250 bfd_elf_generic_reloc
, "R_PARISC_DLTREL14DR", FALSE
, 0, 0, FALSE
},
251 { R_PARISC_GPREL16F
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
252 bfd_elf_generic_reloc
, "R_PARISC_GPREL16F", FALSE
, 0, 0, FALSE
},
253 { R_PARISC_GPREL16WF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
254 bfd_elf_generic_reloc
, "R_PARISC_GPREL16WF", FALSE
, 0, 0, FALSE
},
255 { R_PARISC_GPREL16DF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
256 bfd_elf_generic_reloc
, "R_PARISC_GPREL16DF", FALSE
, 0, 0, FALSE
},
258 { R_PARISC_LTOFF64
, 0, 4, 64, FALSE
, 0, complain_overflow_bitfield
,
259 bfd_elf_generic_reloc
, "R_PARISC_LTOFF64", FALSE
, 0, 0, FALSE
},
260 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
261 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
262 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
263 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
264 { R_PARISC_DLTIND14WR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
265 bfd_elf_generic_reloc
, "R_PARISC_DLTIND14WR", FALSE
, 0, 0, FALSE
},
266 { R_PARISC_DLTIND14DR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
267 bfd_elf_generic_reloc
, "R_PARISC_DLTIND14DR", FALSE
, 0, 0, FALSE
},
268 { R_PARISC_LTOFF16F
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
269 bfd_elf_generic_reloc
, "R_PARISC_LTOFF16F", FALSE
, 0, 0, FALSE
},
270 { R_PARISC_LTOFF16WF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
271 bfd_elf_generic_reloc
, "R_PARISC_LTOFF16DF", FALSE
, 0, 0, FALSE
},
272 { R_PARISC_LTOFF16DF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
273 bfd_elf_generic_reloc
, "R_PARISC_LTOFF16DF", FALSE
, 0, 0, FALSE
},
275 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
276 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
277 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
278 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
279 { R_PARISC_BASEREL14WR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
280 bfd_elf_generic_reloc
, "R_PARISC_BASEREL14WR", FALSE
, 0, 0, FALSE
},
281 { R_PARISC_BASEREL14DR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
282 bfd_elf_generic_reloc
, "R_PARISC_BASEREL14DR", FALSE
, 0, 0, FALSE
},
283 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
284 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
285 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
286 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
287 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
288 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
289 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
290 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
292 { R_PARISC_SEGREL64
, 0, 4, 64, FALSE
, 0, complain_overflow_bitfield
,
293 bfd_elf_generic_reloc
, "R_PARISC_SEGREL64", FALSE
, 0, 0, FALSE
},
294 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
295 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
296 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
297 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
298 { R_PARISC_PLTOFF14WR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
299 bfd_elf_generic_reloc
, "R_PARISC_PLTOFF14WR", FALSE
, 0, 0, FALSE
},
300 { R_PARISC_PLTOFF14DR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
301 bfd_elf_generic_reloc
, "R_PARISC_PLTOFF14DR", FALSE
, 0, 0, FALSE
},
302 { R_PARISC_PLTOFF16F
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
303 bfd_elf_generic_reloc
, "R_PARISC_PLTOFF16F", FALSE
, 0, 0, FALSE
},
304 { R_PARISC_PLTOFF16WF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
305 bfd_elf_generic_reloc
, "R_PARISC_PLTOFF16WF", FALSE
, 0, 0, FALSE
},
306 { R_PARISC_PLTOFF16DF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
307 bfd_elf_generic_reloc
, "R_PARISC_PLTOFF16DF", FALSE
, 0, 0, FALSE
},
309 { R_PARISC_LTOFF_FPTR64
, 0, 4, 64, FALSE
, 0, complain_overflow_bitfield
,
310 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
311 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
312 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
313 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
314 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
315 { R_PARISC_LTOFF_FPTR14WR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
316 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR14WR", FALSE
, 0, 0, FALSE
},
317 { R_PARISC_LTOFF_FPTR14DR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
318 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR14DR", FALSE
, 0, 0, FALSE
},
319 { R_PARISC_LTOFF_FPTR16F
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
320 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR16F", FALSE
, 0, 0, FALSE
},
321 { R_PARISC_LTOFF_FPTR16WF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
322 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR16WF", FALSE
, 0, 0, FALSE
},
323 { R_PARISC_LTOFF_FPTR16DF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
324 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
326 { R_PARISC_COPY
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
327 bfd_elf_generic_reloc
, "R_PARISC_COPY", FALSE
, 0, 0, FALSE
},
328 { R_PARISC_IPLT
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
329 bfd_elf_generic_reloc
, "R_PARISC_IPLT", FALSE
, 0, 0, FALSE
},
330 { R_PARISC_EPLT
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
331 bfd_elf_generic_reloc
, "R_PARISC_EPLT", FALSE
, 0, 0, FALSE
},
332 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
333 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
334 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
335 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
336 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
337 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
338 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
339 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
340 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
341 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
343 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
344 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
345 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
346 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
347 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
348 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
349 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
350 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
351 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
352 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
353 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
354 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
355 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
356 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
357 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
358 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
360 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
361 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
362 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
363 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
364 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
365 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
366 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
367 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
368 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
369 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
370 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
371 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
372 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
373 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
374 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
375 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
377 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
378 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
379 { R_PARISC_TPREL32
, 0, 2, 32, FALSE
, 0, complain_overflow_dont
,
380 bfd_elf_generic_reloc
, "R_PARISC_TPREL32", FALSE
, 0, 0, FALSE
},
381 { R_PARISC_TPREL21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
382 bfd_elf_generic_reloc
, "R_PARISC_TPREL21L", FALSE
, 0, 0, FALSE
},
383 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
384 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
385 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
386 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
387 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
388 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
389 { R_PARISC_TPREL14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
390 bfd_elf_generic_reloc
, "R_PARISC_TPREL14R", FALSE
, 0, 0, FALSE
},
391 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
392 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
394 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
395 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
396 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
397 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
398 { R_PARISC_LTOFF_TP21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
399 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP21L", FALSE
, 0, 0, FALSE
},
400 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
401 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
402 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
403 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
404 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
405 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
406 { R_PARISC_LTOFF_TP14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
407 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP14R", FALSE
, 0, 0, FALSE
},
408 { R_PARISC_LTOFF_TP14F
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
409 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP14F", FALSE
, 0, 0, FALSE
},
411 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
412 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
413 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
414 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
415 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
416 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
417 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
418 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
419 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
420 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
421 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
422 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
423 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
424 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
425 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
426 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
428 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
429 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
430 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
431 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
432 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
433 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
434 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
435 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
436 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
437 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
438 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
439 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
440 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
441 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
442 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
443 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
445 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
446 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
447 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
448 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
449 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
450 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
451 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
452 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
453 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
454 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
455 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
456 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
457 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
458 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
459 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
460 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
462 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
463 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
464 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
465 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
466 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
467 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
468 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
469 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
470 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
471 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
472 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
473 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
474 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
475 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
476 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
477 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
479 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
480 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
481 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
482 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
483 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
484 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
485 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
486 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
487 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
488 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
489 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
490 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
491 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
492 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
493 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
494 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
496 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
497 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
498 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
499 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
500 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
501 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
502 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
503 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
504 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
505 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
506 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
507 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
508 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
509 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
510 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
511 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
513 { R_PARISC_TPREL64
, 0, 4, 64, FALSE
, 0, complain_overflow_bitfield
,
514 bfd_elf_generic_reloc
, "R_PARISC_TPREL64", FALSE
, 0, 0, FALSE
},
515 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
516 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
517 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
518 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
519 { R_PARISC_TPREL14WR
, 0, 2, 14, FALSE
, 0, complain_overflow_dont
,
520 bfd_elf_generic_reloc
, "R_PARISC_TPREL14WR", FALSE
, 0, 0, FALSE
},
521 { R_PARISC_TPREL14DR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
522 bfd_elf_generic_reloc
, "R_PARISC_TPREL14DR", FALSE
, 0, 0, FALSE
},
523 { R_PARISC_TPREL16F
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
524 bfd_elf_generic_reloc
, "R_PARISC_TPREL16F", FALSE
, 0, 0, FALSE
},
525 { R_PARISC_TPREL16WF
, 0, 2, 16, FALSE
, 0, complain_overflow_dont
,
526 bfd_elf_generic_reloc
, "R_PARISC_TPREL16WF", FALSE
, 0, 0, FALSE
},
527 { R_PARISC_TPREL16DF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
528 bfd_elf_generic_reloc
, "R_PARISC_TPREL16DF", FALSE
, 0, 0, FALSE
},
530 { R_PARISC_LTOFF_TP64
, 0, 4, 64, FALSE
, 0, complain_overflow_bitfield
,
531 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP64", FALSE
, 0, 0, FALSE
},
532 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
533 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
534 { R_PARISC_UNIMPLEMENTED
, 0, 0, 0, FALSE
, 0, complain_overflow_bitfield
,
535 bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED", FALSE
, 0, 0, FALSE
},
536 { R_PARISC_LTOFF_TP14WR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
537 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP14WR", FALSE
, 0, 0, FALSE
},
538 { R_PARISC_LTOFF_TP14DR
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
539 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP14DR", FALSE
, 0, 0, FALSE
},
540 { R_PARISC_LTOFF_TP16F
, 0, 2, 16, FALSE
, 0, complain_overflow_dont
,
541 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP16F", FALSE
, 0, 0, FALSE
},
542 { R_PARISC_LTOFF_TP16WF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
543 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP16WF", FALSE
, 0, 0, FALSE
},
544 { R_PARISC_LTOFF_TP16DF
, 0, 2, 16, FALSE
, 0, complain_overflow_bitfield
,
545 bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP16DF", FALSE
, 0, 0, FALSE
},
547 { R_PARISC_GNU_VTENTRY
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
548 bfd_elf_generic_reloc
, "R_PARISC_GNU_VTENTRY", FALSE
, 0, 0, FALSE
},
549 { R_PARISC_GNU_VTINHERIT
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
550 bfd_elf_generic_reloc
, "R_PARISC_GNU_VTINHERIT", FALSE
, 0, 0, FALSE
},
551 { R_PARISC_TLS_GD21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
552 bfd_elf_generic_reloc
, "R_PARISC_TLS_GD21L", FALSE
, 0, 0, FALSE
},
553 { R_PARISC_TLS_GD14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
554 bfd_elf_generic_reloc
, "R_PARISC_TLS_GD14R", FALSE
, 0, 0, FALSE
},
555 { R_PARISC_TLS_GDCALL
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
556 bfd_elf_generic_reloc
, "R_PARISC_TLS_GDCALL", FALSE
, 0, 0, FALSE
},
557 { R_PARISC_TLS_LDM21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
558 bfd_elf_generic_reloc
, "R_PARISC_TLS_LDM21L", FALSE
, 0, 0, FALSE
},
559 { R_PARISC_TLS_LDM14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
560 bfd_elf_generic_reloc
, "R_PARISC_TLS_LDM14R", FALSE
, 0, 0, FALSE
},
561 { R_PARISC_TLS_LDMCALL
, 0, 0, 0, FALSE
, 0, complain_overflow_dont
,
562 bfd_elf_generic_reloc
, "R_PARISC_TLS_LDMCALL", FALSE
, 0, 0, FALSE
},
564 { R_PARISC_TLS_LDO21L
, 0, 2, 21, FALSE
, 0, complain_overflow_bitfield
,
565 bfd_elf_generic_reloc
, "R_PARISC_TLS_LDO21L", FALSE
, 0, 0, FALSE
},
566 { R_PARISC_TLS_LDO14R
, 0, 2, 14, FALSE
, 0, complain_overflow_bitfield
,
567 bfd_elf_generic_reloc
, "R_PARISC_TLS_LDO14R", FALSE
, 0, 0, FALSE
},
568 { R_PARISC_TLS_DTPMOD32
, 0, 2, 32, FALSE
, 0, complain_overflow_bitfield
,
569 bfd_elf_generic_reloc
, "R_PARISC_TLS_DTPMOD32", FALSE
, 0, 0, FALSE
},
570 { R_PARISC_TLS_DTPMOD64
, 0, 4, 64, FALSE
, 0, complain_overflow_bitfield
,
571 bfd_elf_generic_reloc
, "R_PARISC_TLS_DTPMOD64", FALSE
, 0, 0, FALSE
},
572 { R_PARISC_TLS_DTPOFF32
, 0, 2, 32, FALSE
, 0, complain_overflow_bitfield
,
573 bfd_elf_generic_reloc
, "R_PARISC_TLS_DTPOFF32", FALSE
, 0, 0, FALSE
},
574 { R_PARISC_TLS_DTPOFF64
, 0, 4, 64, FALSE
, 0, complain_overflow_bitfield
,
575 bfd_elf_generic_reloc
, "R_PARISC_TLS_DTPOFF64", FALSE
, 0, 0, FALSE
},
578 #define OFFSET_14R_FROM_21L 4
579 #define OFFSET_14F_FROM_21L 5
581 /* Return the final relocation type for the given base type, instruction
582 format, and field selector. */
585 elf_hppa_reloc_final_type (bfd
*abfd
,
586 elf_hppa_reloc_type base_type
,
590 elf_hppa_reloc_type final_type
= base_type
;
592 /* Just a tangle of nested switch statements to deal with the braindamage
593 that a different field selector means a completely different relocation
597 /* We have been using generic relocation types. However, that may not
598 really make sense. Anyway, we need to support both R_PARISC_DIR64
599 and R_PARISC_DIR32 here. */
602 case R_HPPA_ABS_CALL
:
609 final_type
= R_PARISC_DIR14F
;
614 final_type
= R_PARISC_DIR14R
;
617 final_type
= R_PARISC_DLTIND14R
;
620 final_type
= R_PARISC_LTOFF_FPTR14DR
;
623 final_type
= R_PARISC_DLTIND14F
;
626 final_type
= R_PARISC_PLABEL14R
;
629 return R_PARISC_NONE
;
637 final_type
= R_PARISC_DIR17F
;
642 final_type
= R_PARISC_DIR17R
;
645 return R_PARISC_NONE
;
657 final_type
= R_PARISC_DIR21L
;
660 final_type
= R_PARISC_DLTIND21L
;
663 final_type
= R_PARISC_LTOFF_FPTR21L
;
666 final_type
= R_PARISC_PLABEL21L
;
669 return R_PARISC_NONE
;
677 final_type
= R_PARISC_DIR32
;
678 /* When in 64bit mode, a 32bit relocation is supposed to
679 be a section relative relocation. Dwarf2 (for example)
680 uses 32bit section relative relocations. */
681 if (bfd_get_arch_info (abfd
)->bits_per_address
!= 32)
682 final_type
= R_PARISC_SECREL32
;
685 final_type
= R_PARISC_PLABEL32
;
688 return R_PARISC_NONE
;
696 final_type
= R_PARISC_DIR64
;
699 final_type
= R_PARISC_FPTR64
;
702 return R_PARISC_NONE
;
707 return R_PARISC_NONE
;
720 /* R_PARISC_DLTREL14R for elf64, R_PARISC_DPREL14R for elf32. */
721 final_type
= base_type
+ OFFSET_14R_FROM_21L
;
724 /* R_PARISC_DLTREL14F for elf64, R_PARISC_DPREL14F for elf32. */
725 final_type
= base_type
+ OFFSET_14F_FROM_21L
;
728 return R_PARISC_NONE
;
740 /* R_PARISC_DLTREL21L for elf64, R_PARISC_DPREL21L for elf32. */
741 final_type
= base_type
;
744 return R_PARISC_NONE
;
752 final_type
= R_PARISC_GPREL64
;
755 return R_PARISC_NONE
;
760 return R_PARISC_NONE
;
764 case R_HPPA_PCREL_CALL
:
771 final_type
= R_PARISC_PCREL12F
;
774 return R_PARISC_NONE
;
779 /* Contrary to appearances, these are not calls of any sort.
780 Rather, they are loads/stores with a pcrel reloc. */
786 final_type
= R_PARISC_PCREL14R
;
789 if (bfd_get_mach (abfd
) < 25)
790 final_type
= R_PARISC_PCREL14F
;
792 final_type
= R_PARISC_PCREL16F
;
795 return R_PARISC_NONE
;
805 final_type
= R_PARISC_PCREL17R
;
808 final_type
= R_PARISC_PCREL17F
;
811 return R_PARISC_NONE
;
823 final_type
= R_PARISC_PCREL21L
;
826 return R_PARISC_NONE
;
834 final_type
= R_PARISC_PCREL22F
;
837 return R_PARISC_NONE
;
845 final_type
= R_PARISC_PCREL32
;
848 return R_PARISC_NONE
;
856 final_type
= R_PARISC_PCREL64
;
859 return R_PARISC_NONE
;
864 return R_PARISC_NONE
;
868 case R_PARISC_TLS_GD21L
:
873 final_type
= R_PARISC_TLS_GD21L
;
877 final_type
= R_PARISC_TLS_GD14R
;
880 return R_PARISC_NONE
;
884 case R_PARISC_TLS_LDM21L
:
889 final_type
= R_PARISC_TLS_LDM21L
;
893 final_type
= R_PARISC_TLS_LDM14R
;
896 return R_PARISC_NONE
;
900 case R_PARISC_TLS_LDO21L
:
904 final_type
= R_PARISC_TLS_LDO21L
;
907 final_type
= R_PARISC_TLS_LDO14R
;
910 return R_PARISC_NONE
;
914 case R_PARISC_TLS_IE21L
:
919 final_type
= R_PARISC_TLS_IE21L
;
923 final_type
= R_PARISC_TLS_IE14R
;
926 return R_PARISC_NONE
;
930 case R_PARISC_TLS_LE21L
:
934 final_type
= R_PARISC_TLS_LE21L
;
937 final_type
= R_PARISC_TLS_LE14R
;
940 return R_PARISC_NONE
;
944 case R_PARISC_SEGREL32
:
951 final_type
= R_PARISC_SEGREL32
;
954 return R_PARISC_NONE
;
962 final_type
= R_PARISC_SEGREL64
;
965 return R_PARISC_NONE
;
970 return R_PARISC_NONE
;
974 case R_PARISC_GNU_VTENTRY
:
975 case R_PARISC_GNU_VTINHERIT
:
976 case R_PARISC_SEGBASE
:
977 /* The defaults are fine for these cases. */
981 return R_PARISC_NONE
;
987 /* Return one (or more) BFD relocations which implement the base
988 relocation with modifications based on format and field. */
990 elf_hppa_reloc_type
**
991 _bfd_elf_hppa_gen_reloc_type (bfd
*abfd
,
992 elf_hppa_reloc_type base_type
,
995 int ignore ATTRIBUTE_UNUSED
,
996 asymbol
*sym ATTRIBUTE_UNUSED
)
998 elf_hppa_reloc_type
*finaltype
;
999 elf_hppa_reloc_type
**final_types
;
1000 bfd_size_type amt
= sizeof (elf_hppa_reloc_type
*) * 2;
1002 /* Allocate slots for the BFD relocation. */
1003 final_types
= bfd_alloc (abfd
, amt
);
1004 if (final_types
== NULL
)
1007 /* Allocate space for the relocation itself. */
1008 amt
= sizeof (elf_hppa_reloc_type
);
1009 finaltype
= bfd_alloc (abfd
, amt
);
1010 if (finaltype
== NULL
)
1013 /* Some reasonable defaults. */
1014 final_types
[0] = finaltype
;
1015 final_types
[1] = NULL
;
1017 *finaltype
= elf_hppa_reloc_final_type (abfd
, base_type
, format
, field
);
1022 /* Translate from an elf into field into a howto relocation pointer. */
1025 elf_hppa_info_to_howto (bfd
*abfd ATTRIBUTE_UNUSED
,
1027 Elf_Internal_Rela
*elf_reloc
)
1029 BFD_ASSERT (ELF_R_TYPE (elf_reloc
->r_info
)
1030 < (unsigned int) R_PARISC_UNIMPLEMENTED
);
1031 bfd_reloc
->howto
= &elf_hppa_howto_table
[ELF_R_TYPE (elf_reloc
->r_info
)];
1034 /* Translate from an elf into field into a howto relocation pointer. */
1037 elf_hppa_info_to_howto_rel (bfd
*abfd ATTRIBUTE_UNUSED
,
1039 Elf_Internal_Rela
*elf_reloc
)
1041 BFD_ASSERT (ELF_R_TYPE (elf_reloc
->r_info
)
1042 < (unsigned int) R_PARISC_UNIMPLEMENTED
);
1043 bfd_reloc
->howto
= &elf_hppa_howto_table
[ELF_R_TYPE (elf_reloc
->r_info
)];
1046 /* Return the address of the howto table entry to perform the CODE
1047 relocation for an ARCH machine. */
1049 static reloc_howto_type
*
1050 elf_hppa_reloc_type_lookup (bfd
*abfd ATTRIBUTE_UNUSED
,
1051 bfd_reloc_code_real_type code
)
1053 if ((int) code
< (int) R_PARISC_UNIMPLEMENTED
)
1055 BFD_ASSERT ((int) elf_hppa_howto_table
[(int) code
].type
== (int) code
);
1056 return &elf_hppa_howto_table
[(int) code
];
1061 static reloc_howto_type
*
1062 elf_hppa_reloc_name_lookup (bfd
*abfd ATTRIBUTE_UNUSED
,
1068 i
< sizeof (elf_hppa_howto_table
) / sizeof (elf_hppa_howto_table
[0]);
1070 if (elf_hppa_howto_table
[i
].name
!= NULL
1071 && strcasecmp (elf_hppa_howto_table
[i
].name
, r_name
) == 0)
1072 return &elf_hppa_howto_table
[i
];
1077 /* Return TRUE if SYM represents a local label symbol. */
1080 elf_hppa_is_local_label_name (bfd
*abfd ATTRIBUTE_UNUSED
, const char *name
)
1082 if (name
[0] == 'L' && name
[1] == '$')
1084 return _bfd_elf_is_local_label_name (abfd
, name
);
1087 /* Set the correct type for an ELF section. We do this by the
1088 section name, which is a hack, but ought to work. */
1091 elf_hppa_fake_sections (bfd
*abfd
, Elf_Internal_Shdr
*hdr
, asection
*sec
)
1095 name
= bfd_get_section_name (abfd
, sec
);
1097 if (strcmp (name
, ".PARISC.unwind") == 0)
1103 hdr
->sh_type
= SHT_LOPROC
+ 1;
1107 /* ?!? How are unwinds supposed to work for symbols in arbitrary
1108 sections? Or what if we have multiple .text sections in a single
1109 .o file? HP really messed up on this one.
1111 Ugh. We can not use elf_section_data (sec)->this_idx at this
1112 point because it is not initialized yet.
1114 So we (gasp) recompute it here. Hopefully nobody ever changes the
1115 way sections are numbered in elf.c! */
1116 for (asec
= abfd
->sections
, indx
= 1; asec
; asec
= asec
->next
, indx
++)
1118 if (asec
->name
&& strcmp (asec
->name
, ".text") == 0)
1120 hdr
->sh_info
= indx
;
1125 /* I have no idea if this is really necessary or what it means. */
1126 hdr
->sh_entsize
= 4;
1132 elf_hppa_final_write_processing (bfd
*abfd
,
1133 bfd_boolean linker ATTRIBUTE_UNUSED
)
1135 int mach
= bfd_get_mach (abfd
);
1137 elf_elfheader (abfd
)->e_flags
&= ~(EF_PARISC_ARCH
| EF_PARISC_TRAPNIL
1138 | EF_PARISC_EXT
| EF_PARISC_LSB
1139 | EF_PARISC_WIDE
| EF_PARISC_NO_KABP
1140 | EF_PARISC_LAZYSWAP
);
1143 elf_elfheader (abfd
)->e_flags
|= EFA_PARISC_1_0
;
1144 else if (mach
== 11)
1145 elf_elfheader (abfd
)->e_flags
|= EFA_PARISC_1_1
;
1146 else if (mach
== 20)
1147 elf_elfheader (abfd
)->e_flags
|= EFA_PARISC_2_0
;
1148 else if (mach
== 25)
1149 elf_elfheader (abfd
)->e_flags
|= (EF_PARISC_WIDE
1151 /* The GNU tools have trapped without
1152 option since 1993, so need to take
1153 a step backwards with the ELF
1154 based toolchains. */
1155 | EF_PARISC_TRAPNIL
);
1158 /* Comparison function for qsort to sort unwind section during a
1162 hppa_unwind_entry_compare (const void *a
, const void *b
)
1164 const bfd_byte
*ap
, *bp
;
1165 unsigned long av
, bv
;
1168 av
= (unsigned long) ap
[0] << 24;
1169 av
|= (unsigned long) ap
[1] << 16;
1170 av
|= (unsigned long) ap
[2] << 8;
1171 av
|= (unsigned long) ap
[3];
1174 bv
= (unsigned long) bp
[0] << 24;
1175 bv
|= (unsigned long) bp
[1] << 16;
1176 bv
|= (unsigned long) bp
[2] << 8;
1177 bv
|= (unsigned long) bp
[3];
1179 return av
< bv
? -1 : av
> bv
? 1 : 0;
1183 elf_hppa_sort_unwind (bfd
*abfd
)
1187 /* Magic section names, but this is much safer than having
1188 relocate_section remember where SEGREL32 relocs occurred.
1189 Consider what happens if someone inept creates a linker script
1190 that puts unwind information in .text. */
1191 s
= bfd_get_section_by_name (abfd
, ".PARISC.unwind");
1197 if (!bfd_malloc_and_get_section (abfd
, s
, &contents
))
1201 qsort (contents
, (size_t) (size
/ 16), 16, hppa_unwind_entry_compare
);
1203 if (! bfd_set_section_contents (abfd
, s
, contents
, (file_ptr
) 0, size
))
1210 /* What to do when ld finds relocations against symbols defined in
1211 discarded sections. */
1214 elf_hppa_action_discarded (asection
*sec
)
1216 if (strcmp (".PARISC.unwind", sec
->name
) == 0)
1219 return _bfd_elf_default_action_discarded (sec
);
1223 /* Hook called by the linker routine which adds symbols from an object
1224 file. HP's libraries define symbols with HP specific section
1225 indices, which we have to handle. */
1228 elf_hppa_add_symbol_hook (bfd
*abfd
,
1229 struct bfd_link_info
*info ATTRIBUTE_UNUSED
,
1230 Elf_Internal_Sym
*sym
,
1231 const char **namep ATTRIBUTE_UNUSED
,
1232 flagword
*flagsp ATTRIBUTE_UNUSED
,
1236 unsigned int index
= sym
->st_shndx
;
1240 case SHN_PARISC_ANSI_COMMON
:
1241 *secp
= bfd_make_section_old_way (abfd
, ".PARISC.ansi.common");
1242 (*secp
)->flags
|= SEC_IS_COMMON
;
1243 *valp
= sym
->st_size
;
1246 case SHN_PARISC_HUGE_COMMON
:
1247 *secp
= bfd_make_section_old_way (abfd
, ".PARISC.huge.common");
1248 (*secp
)->flags
|= SEC_IS_COMMON
;
1249 *valp
= sym
->st_size
;
1257 elf_hppa_unmark_useless_dynamic_symbols (struct elf_link_hash_entry
*h
,
1260 struct bfd_link_info
*info
= data
;
1262 if (h
->root
.type
== bfd_link_hash_warning
)
1263 h
= (struct elf_link_hash_entry
*) h
->root
.u
.i
.link
;
1265 /* If we are not creating a shared library, and this symbol is
1266 referenced by a shared library but is not defined anywhere, then
1267 the generic code will warn that it is undefined.
1269 This behavior is undesirable on HPs since the standard shared
1270 libraries contain references to undefined symbols.
1272 So we twiddle the flags associated with such symbols so that they
1273 will not trigger the warning. ?!? FIXME. This is horribly fragile.
1275 Ultimately we should have better controls over the generic ELF BFD
1277 if (! info
->relocatable
1278 && info
->unresolved_syms_in_shared_libs
!= RM_IGNORE
1279 && h
->root
.type
== bfd_link_hash_undefined
1284 h
->pointer_equality_needed
= 1;
1291 elf_hppa_remark_useless_dynamic_symbols (struct elf_link_hash_entry
*h
,
1294 struct bfd_link_info
*info
= data
;
1296 if (h
->root
.type
== bfd_link_hash_warning
)
1297 h
= (struct elf_link_hash_entry
*) h
->root
.u
.i
.link
;
1299 /* If we are not creating a shared library, and this symbol is
1300 referenced by a shared library but is not defined anywhere, then
1301 the generic code will warn that it is undefined.
1303 This behavior is undesirable on HPs since the standard shared
1304 libraries contain references to undefined symbols.
1306 So we twiddle the flags associated with such symbols so that they
1307 will not trigger the warning. ?!? FIXME. This is horribly fragile.
1309 Ultimately we should have better controls over the generic ELF BFD
1311 if (! info
->relocatable
1312 && info
->unresolved_syms_in_shared_libs
!= RM_IGNORE
1313 && h
->root
.type
== bfd_link_hash_undefined
1316 && h
->pointer_equality_needed
)
1319 h
->pointer_equality_needed
= 0;
1326 elf_hppa_is_dynamic_loader_symbol (const char *name
)
1328 return (! strcmp (name
, "__CPU_REVISION")
1329 || ! strcmp (name
, "__CPU_KEYBITS_1")
1330 || ! strcmp (name
, "__SYSTEM_ID_D")
1331 || ! strcmp (name
, "__FPU_MODEL")
1332 || ! strcmp (name
, "__FPU_REVISION")
1333 || ! strcmp (name
, "__ARGC")
1334 || ! strcmp (name
, "__ARGV")
1335 || ! strcmp (name
, "__ENVP")
1336 || ! strcmp (name
, "__TLS_SIZE_D")
1337 || ! strcmp (name
, "__LOAD_INFO")
1338 || ! strcmp (name
, "__systab"));
1341 /* Record the lowest address for the data and text segments. */
1343 elf_hppa_record_segment_addrs (bfd
*abfd
,
1347 struct elf64_hppa_link_hash_table
*hppa_info
= data
;
1349 if ((section
->flags
& (SEC_ALLOC
| SEC_LOAD
)) == (SEC_ALLOC
| SEC_LOAD
))
1352 Elf_Internal_Phdr
*p
;
1354 p
= _bfd_elf_find_segment_containing_section (abfd
, section
->output_section
);
1355 BFD_ASSERT (p
!= NULL
);
1358 if (section
->flags
& SEC_READONLY
)
1360 if (value
< hppa_info
->text_segment_base
)
1361 hppa_info
->text_segment_base
= value
;
1365 if (value
< hppa_info
->data_segment_base
)
1366 hppa_info
->data_segment_base
= value
;
1371 /* Called after we have seen all the input files/sections, but before
1372 final symbol resolution and section placement has been determined.
1374 We use this hook to (possibly) provide a value for __gp, then we
1375 fall back to the generic ELF final link routine. */
1378 elf_hppa_final_link (bfd
*abfd
, struct bfd_link_info
*info
)
1381 struct elf64_hppa_link_hash_table
*hppa_info
= elf64_hppa_hash_table (info
);
1383 if (! info
->relocatable
)
1385 struct elf_link_hash_entry
*gp
;
1388 /* The linker script defines a value for __gp iff it was referenced
1389 by one of the objects being linked. First try to find the symbol
1390 in the hash table. If that fails, just compute the value __gp
1392 gp
= elf_link_hash_lookup (elf_hash_table (info
), "__gp", FALSE
,
1398 /* Adjust the value of __gp as we may want to slide it into the
1399 .plt section so that the stubs can access PLT entries without
1400 using an addil sequence. */
1401 gp
->root
.u
.def
.value
+= hppa_info
->gp_offset
;
1403 gp_val
= (gp
->root
.u
.def
.section
->output_section
->vma
1404 + gp
->root
.u
.def
.section
->output_offset
1405 + gp
->root
.u
.def
.value
);
1411 /* First look for a .plt section. If found, then __gp is the
1412 address of the .plt + gp_offset.
1414 If no .plt is found, then look for .dlt, .opd and .data (in
1415 that order) and set __gp to the base address of whichever
1416 section is found first. */
1418 sec
= hppa_info
->plt_sec
;
1419 if (sec
&& ! (sec
->flags
& SEC_EXCLUDE
))
1420 gp_val
= (sec
->output_offset
1421 + sec
->output_section
->vma
1422 + hppa_info
->gp_offset
);
1425 sec
= hppa_info
->dlt_sec
;
1426 if (!sec
|| (sec
->flags
& SEC_EXCLUDE
))
1427 sec
= hppa_info
->opd_sec
;
1428 if (!sec
|| (sec
->flags
& SEC_EXCLUDE
))
1429 sec
= bfd_get_section_by_name (abfd
, ".data");
1430 if (!sec
|| (sec
->flags
& SEC_EXCLUDE
))
1433 gp_val
= sec
->output_offset
+ sec
->output_section
->vma
;
1437 /* Install whatever value we found/computed for __gp. */
1438 _bfd_set_gp_value (abfd
, gp_val
);
1441 /* We need to know the base of the text and data segments so that we
1442 can perform SEGREL relocations. We will record the base addresses
1443 when we encounter the first SEGREL relocation. */
1444 hppa_info
->text_segment_base
= (bfd_vma
)-1;
1445 hppa_info
->data_segment_base
= (bfd_vma
)-1;
1447 /* HP's shared libraries have references to symbols that are not
1448 defined anywhere. The generic ELF BFD linker code will complain
1451 So we detect the losing case and arrange for the flags on the symbol
1452 to indicate that it was never referenced. This keeps the generic
1453 ELF BFD link code happy and appears to not create any secondary
1454 problems. Ultimately we need a way to control the behavior of the
1455 generic ELF BFD link code better. */
1456 elf_link_hash_traverse (elf_hash_table (info
),
1457 elf_hppa_unmark_useless_dynamic_symbols
,
1460 /* Invoke the regular ELF backend linker to do all the work. */
1461 retval
= bfd_elf_final_link (abfd
, info
);
1463 elf_link_hash_traverse (elf_hash_table (info
),
1464 elf_hppa_remark_useless_dynamic_symbols
,
1467 /* If we're producing a final executable, sort the contents of the
1470 retval
= elf_hppa_sort_unwind (abfd
);
1475 /* Relocate the given INSN. VALUE should be the actual value we want
1476 to insert into the instruction, ie by this point we should not be
1477 concerned with computing an offset relative to the DLT, PC, etc.
1478 Instead this routine is meant to handle the bit manipulations needed
1479 to insert the relocation into the given instruction. */
1482 elf_hppa_relocate_insn (int insn
, int sym_value
, unsigned int r_type
)
1486 /* This is any 22 bit branch. In PA2.0 syntax it corresponds to
1487 the "B" instruction. */
1488 case R_PARISC_PCREL22F
:
1489 case R_PARISC_PCREL22C
:
1490 return (insn
& ~0x3ff1ffd) | re_assemble_22 (sym_value
);
1492 /* This is any 12 bit branch. */
1493 case R_PARISC_PCREL12F
:
1494 return (insn
& ~0x1ffd) | re_assemble_12 (sym_value
);
1496 /* This is any 17 bit branch. In PA2.0 syntax it also corresponds
1497 to the "B" instruction as well as BE. */
1498 case R_PARISC_PCREL17F
:
1499 case R_PARISC_DIR17F
:
1500 case R_PARISC_DIR17R
:
1501 case R_PARISC_PCREL17C
:
1502 case R_PARISC_PCREL17R
:
1503 return (insn
& ~0x1f1ffd) | re_assemble_17 (sym_value
);
1505 /* ADDIL or LDIL instructions. */
1506 case R_PARISC_DLTREL21L
:
1507 case R_PARISC_DLTIND21L
:
1508 case R_PARISC_LTOFF_FPTR21L
:
1509 case R_PARISC_PCREL21L
:
1510 case R_PARISC_LTOFF_TP21L
:
1511 case R_PARISC_DPREL21L
:
1512 case R_PARISC_PLTOFF21L
:
1513 case R_PARISC_DIR21L
:
1514 return (insn
& ~0x1fffff) | re_assemble_21 (sym_value
);
1516 /* LDO and integer loads/stores with 14 bit displacements. */
1517 case R_PARISC_DLTREL14R
:
1518 case R_PARISC_DLTREL14F
:
1519 case R_PARISC_DLTIND14R
:
1520 case R_PARISC_DLTIND14F
:
1521 case R_PARISC_LTOFF_FPTR14R
:
1522 case R_PARISC_PCREL14R
:
1523 case R_PARISC_PCREL14F
:
1524 case R_PARISC_LTOFF_TP14R
:
1525 case R_PARISC_LTOFF_TP14F
:
1526 case R_PARISC_DPREL14R
:
1527 case R_PARISC_DPREL14F
:
1528 case R_PARISC_PLTOFF14R
:
1529 case R_PARISC_PLTOFF14F
:
1530 case R_PARISC_DIR14R
:
1531 case R_PARISC_DIR14F
:
1532 return (insn
& ~0x3fff) | low_sign_unext (sym_value
, 14);
1534 /* PA2.0W LDO and integer loads/stores with 16 bit displacements. */
1535 case R_PARISC_LTOFF_FPTR16F
:
1536 case R_PARISC_PCREL16F
:
1537 case R_PARISC_LTOFF_TP16F
:
1538 case R_PARISC_GPREL16F
:
1539 case R_PARISC_PLTOFF16F
:
1540 case R_PARISC_DIR16F
:
1541 case R_PARISC_LTOFF16F
:
1542 return (insn
& ~0xffff) | re_assemble_16 (sym_value
);
1544 /* Doubleword loads and stores with a 14 bit displacement. */
1545 case R_PARISC_DLTREL14DR
:
1546 case R_PARISC_DLTIND14DR
:
1547 case R_PARISC_LTOFF_FPTR14DR
:
1548 case R_PARISC_LTOFF_FPTR16DF
:
1549 case R_PARISC_PCREL14DR
:
1550 case R_PARISC_PCREL16DF
:
1551 case R_PARISC_LTOFF_TP14DR
:
1552 case R_PARISC_LTOFF_TP16DF
:
1553 case R_PARISC_DPREL14DR
:
1554 case R_PARISC_GPREL16DF
:
1555 case R_PARISC_PLTOFF14DR
:
1556 case R_PARISC_PLTOFF16DF
:
1557 case R_PARISC_DIR14DR
:
1558 case R_PARISC_DIR16DF
:
1559 case R_PARISC_LTOFF16DF
:
1560 return (insn
& ~0x3ff1) | (((sym_value
& 0x2000) >> 13)
1561 | ((sym_value
& 0x1ff8) << 1));
1563 /* Floating point single word load/store instructions. */
1564 case R_PARISC_DLTREL14WR
:
1565 case R_PARISC_DLTIND14WR
:
1566 case R_PARISC_LTOFF_FPTR14WR
:
1567 case R_PARISC_LTOFF_FPTR16WF
:
1568 case R_PARISC_PCREL14WR
:
1569 case R_PARISC_PCREL16WF
:
1570 case R_PARISC_LTOFF_TP14WR
:
1571 case R_PARISC_LTOFF_TP16WF
:
1572 case R_PARISC_DPREL14WR
:
1573 case R_PARISC_GPREL16WF
:
1574 case R_PARISC_PLTOFF14WR
:
1575 case R_PARISC_PLTOFF16WF
:
1576 case R_PARISC_DIR16WF
:
1577 case R_PARISC_DIR14WR
:
1578 case R_PARISC_LTOFF16WF
:
1579 return (insn
& ~0x3ff9) | (((sym_value
& 0x2000) >> 13)
1580 | ((sym_value
& 0x1ffc) << 1));
1587 /* Compute the value for a relocation (REL) during a final link stage,
1588 then insert the value into the proper location in CONTENTS.
1590 VALUE is a tentative value for the relocation and may be overridden
1591 and modified here based on the specific relocation to be performed.
1593 For example we do conversions for PC-relative branches in this routine
1594 or redirection of calls to external routines to stubs.
1596 The work of actually applying the relocation is left to a helper
1597 routine in an attempt to reduce the complexity and size of this
1600 static bfd_reloc_status_type
1601 elf_hppa_final_link_relocate (Elf_Internal_Rela
*rel
,
1604 asection
*input_section
,
1607 struct bfd_link_info
*info
,
1609 struct elf_link_hash_entry
*h ATTRIBUTE_UNUSED
,
1610 struct elf64_hppa_dyn_hash_entry
*dyn_h
)
1613 bfd_vma offset
= rel
->r_offset
;
1614 bfd_signed_vma addend
= rel
->r_addend
;
1615 reloc_howto_type
*howto
= elf_hppa_howto_table
+ ELF_R_TYPE (rel
->r_info
);
1616 unsigned int r_type
= howto
->type
;
1617 bfd_byte
*hit_data
= contents
+ offset
;
1618 struct elf64_hppa_link_hash_table
*hppa_info
= elf64_hppa_hash_table (info
);
1620 insn
= bfd_get_32 (input_bfd
, hit_data
);
1627 /* Basic function call support.
1629 Note for a call to a function defined in another dynamic library
1630 we want to redirect the call to a stub. */
1632 /* Random PC relative relocs. */
1633 case R_PARISC_PCREL21L
:
1634 case R_PARISC_PCREL14R
:
1635 case R_PARISC_PCREL14F
:
1636 case R_PARISC_PCREL14WR
:
1637 case R_PARISC_PCREL14DR
:
1638 case R_PARISC_PCREL16F
:
1639 case R_PARISC_PCREL16WF
:
1640 case R_PARISC_PCREL16DF
:
1642 /* If this is a call to a function defined in another dynamic
1643 library, then redirect the call to the local stub for this
1645 if (sym_sec
== NULL
|| sym_sec
->output_section
== NULL
)
1646 value
= (dyn_h
->stub_offset
+ hppa_info
->stub_sec
->output_offset
1647 + hppa_info
->stub_sec
->output_section
->vma
);
1649 /* Turn VALUE into a proper PC relative address. */
1650 value
-= (offset
+ input_section
->output_offset
1651 + input_section
->output_section
->vma
);
1653 /* Adjust for any field selectors. */
1654 if (r_type
== R_PARISC_PCREL21L
)
1655 value
= hppa_field_adjust (value
, -8 + addend
, e_lsel
);
1656 else if (r_type
== R_PARISC_PCREL14F
1657 || r_type
== R_PARISC_PCREL16F
1658 || r_type
== R_PARISC_PCREL16WF
1659 || r_type
== R_PARISC_PCREL16DF
)
1660 value
= hppa_field_adjust (value
, -8 + addend
, e_fsel
);
1662 value
= hppa_field_adjust (value
, -8 + addend
, e_rsel
);
1664 /* Apply the relocation to the given instruction. */
1665 insn
= elf_hppa_relocate_insn (insn
, (int) value
, r_type
);
1669 case R_PARISC_PCREL12F
:
1670 case R_PARISC_PCREL22F
:
1671 case R_PARISC_PCREL17F
:
1672 case R_PARISC_PCREL22C
:
1673 case R_PARISC_PCREL17C
:
1674 case R_PARISC_PCREL17R
:
1676 /* If this is a call to a function defined in another dynamic
1677 library, then redirect the call to the local stub for this
1679 if (sym_sec
== NULL
|| sym_sec
->output_section
== NULL
)
1680 value
= (dyn_h
->stub_offset
+ hppa_info
->stub_sec
->output_offset
1681 + hppa_info
->stub_sec
->output_section
->vma
);
1683 /* Turn VALUE into a proper PC relative address. */
1684 value
-= (offset
+ input_section
->output_offset
1685 + input_section
->output_section
->vma
);
1687 /* Adjust for any field selectors. */
1688 if (r_type
== R_PARISC_PCREL17R
)
1689 value
= hppa_field_adjust (value
, -8 + addend
, e_rsel
);
1691 value
= hppa_field_adjust (value
, -8 + addend
, e_fsel
);
1693 /* All branches are implicitly shifted by 2 places. */
1696 /* Apply the relocation to the given instruction. */
1697 insn
= elf_hppa_relocate_insn (insn
, (int) value
, r_type
);
1701 /* Indirect references to data through the DLT. */
1702 case R_PARISC_DLTIND14R
:
1703 case R_PARISC_DLTIND14F
:
1704 case R_PARISC_DLTIND14DR
:
1705 case R_PARISC_DLTIND14WR
:
1706 case R_PARISC_DLTIND21L
:
1707 case R_PARISC_LTOFF_FPTR14R
:
1708 case R_PARISC_LTOFF_FPTR14DR
:
1709 case R_PARISC_LTOFF_FPTR14WR
:
1710 case R_PARISC_LTOFF_FPTR21L
:
1711 case R_PARISC_LTOFF_FPTR16F
:
1712 case R_PARISC_LTOFF_FPTR16WF
:
1713 case R_PARISC_LTOFF_FPTR16DF
:
1714 case R_PARISC_LTOFF_TP21L
:
1715 case R_PARISC_LTOFF_TP14R
:
1716 case R_PARISC_LTOFF_TP14F
:
1717 case R_PARISC_LTOFF_TP14WR
:
1718 case R_PARISC_LTOFF_TP14DR
:
1719 case R_PARISC_LTOFF_TP16F
:
1720 case R_PARISC_LTOFF_TP16WF
:
1721 case R_PARISC_LTOFF_TP16DF
:
1722 case R_PARISC_LTOFF16F
:
1723 case R_PARISC_LTOFF16WF
:
1724 case R_PARISC_LTOFF16DF
:
1726 /* If this relocation was against a local symbol, then we still
1727 have not set up the DLT entry (it's not convenient to do so
1728 in the "finalize_dlt" routine because it is difficult to get
1729 to the local symbol's value).
1731 So, if this is a local symbol (h == NULL), then we need to
1732 fill in its DLT entry.
1734 Similarly we may still need to set up an entry in .opd for
1735 a local function which had its address taken. */
1736 if (dyn_h
->h
== NULL
)
1738 /* Now do .opd creation if needed. */
1739 if (r_type
== R_PARISC_LTOFF_FPTR14R
1740 || r_type
== R_PARISC_LTOFF_FPTR14DR
1741 || r_type
== R_PARISC_LTOFF_FPTR14WR
1742 || r_type
== R_PARISC_LTOFF_FPTR21L
1743 || r_type
== R_PARISC_LTOFF_FPTR16F
1744 || r_type
== R_PARISC_LTOFF_FPTR16WF
1745 || r_type
== R_PARISC_LTOFF_FPTR16DF
)
1747 /* The first two words of an .opd entry are zero. */
1748 memset (hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
,
1751 /* The next word is the address of the function. */
1752 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
+ addend
,
1753 (hppa_info
->opd_sec
->contents
1754 + dyn_h
->opd_offset
+ 16));
1756 /* The last word is our local __gp value. */
1757 value
= _bfd_get_gp_value
1758 (hppa_info
->opd_sec
->output_section
->owner
);
1759 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
1760 (hppa_info
->opd_sec
->contents
1761 + dyn_h
->opd_offset
+ 24));
1763 /* The DLT value is the address of the .opd entry. */
1764 value
= (dyn_h
->opd_offset
1765 + hppa_info
->opd_sec
->output_offset
1766 + hppa_info
->opd_sec
->output_section
->vma
);
1770 bfd_put_64 (hppa_info
->dlt_sec
->owner
,
1772 hppa_info
->dlt_sec
->contents
+ dyn_h
->dlt_offset
);
1775 /* We want the value of the DLT offset for this symbol, not
1776 the symbol's actual address. Note that __gp may not point
1777 to the start of the DLT, so we have to compute the absolute
1778 address, then subtract out the value of __gp. */
1779 value
= (dyn_h
->dlt_offset
1780 + hppa_info
->dlt_sec
->output_offset
1781 + hppa_info
->dlt_sec
->output_section
->vma
);
1782 value
-= _bfd_get_gp_value (output_bfd
);
1784 /* All DLTIND relocations are basically the same at this point,
1785 except that we need different field selectors for the 21bit
1786 version vs the 14bit versions. */
1787 if (r_type
== R_PARISC_DLTIND21L
1788 || r_type
== R_PARISC_LTOFF_FPTR21L
1789 || r_type
== R_PARISC_LTOFF_TP21L
)
1790 value
= hppa_field_adjust (value
, 0, e_lsel
);
1791 else if (r_type
== R_PARISC_DLTIND14F
1792 || r_type
== R_PARISC_LTOFF_FPTR16F
1793 || r_type
== R_PARISC_LTOFF_FPTR16WF
1794 || r_type
== R_PARISC_LTOFF_FPTR16DF
1795 || r_type
== R_PARISC_LTOFF16F
1796 || r_type
== R_PARISC_LTOFF16DF
1797 || r_type
== R_PARISC_LTOFF16WF
1798 || r_type
== R_PARISC_LTOFF_TP16F
1799 || r_type
== R_PARISC_LTOFF_TP16WF
1800 || r_type
== R_PARISC_LTOFF_TP16DF
)
1801 value
= hppa_field_adjust (value
, 0, e_fsel
);
1803 value
= hppa_field_adjust (value
, 0, e_rsel
);
1805 insn
= elf_hppa_relocate_insn (insn
, (int) value
, r_type
);
1809 case R_PARISC_DLTREL14R
:
1810 case R_PARISC_DLTREL14F
:
1811 case R_PARISC_DLTREL14DR
:
1812 case R_PARISC_DLTREL14WR
:
1813 case R_PARISC_DLTREL21L
:
1814 case R_PARISC_DPREL21L
:
1815 case R_PARISC_DPREL14WR
:
1816 case R_PARISC_DPREL14DR
:
1817 case R_PARISC_DPREL14R
:
1818 case R_PARISC_DPREL14F
:
1819 case R_PARISC_GPREL16F
:
1820 case R_PARISC_GPREL16WF
:
1821 case R_PARISC_GPREL16DF
:
1823 /* Subtract out the global pointer value to make value a DLT
1824 relative address. */
1825 value
-= _bfd_get_gp_value (output_bfd
);
1827 /* All DLTREL relocations are basically the same at this point,
1828 except that we need different field selectors for the 21bit
1829 version vs the 14bit versions. */
1830 if (r_type
== R_PARISC_DLTREL21L
1831 || r_type
== R_PARISC_DPREL21L
)
1832 value
= hppa_field_adjust (value
, addend
, e_lrsel
);
1833 else if (r_type
== R_PARISC_DLTREL14F
1834 || r_type
== R_PARISC_DPREL14F
1835 || r_type
== R_PARISC_GPREL16F
1836 || r_type
== R_PARISC_GPREL16WF
1837 || r_type
== R_PARISC_GPREL16DF
)
1838 value
= hppa_field_adjust (value
, addend
, e_fsel
);
1840 value
= hppa_field_adjust (value
, addend
, e_rrsel
);
1842 insn
= elf_hppa_relocate_insn (insn
, (int) value
, r_type
);
1846 case R_PARISC_DIR21L
:
1847 case R_PARISC_DIR17R
:
1848 case R_PARISC_DIR17F
:
1849 case R_PARISC_DIR14R
:
1850 case R_PARISC_DIR14F
:
1851 case R_PARISC_DIR14WR
:
1852 case R_PARISC_DIR14DR
:
1853 case R_PARISC_DIR16F
:
1854 case R_PARISC_DIR16WF
:
1855 case R_PARISC_DIR16DF
:
1857 /* All DIR relocations are basically the same at this point,
1858 except that branch offsets need to be divided by four, and
1859 we need different field selectors. Note that we don't
1860 redirect absolute calls to local stubs. */
1862 if (r_type
== R_PARISC_DIR21L
)
1863 value
= hppa_field_adjust (value
, addend
, e_lrsel
);
1864 else if (r_type
== R_PARISC_DIR17F
1865 || r_type
== R_PARISC_DIR16F
1866 || r_type
== R_PARISC_DIR16WF
1867 || r_type
== R_PARISC_DIR16DF
1868 || r_type
== R_PARISC_DIR14F
)
1869 value
= hppa_field_adjust (value
, addend
, e_fsel
);
1871 value
= hppa_field_adjust (value
, addend
, e_rrsel
);
1873 if (r_type
== R_PARISC_DIR17R
|| r_type
== R_PARISC_DIR17F
)
1874 /* All branches are implicitly shifted by 2 places. */
1877 insn
= elf_hppa_relocate_insn (insn
, (int) value
, r_type
);
1881 case R_PARISC_PLTOFF21L
:
1882 case R_PARISC_PLTOFF14R
:
1883 case R_PARISC_PLTOFF14F
:
1884 case R_PARISC_PLTOFF14WR
:
1885 case R_PARISC_PLTOFF14DR
:
1886 case R_PARISC_PLTOFF16F
:
1887 case R_PARISC_PLTOFF16WF
:
1888 case R_PARISC_PLTOFF16DF
:
1890 /* We want the value of the PLT offset for this symbol, not
1891 the symbol's actual address. Note that __gp may not point
1892 to the start of the DLT, so we have to compute the absolute
1893 address, then subtract out the value of __gp. */
1894 value
= (dyn_h
->plt_offset
1895 + hppa_info
->plt_sec
->output_offset
1896 + hppa_info
->plt_sec
->output_section
->vma
);
1897 value
-= _bfd_get_gp_value (output_bfd
);
1899 /* All PLTOFF relocations are basically the same at this point,
1900 except that we need different field selectors for the 21bit
1901 version vs the 14bit versions. */
1902 if (r_type
== R_PARISC_PLTOFF21L
)
1903 value
= hppa_field_adjust (value
, addend
, e_lrsel
);
1904 else if (r_type
== R_PARISC_PLTOFF14F
1905 || r_type
== R_PARISC_PLTOFF16F
1906 || r_type
== R_PARISC_PLTOFF16WF
1907 || r_type
== R_PARISC_PLTOFF16DF
)
1908 value
= hppa_field_adjust (value
, addend
, e_fsel
);
1910 value
= hppa_field_adjust (value
, addend
, e_rrsel
);
1912 insn
= elf_hppa_relocate_insn (insn
, (int) value
, r_type
);
1916 case R_PARISC_LTOFF_FPTR32
:
1918 /* We may still need to create the FPTR itself if it was for
1920 if (dyn_h
->h
== NULL
)
1922 /* The first two words of an .opd entry are zero. */
1923 memset (hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
, 0, 16);
1925 /* The next word is the address of the function. */
1926 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
+ addend
,
1927 (hppa_info
->opd_sec
->contents
1928 + dyn_h
->opd_offset
+ 16));
1930 /* The last word is our local __gp value. */
1931 value
= _bfd_get_gp_value
1932 (hppa_info
->opd_sec
->output_section
->owner
);
1933 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
1934 hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
+ 24);
1936 /* The DLT value is the address of the .opd entry. */
1937 value
= (dyn_h
->opd_offset
1938 + hppa_info
->opd_sec
->output_offset
1939 + hppa_info
->opd_sec
->output_section
->vma
);
1941 bfd_put_64 (hppa_info
->dlt_sec
->owner
,
1943 hppa_info
->dlt_sec
->contents
+ dyn_h
->dlt_offset
);
1946 /* We want the value of the DLT offset for this symbol, not
1947 the symbol's actual address. Note that __gp may not point
1948 to the start of the DLT, so we have to compute the absolute
1949 address, then subtract out the value of __gp. */
1950 value
= (dyn_h
->dlt_offset
1951 + hppa_info
->dlt_sec
->output_offset
1952 + hppa_info
->dlt_sec
->output_section
->vma
);
1953 value
-= _bfd_get_gp_value (output_bfd
);
1954 bfd_put_32 (input_bfd
, value
, hit_data
);
1955 return bfd_reloc_ok
;
1958 case R_PARISC_LTOFF_FPTR64
:
1959 case R_PARISC_LTOFF_TP64
:
1961 /* We may still need to create the FPTR itself if it was for
1963 if (dyn_h
->h
== NULL
&& r_type
== R_PARISC_LTOFF_FPTR64
)
1965 /* The first two words of an .opd entry are zero. */
1966 memset (hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
, 0, 16);
1968 /* The next word is the address of the function. */
1969 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
+ addend
,
1970 (hppa_info
->opd_sec
->contents
1971 + dyn_h
->opd_offset
+ 16));
1973 /* The last word is our local __gp value. */
1974 value
= _bfd_get_gp_value
1975 (hppa_info
->opd_sec
->output_section
->owner
);
1976 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
1977 hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
+ 24);
1979 /* The DLT value is the address of the .opd entry. */
1980 value
= (dyn_h
->opd_offset
1981 + hppa_info
->opd_sec
->output_offset
1982 + hppa_info
->opd_sec
->output_section
->vma
);
1984 bfd_put_64 (hppa_info
->dlt_sec
->owner
,
1986 hppa_info
->dlt_sec
->contents
+ dyn_h
->dlt_offset
);
1989 /* We want the value of the DLT offset for this symbol, not
1990 the symbol's actual address. Note that __gp may not point
1991 to the start of the DLT, so we have to compute the absolute
1992 address, then subtract out the value of __gp. */
1993 value
= (dyn_h
->dlt_offset
1994 + hppa_info
->dlt_sec
->output_offset
1995 + hppa_info
->dlt_sec
->output_section
->vma
);
1996 value
-= _bfd_get_gp_value (output_bfd
);
1997 bfd_put_64 (input_bfd
, value
, hit_data
);
1998 return bfd_reloc_ok
;
2001 case R_PARISC_DIR32
:
2002 bfd_put_32 (input_bfd
, value
+ addend
, hit_data
);
2003 return bfd_reloc_ok
;
2005 case R_PARISC_DIR64
:
2006 bfd_put_64 (input_bfd
, value
+ addend
, hit_data
);
2007 return bfd_reloc_ok
;
2009 case R_PARISC_GPREL64
:
2010 /* Subtract out the global pointer value to make value a DLT
2011 relative address. */
2012 value
-= _bfd_get_gp_value (output_bfd
);
2014 bfd_put_64 (input_bfd
, value
+ addend
, hit_data
);
2015 return bfd_reloc_ok
;
2017 case R_PARISC_LTOFF64
:
2018 /* We want the value of the DLT offset for this symbol, not
2019 the symbol's actual address. Note that __gp may not point
2020 to the start of the DLT, so we have to compute the absolute
2021 address, then subtract out the value of __gp. */
2022 value
= (dyn_h
->dlt_offset
2023 + hppa_info
->dlt_sec
->output_offset
2024 + hppa_info
->dlt_sec
->output_section
->vma
);
2025 value
-= _bfd_get_gp_value (output_bfd
);
2027 bfd_put_64 (input_bfd
, value
+ addend
, hit_data
);
2028 return bfd_reloc_ok
;
2030 case R_PARISC_PCREL32
:
2032 /* If this is a call to a function defined in another dynamic
2033 library, then redirect the call to the local stub for this
2035 if (sym_sec
== NULL
|| sym_sec
->output_section
== NULL
)
2036 value
= (dyn_h
->stub_offset
+ hppa_info
->stub_sec
->output_offset
2037 + hppa_info
->stub_sec
->output_section
->vma
);
2039 /* Turn VALUE into a proper PC relative address. */
2040 value
-= (offset
+ input_section
->output_offset
2041 + input_section
->output_section
->vma
);
2045 bfd_put_32 (input_bfd
, value
, hit_data
);
2046 return bfd_reloc_ok
;
2049 case R_PARISC_PCREL64
:
2051 /* If this is a call to a function defined in another dynamic
2052 library, then redirect the call to the local stub for this
2054 if (sym_sec
== NULL
|| sym_sec
->output_section
== NULL
)
2055 value
= (dyn_h
->stub_offset
+ hppa_info
->stub_sec
->output_offset
2056 + hppa_info
->stub_sec
->output_section
->vma
);
2058 /* Turn VALUE into a proper PC relative address. */
2059 value
-= (offset
+ input_section
->output_offset
2060 + input_section
->output_section
->vma
);
2064 bfd_put_64 (input_bfd
, value
, hit_data
);
2065 return bfd_reloc_ok
;
2068 case R_PARISC_FPTR64
:
2070 /* We may still need to create the FPTR itself if it was for
2072 if (dyn_h
->h
== NULL
)
2074 /* The first two words of an .opd entry are zero. */
2075 memset (hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
, 0, 16);
2077 /* The next word is the address of the function. */
2078 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
+ addend
,
2079 (hppa_info
->opd_sec
->contents
2080 + dyn_h
->opd_offset
+ 16));
2082 /* The last word is our local __gp value. */
2083 value
= _bfd_get_gp_value
2084 (hppa_info
->opd_sec
->output_section
->owner
);
2085 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
2086 hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
+ 24);
2089 if (dyn_h
->want_opd
)
2090 /* We want the value of the OPD offset for this symbol. */
2091 value
= (dyn_h
->opd_offset
2092 + hppa_info
->opd_sec
->output_offset
2093 + hppa_info
->opd_sec
->output_section
->vma
);
2095 /* We want the address of the symbol. */
2098 bfd_put_64 (input_bfd
, value
, hit_data
);
2099 return bfd_reloc_ok
;
2102 case R_PARISC_SECREL32
:
2103 bfd_put_32 (input_bfd
,
2104 value
+ addend
- sym_sec
->output_section
->vma
,
2106 return bfd_reloc_ok
;
2108 case R_PARISC_SEGREL32
:
2109 case R_PARISC_SEGREL64
:
2111 /* If this is the first SEGREL relocation, then initialize
2112 the segment base values. */
2113 if (hppa_info
->text_segment_base
== (bfd_vma
) -1)
2114 bfd_map_over_sections (output_bfd
, elf_hppa_record_segment_addrs
,
2117 /* VALUE holds the absolute address. We want to include the
2118 addend, then turn it into a segment relative address.
2120 The segment is derived from SYM_SEC. We assume that there are
2121 only two segments of note in the resulting executable/shlib.
2122 A readonly segment (.text) and a readwrite segment (.data). */
2125 if (sym_sec
->flags
& SEC_CODE
)
2126 value
-= hppa_info
->text_segment_base
;
2128 value
-= hppa_info
->data_segment_base
;
2130 if (r_type
== R_PARISC_SEGREL32
)
2131 bfd_put_32 (input_bfd
, value
, hit_data
);
2133 bfd_put_64 (input_bfd
, value
, hit_data
);
2134 return bfd_reloc_ok
;
2137 /* Something we don't know how to handle. */
2139 return bfd_reloc_notsupported
;
2142 /* Update the instruction word. */
2143 bfd_put_32 (input_bfd
, (bfd_vma
) insn
, hit_data
);
2144 return bfd_reloc_ok
;
2147 /* Relocate an HPPA ELF section. */
2150 elf_hppa_relocate_section (bfd
*output_bfd
,
2151 struct bfd_link_info
*info
,
2153 asection
*input_section
,
2155 Elf_Internal_Rela
*relocs
,
2156 Elf_Internal_Sym
*local_syms
,
2157 asection
**local_sections
)
2159 Elf_Internal_Shdr
*symtab_hdr
;
2160 Elf_Internal_Rela
*rel
;
2161 Elf_Internal_Rela
*relend
;
2162 struct elf64_hppa_link_hash_table
*hppa_info
;
2164 hppa_info
= elf64_hppa_hash_table (info
);
2165 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
2168 relend
= relocs
+ input_section
->reloc_count
;
2169 for (; rel
< relend
; rel
++)
2172 reloc_howto_type
*howto
= elf_hppa_howto_table
+ ELF_R_TYPE (rel
->r_info
);
2173 unsigned long r_symndx
;
2174 struct elf_link_hash_entry
*h
;
2175 Elf_Internal_Sym
*sym
;
2178 bfd_reloc_status_type r
;
2179 const char *dyn_name
;
2180 char *dynh_buf
= NULL
;
2181 size_t dynh_buflen
= 0;
2182 struct elf64_hppa_dyn_hash_entry
*dyn_h
= NULL
;
2184 r_type
= ELF_R_TYPE (rel
->r_info
);
2185 if (r_type
< 0 || r_type
>= (int) R_PARISC_UNIMPLEMENTED
)
2187 bfd_set_error (bfd_error_bad_value
);
2191 /* This is a final link. */
2192 r_symndx
= ELF_R_SYM (rel
->r_info
);
2196 if (r_symndx
< symtab_hdr
->sh_info
)
2198 /* This is a local symbol. */
2199 sym
= local_syms
+ r_symndx
;
2200 sym_sec
= local_sections
[r_symndx
];
2201 relocation
= _bfd_elf_rela_local_sym (output_bfd
, sym
, &sym_sec
, rel
);
2203 /* If this symbol has an entry in the PA64 dynamic hash
2204 table, then get it. */
2205 dyn_name
= get_dyn_name (input_bfd
, h
, rel
,
2206 &dynh_buf
, &dynh_buflen
);
2207 dyn_h
= elf64_hppa_dyn_hash_lookup (&hppa_info
->dyn_hash_table
,
2208 dyn_name
, FALSE
, FALSE
);
2213 /* This is not a local symbol. */
2217 indx
= r_symndx
- symtab_hdr
->sh_info
;
2218 h
= elf_sym_hashes (input_bfd
)[indx
];
2219 while (h
->root
.type
== bfd_link_hash_indirect
2220 || h
->root
.type
== bfd_link_hash_warning
)
2221 h
= (struct elf_link_hash_entry
*) h
->root
.u
.i
.link
;
2222 if (h
->root
.type
== bfd_link_hash_defined
2223 || h
->root
.type
== bfd_link_hash_defweak
)
2225 sym_sec
= h
->root
.u
.def
.section
;
2227 /* If this symbol has an entry in the PA64 dynamic hash
2228 table, then get it. */
2229 dyn_name
= get_dyn_name (input_bfd
, h
, rel
,
2230 &dynh_buf
, &dynh_buflen
);
2231 dyn_h
= elf64_hppa_dyn_hash_lookup (&hppa_info
->dyn_hash_table
,
2232 dyn_name
, FALSE
, FALSE
);
2234 /* If we have a relocation against a symbol defined in a
2235 shared library and we have not created an entry in the
2236 PA64 dynamic symbol hash table for it, then we lose. */
2237 if (!info
->relocatable
2238 && sym_sec
->output_section
== NULL
&& dyn_h
== NULL
)
2240 (*_bfd_error_handler
)
2241 (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
2244 (long) rel
->r_offset
,
2246 h
->root
.root
.string
);
2248 else if (sym_sec
->output_section
)
2249 relocation
= (h
->root
.u
.def
.value
2250 + sym_sec
->output_offset
2251 + sym_sec
->output_section
->vma
);
2253 else if (info
->unresolved_syms_in_objects
== RM_IGNORE
2254 && ELF_ST_VISIBILITY (h
->other
) == STV_DEFAULT
)
2256 /* If this symbol has an entry in the PA64 dynamic hash
2257 table, then get it. */
2258 dyn_name
= get_dyn_name (input_bfd
, h
, rel
,
2259 &dynh_buf
, &dynh_buflen
);
2260 dyn_h
= elf64_hppa_dyn_hash_lookup (&hppa_info
->dyn_hash_table
,
2261 dyn_name
, FALSE
, FALSE
);
2263 if (!info
->relocatable
&& dyn_h
== NULL
)
2265 (*_bfd_error_handler
)
2266 (_("%B(%A): warning: unresolvable relocation against symbol `%s'"),
2267 input_bfd
, input_section
, h
->root
.root
.string
);
2270 else if (h
->root
.type
== bfd_link_hash_undefweak
)
2272 dyn_name
= get_dyn_name (input_bfd
, h
, rel
,
2273 &dynh_buf
, &dynh_buflen
);
2274 dyn_h
= elf64_hppa_dyn_hash_lookup (&hppa_info
->dyn_hash_table
,
2275 dyn_name
, FALSE
, FALSE
);
2277 if (!info
->relocatable
&& dyn_h
== NULL
)
2279 (*_bfd_error_handler
)
2280 (_("%B(%A): warning: unresolvable relocation against symbol `%s'"),
2281 input_bfd
, input_section
, h
->root
.root
.string
);
2284 else if (!info
->relocatable
)
2286 /* Ignore dynamic loader defined symbols. */
2287 if (!elf_hppa_is_dynamic_loader_symbol (h
->root
.root
.string
))
2289 if (!((*info
->callbacks
->undefined_symbol
)
2290 (info
, h
->root
.root
.string
, input_bfd
,
2291 input_section
, rel
->r_offset
,
2292 (info
->unresolved_syms_in_objects
== RM_GENERATE_ERROR
2293 || ELF_ST_VISIBILITY (h
->other
)))))
2300 if (sym_sec
!= NULL
&& elf_discarded_section (sym_sec
))
2302 /* For relocs against symbols from removed linkonce sections,
2303 or sections discarded by a linker script, we just want the
2304 section contents zeroed. Avoid any special processing. */
2305 _bfd_clear_contents (howto
, input_bfd
, contents
+ rel
->r_offset
);
2311 if (info
->relocatable
)
2314 r
= elf_hppa_final_link_relocate (rel
, input_bfd
, output_bfd
,
2315 input_section
, contents
,
2316 relocation
, info
, sym_sec
,
2319 if (r
!= bfd_reloc_ok
)
2325 case bfd_reloc_overflow
:
2327 const char *sym_name
;
2333 sym_name
= bfd_elf_string_from_elf_section (input_bfd
,
2334 symtab_hdr
->sh_link
,
2336 if (sym_name
== NULL
)
2338 if (*sym_name
== '\0')
2339 sym_name
= bfd_section_name (input_bfd
, sym_sec
);
2342 if (!((*info
->callbacks
->reloc_overflow
)
2343 (info
, (h
? &h
->root
: NULL
), sym_name
,
2344 howto
->name
, (bfd_vma
) 0, input_bfd
,
2345 input_section
, rel
->r_offset
)))
2355 #endif /* ARCH_SIZE == 64 */