OSDN Git Service

*** empty log message ***
[pf3gnuchains/pf3gnuchains3x.git] / bfd / elf-hppa.h
1 /* Common code for PA ELF implementations.
2    Copyright (C) 1999
3    Free Software Foundation, Inc.
4
5 This file is part of BFD, the Binary File Descriptor library.
6
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 2 of the License, or
10 (at your option) any later version.
11
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.
16
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., 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
34 static 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
299 elf_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
509 static void
510 elf_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
522 static void
523 elf_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
536 static reloc_howto_type *
537 elf_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 }
548
549 static void
550 elf_hppa_final_write_processing (abfd, linker)
551      bfd *abfd;
552      boolean linker;
553 {
554   int mach = bfd_get_mach (abfd);
555
556   elf_elfheader (abfd)->e_flags &= ~(EF_PARISC_ARCH | EF_PARISC_TRAPNIL
557                                      | EF_PARISC_EXT | EF_PARISC_LSB
558                                      | EF_PARISC_WIDE | EF_PARISC_NO_KABP
559                                      | EF_PARISC_LAZYSWAP);
560
561   if (mach == 10)
562     elf_elfheader (abfd)->e_flags |= EFA_PARISC_1_0;
563   else if (mach == 11)
564     elf_elfheader (abfd)->e_flags |= EFA_PARISC_1_1;
565   else if (mach == 20)
566     {
567       elf_elfheader (abfd)->e_flags |= EFA_PARISC_2_0;
568 #if ARCH_SIZE == 64
569       elf_elfheader (abfd)->e_flags |= EF_PARISC_WIDE;
570 #endif
571     }
572
573 }