]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - bfd/elf-hppa.h
* elf-hppa.h: New file. Common stuff for elf32 and elf64 PA
[thirdparty/binutils-gdb.git] / bfd / elf-hppa.h
CommitLineData
9e103c9c
JL
1/* Common code for PA ELF implementations.
2 Copyright (C) 1999
3 Free Software Foundation, Inc.
4
5This file is part of BFD, the Binary File Descriptor library.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
19Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20
21#define ELF_HOWTO_TABLE_SIZE R_PARISC_UNIMPLEMENTED + 1
22
23#if ARCH_SIZE == 64
24#define ELF_R_TYPE(X) ELF64_R_TYPE(X)
25#define _bfd_elf_hppa_gen_reloc_type _bfd_elf64_hppa_gen_reloc_type
26#endif
27#if ARCH_SIZE == 32
28#define ELF_R_TYPE(X) ELF32_R_TYPE(X)
29#define _bfd_elf_hppa_gen_reloc_type _bfd_elf32_hppa_gen_reloc_type
30#endif
31
32/* ELF/PA relocation howto entries. */
33
34static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
35{
36 {R_PARISC_NONE, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_NONE"},
37
38 /* The values in DIR32 are to placate the check in
39 _bfd_stab_section_find_nearest_line. */
40 {R_PARISC_DIR32, 0, 2, 32, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR32", false, 0, 0xffffffff, false},
41 {R_PARISC_DIR21L, 0, 0, 21, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR21L"},
42 {R_PARISC_DIR17R, 0, 0, 17, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR17R"},
43 {R_PARISC_DIR17F, 0, 0, 17, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR17F"},
44 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
45 {R_PARISC_DIR14R, 0, 0, 14, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR14R"},
46 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
47 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
48 {R_PARISC_PCREL32, 0, 0, 32, true, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL32"},
49
50 {R_PARISC_PCREL21L, 0, 0, 21, true, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL21L"},
51 {R_PARISC_PCREL17R, 0, 0, 17, true, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL17R"},
52 {R_PARISC_PCREL17F, 0, 0, 17, true, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL17F"},
53 {R_PARISC_PCREL17C, 0, 0, 17, true, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL17C"},
54 {R_PARISC_PCREL14R, 0, 0, 14, true, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL14R"},
55 {R_PARISC_PCREL14F, 0, 0, 14, true, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL14F"},
56 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
57 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
58 {R_PARISC_DPREL21L, 0, 0, 21, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DPREL21L"},
59 {R_PARISC_DPREL14WR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DPREL14WR"},
60
61 {R_PARISC_DPREL14DR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DPREL14DR"},
62 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
63 {R_PARISC_DPREL14R, 0, 0, 14, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DPREL14R"},
64 {R_PARISC_DPREL14F, 0, 0, 14, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DPREL14F"},
65 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
66 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
67 {R_PARISC_DLTREL21L, 0, 0, 21, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DLTREL21L"},
68 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
69 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
70 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
71
72 {R_PARISC_DLTREL14R, 0, 0, 14, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DLTREL14R"},
73 {R_PARISC_DLTREL14F, 0, 0, 14, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DLTREL14F"},
74 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
75 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
76 {R_PARISC_DLTIND21L, 0, 0, 21, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DLTIND21L"},
77 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
78 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
79 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
80 {R_PARISC_DLTIND14R, 0, 0, 14, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DLTIND14R"},
81 {R_PARISC_DLTIND14F, 0, 0, 14, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DLTIND14F"},
82
83 {R_PARISC_SETBASE, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_SETBASE"},
84 {R_PARISC_SECREL32, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_SECREL32"},
85 {R_PARISC_BASEREL21L, 0, 0, 21, false, 0, complain_overflow_bitfield, 0, "R_PARISC_BASEREL21L"},
86 {R_PARISC_BASEREL17R, 0, 0, 17, false, 0, complain_overflow_bitfield, 0, "R_PARISC_BASEREL17R"},
87 {R_PARISC_BASEREL17F, 0, 0, 17, false, 0, complain_overflow_bitfield, 0, "R_PARISC_BASEREL17F"},
88 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
89 {R_PARISC_BASEREL14R, 0, 0, 14, false, 0, complain_overflow_bitfield, 0, "R_PARISC_BASEREL14R"},
90 {R_PARISC_BASEREL14F, 0, 0, 14, false, 0, complain_overflow_bitfield, 0, "R_PARISC_BASEREL14F"},
91 {R_PARISC_SEGBASE, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_SEGBASE"},
92 {R_PARISC_SEGREL32, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_SEGREL32"},
93
94 {R_PARISC_PLTOFF21L, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PLTOFF21L"},
95 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
96 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
97 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
98 {R_PARISC_PLTOFF14R, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PLTOFF14R"},
99 {R_PARISC_PLTOFF14F, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PLTOFF14F"},
100 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
101 {R_PARISC_LTOFF_FPTR32, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_FPTR32"},
102 {R_PARISC_LTOFF_FPTR21L, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_FPTR21L"},
103 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
104
105 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
106 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
107 {R_PARISC_LTOFF_FPTR14R, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_FPTR14R"},
108 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
109 {R_PARISC_FPTR64, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_FPTR64"},
110 {R_PARISC_PLABEL32, 0, 0, 32, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PLABEL32"},
111 {R_PARISC_PLABEL21L, 0, 0, 21, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PLABEL21L"},
112 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
113 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
114 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
115
116 {R_PARISC_PLABEL14R, 0, 0, 14, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PLABEL14R"},
117 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
118 {R_PARISC_PCREL64, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL64"},
119 {R_PARISC_PCREL22C, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL22C"},
120 {R_PARISC_PCREL22F, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL22F"},
121 {R_PARISC_PCREL14WR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL14WR"},
122 {R_PARISC_PCREL14DR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL14DR"},
123 {R_PARISC_PCREL16F, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL16F"},
124 {R_PARISC_PCREL16WF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL16WF"},
125 {R_PARISC_PCREL16DF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PCREL16DF"},
126
127 {R_PARISC_DIR64, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR64"},
128 {R_PARISC_DIR64WR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR64WR"},
129 {R_PARISC_DIR64DR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR64DR"},
130 {R_PARISC_DIR14WR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR14WR"},
131 {R_PARISC_DIR14DR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR14DR"},
132 {R_PARISC_DIR16F, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR16F"},
133 {R_PARISC_DIR16WF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR16WF"},
134 {R_PARISC_DIR16DF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DIR16DF"},
135 {R_PARISC_GPREL64, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_GPREL64"},
136 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
137
138 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
139 {R_PARISC_DLTREL14WR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DLTREL14WR"},
140 {R_PARISC_DLTREL14DR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DLTREL14DR"},
141 {R_PARISC_GPREL16F, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_GPREL16F"},
142 {R_PARISC_GPREL16WF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_GPREL16WF"},
143 {R_PARISC_GPREL16DF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_GPREL16DF"},
144 {R_PARISC_LTOFF64, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF64"},
145 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
146 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
147 {R_PARISC_DLTIND14WR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DLTIND14WR"},
148
149 {R_PARISC_DLTIND14DR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_DLTIND14DR"},
150 {R_PARISC_LTOFF16F, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF16F"},
151 {R_PARISC_LTOFF16DF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF16DF"},
152 {R_PARISC_SECREL64, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_SECREL64"},
153 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
154 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
155 {R_PARISC_BASEREL14WR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_BSEREL14WR"},
156 {R_PARISC_BASEREL14DR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_BASEREL14DR"},
157 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
158 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
159
160 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
161 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
162 {R_PARISC_SEGREL64, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_SEGREL64"},
163 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
164 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
165 {R_PARISC_PLTOFF14WR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PLTOFF14WR"},
166 {R_PARISC_PLTOFF14DR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PLTOFF14DR"},
167 {R_PARISC_PLTOFF16F, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PLTOFF16F"},
168 {R_PARISC_PLTOFF16WF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PLTOFF16WF"},
169 {R_PARISC_PLTOFF16DF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_PLTOFF16DF"},
170
171 {R_PARISC_LTOFF_FPTR64, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
172 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
173 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
174 {R_PARISC_LTOFF_FPTR14WR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_FPTR14WR"},
175 {R_PARISC_LTOFF_FPTR14DR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_FPTR14DR"},
176 {R_PARISC_LTOFF_FPTR16F, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_FPTR16F"},
177 {R_PARISC_LTOFF_FPTR16WF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_FPTR16WF"},
178 {R_PARISC_LTOFF_FPTR16DF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
179 {R_PARISC_COPY, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_COPY"},
180 {R_PARISC_IPLT, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_IPLT"},
181
182 {R_PARISC_EPLT, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_EPLT"},
183 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
184 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
185 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
186 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
187 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
188 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
189 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
190 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
191 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
192
193 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
194 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
195 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
196 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
197 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
198 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
199 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
200 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
201 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
202 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
203
204 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
205 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
206 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
207 {R_PARISC_TPREL32, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_TPREL32"},
208 {R_PARISC_TPREL21L, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_TPREL21L"},
209 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
210 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
211 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
212 {R_PARISC_TPREL14R, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_TPREL14R"},
213 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
214
215 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
216 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
217 {R_PARISC_LTOFF_TP21L, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_TP21L"},
218 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
219 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
220 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
221 {R_PARISC_LTOFF_TP14R, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
222 {R_PARISC_LTOFF_TP14F, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_TP14F"},
223 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
224 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
225
226 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
227 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
228 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
229 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
230 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
231 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
232 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
233 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
234 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
235 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
236
237 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
238 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
239 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
240 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
241 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
242 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
243 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
244 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
245 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
246 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
247
248 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
249 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
250 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
251 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
252 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
253 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
254 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
255 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
256 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
257 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
258
259 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
260 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
261 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
262 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
263 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
264 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
265 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
266 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
267 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
268 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
269
270 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
271 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
272 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_UNIMPLEMENTED"},
273 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
274 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
275 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
276 {R_PARISC_TPREL64, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_TPREL64"},
277 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
278 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
279 {R_PARISC_TPREL14WR, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_TPREL14WR"},
280
281 {R_PARISC_TPREL14DR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_TPREL14DR"},
282 {R_PARISC_TPREL16F, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_TPREL16F"},
283 {R_PARISC_TPREL16WF, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_TPREL16WF"},
284 {R_PARISC_TPREL16DF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_TPREL16DF"},
285 {R_PARISC_LTOFF_TP64, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_TP64"},
286 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
287 {R_PARISC_UNIMPLEMENTED, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_UNIMPLEMENTED"},
288 {R_PARISC_LTOFF_TP14WR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_TP14WR"},
289 {R_PARISC_LTOFF_TP14DR, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_TP14DR"},
290 {R_PARISC_LTOFF_TP16F, 0, 0, 0, false, 0, complain_overflow_dont, NULL, "R_PARISC_LTOFF_TP16F"},
291
292 {R_PARISC_LTOFF_TP16WF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_TP16WF"},
293 {R_PARISC_LTOFF_TP16DF, 0, 0, 0, false, 0, complain_overflow_bitfield, 0, "R_PARISC_LTOFF_TP16DF"},
294};
295
296/* Return one (or more) BFD relocations which implement the base
297 relocation with modifications based on format and field. */
298
299elf_hppa_reloc_type **
300_bfd_elf_hppa_gen_reloc_type (abfd, base_type, format, field, ignore, sym)
301 bfd *abfd;
302 elf_hppa_reloc_type base_type;
303 int format;
304 int field;
305 int ignore;
306 asymbol *sym;
307{
308 elf_hppa_reloc_type *finaltype;
309 elf_hppa_reloc_type **final_types;
310
311 /* Allocate slots for the BFD relocation. */
312 final_types = ((elf_hppa_reloc_type **)
313 bfd_alloc (abfd, sizeof (elf_hppa_reloc_type *) * 2));
314 if (final_types == NULL)
315 return NULL;
316
317 /* Allocate space for the relocation itself. */
318 finaltype = ((elf_hppa_reloc_type *)
319 bfd_alloc (abfd, sizeof (elf_hppa_reloc_type)));
320 if (finaltype == NULL)
321 return NULL;
322
323 /* Some reasonable defaults. */
324 final_types[0] = finaltype;
325 final_types[1] = NULL;
326
327#define final_type finaltype[0]
328
329 final_type = base_type;
330
331 /* Just a tangle of nested switch statements to deal with the braindamage
332 that a different field selector means a completely different relocation
333 for PA ELF. */
334 switch (base_type)
335 {
336 case R_HPPA:
337 case R_HPPA_ABS_CALL:
338 switch (format)
339 {
340 case 14:
341 switch (field)
342 {
343 case e_rsel:
344 case e_rrsel:
345 final_type = R_PARISC_DIR14R;
346 break;
347 case e_rtsel:
348 final_type = R_PARISC_DLTREL14R;
349 break;
350 case e_tsel:
351 final_type = R_PARISC_DLTREL14F;
352 break;
353 case e_rpsel:
354 final_type = R_PARISC_PLABEL14R;
355 break;
356 default:
357 return NULL;
358 }
359 break;
360
361 case 17:
362 switch (field)
363 {
364 case e_fsel:
365 final_type = R_PARISC_DIR17F;
366 break;
367 case e_rsel:
368 case e_rrsel:
369 final_type = R_PARISC_DIR17R;
370 break;
371 default:
372 return NULL;
373 }
374 break;
375
376 case 21:
377 switch (field)
378 {
379 case e_lsel:
380 case e_lrsel:
381 final_type = R_PARISC_DIR21L;
382 break;
383 case e_ltsel:
384 final_type = R_PARISC_DLTREL21L;
385 break;
386 case e_lpsel:
387 final_type = R_PARISC_PLABEL21L;
388 break;
389 default:
390 return NULL;
391 }
392 break;
393
394 case 32:
395 switch (field)
396 {
397 case e_fsel:
398 final_type = R_PARISC_DIR32;
399 break;
400 case e_psel:
401 final_type = R_PARISC_PLABEL32;
402 break;
403 default:
404 return NULL;
405 }
406 break;
407
408 default:
409 return NULL;
410 }
411 break;
412
413
414 case R_HPPA_GOTOFF:
415 switch (format)
416 {
417 case 14:
418 switch (field)
419 {
420 case e_rsel:
421 case e_rrsel:
422 final_type = R_PARISC_DPREL14R;
423 break;
424 case e_fsel:
425 final_type = R_PARISC_DPREL14F;
426 break;
427 default:
428 return NULL;
429 }
430 break;
431
432 case 21:
433 switch (field)
434 {
435 case e_lrsel:
436 case e_lsel:
437 final_type = R_PARISC_DPREL21L;
438 break;
439 default:
440 return NULL;
441 }
442 break;
443
444 default:
445 return NULL;
446 }
447 break;
448
449
450 case R_HPPA_PCREL_CALL:
451 switch (format)
452 {
453 case 14:
454 switch (field)
455 {
456 case e_rsel:
457 case e_rrsel:
458 final_type = R_PARISC_PCREL14R;
459 break;
460 case e_fsel:
461 final_type = R_PARISC_PCREL14F;
462 break;
463 default:
464 return NULL;
465 }
466 break;
467
468 case 17:
469 switch (field)
470 {
471 case e_rsel:
472 case e_rrsel:
473 final_type = R_PARISC_PCREL17R;
474 break;
475 case e_fsel:
476 final_type = R_PARISC_PCREL17F;
477 break;
478 default:
479 return NULL;
480 }
481 break;
482
483 case 21:
484 switch (field)
485 {
486 case e_lsel:
487 case e_lrsel:
488 final_type = R_PARISC_PCREL21L;
489 break;
490 default:
491 return NULL;
492 }
493 break;
494
495 default:
496 return NULL;
497 }
498 break;
499
500 default:
501 return NULL;
502 }
503
504 return final_types;
505}
506
507/* Translate from an elf into field into a howto relocation pointer. */
508
509static void
510elf_hppa_info_to_howto (abfd, bfd_reloc, elf_reloc)
511 bfd *abfd;
512 arelent *bfd_reloc;
513 Elf_Internal_Rela *elf_reloc;
514{
515 BFD_ASSERT (ELF_R_TYPE(elf_reloc->r_info)
516 < (unsigned int) R_PARISC_UNIMPLEMENTED);
517 bfd_reloc->howto = &elf_hppa_howto_table[ELF_R_TYPE (elf_reloc->r_info)];
518}
519
520/* Translate from an elf into field into a howto relocation pointer. */
521
522static void
523elf_hppa_info_to_howto_rel (abfd, bfd_reloc, elf_reloc)
524 bfd *abfd;
525 arelent *bfd_reloc;
526 Elf_Internal_Rel *elf_reloc;
527{
528 BFD_ASSERT (ELF_R_TYPE(elf_reloc->r_info)
529 < (unsigned int) R_PARISC_UNIMPLEMENTED);
530 bfd_reloc->howto = &elf_hppa_howto_table[ELF_R_TYPE (elf_reloc->r_info)];
531}
532
533/* Return the address of the howto table entry to perform the CODE
534 relocation for an ARCH machine. */
535
536static reloc_howto_type *
537elf_hppa_reloc_type_lookup (abfd, code)
538 bfd *abfd;
539 bfd_reloc_code_real_type code;
540{
541 if ((int) code < (int) R_PARISC_UNIMPLEMENTED)
542 {
543 BFD_ASSERT ((int) elf_hppa_howto_table[(int) code].type == (int) code);
544 return &elf_hppa_howto_table[(int) code];
545 }
546 return NULL;
547}