1 /* Common code for PA ELF implementations.
2 Copyright (C) 1999 Free Software Foundation, Inc.
4 This file is part of BFD, the Binary File Descriptor library.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20 #define ELF_HOWTO_TABLE_SIZE R_PARISC_UNIMPLEMENTED + 1
22 /* This file is included by multiple PA ELF BFD backends with different
25 Most of the routines are written to be size independent, but sometimes
26 external constraints require 32 or 64 bit specific code. We remap
27 the definitions/functions as necessary here. */
29 #define ELF_R_TYPE(X) ELF64_R_TYPE(X)
30 #define ELF_R_SYM(X) ELF64_R_SYM(X)
31 #define _bfd_elf_hppa_gen_reloc_type _bfd_elf64_hppa_gen_reloc_type
32 #define elf_hppa_relocate_section elf64_hppa_relocate_section
33 #define bfd_elf_bfd_final_link bfd_elf64_bfd_final_link
34 #define elf_hppa_final_link elf64_hppa_final_link
37 #define ELF_R_TYPE(X) ELF32_R_TYPE(X)
38 #define ELF_R_SYM(X) ELF32_R_SYM(X)
39 #define _bfd_elf_hppa_gen_reloc_type _bfd_elf32_hppa_gen_reloc_type
40 #define elf_hppa_relocate_section elf32_hppa_relocate_section
41 #define bfd_elf_bfd_final_link bfd_elf32_bfd_final_link
42 #define elf_hppa_final_link elf32_hppa_final_link
46 elf_hppa_relocate_section
47 PARAMS ((bfd
*, struct bfd_link_info
*, bfd
*, asection
*,
48 bfd_byte
*, Elf_Internal_Rela
*, Elf_Internal_Sym
*, asection
**));
50 static bfd_reloc_status_type elf_hppa_final_link_relocate
51 PARAMS ((Elf_Internal_Rela
*, bfd
*, bfd
*, asection
*,
52 bfd_byte
*, bfd_vma
, struct bfd_link_info
*,
53 asection
*, struct elf_link_hash_entry
*,
54 struct elf64_hppa_dyn_hash_entry
*));
56 static unsigned long elf_hppa_relocate_insn
57 PARAMS ((unsigned long, long, unsigned long));
59 static boolean elf_hppa_add_symbol_hook
60 PARAMS ((bfd
*, struct bfd_link_info
*, const Elf_Internal_Sym
*,
61 const char **, flagword
*, asection
**, bfd_vma
*));
63 static boolean elf_hppa_final_link
64 PARAMS ((bfd
*, struct bfd_link_info
*));
66 static boolean elf_hppa_unmark_useless_dynamic_symbols
67 PARAMS ((struct elf_link_hash_entry
*, PTR
));
69 static boolean elf_hppa_remark_useless_dynamic_symbols
70 PARAMS ((struct elf_link_hash_entry
*, PTR
));
72 static void elf_hppa_record_segment_addrs
73 PARAMS ((bfd
*, asection
*, PTR
));
75 /* ELF/PA relocation howto entries. */
77 static reloc_howto_type elf_hppa_howto_table
[ELF_HOWTO_TABLE_SIZE
] =
79 {R_PARISC_NONE
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_NONE"},
81 /* The values in DIR32 are to placate the check in
82 _bfd_stab_section_find_nearest_line. */
83 {R_PARISC_DIR32
, 0, 2, 32, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DIR32", false, 0, 0xffffffff, false},
84 {R_PARISC_DIR21L
, 0, 0, 21, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DIR21L"},
85 {R_PARISC_DIR17R
, 0, 0, 17, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DIR17R"},
86 {R_PARISC_DIR17F
, 0, 0, 17, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DIR17F"},
87 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
88 {R_PARISC_DIR14R
, 0, 0, 14, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DIR14R"},
89 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
90 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
91 {R_PARISC_PCREL32
, 0, 0, 32, true, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL32"},
93 {R_PARISC_PCREL21L
, 0, 0, 21, true, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL21L"},
94 {R_PARISC_PCREL17R
, 0, 0, 17, true, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL17R"},
95 {R_PARISC_PCREL17F
, 0, 0, 17, true, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL17F"},
96 {R_PARISC_PCREL17C
, 0, 0, 17, true, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL17C"},
97 {R_PARISC_PCREL14R
, 0, 0, 14, true, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL14R"},
98 {R_PARISC_PCREL14F
, 0, 0, 14, true, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL14F"},
99 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
100 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
101 {R_PARISC_DPREL21L
, 0, 0, 21, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DPREL21L"},
102 {R_PARISC_DPREL14WR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DPREL14WR"},
104 {R_PARISC_DPREL14DR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DPREL14DR"},
105 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
106 {R_PARISC_DPREL14R
, 0, 0, 14, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DPREL14R"},
107 {R_PARISC_DPREL14F
, 0, 0, 14, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DPREL14F"},
108 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
109 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
110 {R_PARISC_DLTREL21L
, 0, 0, 21, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DLTREL21L"},
111 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
112 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
113 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
115 {R_PARISC_DLTREL14R
, 0, 0, 14, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DLTREL14R"},
116 {R_PARISC_DLTREL14F
, 0, 0, 14, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DLTREL14F"},
117 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
118 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
119 {R_PARISC_DLTIND21L
, 0, 0, 21, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DLTIND21L"},
120 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
121 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
122 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
123 {R_PARISC_DLTIND14R
, 0, 0, 14, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DLTIND14R"},
124 {R_PARISC_DLTIND14F
, 0, 0, 14, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DLTIND14F"},
126 {R_PARISC_SETBASE
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_SETBASE"},
127 {R_PARISC_SECREL32
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_SECREL32"},
128 {R_PARISC_BASEREL21L
, 0, 0, 21, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_BASEREL21L"},
129 {R_PARISC_BASEREL17R
, 0, 0, 17, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_BASEREL17R"},
130 {R_PARISC_BASEREL17F
, 0, 0, 17, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_BASEREL17F"},
131 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
132 {R_PARISC_BASEREL14R
, 0, 0, 14, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_BASEREL14R"},
133 {R_PARISC_BASEREL14F
, 0, 0, 14, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_BASEREL14F"},
134 {R_PARISC_SEGBASE
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_SEGBASE"},
135 {R_PARISC_SEGREL32
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_SEGREL32"},
137 {R_PARISC_PLTOFF21L
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PLTOFF21L"},
138 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
139 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
140 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
141 {R_PARISC_PLTOFF14R
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PLTOFF14R"},
142 {R_PARISC_PLTOFF14F
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PLTOFF14F"},
143 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
144 {R_PARISC_LTOFF_FPTR32
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR32"},
145 {R_PARISC_LTOFF_FPTR21L
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR21L"},
146 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
148 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
149 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
150 {R_PARISC_LTOFF_FPTR14R
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR14R"},
151 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
152 {R_PARISC_FPTR64
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_FPTR64"},
153 {R_PARISC_PLABEL32
, 0, 0, 32, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PLABEL32"},
154 {R_PARISC_PLABEL21L
, 0, 0, 21, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PLABEL21L"},
155 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
156 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
157 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
159 {R_PARISC_PLABEL14R
, 0, 0, 14, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PLABEL14R"},
160 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
161 {R_PARISC_PCREL64
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL64"},
162 {R_PARISC_PCREL22C
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL22C"},
163 {R_PARISC_PCREL22F
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL22F"},
164 {R_PARISC_PCREL14WR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL14WR"},
165 {R_PARISC_PCREL14DR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL14DR"},
166 {R_PARISC_PCREL16F
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL16F"},
167 {R_PARISC_PCREL16WF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL16WF"},
168 {R_PARISC_PCREL16DF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PCREL16DF"},
170 {R_PARISC_DIR64
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DIR64"},
171 {R_PARISC_NONE
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_NONE"},
172 {R_PARISC_NONE
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_NONE"},
173 {R_PARISC_DIR14WR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DIR14WR"},
174 {R_PARISC_DIR14DR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DIR14DR"},
175 {R_PARISC_DIR16F
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DIR16F"},
176 {R_PARISC_DIR16WF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DIR16WF"},
177 {R_PARISC_DIR16DF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DIR16DF"},
178 {R_PARISC_GPREL64
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_GPREL64"},
179 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
181 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
182 {R_PARISC_DLTREL14WR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DLTREL14WR"},
183 {R_PARISC_DLTREL14DR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DLTREL14DR"},
184 {R_PARISC_GPREL16F
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_GPREL16F"},
185 {R_PARISC_GPREL16WF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_GPREL16WF"},
186 {R_PARISC_GPREL16DF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_GPREL16DF"},
187 {R_PARISC_LTOFF64
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF64"},
188 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
189 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
190 {R_PARISC_DLTIND14WR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DLTIND14WR"},
192 {R_PARISC_DLTIND14DR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_DLTIND14DR"},
193 {R_PARISC_LTOFF16F
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF16F"},
194 {R_PARISC_LTOFF16WF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF16DF"},
195 {R_PARISC_LTOFF16DF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF16DF"},
196 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
197 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
198 {R_PARISC_BASEREL14WR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_BSEREL14WR"},
199 {R_PARISC_BASEREL14DR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_BASEREL14DR"},
200 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
201 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
203 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
204 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
205 {R_PARISC_SEGREL64
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_SEGREL64"},
206 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
207 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
208 {R_PARISC_PLTOFF14WR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PLTOFF14WR"},
209 {R_PARISC_PLTOFF14DR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PLTOFF14DR"},
210 {R_PARISC_PLTOFF16F
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PLTOFF16F"},
211 {R_PARISC_PLTOFF16WF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PLTOFF16WF"},
212 {R_PARISC_PLTOFF16DF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_PLTOFF16DF"},
214 {R_PARISC_LTOFF_FPTR64
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
215 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
216 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
217 {R_PARISC_LTOFF_FPTR14WR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR14WR"},
218 {R_PARISC_LTOFF_FPTR14DR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR14DR"},
219 {R_PARISC_LTOFF_FPTR16F
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR16F"},
220 {R_PARISC_LTOFF_FPTR16WF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_FPTR16WF"},
221 {R_PARISC_LTOFF_FPTR16DF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
222 {R_PARISC_COPY
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_COPY"},
223 {R_PARISC_IPLT
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_IPLT"},
225 {R_PARISC_EPLT
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_EPLT"},
226 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
227 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
228 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
229 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
230 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
231 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
232 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
233 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
234 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
236 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
237 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
238 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
239 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
240 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
241 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
242 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
243 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
244 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
245 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
247 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
248 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
249 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
250 {R_PARISC_TPREL32
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_TPREL32"},
251 {R_PARISC_TPREL21L
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_TPREL21L"},
252 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
253 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
254 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
255 {R_PARISC_TPREL14R
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_TPREL14R"},
256 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
258 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
259 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
260 {R_PARISC_LTOFF_TP21L
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP21L"},
261 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
262 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
263 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
264 {R_PARISC_LTOFF_TP14R
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
265 {R_PARISC_LTOFF_TP14F
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP14F"},
266 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
267 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
269 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
270 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
271 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
272 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
273 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
274 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
275 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
276 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
277 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
278 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
280 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
281 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
282 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
283 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
284 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
285 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
286 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
287 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
288 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
289 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
291 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
292 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
293 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
294 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
295 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
296 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
297 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
298 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
299 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
300 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
302 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
303 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
304 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
305 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
306 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
307 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
308 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
309 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
310 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
311 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
313 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
314 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
315 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_UNIMPLEMENTED"},
316 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
317 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
318 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
319 {R_PARISC_TPREL64
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_TPREL64"},
320 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
321 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
322 {R_PARISC_TPREL14WR
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_TPREL14WR"},
324 {R_PARISC_TPREL14DR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_TPREL14DR"},
325 {R_PARISC_TPREL16F
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_TPREL16F"},
326 {R_PARISC_TPREL16WF
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_TPREL16WF"},
327 {R_PARISC_TPREL16DF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_TPREL16DF"},
328 {R_PARISC_LTOFF_TP64
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP64"},
329 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
330 {R_PARISC_UNIMPLEMENTED
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_UNIMPLEMENTED"},
331 {R_PARISC_LTOFF_TP14WR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP14WR"},
332 {R_PARISC_LTOFF_TP14DR
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP14DR"},
333 {R_PARISC_LTOFF_TP16F
, 0, 0, 0, false, 0, complain_overflow_dont
, NULL
, "R_PARISC_LTOFF_TP16F"},
335 {R_PARISC_LTOFF_TP16WF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP16WF"},
336 {R_PARISC_LTOFF_TP16DF
, 0, 0, 0, false, 0, complain_overflow_bitfield
, bfd_elf_generic_reloc
, "R_PARISC_LTOFF_TP16DF"},
339 #define OFFSET_14R_FROM_21L 4
340 #define OFFSET_14F_FROM_21L 5
342 /* Return one (or more) BFD relocations which implement the base
343 relocation with modifications based on format and field. */
345 elf_hppa_reloc_type
**
346 _bfd_elf_hppa_gen_reloc_type (abfd
, base_type
, format
, field
, ignore
, sym
)
348 elf_hppa_reloc_type base_type
;
354 elf_hppa_reloc_type
*finaltype
;
355 elf_hppa_reloc_type
**final_types
;
357 /* Allocate slots for the BFD relocation. */
358 final_types
= ((elf_hppa_reloc_type
**)
359 bfd_alloc (abfd
, sizeof (elf_hppa_reloc_type
*) * 2));
360 if (final_types
== NULL
)
363 /* Allocate space for the relocation itself. */
364 finaltype
= ((elf_hppa_reloc_type
*)
365 bfd_alloc (abfd
, sizeof (elf_hppa_reloc_type
)));
366 if (finaltype
== NULL
)
369 /* Some reasonable defaults. */
370 final_types
[0] = finaltype
;
371 final_types
[1] = NULL
;
373 #define final_type finaltype[0]
375 final_type
= base_type
;
377 /* Just a tangle of nested switch statements to deal with the braindamage
378 that a different field selector means a completely different relocation
382 /* We have been using generic relocation types. However, that may not
383 really make sense. Anyway, we need to support both R_PARISC_DIR64
384 and R_PARISC_DIR32 here. */
387 case R_HPPA_ABS_CALL
:
395 final_type
= R_PARISC_DIR14R
;
398 final_type
= R_PARISC_DLTIND14R
;
401 final_type
= R_PARISC_LTOFF_FPTR14DR
;
404 final_type
= R_PARISC_DLTIND14F
;
407 final_type
= R_PARISC_PLABEL14R
;
418 final_type
= R_PARISC_DIR17F
;
422 final_type
= R_PARISC_DIR17R
;
434 final_type
= R_PARISC_DIR21L
;
437 final_type
= R_PARISC_DLTIND21L
;
440 final_type
= R_PARISC_LTOFF_FPTR21L
;
443 final_type
= R_PARISC_PLABEL21L
;
454 final_type
= R_PARISC_DIR32
;
455 /* When in 64bit mode, a 32bit relocation is supposed to
456 be a section relative relocation. Dwarf2 (for example)
457 uses 32bit section relative relocations. */
458 if (bfd_get_arch_info (abfd
)->bits_per_address
!= 32)
459 final_type
= R_PARISC_SECREL32
;
462 final_type
= R_PARISC_PLABEL32
;
473 final_type
= R_PARISC_DIR64
;
476 final_type
= R_PARISC_FPTR64
;
497 final_type
= base_type
+ OFFSET_14R_FROM_21L
;
500 final_type
= base_type
+ OFFSET_14F_FROM_21L
;
512 final_type
= base_type
;
525 case R_HPPA_PCREL_CALL
:
533 final_type
= R_PARISC_PCREL14R
;
536 final_type
= R_PARISC_PCREL14F
;
548 final_type
= R_PARISC_PCREL17R
;
551 final_type
= R_PARISC_PCREL17F
;
562 final_type
= R_PARISC_PCREL22F
;
574 final_type
= R_PARISC_PCREL21L
;
586 case R_PARISC_SEGREL32
:
587 case R_PARISC_SEGBASE
:
588 /* The defaults are fine for these cases. */
598 /* Translate from an elf into field into a howto relocation pointer. */
601 elf_hppa_info_to_howto (abfd
, bfd_reloc
, elf_reloc
)
604 Elf_Internal_Rela
*elf_reloc
;
606 BFD_ASSERT (ELF_R_TYPE(elf_reloc
->r_info
)
607 < (unsigned int) R_PARISC_UNIMPLEMENTED
);
608 bfd_reloc
->howto
= &elf_hppa_howto_table
[ELF_R_TYPE (elf_reloc
->r_info
)];
611 /* Translate from an elf into field into a howto relocation pointer. */
614 elf_hppa_info_to_howto_rel (abfd
, bfd_reloc
, elf_reloc
)
617 Elf_Internal_Rel
*elf_reloc
;
619 BFD_ASSERT (ELF_R_TYPE(elf_reloc
->r_info
)
620 < (unsigned int) R_PARISC_UNIMPLEMENTED
);
621 bfd_reloc
->howto
= &elf_hppa_howto_table
[ELF_R_TYPE (elf_reloc
->r_info
)];
624 /* Return the address of the howto table entry to perform the CODE
625 relocation for an ARCH machine. */
627 static reloc_howto_type
*
628 elf_hppa_reloc_type_lookup (abfd
, code
)
630 bfd_reloc_code_real_type code
;
632 if ((int) code
< (int) R_PARISC_UNIMPLEMENTED
)
634 BFD_ASSERT ((int) elf_hppa_howto_table
[(int) code
].type
== (int) code
);
635 return &elf_hppa_howto_table
[(int) code
];
641 elf_hppa_final_write_processing (abfd
, linker
)
645 int mach
= bfd_get_mach (abfd
);
647 elf_elfheader (abfd
)->e_flags
&= ~(EF_PARISC_ARCH
| EF_PARISC_TRAPNIL
648 | EF_PARISC_EXT
| EF_PARISC_LSB
649 | EF_PARISC_WIDE
| EF_PARISC_NO_KABP
650 | EF_PARISC_LAZYSWAP
);
653 elf_elfheader (abfd
)->e_flags
|= EFA_PARISC_1_0
;
655 elf_elfheader (abfd
)->e_flags
|= EFA_PARISC_1_1
;
657 elf_elfheader (abfd
)->e_flags
|= EFA_PARISC_2_0
;
659 elf_elfheader (abfd
)->e_flags
|= EF_PARISC_WIDE
| EFA_PARISC_2_0
;
662 /* Return true if SYM represents a local label symbol. */
665 elf_hppa_is_local_label_name (abfd
, name
)
666 bfd
*abfd ATTRIBUTE_UNUSED
;
669 return (name
[0] == 'L' && name
[1] == '$');
672 /* Set the correct type for an ELF section. We do this by the
673 section name, which is a hack, but ought to work. */
676 elf_hppa_fake_sections (abfd
, hdr
, sec
)
678 Elf64_Internal_Shdr
*hdr
;
681 register const char *name
;
683 name
= bfd_get_section_name (abfd
, sec
);
685 if (strcmp (name
, ".PARISC.unwind") == 0)
689 hdr
->sh_type
= SHT_LOPROC
+ 1;
690 /* ?!? How are unwinds supposed to work for symbols in arbitrary
691 sections? Or what if we have multiple .text sections in a single
692 .o file? HP really messed up on this one.
694 Ugh. We can not use elf_section_data (sec)->this_idx at this
695 point because it is not initialized yet.
697 So we (gasp) recompute it here. Hopefully nobody ever changes the
698 way sections are numbered in elf.c! */
699 for (sec
= abfd
->sections
, indx
= 1; sec
; sec
= sec
->next
, indx
++)
701 if (sec
->name
&& strcmp (sec
->name
, ".text") == 0)
708 /* I have no idea if this is really necessary or what it means. */
714 /* Hook called by the linker routine which adds symbols from an object
715 file. HP's libraries define symbols with HP specific section
716 indices, which we have to handle. */
719 elf_hppa_add_symbol_hook (abfd
, info
, sym
, namep
, flagsp
, secp
, valp
)
721 struct bfd_link_info
*info ATTRIBUTE_UNUSED
;
722 const Elf_Internal_Sym
*sym
;
723 const char **namep ATTRIBUTE_UNUSED
;
724 flagword
*flagsp ATTRIBUTE_UNUSED
;
728 int index
= sym
->st_shndx
;
732 case SHN_PARISC_ANSI_COMMON
:
733 *secp
= bfd_make_section_old_way (abfd
, ".PARISC.ansi.common");
734 (*secp
)->flags
|= SEC_IS_COMMON
;
735 *valp
= sym
->st_size
;
738 case SHN_PARISC_HUGE_COMMON
:
739 *secp
= bfd_make_section_old_way (abfd
, ".PARISC.huge.common");
740 (*secp
)->flags
|= SEC_IS_COMMON
;
741 *valp
= sym
->st_size
;
749 elf_hppa_unmark_useless_dynamic_symbols (h
, data
)
750 struct elf_link_hash_entry
*h
;
753 struct bfd_link_info
*info
= (struct bfd_link_info
*)data
;
755 /* If we are not creating a shared library, and this symbol is
756 referenced by a shared library but is not defined anywhere, then
757 the generic code will warn that it is undefined.
759 This behavior is undesirable on HPs since the standard shared
760 libraries contain reerences to undefined symbols.
762 So we twiddle the flags associated with such symbols so that they
763 will not trigger the warning. ?!? FIXME. This is horribly fraglie.
765 Ultimately we should have better controls over the generic ELF BFD
767 if (! info
->relocateable
769 && !info
->no_undefined
)
770 && h
->root
.type
== bfd_link_hash_undefined
771 && (h
->elf_link_hash_flags
& ELF_LINK_HASH_REF_DYNAMIC
) != 0
772 && (h
->elf_link_hash_flags
& ELF_LINK_HASH_REF_REGULAR
) == 0)
774 h
->elf_link_hash_flags
&= ~ELF_LINK_HASH_REF_DYNAMIC
;
775 h
->elf_link_hash_flags
|= 0x8000;
783 elf_hppa_remark_useless_dynamic_symbols (h
, data
)
784 struct elf_link_hash_entry
*h
;
787 struct bfd_link_info
*info
= (struct bfd_link_info
*)data
;
789 /* If we are not creating a shared library, and this symbol is
790 referenced by a shared library but is not defined anywhere, then
791 the generic code will warn that it is undefined.
793 This behavior is undesirable on HPs since the standard shared
794 libraries contain reerences to undefined symbols.
796 So we twiddle the flags associated with such symbols so that they
797 will not trigger the warning. ?!? FIXME. This is horribly fragile.
799 Ultimately we should have better controls over the generic ELF BFD
801 if (! info
->relocateable
803 && !info
->no_undefined
)
804 && h
->root
.type
== bfd_link_hash_undefined
805 && (h
->elf_link_hash_flags
& ELF_LINK_HASH_REF_DYNAMIC
) == 0
806 && (h
->elf_link_hash_flags
& ELF_LINK_HASH_REF_REGULAR
) == 0
807 && (h
->elf_link_hash_flags
& 0x8000) != 0)
809 h
->elf_link_hash_flags
|= ELF_LINK_HASH_REF_DYNAMIC
;
810 h
->elf_link_hash_flags
&= ~0x8000;
816 /* Record the lowest address for the data and text segments. */
818 elf_hppa_record_segment_addrs (abfd
, section
, data
)
819 bfd
*abfd ATTRIBUTE_UNUSED
;
823 struct elf64_hppa_link_hash_table
*hppa_info
;
826 hppa_info
= (struct elf64_hppa_link_hash_table
*)data
;
828 value
= section
->vma
- section
->filepos
;
830 if ((section
->flags
& (SEC_ALLOC
| SEC_LOAD
| SEC_READONLY
)
831 == (SEC_ALLOC
| SEC_LOAD
| SEC_READONLY
))
832 && value
< hppa_info
->text_segment_base
)
833 hppa_info
->text_segment_base
= value
;
834 else if ((section
->flags
& (SEC_ALLOC
| SEC_LOAD
| SEC_READONLY
)
835 == (SEC_ALLOC
| SEC_LOAD
))
836 && value
< hppa_info
->data_segment_base
)
837 hppa_info
->data_segment_base
= value
;
840 /* Called after we have seen all the input files/sections, but before
841 final symbol resolution and section placement has been determined.
843 We use this hook to (possibly) provide a value for __gp, then we
844 fall back to the generic ELF final link routine. */
847 elf_hppa_final_link (abfd
, info
)
849 struct bfd_link_info
*info
;
853 if (! info
->relocateable
)
855 struct elf_link_hash_entry
*gp
;
857 struct elf64_hppa_link_hash_table
*hppa_info
;
859 hppa_info
= elf64_hppa_hash_table (info
);
861 /* The linker script defines a value for __gp iff it was referenced
862 by one of the objects being linked. First try to find the symbol
863 in the hash table. If that fails, just compute the value __gp
865 gp
= elf_link_hash_lookup (elf_hash_table (info
), "__gp", false,
871 /* Adjust the value of __gp as we may want to slide it into the
872 .plt section so that the stubs can access PLT entries without
873 using an addil sequence. */
874 gp
->root
.u
.def
.value
+= elf64_hppa_hash_table (info
)->gp_offset
;
876 gp_val
= (gp
->root
.u
.def
.section
->output_section
->vma
877 + gp
->root
.u
.def
.section
->output_offset
878 + gp
->root
.u
.def
.value
);
885 /* First look for a .plt section. If found, then __gp is the
886 address of the .plt + gp_offset.
888 If no .plt is found, then look for .dlt, .opd and .data (in
889 that order) and set __gp to the base address of whichever section
892 sec
= hppa_info
->plt_sec
;
894 gp_val
= (sec
->output_offset
895 + sec
->output_section
->vma
896 + hppa_info
->gp_offset
);
899 sec
= hppa_info
->dlt_sec
;
901 sec
= hppa_info
->opd_sec
;
903 sec
= bfd_get_section_by_name (abfd
, ".data");
907 gp_val
= sec
->output_offset
+ sec
->output_section
->vma
;
911 /* Install whatever value we found/computed for __gp. */
912 _bfd_set_gp_value (abfd
, gp_val
);
915 /* We need to know the base of the text and data segments so that we
916 can perform SEGREL relocations. We will recore the base addresses
917 when we encounter the first SEGREL relocation. */
918 elf64_hppa_hash_table (info
)->text_segment_base
= (bfd_vma
)-1;
919 elf64_hppa_hash_table (info
)->data_segment_base
= (bfd_vma
)-1;
921 /* HP's shared libraries have references to symbols that are not
922 defined anywhere. The generic ELF BFD linker code will complaim
925 So we detect the losing case and arrange for the flags on the symbol
926 to indicate that it was never referenced. This keeps the generic
927 ELF BFD link code happy and appears to not create any secondary
928 problems. Ultimately we need a way to control the behavior of the
929 generic ELF BFD link code better. */
930 elf_link_hash_traverse (elf_hash_table (info
),
931 elf_hppa_unmark_useless_dynamic_symbols
,
934 /* Invoke the regular ELF backend linker to do all the work. */
935 retval
= bfd_elf_bfd_final_link (abfd
, info
);
937 elf_link_hash_traverse (elf_hash_table (info
),
938 elf_hppa_remark_useless_dynamic_symbols
,
944 /* Relocate an HPPA ELF section. */
947 elf_hppa_relocate_section (output_bfd
, info
, input_bfd
, input_section
,
948 contents
, relocs
, local_syms
, local_sections
)
950 struct bfd_link_info
*info
;
952 asection
*input_section
;
954 Elf_Internal_Rela
*relocs
;
955 Elf_Internal_Sym
*local_syms
;
956 asection
**local_sections
;
958 Elf_Internal_Shdr
*symtab_hdr
;
959 Elf_Internal_Rela
*rel
;
960 Elf_Internal_Rela
*relend
;
961 struct elf64_hppa_link_hash_table
*hppa_info
= elf64_hppa_hash_table (info
);
963 symtab_hdr
= &elf_tdata (input_bfd
)->symtab_hdr
;
966 relend
= relocs
+ input_section
->reloc_count
;
967 for (; rel
< relend
; rel
++)
970 reloc_howto_type
*howto
= elf_hppa_howto_table
+ ELF_R_TYPE (rel
->r_info
);
971 unsigned long r_symndx
;
972 struct elf_link_hash_entry
*h
;
973 Elf_Internal_Sym
*sym
;
976 bfd_reloc_status_type r
;
977 const char *sym_name
;
979 char *dynh_buf
= NULL
;
980 size_t dynh_buflen
= 0;
981 struct elf64_hppa_dyn_hash_entry
*dyn_h
= NULL
;
983 r_type
= ELF_R_TYPE (rel
->r_info
);
984 if (r_type
< 0 || r_type
>= (int) R_PARISC_UNIMPLEMENTED
)
986 bfd_set_error (bfd_error_bad_value
);
990 r_symndx
= ELF_R_SYM (rel
->r_info
);
992 if (info
->relocateable
)
994 /* This is a relocateable link. We don't have to change
995 anything, unless the reloc is against a section symbol,
996 in which case we have to adjust according to where the
997 section symbol winds up in the output section. */
998 if (r_symndx
< symtab_hdr
->sh_info
)
1000 sym
= local_syms
+ r_symndx
;
1001 if (ELF_ST_TYPE (sym
->st_info
) == STT_SECTION
)
1003 sym_sec
= local_sections
[r_symndx
];
1004 rel
->r_addend
+= sym_sec
->output_offset
;
1011 /* This is a final link. */
1015 if (r_symndx
< symtab_hdr
->sh_info
)
1017 /* This is a local symbol. */
1018 sym
= local_syms
+ r_symndx
;
1019 sym_sec
= local_sections
[r_symndx
];
1020 relocation
= ((ELF_ST_TYPE (sym
->st_info
) == STT_SECTION
1021 ? 0 : sym
->st_value
)
1022 + sym_sec
->output_offset
1023 + sym_sec
->output_section
->vma
);
1025 /* If this symbol has an entry in the PA64 dynamic hash
1026 table, then get it. */
1027 dyn_name
= get_dyn_name (input_bfd
, h
, rel
,
1028 &dynh_buf
, &dynh_buflen
);
1029 dyn_h
= elf64_hppa_dyn_hash_lookup (&hppa_info
->dyn_hash_table
,
1030 dyn_name
, false, false);
1035 /* This is not a local symbol. */
1038 indx
= r_symndx
- symtab_hdr
->sh_info
;
1039 h
= elf_sym_hashes (input_bfd
)[indx
];
1040 while (h
->root
.type
== bfd_link_hash_indirect
1041 || h
->root
.type
== bfd_link_hash_warning
)
1042 h
= (struct elf_link_hash_entry
*) h
->root
.u
.i
.link
;
1043 if (h
->root
.type
== bfd_link_hash_defined
1044 || h
->root
.type
== bfd_link_hash_defweak
)
1046 sym_sec
= h
->root
.u
.def
.section
;
1048 /* If this symbol has an entry in the PA64 dynamic hash
1049 table, then get it. */
1050 dyn_name
= get_dyn_name (input_bfd
, h
, rel
,
1051 &dynh_buf
, &dynh_buflen
);
1052 dyn_h
= elf64_hppa_dyn_hash_lookup (&hppa_info
->dyn_hash_table
,
1053 dyn_name
, false, false);
1055 /* If we have a relocation against a symbol defined in a
1056 shared library and we have not created an entry in the
1057 PA64 dynamic symbol hash table for it, then we lose. */
1058 if (sym_sec
->output_section
== NULL
&& dyn_h
== NULL
)
1060 (*_bfd_error_handler
)
1061 (_("%s: warning: unresolvable relocation against symbol `%s' from %s section"),
1062 bfd_get_filename (input_bfd
), h
->root
.root
.string
,
1063 bfd_get_section_name (input_bfd
, input_section
));
1066 else if (sym_sec
->output_section
)
1067 relocation
= (h
->root
.u
.def
.value
1068 + sym_sec
->output_offset
1069 + sym_sec
->output_section
->vma
);
1070 /* Value will be provided via one of the offsets in the
1071 dyn_h hash table entry. */
1075 /* Allow undefined symbols in shared libraries. */
1076 else if (info
->shared
&& !info
->symbolic
&& !info
->no_undefined
)
1078 /* If this symbol has an entry in the PA64 dynamic hash
1079 table, then get it. */
1080 dyn_name
= get_dyn_name (input_bfd
, h
, rel
,
1081 &dynh_buf
, &dynh_buflen
);
1082 dyn_h
= elf64_hppa_dyn_hash_lookup (&hppa_info
->dyn_hash_table
,
1083 dyn_name
, false, false);
1087 (*_bfd_error_handler
)
1088 (_("%s: warning: unresolvable relocation against symbol `%s' from %s section"),
1089 bfd_get_filename (input_bfd
), h
->root
.root
.string
,
1090 bfd_get_section_name (input_bfd
, input_section
));
1095 else if (h
->root
.type
== bfd_link_hash_undefweak
)
1099 if (!((*info
->callbacks
->undefined_symbol
)
1100 (info
, h
->root
.root
.string
, input_bfd
,
1101 input_section
, rel
->r_offset
)))
1108 sym_name
= h
->root
.root
.string
;
1111 sym_name
= bfd_elf_string_from_elf_section (input_bfd
,
1112 symtab_hdr
->sh_link
,
1114 if (sym_name
== NULL
)
1116 if (*sym_name
== '\0')
1117 sym_name
= bfd_section_name (input_bfd
, sym_sec
);
1120 r
= elf_hppa_final_link_relocate (rel
, input_bfd
, output_bfd
,
1121 input_section
, contents
,
1122 relocation
, info
, sym_sec
,
1125 if (r
!= bfd_reloc_ok
)
1131 case bfd_reloc_overflow
:
1133 if (!((*info
->callbacks
->reloc_overflow
)
1134 (info
, sym_name
, howto
->name
, (bfd_vma
) 0,
1135 input_bfd
, input_section
, rel
->r_offset
)))
1146 /* Compute the value for a relocation (REL) during a final link stage,
1147 then insert the value into the proper location in CONTENTS.
1149 VALUE is a tentative value for the relocation and may be overridden
1150 and modified here based on the specific relocation to be performed.
1152 For example we do conversions for PC-relative branches in this routine
1153 or redirection of calls to external routines to stubs.
1155 The work of actually applying the relocation is left to a helper
1156 routine in an attempt to reduce the complexity and size of this
1159 static bfd_reloc_status_type
1160 elf_hppa_final_link_relocate (rel
, input_bfd
, output_bfd
,
1161 input_section
, contents
, value
,
1162 info
, sym_sec
, h
, dyn_h
)
1163 Elf_Internal_Rela
*rel
;
1166 asection
*input_section
;
1169 struct bfd_link_info
*info
;
1171 struct elf_link_hash_entry
*h
;
1172 struct elf64_hppa_dyn_hash_entry
*dyn_h
;
1175 bfd_vma offset
= rel
->r_offset
;
1176 bfd_vma addend
= rel
->r_addend
;
1177 reloc_howto_type
*howto
= elf_hppa_howto_table
+ ELF_R_TYPE (rel
->r_info
);
1178 unsigned long r_type
= howto
->type
;
1179 unsigned long r_field
= e_fsel
;
1180 bfd_byte
*hit_data
= contents
+ offset
;
1181 struct elf64_hppa_link_hash_table
*hppa_info
= elf64_hppa_hash_table (info
);
1183 insn
= bfd_get_32 (input_bfd
, hit_data
);
1190 /* Random PC relative relocs. */
1191 case R_PARISC_PCREL21L
:
1192 case R_PARISC_PCREL14R
:
1193 case R_PARISC_PCREL14F
:
1194 case R_PARISC_PCREL14WR
:
1195 case R_PARISC_PCREL14DR
:
1196 case R_PARISC_PCREL16F
:
1197 case R_PARISC_PCREL16WF
:
1198 case R_PARISC_PCREL16DF
:
1200 if (r_type
== R_PARISC_PCREL21L
)
1202 else if (r_type
== R_PARISC_PCREL14F
1203 || r_type
== R_PARISC_PCREL16F
1204 || r_type
== R_PARISC_PCREL16WF
1205 || r_type
== R_PARISC_PCREL16DF
)
1210 /* If this is a call to a function defined in another dynamic
1211 library, then redirect the call to the local stub for this
1213 if (sym_sec
== NULL
|| sym_sec
->output_section
== NULL
)
1214 value
= (dyn_h
->stub_offset
+ hppa_info
->stub_sec
->output_offset
1215 + hppa_info
->stub_sec
->output_section
->vma
);
1217 /* Turn VALUE into a proper PC relative address. */
1218 value
-= (offset
+ input_section
->output_offset
1219 + input_section
->output_section
->vma
);
1221 /* Adjust for any field selectors. */
1222 value
= hppa_field_adjust (value
, -8 + addend
, r_field
);
1224 /* Apply the relocation to the given instruction. */
1225 insn
= elf_hppa_relocate_insn (insn
, value
, r_type
);
1229 /* Basic function call support. I'm not entirely sure if PCREL14F is
1230 actually needed or even handled correctly.
1232 Note for a call to a function defined in another dynamic library
1233 we want to redirect the call to a stub. */
1234 case R_PARISC_PCREL22F
:
1235 case R_PARISC_PCREL17F
:
1236 case R_PARISC_PCREL22C
:
1237 case R_PARISC_PCREL17C
:
1238 case R_PARISC_PCREL17R
:
1240 if (r_type
== R_PARISC_PCREL17R
)
1245 /* If this is a call to a function defined in another dynamic
1246 library, then redirect the call to the local stub for this
1248 if (sym_sec
== NULL
|| sym_sec
->output_section
== NULL
)
1249 value
= (dyn_h
->stub_offset
+ hppa_info
->stub_sec
->output_offset
1250 + hppa_info
->stub_sec
->output_section
->vma
);
1252 /* Turn VALUE into a proper PC relative address. */
1253 value
-= (offset
+ input_section
->output_offset
1254 + input_section
->output_section
->vma
);
1256 /* Adjust for any field selectors. */
1257 value
= hppa_field_adjust (value
, -8 + addend
, e_fsel
);
1259 /* All branches are implicitly shifted by 2 places. */
1262 /* Apply the relocation to the given instruction. */
1263 insn
= elf_hppa_relocate_insn (insn
, value
, r_type
);
1267 /* Indirect references to data through the DLT. */
1268 case R_PARISC_DLTIND14R
:
1269 case R_PARISC_DLTIND14F
:
1270 case R_PARISC_DLTIND14DR
:
1271 case R_PARISC_DLTIND14WR
:
1272 case R_PARISC_DLTIND21L
:
1273 case R_PARISC_LTOFF_FPTR14R
:
1274 case R_PARISC_LTOFF_FPTR14DR
:
1275 case R_PARISC_LTOFF_FPTR14WR
:
1276 case R_PARISC_LTOFF_FPTR21L
:
1277 case R_PARISC_LTOFF_FPTR16F
:
1278 case R_PARISC_LTOFF_FPTR16WF
:
1279 case R_PARISC_LTOFF_FPTR16DF
:
1280 case R_PARISC_LTOFF_TP21L
:
1281 case R_PARISC_LTOFF_TP14R
:
1282 case R_PARISC_LTOFF_TP14F
:
1283 case R_PARISC_LTOFF_TP14WR
:
1284 case R_PARISC_LTOFF_TP14DR
:
1285 case R_PARISC_LTOFF_TP16F
:
1286 case R_PARISC_LTOFF_TP16WF
:
1287 case R_PARISC_LTOFF_TP16DF
:
1288 case R_PARISC_LTOFF16F
:
1289 case R_PARISC_LTOFF16WF
:
1290 case R_PARISC_LTOFF16DF
:
1292 /* If this relocation was against a local symbol, then we still
1293 have not set up the DLT entry (it's not convienent to do so
1294 in the "finalize_dlt" routine because it is difficult to get
1295 to the local symbol's value).
1297 So, if this is a local symbol (h == NULL), then we need to
1298 fill in its DLT entry.
1300 Similarly we may still need to set up an entry in .opd for
1301 a local function which had its address taken. */
1302 if (dyn_h
->h
== NULL
)
1304 bfd_put_64 (hppa_info
->dlt_sec
->owner
,
1306 hppa_info
->dlt_sec
->contents
+ dyn_h
->dlt_offset
);
1308 /* Now handle .opd creation if needed. */
1309 if (r_type
== R_PARISC_LTOFF_FPTR14R
1310 || r_type
== R_PARISC_LTOFF_FPTR14DR
1311 || r_type
== R_PARISC_LTOFF_FPTR14WR
1312 || r_type
== R_PARISC_LTOFF_FPTR21L
1313 || r_type
== R_PARISC_LTOFF_FPTR16F
1314 || r_type
== R_PARISC_LTOFF_FPTR16WF
1315 || r_type
== R_PARISC_LTOFF_FPTR16DF
)
1317 /* The first two words of an .opd entry are zero. */
1318 memset (hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
,
1321 /* The next word is the address of the function. */
1322 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
1323 (hppa_info
->opd_sec
->contents
1324 + dyn_h
->opd_offset
+ 16));
1326 /* The last word is our local __gp value. */
1327 value
= _bfd_get_gp_value
1328 (hppa_info
->opd_sec
->output_section
->owner
);
1329 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
1330 (hppa_info
->opd_sec
->contents
1331 + dyn_h
->opd_offset
+ 24));
1335 /* We want the value of the DLT offset for this symbol, not
1336 the symbol's actual address. Note that __gp may not point
1337 to the start of the DLT, so we have to compute the absolute
1338 address, then subtract out the value of __gp. */
1339 value
= (dyn_h
->dlt_offset
1340 + hppa_info
->dlt_sec
->output_offset
1341 + hppa_info
->dlt_sec
->output_section
->vma
);
1342 value
-= _bfd_get_gp_value (output_bfd
);
1345 /* All DLTIND relocations are basically the same at this point,
1346 except that we need different field selectors for the 21bit
1347 version vs the 14bit versions. */
1348 if (r_type
== R_PARISC_DLTIND21L
1349 || r_type
== R_PARISC_LTOFF_FPTR21L
1350 || r_type
== R_PARISC_LTOFF_TP21L
)
1351 value
= hppa_field_adjust (value
, addend
, e_lrsel
);
1352 else if (r_type
== R_PARISC_DLTIND14F
1353 || r_type
== R_PARISC_LTOFF_FPTR16F
1354 || r_type
== R_PARISC_LTOFF_FPTR16WF
1355 || r_type
== R_PARISC_LTOFF_FPTR16DF
1356 || r_type
== R_PARISC_LTOFF16F
1357 || r_type
== R_PARISC_LTOFF16DF
1358 || r_type
== R_PARISC_LTOFF16WF
1359 || r_type
== R_PARISC_LTOFF_TP16F
1360 || r_type
== R_PARISC_LTOFF_TP16WF
1361 || r_type
== R_PARISC_LTOFF_TP16DF
)
1362 value
= hppa_field_adjust (value
, addend
, e_fsel
);
1364 value
= hppa_field_adjust (value
, addend
, e_rrsel
);
1366 insn
= elf_hppa_relocate_insn (insn
, value
, r_type
);
1370 case R_PARISC_DLTREL14R
:
1371 case R_PARISC_DLTREL14F
:
1372 case R_PARISC_DLTREL14DR
:
1373 case R_PARISC_DLTREL14WR
:
1374 case R_PARISC_DLTREL21L
:
1375 case R_PARISC_DPREL21L
:
1376 case R_PARISC_DPREL14WR
:
1377 case R_PARISC_DPREL14DR
:
1378 case R_PARISC_DPREL14R
:
1379 case R_PARISC_DPREL14F
:
1380 case R_PARISC_GPREL16F
:
1381 case R_PARISC_GPREL16WF
:
1382 case R_PARISC_GPREL16DF
:
1384 /* Subtract out the global pointer value to make value a DLT
1385 relative address. */
1386 value
-= _bfd_get_gp_value (output_bfd
);
1388 /* All DLTREL relocations are basically the same at this point,
1389 except that we need different field selectors for the 21bit
1390 version vs the 14bit versions. */
1391 if (r_type
== R_PARISC_DLTREL21L
1392 || r_type
== R_PARISC_DPREL21L
)
1393 value
= hppa_field_adjust (value
, addend
, e_lrsel
);
1394 else if (r_type
== R_PARISC_DLTREL14F
1395 || r_type
== R_PARISC_DPREL14F
1396 || r_type
== R_PARISC_GPREL16F
1397 || r_type
== R_PARISC_GPREL16WF
1398 || r_type
== R_PARISC_GPREL16DF
)
1399 value
= hppa_field_adjust (value
, addend
, e_fsel
);
1401 value
= hppa_field_adjust (value
, addend
, e_rrsel
);
1403 insn
= elf_hppa_relocate_insn (insn
, value
, r_type
);
1407 case R_PARISC_DIR21L
:
1408 case R_PARISC_DIR17R
:
1409 case R_PARISC_DIR17F
:
1410 case R_PARISC_DIR14R
:
1411 case R_PARISC_DIR14WR
:
1412 case R_PARISC_DIR14DR
:
1413 case R_PARISC_DIR16F
:
1414 case R_PARISC_DIR16WF
:
1415 case R_PARISC_DIR16DF
:
1417 /* All DIR relocations are basically the same at this point,
1418 except that we need different field selectors for the 21bit
1419 version vs the 14bit versions. */
1420 if (r_type
== R_PARISC_DIR21L
)
1421 value
= hppa_field_adjust (value
, addend
, e_lrsel
);
1422 else if (r_type
== R_PARISC_DIR17F
1423 || r_type
== R_PARISC_DIR16F
1424 || r_type
== R_PARISC_DIR16WF
1425 || r_type
== R_PARISC_DIR16DF
)
1426 value
= hppa_field_adjust (value
, addend
, e_fsel
);
1428 value
= hppa_field_adjust (value
, addend
, e_rrsel
);
1430 insn
= elf_hppa_relocate_insn (insn
, value
, r_type
);
1434 case R_PARISC_PLTOFF21L
:
1435 case R_PARISC_PLTOFF14R
:
1436 case R_PARISC_PLTOFF14F
:
1437 case R_PARISC_PLTOFF14WR
:
1438 case R_PARISC_PLTOFF14DR
:
1439 case R_PARISC_PLTOFF16F
:
1440 case R_PARISC_PLTOFF16WF
:
1441 case R_PARISC_PLTOFF16DF
:
1443 /* We want the value of the PLT offset for this symbol, not
1444 the symbol's actual address. Note that __gp may not point
1445 to the start of the DLT, so we have to compute the absolute
1446 address, then subtract out the value of __gp. */
1447 value
= (dyn_h
->plt_offset
1448 + hppa_info
->plt_sec
->output_offset
1449 + hppa_info
->plt_sec
->output_section
->vma
);
1450 value
-= _bfd_get_gp_value (output_bfd
);
1452 /* All PLTOFF relocations are basically the same at this point,
1453 except that we need different field selectors for the 21bit
1454 version vs the 14bit versions. */
1455 if (r_type
== R_PARISC_PLTOFF21L
)
1456 value
= hppa_field_adjust (value
, addend
, e_lrsel
);
1457 else if (r_type
== R_PARISC_PLTOFF14F
1458 || r_type
== R_PARISC_PLTOFF16F
1459 || r_type
== R_PARISC_PLTOFF16WF
1460 || r_type
== R_PARISC_PLTOFF16DF
)
1461 value
= hppa_field_adjust (value
, addend
, e_fsel
);
1463 value
= hppa_field_adjust (value
, addend
, e_rrsel
);
1465 insn
= elf_hppa_relocate_insn (insn
, value
, r_type
);
1469 case R_PARISC_LTOFF_FPTR32
:
1471 /* We may still need to create the FPTR itself if it was for
1473 if (dyn_h
->h
== NULL
)
1475 /* The first two words of an .opd entry are zero. */
1476 memset (hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
, 0, 16);
1478 /* The next word is the address of the function. */
1479 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
1480 (hppa_info
->opd_sec
->contents
1481 + dyn_h
->opd_offset
+ 16));
1483 /* The last word is our local __gp value. */
1484 value
= _bfd_get_gp_value
1485 (hppa_info
->opd_sec
->output_section
->owner
);
1486 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
1487 hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
+ 24);
1490 /* We want the value of the DLT offset for this symbol, not
1491 the symbol's actual address. Note that __gp may not point
1492 to the start of the DLT, so we have to compute the absolute
1493 address, then subtract out the value of __gp. */
1494 value
= (dyn_h
->dlt_offset
1495 + hppa_info
->dlt_sec
->output_offset
1496 + hppa_info
->dlt_sec
->output_section
->vma
);
1497 value
-= _bfd_get_gp_value (output_bfd
);
1498 bfd_put_32 (input_bfd
, value
, hit_data
);
1499 return bfd_reloc_ok
;
1502 case R_PARISC_LTOFF_FPTR64
:
1503 case R_PARISC_LTOFF_TP64
:
1505 /* We may still need to create the FPTR itself if it was for
1507 if (dyn_h
->h
== NULL
&& r_type
== R_PARISC_LTOFF_FPTR64
)
1509 /* The first two words of an .opd entry are zero. */
1510 memset (hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
, 0, 16);
1512 /* The next word is the address of the function. */
1513 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
1514 (hppa_info
->opd_sec
->contents
1515 + dyn_h
->opd_offset
+ 16));
1517 /* The last word is our local __gp value. */
1518 value
= _bfd_get_gp_value
1519 (hppa_info
->opd_sec
->output_section
->owner
);
1520 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
1521 hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
+ 24);
1524 /* We want the value of the DLT offset for this symbol, not
1525 the symbol's actual address. Note that __gp may not point
1526 to the start of the DLT, so we have to compute the absolute
1527 address, then subtract out the value of __gp. */
1528 value
= (dyn_h
->dlt_offset
1529 + hppa_info
->dlt_sec
->output_offset
1530 + hppa_info
->dlt_sec
->output_section
->vma
);
1531 value
-= _bfd_get_gp_value (output_bfd
);
1532 bfd_put_64 (input_bfd
, value
, hit_data
);
1533 return bfd_reloc_ok
;
1536 case R_PARISC_DIR32
:
1537 bfd_put_32 (input_bfd
, value
+ addend
, hit_data
);
1538 return bfd_reloc_ok
;
1540 case R_PARISC_DIR64
:
1541 bfd_put_64 (input_bfd
, value
+ addend
, hit_data
);
1542 return bfd_reloc_ok
;
1544 case R_PARISC_GPREL64
:
1545 /* Subtract out the global pointer value to make value a DLT
1546 relative address. */
1547 value
-= _bfd_get_gp_value (output_bfd
);
1550 bfd_put_64 (input_bfd
, value
+ addend
, hit_data
);
1551 return bfd_reloc_ok
;
1553 case R_PARISC_LTOFF64
:
1554 /* We want the value of the DLT offset for this symbol, not
1555 the symbol's actual address. Note that __gp may not point
1556 to the start of the DLT, so we have to compute the absolute
1557 address, then subtract out the value of __gp. */
1558 value
= (dyn_h
->dlt_offset
1559 + hppa_info
->dlt_sec
->output_offset
1560 + hppa_info
->dlt_sec
->output_section
->vma
);
1561 value
-= _bfd_get_gp_value (output_bfd
);
1563 bfd_put_64 (input_bfd
, value
+ addend
, hit_data
);
1564 return bfd_reloc_ok
;
1566 case R_PARISC_PCREL32
:
1568 /* If this is a call to a function defined in another dynamic
1569 library, then redirect the call to the local stub for this
1571 if (sym_sec
== NULL
|| sym_sec
->output_section
== NULL
)
1572 value
= (dyn_h
->stub_offset
+ hppa_info
->stub_sec
->output_offset
1573 + hppa_info
->stub_sec
->output_section
->vma
);
1575 /* Turn VALUE into a proper PC relative address. */
1576 value
-= (offset
+ input_section
->output_offset
1577 + input_section
->output_section
->vma
);
1581 bfd_put_64 (input_bfd
, value
, hit_data
);
1582 return bfd_reloc_ok
;
1585 case R_PARISC_PCREL64
:
1587 /* If this is a call to a function defined in another dynamic
1588 library, then redirect the call to the local stub for this
1590 if (sym_sec
== NULL
|| sym_sec
->output_section
== NULL
)
1591 value
= (dyn_h
->stub_offset
+ hppa_info
->stub_sec
->output_offset
1592 + hppa_info
->stub_sec
->output_section
->vma
);
1595 /* Turn VALUE into a proper PC relative address. */
1596 value
-= (offset
+ input_section
->output_offset
1597 + input_section
->output_section
->vma
);
1601 bfd_put_64 (input_bfd
, value
, hit_data
);
1602 return bfd_reloc_ok
;
1606 case R_PARISC_FPTR64
:
1608 /* We may still need to create the FPTR itself if it was for
1610 if (dyn_h
->h
== NULL
)
1612 /* The first two words of an .opd entry are zero. */
1613 memset (hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
, 0, 16);
1615 /* The next word is the address of the function. */
1616 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
1617 (hppa_info
->opd_sec
->contents
1618 + dyn_h
->opd_offset
+ 16));
1620 /* The last word is our local __gp value. */
1621 value
= _bfd_get_gp_value
1622 (hppa_info
->opd_sec
->output_section
->owner
);
1623 bfd_put_64 (hppa_info
->opd_sec
->owner
, value
,
1624 hppa_info
->opd_sec
->contents
+ dyn_h
->opd_offset
+ 24);
1627 /* We want the value of the OPD offset for this symbol, not
1628 the symbol's actual address. */
1629 value
= (dyn_h
->opd_offset
1630 + hppa_info
->opd_sec
->output_offset
1631 + hppa_info
->opd_sec
->output_section
->vma
);
1633 bfd_put_64 (input_bfd
, value
+ addend
, hit_data
);
1634 return bfd_reloc_ok
;
1637 case R_PARISC_SECREL32
:
1638 bfd_put_32 (input_bfd
,
1640 - sym_sec
->output_section
->vma
),
1642 return bfd_reloc_ok
;
1644 case R_PARISC_SEGREL32
:
1645 case R_PARISC_SEGREL64
:
1647 /* If this is the first SEGREL relocation, then initialize
1648 the segment base values. */
1649 if (hppa_info
->text_segment_base
== (bfd_vma
) -1)
1650 bfd_map_over_sections (output_bfd
, elf_hppa_record_segment_addrs
,
1651 elf64_hppa_hash_table (info
));
1653 /* VALUE holds the absolute address. We want to include the
1654 addend, then turn it into a segment relative address.
1656 The segment is derived from SYM_SEC. We assume that there are
1657 only two segments of note in the resulting executable/shlib.
1658 A readonly segment (.text) and a readwrite segment (.data). */
1661 if (sym_sec
->flags
& SEC_CODE
)
1662 value
-= hppa_info
->text_segment_base
;
1664 value
-= hppa_info
->data_segment_base
;
1666 if (r_type
== R_PARISC_SEGREL32
)
1667 bfd_put_32 (input_bfd
, value
, hit_data
);
1669 bfd_put_64 (input_bfd
, value
, hit_data
);
1670 return bfd_reloc_ok
;
1674 /* Something we don't know how to handle. */
1676 return bfd_reloc_notsupported
;
1679 /* Update the instruction word. */
1680 bfd_put_32 (input_bfd
, insn
, hit_data
);
1681 return (bfd_reloc_ok
);
1684 /* Relocate the given INSN. VALUE should be the actual value we want
1685 to insert into the instruction, ie by this point we should not be
1686 concerned with computing an offset relative to the DLT, PC, etc.
1687 Instead this routine is meant to handle the bit manipulations needed
1688 to insert the relocation into the given instruction. */
1690 static unsigned long
1691 elf_hppa_relocate_insn (insn
, sym_value
, r_type
)
1694 unsigned long r_type
;
1698 /* This is any 22bit branch. In PA2.0 syntax it corresponds to
1699 the "B" instruction. */
1700 case R_PARISC_PCREL22F
:
1701 case R_PARISC_PCREL22C
:
1703 unsigned int w3
, w2
, w1
, w
;
1705 /* These are 22 bit branches. Mask off bits we do not care
1707 sym_value
&= 0x3fffff;
1709 /* Now extract the W1, W2, W3 and W fields from the value. */
1710 dis_assemble_22 (sym_value
, &w3
, &w1
, &w2
, &w
);
1712 /* Mask out bits for the value in the instruction. */
1715 /* Insert the bits for the W1, W2 and W fields into the
1717 insn
|= (w3
<< 21) | (w2
<< 2) | (w1
<< 16) | w
;
1721 /* This is any 17bit branch. In PA2.0 syntax it also corresponds to
1722 the "B" instruction as well as BE. */
1723 case R_PARISC_PCREL17F
:
1724 case R_PARISC_DIR17F
:
1725 case R_PARISC_DIR17R
:
1726 case R_PARISC_PCREL17C
:
1727 case R_PARISC_PCREL17R
:
1729 unsigned int w2
, w1
, w
;
1731 /* These are 17 bit branches. Mask off bits we do not care
1733 sym_value
&= 0x1ffff;
1735 /* Now extract the W1, W2 and W fields from the value. */
1736 dis_assemble_17 (sym_value
, &w1
, &w2
, &w
);
1738 /* Mask out bits for the value in the instruction. */
1741 /* Insert the bits for the W1, W2 and W fields into the
1743 insn
|= (w2
<< 2) | (w1
<< 16) | w
;
1747 /* ADDIL or LDIL instructions. */
1748 case R_PARISC_DLTREL21L
:
1749 case R_PARISC_DLTIND21L
:
1750 case R_PARISC_LTOFF_FPTR21L
:
1751 case R_PARISC_PCREL21L
:
1752 case R_PARISC_LTOFF_TP21L
:
1753 case R_PARISC_DPREL21L
:
1754 case R_PARISC_PLTOFF21L
:
1755 case R_PARISC_DIR21L
:
1759 /* Mask off bits in INSN we do not want. */
1762 /* Turn the 21bit value into the proper format. */
1763 dis_assemble_21 (sym_value
, &w
);
1765 /* And insert the proper bits into INSN. */
1769 /* LDO and integer loads/stores with 14bit displacements. */
1770 case R_PARISC_DLTREL14R
:
1771 case R_PARISC_DLTREL14F
:
1772 case R_PARISC_DLTIND14R
:
1773 case R_PARISC_DLTIND14F
:
1774 case R_PARISC_LTOFF_FPTR14R
:
1775 case R_PARISC_LTOFF_FPTR16F
:
1776 case R_PARISC_PCREL14R
:
1777 case R_PARISC_PCREL14F
:
1778 case R_PARISC_PCREL16F
:
1779 case R_PARISC_LTOFF_TP14R
:
1780 case R_PARISC_LTOFF_TP14F
:
1781 case R_PARISC_LTOFF_TP16F
:
1782 case R_PARISC_DPREL14R
:
1783 case R_PARISC_DPREL14F
:
1784 case R_PARISC_GPREL16F
:
1785 case R_PARISC_PLTOFF14R
:
1786 case R_PARISC_PLTOFF14F
:
1787 case R_PARISC_PLTOFF16F
:
1788 case R_PARISC_DIR14R
:
1789 case R_PARISC_DIR16F
:
1790 case R_PARISC_LTOFF16F
:
1794 /* Mask off bits in INSN we do not want. */
1797 /* Turn the 14bit value into the proper format. */
1798 low_sign_unext (sym_value
, 14, &w
);
1800 /* And insert the proper bits into INSN. */
1804 /* Doubleword loads and stores with a 14bit displacement. */
1805 case R_PARISC_DLTREL14DR
:
1806 case R_PARISC_DLTIND14DR
:
1807 case R_PARISC_LTOFF_FPTR14DR
:
1808 case R_PARISC_LTOFF_FPTR16DF
:
1809 case R_PARISC_PCREL14DR
:
1810 case R_PARISC_PCREL16DF
:
1811 case R_PARISC_LTOFF_TP14DR
:
1812 case R_PARISC_LTOFF_TP16DF
:
1813 case R_PARISC_DPREL14DR
:
1814 case R_PARISC_GPREL16DF
:
1815 case R_PARISC_PLTOFF14DR
:
1816 case R_PARISC_PLTOFF16DF
:
1817 case R_PARISC_DIR14DR
:
1818 case R_PARISC_DIR16DF
:
1819 case R_PARISC_LTOFF16DF
:
1821 /* Mask off bits in INSN we do not want. */
1824 /* The sign bit at 14 moves into bit zero in the destination. */
1825 insn
|= ((sym_value
& 0x2000) >> 13);
1827 /* Turn off the bits in sym_value we do not care about. */
1828 sym_value
&= 0x1ff8;
1830 /* Now shift it one bit position left so that it lines up with the
1831 destination field in INSN. */
1834 return insn
| sym_value
;
1837 /* Floating point single word load/store instructions. */
1838 case R_PARISC_DLTREL14WR
:
1839 case R_PARISC_DLTIND14WR
:
1840 case R_PARISC_LTOFF_FPTR14WR
:
1841 case R_PARISC_LTOFF_FPTR16WF
:
1842 case R_PARISC_PCREL14WR
:
1843 case R_PARISC_PCREL16WF
:
1844 case R_PARISC_LTOFF_TP14WR
:
1845 case R_PARISC_LTOFF_TP16WF
:
1846 case R_PARISC_DPREL14WR
:
1847 case R_PARISC_GPREL16WF
:
1848 case R_PARISC_PLTOFF14WR
:
1849 case R_PARISC_PLTOFF16WF
:
1850 case R_PARISC_DIR16WF
:
1851 case R_PARISC_DIR14WR
:
1852 case R_PARISC_LTOFF16WF
:
1854 /* Mask off bits in INSN we do not want. */
1857 /* The sign bit at 14 moves into bit zero in the destination. */
1858 insn
|= ((sym_value
& 0x2000) >> 13);
1860 /* Turn off the bits in sym_value we do not care about. */
1861 sym_value
&= 0x1ffc;
1863 /* Now shift it one bit position left so that it lines up with the
1864 destination field in INSN. */
1867 return insn
| sym_value
;