00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #define ELF_HOWTO_TABLE_SIZE R_PARISC_UNIMPLEMENTED + 1
00026
00027
00028
00029
00030
00031
00032
00033 #if ARCH_SIZE == 64
00034 #define ELF_R_TYPE(X) ELF64_R_TYPE(X)
00035 #define ELF_R_SYM(X) ELF64_R_SYM(X)
00036 #define elf_hppa_reloc_final_type elf64_hppa_reloc_final_type
00037 #define _bfd_elf_hppa_gen_reloc_type _bfd_elf64_hppa_gen_reloc_type
00038 #define elf_hppa_relocate_section elf64_hppa_relocate_section
00039 #define elf_hppa_final_link elf64_hppa_final_link
00040 #endif
00041 #if ARCH_SIZE == 32
00042 #define ELF_R_TYPE(X) ELF32_R_TYPE(X)
00043 #define ELF_R_SYM(X) ELF32_R_SYM(X)
00044 #define elf_hppa_reloc_final_type elf32_hppa_reloc_final_type
00045 #define _bfd_elf_hppa_gen_reloc_type _bfd_elf32_hppa_gen_reloc_type
00046 #define elf_hppa_relocate_section elf32_hppa_relocate_section
00047 #define elf_hppa_final_link elf32_hppa_final_link
00048 #endif
00049
00050 #if ARCH_SIZE == 64
00051 static bfd_reloc_status_type elf_hppa_final_link_relocate
00052 (Elf_Internal_Rela *, bfd *, bfd *, asection *, bfd_byte *, bfd_vma,
00053 struct bfd_link_info *, asection *, struct elf_link_hash_entry *,
00054 struct elf64_hppa_dyn_hash_entry *);
00055
00056 static int elf_hppa_relocate_insn
00057 (int, int, unsigned int);
00058 #endif
00059
00060
00061
00062 static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
00063 {
00064 { R_PARISC_NONE, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00065 bfd_elf_generic_reloc, "R_PARISC_NONE", FALSE, 0, 0, FALSE },
00066
00067
00068
00069 { R_PARISC_DIR32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,
00070 bfd_elf_generic_reloc, "R_PARISC_DIR32", FALSE, 0, 0xffffffff, FALSE },
00071 { R_PARISC_DIR21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
00072 bfd_elf_generic_reloc, "R_PARISC_DIR21L", FALSE, 0, 0, FALSE },
00073 { R_PARISC_DIR17R, 0, 0, 17, FALSE, 0, complain_overflow_bitfield,
00074 bfd_elf_generic_reloc, "R_PARISC_DIR17R", FALSE, 0, 0, FALSE },
00075 { R_PARISC_DIR17F, 0, 0, 17, FALSE, 0, complain_overflow_bitfield,
00076 bfd_elf_generic_reloc, "R_PARISC_DIR17F", FALSE, 0, 0, FALSE },
00077 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00078 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00079 { R_PARISC_DIR14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00080 bfd_elf_generic_reloc, "R_PARISC_DIR14R", FALSE, 0, 0, FALSE },
00081 { R_PARISC_DIR14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00082 bfd_elf_generic_reloc, "R_PARISC_DIR14F", FALSE, 0, 0, FALSE },
00083
00084 { R_PARISC_PCREL12F, 0, 0, 12, TRUE, 0, complain_overflow_bitfield,
00085 bfd_elf_generic_reloc, "R_PARISC_PCREL12F", FALSE, 0, 0, FALSE },
00086 { R_PARISC_PCREL32, 0, 0, 32, TRUE, 0, complain_overflow_bitfield,
00087 bfd_elf_generic_reloc, "R_PARISC_PCREL32", FALSE, 0, 0, FALSE },
00088 { R_PARISC_PCREL21L, 0, 0, 21, TRUE, 0, complain_overflow_bitfield,
00089 bfd_elf_generic_reloc, "R_PARISC_PCREL21L", FALSE, 0, 0, FALSE },
00090 { R_PARISC_PCREL17R, 0, 0, 17, TRUE, 0, complain_overflow_bitfield,
00091 bfd_elf_generic_reloc, "R_PARISC_PCREL17R", FALSE, 0, 0, FALSE },
00092 { R_PARISC_PCREL17F, 0, 0, 17, TRUE, 0, complain_overflow_bitfield,
00093 bfd_elf_generic_reloc, "R_PARISC_PCREL17F", FALSE, 0, 0, FALSE },
00094 { R_PARISC_PCREL17C, 0, 0, 17, TRUE, 0, complain_overflow_bitfield,
00095 bfd_elf_generic_reloc, "R_PARISC_PCREL17C", FALSE, 0, 0, FALSE },
00096 { R_PARISC_PCREL14R, 0, 0, 14, TRUE, 0, complain_overflow_bitfield,
00097 bfd_elf_generic_reloc, "R_PARISC_PCREL14R", FALSE, 0, 0, FALSE },
00098 { R_PARISC_PCREL14F, 0, 0, 14, TRUE, 0, complain_overflow_bitfield,
00099 bfd_elf_generic_reloc, "R_PARISC_PCREL14F", FALSE, 0, 0, FALSE },
00100
00101 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00102 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00103 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00104 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00105 { R_PARISC_DPREL21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
00106 bfd_elf_generic_reloc, "R_PARISC_DPREL21L", FALSE, 0, 0, FALSE },
00107 { R_PARISC_DPREL14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00108 bfd_elf_generic_reloc, "R_PARISC_DPREL14WR", FALSE, 0, 0, FALSE },
00109 { R_PARISC_DPREL14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00110 bfd_elf_generic_reloc, "R_PARISC_DPREL14DR", FALSE, 0, 0, FALSE },
00111 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00112 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00113 { R_PARISC_DPREL14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00114 bfd_elf_generic_reloc, "R_PARISC_DPREL14R", FALSE, 0, 0, FALSE },
00115 { R_PARISC_DPREL14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00116 bfd_elf_generic_reloc, "R_PARISC_DPREL14F", FALSE, 0, 0, FALSE },
00117
00118 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00119 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00120 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00121 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00122 { R_PARISC_DLTREL21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
00123 bfd_elf_generic_reloc, "R_PARISC_DLTREL21L", FALSE, 0, 0, FALSE },
00124 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00125 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00126 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00127 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00128 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00129 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00130 { R_PARISC_DLTREL14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00131 bfd_elf_generic_reloc, "R_PARISC_DLTREL14R", FALSE, 0, 0, FALSE },
00132 { R_PARISC_DLTREL14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00133 bfd_elf_generic_reloc, "R_PARISC_DLTREL14F", FALSE, 0, 0, FALSE },
00134
00135 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00136 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00137 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00138 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00139 { R_PARISC_DLTIND21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
00140 bfd_elf_generic_reloc, "R_PARISC_DLTIND21L", FALSE, 0, 0, FALSE },
00141 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00142 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00143 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00144 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00145 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00146 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00147 { R_PARISC_DLTIND14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00148 bfd_elf_generic_reloc, "R_PARISC_DLTIND14R", FALSE, 0, 0, FALSE },
00149 { R_PARISC_DLTIND14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00150 bfd_elf_generic_reloc, "R_PARISC_DLTIND14F", FALSE, 0, 0, FALSE },
00151
00152 { R_PARISC_SETBASE, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00153 bfd_elf_generic_reloc, "R_PARISC_SETBASE", FALSE, 0, 0, FALSE },
00154 { R_PARISC_SECREL32, 0, 0, 32, FALSE, 0, complain_overflow_bitfield,
00155 bfd_elf_generic_reloc, "R_PARISC_SECREL32", FALSE, 0, 0, FALSE },
00156 { R_PARISC_BASEREL21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
00157 bfd_elf_generic_reloc, "R_PARISC_BASEREL21L", FALSE, 0, 0, FALSE },
00158 { R_PARISC_BASEREL17R, 0, 0, 17, FALSE, 0, complain_overflow_bitfield,
00159 bfd_elf_generic_reloc, "R_PARISC_BASEREL17R", FALSE, 0, 0, FALSE },
00160 { R_PARISC_BASEREL17F, 0, 0, 17, FALSE, 0, complain_overflow_bitfield,
00161 bfd_elf_generic_reloc, "R_PARISC_BASEREL17F", FALSE, 0, 0, FALSE },
00162 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00163 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00164 { R_PARISC_BASEREL14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00165 bfd_elf_generic_reloc, "R_PARISC_BASEREL14R", FALSE, 0, 0, FALSE },
00166 { R_PARISC_BASEREL14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00167 bfd_elf_generic_reloc, "R_PARISC_BASEREL14F", FALSE, 0, 0, FALSE },
00168
00169 { R_PARISC_SEGBASE, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00170 bfd_elf_generic_reloc, "R_PARISC_SEGBASE", FALSE, 0, 0, FALSE },
00171 { R_PARISC_SEGREL32, 0, 0, 32, FALSE, 0, complain_overflow_bitfield,
00172 bfd_elf_generic_reloc, "R_PARISC_SEGREL32", FALSE, 0, 0, FALSE },
00173 { R_PARISC_PLTOFF21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
00174 bfd_elf_generic_reloc, "R_PARISC_PLTOFF21L", FALSE, 0, 0, FALSE },
00175 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00176 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00177 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00178 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00179 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00180 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00181 { R_PARISC_PLTOFF14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00182 bfd_elf_generic_reloc, "R_PARISC_PLTOFF14R", FALSE, 0, 0, FALSE },
00183 { R_PARISC_PLTOFF14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00184 bfd_elf_generic_reloc, "R_PARISC_PLTOFF14F", FALSE, 0, 0, FALSE },
00185
00186 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00187 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00188 { R_PARISC_LTOFF_FPTR32, 0, 0, 32, FALSE, 0, complain_overflow_bitfield,
00189 bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR32", FALSE, 0, 0, FALSE },
00190 { R_PARISC_LTOFF_FPTR21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
00191 bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR21L", FALSE, 0, 0, FALSE },
00192 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00193 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00194 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00195 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00196 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00197 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00198 { R_PARISC_LTOFF_FPTR14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00199 bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14R", FALSE, 0, 0, FALSE },
00200 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00201 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00202
00203 { R_PARISC_FPTR64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
00204 bfd_elf_generic_reloc, "R_PARISC_FPTR64", FALSE, 0, 0, FALSE },
00205 { R_PARISC_PLABEL32, 0, 0, 32, FALSE, 0, complain_overflow_bitfield,
00206 bfd_elf_generic_reloc, "R_PARISC_PLABEL32", FALSE, 0, 0, FALSE },
00207 { R_PARISC_PLABEL21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
00208 bfd_elf_generic_reloc, "R_PARISC_PLABEL21L", FALSE, 0, 0, FALSE },
00209 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00210 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00211 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00212 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00213 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00214 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00215 { R_PARISC_PLABEL14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00216 bfd_elf_generic_reloc, "R_PARISC_PLABEL14R", FALSE, 0, 0, FALSE },
00217 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00218 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00219
00220 { R_PARISC_PCREL64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
00221 bfd_elf_generic_reloc, "R_PARISC_PCREL64", FALSE, 0, 0, FALSE },
00222 { R_PARISC_PCREL22C, 0, 0, 22, FALSE, 0, complain_overflow_bitfield,
00223 bfd_elf_generic_reloc, "R_PARISC_PCREL22C", FALSE, 0, 0, FALSE },
00224 { R_PARISC_PCREL22F, 0, 0, 22, FALSE, 0, complain_overflow_bitfield,
00225 bfd_elf_generic_reloc, "R_PARISC_PCREL22F", FALSE, 0, 0, FALSE },
00226 { R_PARISC_PCREL14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00227 bfd_elf_generic_reloc, "R_PARISC_PCREL14WR", FALSE, 0, 0, FALSE },
00228 { R_PARISC_PCREL14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00229 bfd_elf_generic_reloc, "R_PARISC_PCREL14DR", FALSE, 0, 0, FALSE },
00230 { R_PARISC_PCREL16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00231 bfd_elf_generic_reloc, "R_PARISC_PCREL16F", FALSE, 0, 0, FALSE },
00232 { R_PARISC_PCREL16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00233 bfd_elf_generic_reloc, "R_PARISC_PCREL16WF", FALSE, 0, 0, FALSE },
00234 { R_PARISC_PCREL16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00235 bfd_elf_generic_reloc, "R_PARISC_PCREL16DF", FALSE, 0, 0, FALSE },
00236
00237 { R_PARISC_DIR64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
00238 bfd_elf_generic_reloc, "R_PARISC_DIR64", FALSE, 0, 0, FALSE },
00239 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00240 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00241 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00242 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00243 { R_PARISC_DIR14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00244 bfd_elf_generic_reloc, "R_PARISC_DIR14WR", FALSE, 0, 0, FALSE },
00245 { R_PARISC_DIR14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00246 bfd_elf_generic_reloc, "R_PARISC_DIR14DR", FALSE, 0, 0, FALSE },
00247 { R_PARISC_DIR16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00248 bfd_elf_generic_reloc, "R_PARISC_DIR16F", FALSE, 0, 0, FALSE },
00249 { R_PARISC_DIR16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00250 bfd_elf_generic_reloc, "R_PARISC_DIR16WF", FALSE, 0, 0, FALSE },
00251 { R_PARISC_DIR16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00252 bfd_elf_generic_reloc, "R_PARISC_DIR16DF", FALSE, 0, 0, FALSE },
00253
00254 { R_PARISC_GPREL64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
00255 bfd_elf_generic_reloc, "R_PARISC_GPREL64", FALSE, 0, 0, FALSE },
00256 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00257 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00258 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00259 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00260 { R_PARISC_DLTREL14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00261 bfd_elf_generic_reloc, "R_PARISC_DLTREL14WR", FALSE, 0, 0, FALSE },
00262 { R_PARISC_DLTREL14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00263 bfd_elf_generic_reloc, "R_PARISC_DLTREL14DR", FALSE, 0, 0, FALSE },
00264 { R_PARISC_GPREL16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00265 bfd_elf_generic_reloc, "R_PARISC_GPREL16F", FALSE, 0, 0, FALSE },
00266 { R_PARISC_GPREL16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00267 bfd_elf_generic_reloc, "R_PARISC_GPREL16WF", FALSE, 0, 0, FALSE },
00268 { R_PARISC_GPREL16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00269 bfd_elf_generic_reloc, "R_PARISC_GPREL16DF", FALSE, 0, 0, FALSE },
00270
00271 { R_PARISC_LTOFF64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
00272 bfd_elf_generic_reloc, "R_PARISC_LTOFF64", FALSE, 0, 0, FALSE },
00273 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00274 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00275 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00276 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00277 { R_PARISC_DLTIND14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00278 bfd_elf_generic_reloc, "R_PARISC_DLTIND14WR", FALSE, 0, 0, FALSE },
00279 { R_PARISC_DLTIND14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00280 bfd_elf_generic_reloc, "R_PARISC_DLTIND14DR", FALSE, 0, 0, FALSE },
00281 { R_PARISC_LTOFF16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00282 bfd_elf_generic_reloc, "R_PARISC_LTOFF16F", FALSE, 0, 0, FALSE },
00283 { R_PARISC_LTOFF16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00284 bfd_elf_generic_reloc, "R_PARISC_LTOFF16DF", FALSE, 0, 0, FALSE },
00285 { R_PARISC_LTOFF16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00286 bfd_elf_generic_reloc, "R_PARISC_LTOFF16DF", FALSE, 0, 0, FALSE },
00287
00288 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00289 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00290 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00291 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00292 { R_PARISC_BASEREL14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00293 bfd_elf_generic_reloc, "R_PARISC_BASEREL14WR", FALSE, 0, 0, FALSE },
00294 { R_PARISC_BASEREL14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00295 bfd_elf_generic_reloc, "R_PARISC_BASEREL14DR", FALSE, 0, 0, FALSE },
00296 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00297 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00298 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00299 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00300 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00301 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00302 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00303 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00304
00305 { R_PARISC_SEGREL64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
00306 bfd_elf_generic_reloc, "R_PARISC_SEGREL64", FALSE, 0, 0, FALSE },
00307 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00308 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00309 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00310 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00311 { R_PARISC_PLTOFF14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00312 bfd_elf_generic_reloc, "R_PARISC_PLTOFF14WR", FALSE, 0, 0, FALSE },
00313 { R_PARISC_PLTOFF14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00314 bfd_elf_generic_reloc, "R_PARISC_PLTOFF14DR", FALSE, 0, 0, FALSE },
00315 { R_PARISC_PLTOFF16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00316 bfd_elf_generic_reloc, "R_PARISC_PLTOFF16F", FALSE, 0, 0, FALSE },
00317 { R_PARISC_PLTOFF16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00318 bfd_elf_generic_reloc, "R_PARISC_PLTOFF16WF", FALSE, 0, 0, FALSE },
00319 { R_PARISC_PLTOFF16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00320 bfd_elf_generic_reloc, "R_PARISC_PLTOFF16DF", FALSE, 0, 0, FALSE },
00321
00322 { R_PARISC_LTOFF_FPTR64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
00323 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00324 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00325 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00326 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00327 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00328 { R_PARISC_LTOFF_FPTR14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00329 bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14WR", FALSE, 0, 0, FALSE },
00330 { R_PARISC_LTOFF_FPTR14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00331 bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR14DR", FALSE, 0, 0, FALSE },
00332 { R_PARISC_LTOFF_FPTR16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00333 bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR16F", FALSE, 0, 0, FALSE },
00334 { R_PARISC_LTOFF_FPTR16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00335 bfd_elf_generic_reloc, "R_PARISC_LTOFF_FPTR16WF", FALSE, 0, 0, FALSE },
00336 { R_PARISC_LTOFF_FPTR16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00337 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00338
00339 { R_PARISC_COPY, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00340 bfd_elf_generic_reloc, "R_PARISC_COPY", FALSE, 0, 0, FALSE },
00341 { R_PARISC_IPLT, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00342 bfd_elf_generic_reloc, "R_PARISC_IPLT", FALSE, 0, 0, FALSE },
00343 { R_PARISC_EPLT, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00344 bfd_elf_generic_reloc, "R_PARISC_EPLT", FALSE, 0, 0, FALSE },
00345 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00346 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00347 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00348 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00349 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00350 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00351 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00352 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00353 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00354 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00355
00356 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00357 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00358 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00359 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00360 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00361 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00362 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00363 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00364 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00365 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00366 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00367 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00368 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00369 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00370 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00371 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00372
00373 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00374 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00375 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00376 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00377 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00378 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00379 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00380 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00381 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00382 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00383 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00384 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00385 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00386 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00387 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00388 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00389
00390 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00391 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00392 { R_PARISC_TPREL32, 0, 0, 32, FALSE, 0, complain_overflow_dont,
00393 bfd_elf_generic_reloc, "R_PARISC_TPREL32", FALSE, 0, 0, FALSE },
00394 { R_PARISC_TPREL21L, 0, 0, 21, FALSE, 0, complain_overflow_dont,
00395 bfd_elf_generic_reloc, "R_PARISC_TPREL21L", FALSE, 0, 0, FALSE },
00396 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00397 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00398 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00399 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00400 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00401 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00402 { R_PARISC_TPREL14R, 0, 0, 14, FALSE, 0, complain_overflow_dont,
00403 bfd_elf_generic_reloc, "R_PARISC_TPREL14R", FALSE, 0, 0, FALSE },
00404 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00405 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00406
00407 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00408 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00409 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00410 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00411 { R_PARISC_LTOFF_TP21L, 0, 0, 21, FALSE, 0, complain_overflow_bitfield,
00412 bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP21L", FALSE, 0, 0, FALSE },
00413 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00414 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00415 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00416 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00417 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00418 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00419 { R_PARISC_LTOFF_TP14R, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00420 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00421 { R_PARISC_LTOFF_TP14F, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00422 bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14F", FALSE, 0, 0, FALSE },
00423
00424 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00425 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00426 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00427 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00428 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00429 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00430 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00431 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00432 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00433 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00434 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00435 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00436 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00437 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00438 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00439 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00440
00441 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00442 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00443 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00444 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00445 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00446 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00447 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00448 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00449 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00450 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00451 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00452 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00453 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00454 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00455 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00456 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00457
00458 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00459 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00460 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00461 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00462 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00463 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00464 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00465 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00466 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00467 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00468 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00469 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00470 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00471 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00472 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00473 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00474
00475 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00476 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00477 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00478 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00479 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00480 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00481 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00482 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00483 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00484 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00485 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00486 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00487 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00488 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00489 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00490 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00491
00492 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00493 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00494 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00495 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00496 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00497 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00498 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00499 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00500 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00501 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00502 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00503 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00504 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00505 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00506 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00507 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00508
00509 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00510 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00511 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00512 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00513 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00514 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00515 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00516 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00517 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00518 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00519 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00520 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00521 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00522 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00523 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00524 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00525
00526 { R_PARISC_TPREL64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
00527 bfd_elf_generic_reloc, "R_PARISC_TPREL64", FALSE, 0, 0, FALSE },
00528 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00529 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00530 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00531 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00532 { R_PARISC_TPREL14WR, 0, 0, 14, FALSE, 0, complain_overflow_dont,
00533 bfd_elf_generic_reloc, "R_PARISC_TPREL14WR", FALSE, 0, 0, FALSE },
00534 { R_PARISC_TPREL14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00535 bfd_elf_generic_reloc, "R_PARISC_TPREL14DR", FALSE, 0, 0, FALSE },
00536 { R_PARISC_TPREL16F, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00537 bfd_elf_generic_reloc, "R_PARISC_TPREL16F", FALSE, 0, 0, FALSE },
00538 { R_PARISC_TPREL16WF, 0, 0, 16, FALSE, 0, complain_overflow_dont,
00539 bfd_elf_generic_reloc, "R_PARISC_TPREL16WF", FALSE, 0, 0, FALSE },
00540 { R_PARISC_TPREL16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00541 bfd_elf_generic_reloc, "R_PARISC_TPREL16DF", FALSE, 0, 0, FALSE },
00542
00543 { R_PARISC_LTOFF_TP64, 0, 0, 64, FALSE, 0, complain_overflow_bitfield,
00544 bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP64", FALSE, 0, 0, FALSE },
00545 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00546 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00547 { R_PARISC_UNIMPLEMENTED, 0, 0, 0, FALSE, 0, complain_overflow_bitfield,
00548 bfd_elf_generic_reloc, "R_PARISC_UNIMPLEMENTED", FALSE, 0, 0, FALSE },
00549 { R_PARISC_LTOFF_TP14WR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00550 bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14WR", FALSE, 0, 0, FALSE },
00551 { R_PARISC_LTOFF_TP14DR, 0, 0, 14, FALSE, 0, complain_overflow_bitfield,
00552 bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP14DR", FALSE, 0, 0, FALSE },
00553 { R_PARISC_LTOFF_TP16F, 0, 0, 16, FALSE, 0, complain_overflow_dont,
00554 bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16F", FALSE, 0, 0, FALSE },
00555 { R_PARISC_LTOFF_TP16WF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00556 bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16WF", FALSE, 0, 0, FALSE },
00557 { R_PARISC_LTOFF_TP16DF, 0, 0, 16, FALSE, 0, complain_overflow_bitfield,
00558 bfd_elf_generic_reloc, "R_PARISC_LTOFF_TP16DF", FALSE, 0, 0, FALSE },
00559
00560 { R_PARISC_GNU_VTENTRY, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00561 bfd_elf_generic_reloc, "R_PARISC_GNU_VTENTRY", FALSE, 0, 0, FALSE },
00562 { R_PARISC_GNU_VTINHERIT, 0, 0, 0, FALSE, 0, complain_overflow_dont,
00563 bfd_elf_generic_reloc, "R_PARISC_GNU_VTINHERIT", FALSE, 0, 0, FALSE },
00564 };
00565
00566 #define OFFSET_14R_FROM_21L 4
00567 #define OFFSET_14F_FROM_21L 5
00568
00569
00570
00571
00572 elf_hppa_reloc_type
00573 elf_hppa_reloc_final_type (bfd *abfd,
00574 elf_hppa_reloc_type base_type,
00575 int format,
00576 unsigned int field)
00577 {
00578 elf_hppa_reloc_type final_type = base_type;
00579
00580
00581
00582
00583 switch (base_type)
00584 {
00585
00586
00587
00588 case R_PARISC_DIR32:
00589 case R_PARISC_DIR64:
00590 case R_HPPA_ABS_CALL:
00591 switch (format)
00592 {
00593 case 14:
00594 switch (field)
00595 {
00596 case e_fsel:
00597 final_type = R_PARISC_DIR14F;
00598 break;
00599 case e_rsel:
00600 case e_rrsel:
00601 case e_rdsel:
00602 final_type = R_PARISC_DIR14R;
00603 break;
00604 case e_rtsel:
00605 final_type = R_PARISC_DLTIND14R;
00606 break;
00607 case e_rtpsel:
00608 final_type = R_PARISC_LTOFF_FPTR14DR;
00609 break;
00610 case e_tsel:
00611 final_type = R_PARISC_DLTIND14F;
00612 break;
00613 case e_rpsel:
00614 final_type = R_PARISC_PLABEL14R;
00615 break;
00616 default:
00617 return R_PARISC_NONE;
00618 }
00619 break;
00620
00621 case 17:
00622 switch (field)
00623 {
00624 case e_fsel:
00625 final_type = R_PARISC_DIR17F;
00626 break;
00627 case e_rsel:
00628 case e_rrsel:
00629 case e_rdsel:
00630 final_type = R_PARISC_DIR17R;
00631 break;
00632 default:
00633 return R_PARISC_NONE;
00634 }
00635 break;
00636
00637 case 21:
00638 switch (field)
00639 {
00640 case e_lsel:
00641 case e_lrsel:
00642 case e_ldsel:
00643 case e_nlsel:
00644 case e_nlrsel:
00645 final_type = R_PARISC_DIR21L;
00646 break;
00647 case e_ltsel:
00648 final_type = R_PARISC_DLTIND21L;
00649 break;
00650 case e_ltpsel:
00651 final_type = R_PARISC_LTOFF_FPTR21L;
00652 break;
00653 case e_lpsel:
00654 final_type = R_PARISC_PLABEL21L;
00655 break;
00656 default:
00657 return R_PARISC_NONE;
00658 }
00659 break;
00660
00661 case 32:
00662 switch (field)
00663 {
00664 case e_fsel:
00665 final_type = R_PARISC_DIR32;
00666
00667
00668
00669 if (bfd_get_arch_info (abfd)->bits_per_address != 32)
00670 final_type = R_PARISC_SECREL32;
00671 break;
00672 case e_psel:
00673 final_type = R_PARISC_PLABEL32;
00674 break;
00675 default:
00676 return R_PARISC_NONE;
00677 }
00678 break;
00679
00680 case 64:
00681 switch (field)
00682 {
00683 case e_fsel:
00684 final_type = R_PARISC_DIR64;
00685 break;
00686 case e_psel:
00687 final_type = R_PARISC_FPTR64;
00688 break;
00689 default:
00690 return R_PARISC_NONE;
00691 }
00692 break;
00693
00694 default:
00695 return R_PARISC_NONE;
00696 }
00697 break;
00698
00699 case R_HPPA_GOTOFF:
00700 switch (format)
00701 {
00702 case 14:
00703 switch (field)
00704 {
00705 case e_rsel:
00706 case e_rrsel:
00707 case e_rdsel:
00708
00709 final_type = base_type + OFFSET_14R_FROM_21L;
00710 break;
00711 case e_fsel:
00712
00713 final_type = base_type + OFFSET_14F_FROM_21L;
00714 break;
00715 default:
00716 return R_PARISC_NONE;
00717 }
00718 break;
00719
00720 case 21:
00721 switch (field)
00722 {
00723 case e_lsel:
00724 case e_lrsel:
00725 case e_ldsel:
00726 case e_nlsel:
00727 case e_nlrsel:
00728
00729 final_type = base_type;
00730 break;
00731 default:
00732 return R_PARISC_NONE;
00733 }
00734 break;
00735
00736 default:
00737 return R_PARISC_NONE;
00738 }
00739 break;
00740
00741 case R_HPPA_PCREL_CALL:
00742 switch (format)
00743 {
00744 case 12:
00745 switch (field)
00746 {
00747 case e_fsel:
00748 final_type = R_PARISC_PCREL12F;
00749 break;
00750 default:
00751 return R_PARISC_NONE;
00752 }
00753 break;
00754
00755 case 14:
00756
00757
00758 switch (field)
00759 {
00760 case e_rsel:
00761 case e_rrsel:
00762 case e_rdsel:
00763 final_type = R_PARISC_PCREL14R;
00764 break;
00765 case e_fsel:
00766 if (bfd_get_mach (abfd) < 25)
00767 final_type = R_PARISC_PCREL14F;
00768 else
00769 final_type = R_PARISC_PCREL16F;
00770 break;
00771 default:
00772 return R_PARISC_NONE;
00773 }
00774 break;
00775
00776 case 17:
00777 switch (field)
00778 {
00779 case e_rsel:
00780 case e_rrsel:
00781 case e_rdsel:
00782 final_type = R_PARISC_PCREL17R;
00783 break;
00784 case e_fsel:
00785 final_type = R_PARISC_PCREL17F;
00786 break;
00787 default:
00788 return R_PARISC_NONE;
00789 }
00790 break;
00791
00792 case 21:
00793 switch (field)
00794 {
00795 case e_lsel:
00796 case e_lrsel:
00797 case e_ldsel:
00798 case e_nlsel:
00799 case e_nlrsel:
00800 final_type = R_PARISC_PCREL21L;
00801 break;
00802 default:
00803 return R_PARISC_NONE;
00804 }
00805 break;
00806
00807 case 22:
00808 switch (field)
00809 {
00810 case e_fsel:
00811 final_type = R_PARISC_PCREL22F;
00812 break;
00813 default:
00814 return R_PARISC_NONE;
00815 }
00816 break;
00817
00818 case 32:
00819 switch (field)
00820 {
00821 case e_fsel:
00822 final_type = R_PARISC_PCREL32;
00823 break;
00824 default:
00825 return R_PARISC_NONE;
00826 }
00827 break;
00828
00829 case 64:
00830 switch (field)
00831 {
00832 case e_fsel:
00833 final_type = R_PARISC_PCREL64;
00834 break;
00835 default:
00836 return R_PARISC_NONE;
00837 }
00838 break;
00839
00840 default:
00841 return R_PARISC_NONE;
00842 }
00843 break;
00844
00845 case R_PARISC_GNU_VTENTRY:
00846 case R_PARISC_GNU_VTINHERIT:
00847 case R_PARISC_SEGREL32:
00848 case R_PARISC_SEGBASE:
00849
00850 break;
00851
00852 default:
00853 return R_PARISC_NONE;
00854 }
00855
00856 return final_type;
00857 }
00858
00859
00860
00861
00862 elf_hppa_reloc_type **
00863 _bfd_elf_hppa_gen_reloc_type (bfd *abfd,
00864 elf_hppa_reloc_type base_type,
00865 int format,
00866 unsigned int field,
00867 int ignore ATTRIBUTE_UNUSED,
00868 asymbol *sym ATTRIBUTE_UNUSED)
00869 {
00870 elf_hppa_reloc_type *finaltype;
00871 elf_hppa_reloc_type **final_types;
00872 bfd_size_type amt = sizeof (elf_hppa_reloc_type *) * 2;
00873
00874
00875 final_types = bfd_alloc (abfd, amt);
00876 if (final_types == NULL)
00877 return NULL;
00878
00879
00880 amt = sizeof (elf_hppa_reloc_type);
00881 finaltype = bfd_alloc (abfd, amt);
00882 if (finaltype == NULL)
00883 return NULL;
00884
00885
00886 final_types[0] = finaltype;
00887 final_types[1] = NULL;
00888
00889 *finaltype = elf_hppa_reloc_final_type (abfd, base_type, format, field);
00890
00891 return final_types;
00892 }
00893
00894
00895
00896 static void
00897 elf_hppa_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
00898 arelent *bfd_reloc,
00899 Elf_Internal_Rela *elf_reloc)
00900 {
00901 BFD_ASSERT (ELF_R_TYPE (elf_reloc->r_info)
00902 < (unsigned int) R_PARISC_UNIMPLEMENTED);
00903 bfd_reloc->howto = &elf_hppa_howto_table[ELF_R_TYPE (elf_reloc->r_info)];
00904 }
00905
00906
00907
00908 static void
00909 elf_hppa_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
00910 arelent *bfd_reloc,
00911 Elf_Internal_Rela *elf_reloc)
00912 {
00913 BFD_ASSERT (ELF_R_TYPE(elf_reloc->r_info)
00914 < (unsigned int) R_PARISC_UNIMPLEMENTED);
00915 bfd_reloc->howto = &elf_hppa_howto_table[ELF_R_TYPE (elf_reloc->r_info)];
00916 }
00917
00918
00919
00920
00921 static reloc_howto_type *
00922 elf_hppa_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
00923 bfd_reloc_code_real_type code)
00924 {
00925 if ((int) code < (int) R_PARISC_UNIMPLEMENTED)
00926 {
00927 BFD_ASSERT ((int) elf_hppa_howto_table[(int) code].type == (int) code);
00928 return &elf_hppa_howto_table[(int) code];
00929 }
00930 return NULL;
00931 }
00932
00933
00934
00935 static bfd_boolean
00936 elf_hppa_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name)
00937 {
00938 if (name[0] == 'L' && name[1] == '$')
00939 return 1;
00940 return _bfd_elf_is_local_label_name (abfd, name);
00941 }
00942
00943
00944
00945
00946 static bfd_boolean
00947 elf_hppa_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
00948 {
00949 const char *name;
00950
00951 name = bfd_get_section_name (abfd, sec);
00952
00953 if (strcmp (name, ".PARISC.unwind") == 0)
00954 {
00955 int indx;
00956 asection *asec;
00957 #if ARCH_SIZE == 64
00958 hdr->sh_type = SHT_LOPROC + 1;
00959 #else
00960 hdr->sh_type = 1;
00961 #endif
00962
00963
00964
00965
00966
00967
00968
00969
00970
00971 for (asec = abfd->sections, indx = 1; asec; asec = asec->next, indx++)
00972 {
00973 if (asec->name && strcmp (asec->name, ".text") == 0)
00974 {
00975 hdr->sh_info = indx;
00976 break;
00977 }
00978 }
00979
00980
00981 hdr->sh_entsize = 4;
00982 }
00983 return TRUE;
00984 }
00985
00986 static void
00987 elf_hppa_final_write_processing (bfd *abfd,
00988 bfd_boolean linker ATTRIBUTE_UNUSED)
00989 {
00990 int mach = bfd_get_mach (abfd);
00991
00992 elf_elfheader (abfd)->e_flags &= ~(EF_PARISC_ARCH | EF_PARISC_TRAPNIL
00993 | EF_PARISC_EXT | EF_PARISC_LSB
00994 | EF_PARISC_WIDE | EF_PARISC_NO_KABP
00995 | EF_PARISC_LAZYSWAP);
00996
00997 if (mach == 10)
00998 elf_elfheader (abfd)->e_flags |= EFA_PARISC_1_0;
00999 else if (mach == 11)
01000 elf_elfheader (abfd)->e_flags |= EFA_PARISC_1_1;
01001 else if (mach == 20)
01002 elf_elfheader (abfd)->e_flags |= EFA_PARISC_2_0;
01003 else if (mach == 25)
01004 elf_elfheader (abfd)->e_flags |= (EF_PARISC_WIDE
01005 | EFA_PARISC_2_0
01006
01007
01008
01009
01010 | EF_PARISC_TRAPNIL);
01011 }
01012
01013
01014
01015
01016 static int
01017 hppa_unwind_entry_compare (const void *a, const void *b)
01018 {
01019 const bfd_byte *ap, *bp;
01020 unsigned long av, bv;
01021
01022 ap = a;
01023 av = (unsigned long) ap[0] << 24;
01024 av |= (unsigned long) ap[1] << 16;
01025 av |= (unsigned long) ap[2] << 8;
01026 av |= (unsigned long) ap[3];
01027
01028 bp = b;
01029 bv = (unsigned long) bp[0] << 24;
01030 bv |= (unsigned long) bp[1] << 16;
01031 bv |= (unsigned long) bp[2] << 8;
01032 bv |= (unsigned long) bp[3];
01033
01034 return av < bv ? -1 : av > bv ? 1 : 0;
01035 }
01036
01037 static bfd_boolean elf_hppa_sort_unwind (bfd *abfd)
01038 {
01039 asection *s;
01040
01041
01042
01043
01044
01045 s = bfd_get_section_by_name (abfd, ".PARISC.unwind");
01046 if (s != NULL)
01047 {
01048 bfd_size_type size;
01049 bfd_byte *contents;
01050
01051 if (!bfd_malloc_and_get_section (abfd, s, &contents))
01052 return FALSE;
01053
01054 size = s->size;
01055 qsort (contents, (size_t) (size / 16), 16, hppa_unwind_entry_compare);
01056
01057 if (! bfd_set_section_contents (abfd, s, contents, (file_ptr) 0, size))
01058 return FALSE;
01059 }
01060
01061 return TRUE;
01062 }
01063
01064 #if ARCH_SIZE == 64
01065
01066
01067
01068
01069 static bfd_boolean
01070 elf_hppa_add_symbol_hook (bfd *abfd,
01071 struct bfd_link_info *info ATTRIBUTE_UNUSED,
01072 Elf_Internal_Sym *sym,
01073 const char **namep ATTRIBUTE_UNUSED,
01074 flagword *flagsp ATTRIBUTE_UNUSED,
01075 asection **secp,
01076 bfd_vma *valp)
01077 {
01078 int index = sym->st_shndx;
01079
01080 switch (index)
01081 {
01082 case SHN_PARISC_ANSI_COMMON:
01083 *secp = bfd_make_section_old_way (abfd, ".PARISC.ansi.common");
01084 (*secp)->flags |= SEC_IS_COMMON;
01085 *valp = sym->st_size;
01086 break;
01087
01088 case SHN_PARISC_HUGE_COMMON:
01089 *secp = bfd_make_section_old_way (abfd, ".PARISC.huge.common");
01090 (*secp)->flags |= SEC_IS_COMMON;
01091 *valp = sym->st_size;
01092 break;
01093 }
01094
01095 return TRUE;
01096 }
01097
01098 static bfd_boolean
01099 elf_hppa_unmark_useless_dynamic_symbols (struct elf_link_hash_entry *h,
01100 void *data)
01101 {
01102 struct bfd_link_info *info = data;
01103
01104 if (h->root.type == bfd_link_hash_warning)
01105 h = (struct elf_link_hash_entry *) h->root.u.i.link;
01106
01107
01108
01109
01110
01111
01112
01113
01114
01115
01116
01117
01118
01119 if (! info->relocatable
01120 && info->unresolved_syms_in_shared_libs != RM_IGNORE
01121 && h->root.type == bfd_link_hash_undefined
01122 && h->ref_dynamic
01123 && !h->ref_regular)
01124 {
01125 h->ref_dynamic = 0;
01126 h->pointer_equality_needed = 1;
01127 }
01128
01129 return TRUE;
01130 }
01131
01132 static bfd_boolean
01133 elf_hppa_remark_useless_dynamic_symbols (struct elf_link_hash_entry *h,
01134 void *data)
01135 {
01136 struct bfd_link_info *info = data;
01137
01138 if (h->root.type == bfd_link_hash_warning)
01139 h = (struct elf_link_hash_entry *) h->root.u.i.link;
01140
01141
01142
01143
01144
01145
01146
01147
01148
01149
01150
01151
01152
01153 if (! info->relocatable
01154 && info->unresolved_syms_in_shared_libs != RM_IGNORE
01155 && h->root.type == bfd_link_hash_undefined
01156 && !h->ref_dynamic
01157 && !h->ref_regular
01158 && h->pointer_equality_needed)
01159 {
01160 h->ref_dynamic = 1;
01161 h->pointer_equality_needed = 0;
01162 }
01163
01164 return TRUE;
01165 }
01166
01167 static bfd_boolean
01168 elf_hppa_is_dynamic_loader_symbol (const char *name)
01169 {
01170 return (! strcmp (name, "__CPU_REVISION")
01171 || ! strcmp (name, "__CPU_KEYBITS_1")
01172 || ! strcmp (name, "__SYSTEM_ID_D")
01173 || ! strcmp (name, "__FPU_MODEL")
01174 || ! strcmp (name, "__FPU_REVISION")
01175 || ! strcmp (name, "__ARGC")
01176 || ! strcmp (name, "__ARGV")
01177 || ! strcmp (name, "__ENVP")
01178 || ! strcmp (name, "__TLS_SIZE_D")
01179 || ! strcmp (name, "__LOAD_INFO")
01180 || ! strcmp (name, "__systab"));
01181 }
01182
01183
01184 static void
01185 elf_hppa_record_segment_addrs (bfd *abfd ATTRIBUTE_UNUSED,
01186 asection *section,
01187 void *data)
01188 {
01189 struct elf64_hppa_link_hash_table *hppa_info;
01190 bfd_vma value;
01191
01192 hppa_info = data;
01193
01194 value = section->vma - section->filepos;
01195
01196 if (((section->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
01197 == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
01198 && value < hppa_info->text_segment_base)
01199 hppa_info->text_segment_base = value;
01200 else if (((section->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
01201 == (SEC_ALLOC | SEC_LOAD))
01202 && value < hppa_info->data_segment_base)
01203 hppa_info->data_segment_base = value;
01204 }
01205
01206
01207
01208
01209
01210
01211
01212 static bfd_boolean
01213 elf_hppa_final_link (bfd *abfd, struct bfd_link_info *info)
01214 {
01215 bfd_boolean retval;
01216 struct elf64_hppa_link_hash_table *hppa_info = elf64_hppa_hash_table (info);
01217
01218 if (! info->relocatable)
01219 {
01220 struct elf_link_hash_entry *gp;
01221 bfd_vma gp_val;
01222
01223
01224
01225
01226
01227 gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", FALSE,
01228 FALSE, FALSE);
01229
01230 if (gp)
01231 {
01232
01233
01234
01235
01236 gp->root.u.def.value += hppa_info->gp_offset;
01237
01238 gp_val = (gp->root.u.def.section->output_section->vma
01239 + gp->root.u.def.section->output_offset
01240 + gp->root.u.def.value);
01241 }
01242 else
01243 {
01244 asection *sec;
01245
01246
01247
01248
01249
01250
01251
01252
01253 sec = hppa_info->plt_sec;
01254 if (sec && ! (sec->flags & SEC_EXCLUDE))
01255 gp_val = (sec->output_offset
01256 + sec->output_section->vma
01257 + hppa_info->gp_offset);
01258 else
01259 {
01260 sec = hppa_info->dlt_sec;
01261 if (!sec || (sec->flags & SEC_EXCLUDE))
01262 sec = hppa_info->opd_sec;
01263 if (!sec || (sec->flags & SEC_EXCLUDE))
01264 sec = bfd_get_section_by_name (abfd, ".data");
01265 if (!sec || (sec->flags & SEC_EXCLUDE))
01266 return FALSE;
01267
01268 gp_val = sec->output_offset + sec->output_section->vma;
01269 }
01270 }
01271
01272
01273 _bfd_set_gp_value (abfd, gp_val);
01274 }
01275
01276
01277
01278
01279 hppa_info->text_segment_base = (bfd_vma)-1;
01280 hppa_info->data_segment_base = (bfd_vma)-1;
01281
01282
01283
01284
01285
01286
01287
01288
01289
01290
01291 elf_link_hash_traverse (elf_hash_table (info),
01292 elf_hppa_unmark_useless_dynamic_symbols,
01293 info);
01294
01295
01296 retval = bfd_elf_final_link (abfd, info);
01297
01298 elf_link_hash_traverse (elf_hash_table (info),
01299 elf_hppa_remark_useless_dynamic_symbols,
01300 info);
01301
01302
01303
01304 if (retval)
01305 retval = elf_hppa_sort_unwind (abfd);
01306
01307 return retval;
01308 }
01309
01310
01311
01312 static bfd_boolean
01313 elf_hppa_relocate_section (bfd *output_bfd,
01314 struct bfd_link_info *info,
01315 bfd *input_bfd,
01316 asection *input_section,
01317 bfd_byte *contents,
01318 Elf_Internal_Rela *relocs,
01319 Elf_Internal_Sym *local_syms,
01320 asection **local_sections)
01321 {
01322 Elf_Internal_Shdr *symtab_hdr;
01323 Elf_Internal_Rela *rel;
01324 Elf_Internal_Rela *relend;
01325 struct elf64_hppa_link_hash_table *hppa_info;
01326
01327 if (info->relocatable)
01328 return TRUE;
01329
01330 hppa_info = elf64_hppa_hash_table (info);
01331 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
01332
01333 rel = relocs;
01334 relend = relocs + input_section->reloc_count;
01335 for (; rel < relend; rel++)
01336 {
01337 int r_type;
01338 reloc_howto_type *howto = elf_hppa_howto_table + ELF_R_TYPE (rel->r_info);
01339 unsigned long r_symndx;
01340 struct elf_link_hash_entry *h;
01341 Elf_Internal_Sym *sym;
01342 asection *sym_sec;
01343 bfd_vma relocation;
01344 bfd_reloc_status_type r;
01345 const char *dyn_name;
01346 char *dynh_buf = NULL;
01347 size_t dynh_buflen = 0;
01348 struct elf64_hppa_dyn_hash_entry *dyn_h = NULL;
01349
01350 r_type = ELF_R_TYPE (rel->r_info);
01351 if (r_type < 0 || r_type >= (int) R_PARISC_UNIMPLEMENTED)
01352 {
01353 bfd_set_error (bfd_error_bad_value);
01354 return FALSE;
01355 }
01356
01357
01358 r_symndx = ELF_R_SYM (rel->r_info);
01359 h = NULL;
01360 sym = NULL;
01361 sym_sec = NULL;
01362 if (r_symndx < symtab_hdr->sh_info)
01363 {
01364
01365 sym = local_syms + r_symndx;
01366 sym_sec = local_sections[r_symndx];
01367 relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sym_sec, rel);
01368
01369
01370
01371 dyn_name = get_dyn_name (input_bfd, h, rel,
01372 &dynh_buf, &dynh_buflen);
01373 dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
01374 dyn_name, FALSE, FALSE);
01375
01376 }
01377 else
01378 {
01379
01380 long indx;
01381
01382 indx = r_symndx - symtab_hdr->sh_info;
01383 h = elf_sym_hashes (input_bfd)[indx];
01384 while (h->root.type == bfd_link_hash_indirect
01385 || h->root.type == bfd_link_hash_warning)
01386 h = (struct elf_link_hash_entry *) h->root.u.i.link;
01387 if (h->root.type == bfd_link_hash_defined
01388 || h->root.type == bfd_link_hash_defweak)
01389 {
01390 sym_sec = h->root.u.def.section;
01391
01392
01393
01394 dyn_name = get_dyn_name (input_bfd, h, rel,
01395 &dynh_buf, &dynh_buflen);
01396 dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
01397 dyn_name, FALSE, FALSE);
01398
01399
01400
01401
01402 if (sym_sec->output_section == NULL && dyn_h == NULL)
01403 {
01404 (*_bfd_error_handler)
01405 (_("%B(%A): warning: unresolvable relocation against symbol `%s'"),
01406 input_bfd, input_section, h->root.root.string);
01407 relocation = 0;
01408 }
01409 else if (sym_sec->output_section)
01410 relocation = (h->root.u.def.value
01411 + sym_sec->output_offset
01412 + sym_sec->output_section->vma);
01413
01414
01415 else
01416 relocation = 0;
01417 }
01418 else if (info->unresolved_syms_in_objects == RM_IGNORE
01419 && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
01420 {
01421
01422
01423 dyn_name = get_dyn_name (input_bfd, h, rel,
01424 &dynh_buf, &dynh_buflen);
01425 dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
01426 dyn_name, FALSE, FALSE);
01427
01428 if (dyn_h == NULL)
01429 {
01430 (*_bfd_error_handler)
01431 (_("%B(%A): warning: unresolvable relocation against symbol `%s'"),
01432 input_bfd, input_section, h->root.root.string);
01433 }
01434 relocation = 0;
01435 }
01436 else if (h->root.type == bfd_link_hash_undefweak)
01437 {
01438 dyn_name = get_dyn_name (input_bfd, h, rel,
01439 &dynh_buf, &dynh_buflen);
01440 dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table,
01441 dyn_name, FALSE, FALSE);
01442
01443 if (dyn_h == NULL)
01444 {
01445 (*_bfd_error_handler)
01446 (_("%B(%A): warning: unresolvable relocation against symbol `%s'"),
01447 input_bfd, input_section, h->root.root.string);
01448 }
01449 relocation = 0;
01450 }
01451 else
01452 {
01453
01454 if (elf_hppa_is_dynamic_loader_symbol (h->root.root.string))
01455 relocation = 0;
01456 else
01457 {
01458 if (!((*info->callbacks->undefined_symbol)
01459 (info, h->root.root.string, input_bfd,
01460 input_section, rel->r_offset,
01461 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
01462 || ELF_ST_VISIBILITY (h->other)))))
01463 return FALSE;
01464 break;
01465 }
01466 }
01467 }
01468
01469 r = elf_hppa_final_link_relocate (rel, input_bfd, output_bfd,
01470 input_section, contents,
01471 relocation, info, sym_sec,
01472 h, dyn_h);
01473
01474 if (r != bfd_reloc_ok)
01475 {
01476 switch (r)
01477 {
01478 default:
01479 abort ();
01480 case bfd_reloc_overflow:
01481 {
01482 const char *sym_name;
01483
01484 if (h != NULL)
01485 sym_name = NULL;
01486 else
01487 {
01488 sym_name = bfd_elf_string_from_elf_section (input_bfd,
01489 symtab_hdr->sh_link,
01490 sym->st_name);
01491 if (sym_name == NULL)
01492 return FALSE;
01493 if (*sym_name == '\0')
01494 sym_name = bfd_section_name (input_bfd, sym_sec);
01495 }
01496
01497 if (!((*info->callbacks->reloc_overflow)
01498 (info, (h ? &h->root : NULL), sym_name,
01499 howto->name, (bfd_vma) 0, input_bfd,
01500 input_section, rel->r_offset)))
01501 return FALSE;
01502 }
01503 break;
01504 }
01505 }
01506 }
01507 return TRUE;
01508 }
01509
01510
01511
01512
01513
01514
01515
01516
01517
01518
01519
01520
01521
01522
01523 static bfd_reloc_status_type
01524 elf_hppa_final_link_relocate (Elf_Internal_Rela *rel,
01525 bfd *input_bfd,
01526 bfd *output_bfd,
01527 asection *input_section,
01528 bfd_byte *contents,
01529 bfd_vma value,
01530 struct bfd_link_info *info,
01531 asection *sym_sec,
01532 struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
01533 struct elf64_hppa_dyn_hash_entry *dyn_h)
01534 {
01535 int insn;
01536 bfd_vma offset = rel->r_offset;
01537 bfd_signed_vma addend = rel->r_addend;
01538 reloc_howto_type *howto = elf_hppa_howto_table + ELF_R_TYPE (rel->r_info);
01539 unsigned int r_type = howto->type;
01540 bfd_byte *hit_data = contents + offset;
01541 struct elf64_hppa_link_hash_table *hppa_info = elf64_hppa_hash_table (info);
01542
01543 insn = bfd_get_32 (input_bfd, hit_data);
01544
01545 switch (r_type)
01546 {
01547 case R_PARISC_NONE:
01548 break;
01549
01550
01551
01552
01553
01554
01555
01556 case R_PARISC_PCREL21L:
01557 case R_PARISC_PCREL14R:
01558 case R_PARISC_PCREL14F:
01559 case R_PARISC_PCREL14WR:
01560 case R_PARISC_PCREL14DR:
01561 case R_PARISC_PCREL16F:
01562 case R_PARISC_PCREL16WF:
01563 case R_PARISC_PCREL16DF:
01564 {
01565
01566
01567
01568 if (sym_sec == NULL || sym_sec->output_section == NULL)
01569 value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset
01570 + hppa_info->stub_sec->output_section->vma);
01571
01572
01573 value -= (offset + input_section->output_offset
01574 + input_section->output_section->vma);
01575
01576
01577 if (r_type == R_PARISC_PCREL21L)
01578 value = hppa_field_adjust (value, -8 + addend, e_lsel);
01579 else if (r_type == R_PARISC_PCREL14F
01580 || r_type == R_PARISC_PCREL16F
01581 || r_type == R_PARISC_PCREL16WF
01582 || r_type == R_PARISC_PCREL16DF)
01583 value = hppa_field_adjust (value, -8 + addend, e_fsel);
01584 else
01585 value = hppa_field_adjust (value, -8 + addend, e_rsel);
01586
01587
01588 insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
01589 break;
01590 }
01591
01592 case R_PARISC_PCREL12F:
01593 case R_PARISC_PCREL22F:
01594 case R_PARISC_PCREL17F:
01595 case R_PARISC_PCREL22C:
01596 case R_PARISC_PCREL17C:
01597 case R_PARISC_PCREL17R:
01598 {
01599
01600
01601
01602 if (sym_sec == NULL || sym_sec->output_section == NULL)
01603 value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset
01604 + hppa_info->stub_sec->output_section->vma);
01605
01606
01607 value -= (offset + input_section->output_offset
01608 + input_section->output_section->vma);
01609
01610
01611 if (r_type == R_PARISC_PCREL17R)
01612 value = hppa_field_adjust (value, -8 + addend, e_rsel);
01613 else
01614 value = hppa_field_adjust (value, -8 + addend, e_fsel);
01615
01616
01617 value >>= 2;
01618
01619
01620 insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
01621 break;
01622 }
01623
01624
01625 case R_PARISC_DLTIND14R:
01626 case R_PARISC_DLTIND14F:
01627 case R_PARISC_DLTIND14DR:
01628 case R_PARISC_DLTIND14WR:
01629 case R_PARISC_DLTIND21L:
01630 case R_PARISC_LTOFF_FPTR14R:
01631 case R_PARISC_LTOFF_FPTR14DR:
01632 case R_PARISC_LTOFF_FPTR14WR:
01633 case R_PARISC_LTOFF_FPTR21L:
01634 case R_PARISC_LTOFF_FPTR16F:
01635 case R_PARISC_LTOFF_FPTR16WF:
01636 case R_PARISC_LTOFF_FPTR16DF:
01637 case R_PARISC_LTOFF_TP21L:
01638 case R_PARISC_LTOFF_TP14R:
01639 case R_PARISC_LTOFF_TP14F:
01640 case R_PARISC_LTOFF_TP14WR:
01641 case R_PARISC_LTOFF_TP14DR:
01642 case R_PARISC_LTOFF_TP16F:
01643 case R_PARISC_LTOFF_TP16WF:
01644 case R_PARISC_LTOFF_TP16DF:
01645 case R_PARISC_LTOFF16F:
01646 case R_PARISC_LTOFF16WF:
01647 case R_PARISC_LTOFF16DF:
01648 {
01649
01650
01651
01652
01653
01654
01655
01656
01657
01658
01659 if (dyn_h->h == NULL)
01660 {
01661
01662 if (r_type == R_PARISC_LTOFF_FPTR14R
01663 || r_type == R_PARISC_LTOFF_FPTR14DR
01664 || r_type == R_PARISC_LTOFF_FPTR14WR
01665 || r_type == R_PARISC_LTOFF_FPTR21L
01666 || r_type == R_PARISC_LTOFF_FPTR16F
01667 || r_type == R_PARISC_LTOFF_FPTR16WF
01668 || r_type == R_PARISC_LTOFF_FPTR16DF)
01669 {
01670
01671 memset (hppa_info->opd_sec->contents + dyn_h->opd_offset,
01672 0, 16);
01673
01674
01675 bfd_put_64 (hppa_info->opd_sec->owner, value + addend,
01676 (hppa_info->opd_sec->contents
01677 + dyn_h->opd_offset + 16));
01678
01679
01680 value = _bfd_get_gp_value
01681 (hppa_info->opd_sec->output_section->owner);
01682 bfd_put_64 (hppa_info->opd_sec->owner, value,
01683 (hppa_info->opd_sec->contents
01684 + dyn_h->opd_offset + 24));
01685
01686
01687 value = (dyn_h->opd_offset
01688 + hppa_info->opd_sec->output_offset
01689 + hppa_info->opd_sec->output_section->vma);
01690 addend = 0;
01691 }
01692
01693 bfd_put_64 (hppa_info->dlt_sec->owner,
01694 value + addend,
01695 hppa_info->dlt_sec->contents + dyn_h->dlt_offset);
01696 }
01697
01698
01699
01700
01701
01702 value = (dyn_h->dlt_offset
01703 + hppa_info->dlt_sec->output_offset
01704 + hppa_info->dlt_sec->output_section->vma);
01705 value -= _bfd_get_gp_value (output_bfd);
01706
01707
01708
01709
01710 if (r_type == R_PARISC_DLTIND21L
01711 || r_type == R_PARISC_LTOFF_FPTR21L
01712 || r_type == R_PARISC_LTOFF_TP21L)
01713 value = hppa_field_adjust (value, 0, e_lsel);
01714 else if (r_type == R_PARISC_DLTIND14F
01715 || r_type == R_PARISC_LTOFF_FPTR16F
01716 || r_type == R_PARISC_LTOFF_FPTR16WF
01717 || r_type == R_PARISC_LTOFF_FPTR16DF
01718 || r_type == R_PARISC_LTOFF16F
01719 || r_type == R_PARISC_LTOFF16DF
01720 || r_type == R_PARISC_LTOFF16WF
01721 || r_type == R_PARISC_LTOFF_TP16F
01722 || r_type == R_PARISC_LTOFF_TP16WF
01723 || r_type == R_PARISC_LTOFF_TP16DF)
01724 value = hppa_field_adjust (value, 0, e_fsel);
01725 else
01726 value = hppa_field_adjust (value, 0, e_rsel);
01727
01728 insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
01729 break;
01730 }
01731
01732 case R_PARISC_DLTREL14R:
01733 case R_PARISC_DLTREL14F:
01734 case R_PARISC_DLTREL14DR:
01735 case R_PARISC_DLTREL14WR:
01736 case R_PARISC_DLTREL21L:
01737 case R_PARISC_DPREL21L:
01738 case R_PARISC_DPREL14WR:
01739 case R_PARISC_DPREL14DR:
01740 case R_PARISC_DPREL14R:
01741 case R_PARISC_DPREL14F:
01742 case R_PARISC_GPREL16F:
01743 case R_PARISC_GPREL16WF:
01744 case R_PARISC_GPREL16DF:
01745 {
01746
01747
01748 value -= _bfd_get_gp_value (output_bfd);
01749
01750
01751
01752
01753 if (r_type == R_PARISC_DLTREL21L
01754 || r_type == R_PARISC_DPREL21L)
01755 value = hppa_field_adjust (value, addend, e_lrsel);
01756 else if (r_type == R_PARISC_DLTREL14F
01757 || r_type == R_PARISC_DPREL14F
01758 || r_type == R_PARISC_GPREL16F
01759 || r_type == R_PARISC_GPREL16WF
01760 || r_type == R_PARISC_GPREL16DF)
01761 value = hppa_field_adjust (value, addend, e_fsel);
01762 else
01763 value = hppa_field_adjust (value, addend, e_rrsel);
01764
01765 insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
01766 break;
01767 }
01768
01769 case R_PARISC_DIR21L:
01770 case R_PARISC_DIR17R:
01771 case R_PARISC_DIR17F:
01772 case R_PARISC_DIR14R:
01773 case R_PARISC_DIR14F:
01774 case R_PARISC_DIR14WR:
01775 case R_PARISC_DIR14DR:
01776 case R_PARISC_DIR16F:
01777 case R_PARISC_DIR16WF:
01778 case R_PARISC_DIR16DF:
01779 {
01780
01781
01782
01783
01784
01785 if (r_type == R_PARISC_DIR21L)
01786 value = hppa_field_adjust (value, addend, e_lrsel);
01787 else if (r_type == R_PARISC_DIR17F
01788 || r_type == R_PARISC_DIR16F
01789 || r_type == R_PARISC_DIR16WF
01790 || r_type == R_PARISC_DIR16DF
01791 || r_type == R_PARISC_DIR14F)
01792 value = hppa_field_adjust (value, addend, e_fsel);
01793 else
01794 value = hppa_field_adjust (value, addend, e_rrsel);
01795
01796 if (r_type == R_PARISC_DIR17R || r_type == R_PARISC_DIR17F)
01797 {
01798
01799 value >>= 2;
01800 }
01801
01802 insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
01803 break;
01804 }
01805
01806 case R_PARISC_PLTOFF21L:
01807 case R_PARISC_PLTOFF14R:
01808 case R_PARISC_PLTOFF14F:
01809 case R_PARISC_PLTOFF14WR:
01810 case R_PARISC_PLTOFF14DR:
01811 case R_PARISC_PLTOFF16F:
01812 case R_PARISC_PLTOFF16WF:
01813 case R_PARISC_PLTOFF16DF:
01814 {
01815
01816
01817
01818
01819 value = (dyn_h->plt_offset
01820 + hppa_info->plt_sec->output_offset
01821 + hppa_info->plt_sec->output_section->vma);
01822 value -= _bfd_get_gp_value (output_bfd);
01823
01824
01825
01826
01827 if (r_type == R_PARISC_PLTOFF21L)
01828 value = hppa_field_adjust (value, addend, e_lrsel);
01829 else if (r_type == R_PARISC_PLTOFF14F
01830 || r_type == R_PARISC_PLTOFF16F
01831 || r_type == R_PARISC_PLTOFF16WF
01832 || r_type == R_PARISC_PLTOFF16DF)
01833 value = hppa_field_adjust (value, addend, e_fsel);
01834 else
01835 value = hppa_field_adjust (value, addend, e_rrsel);
01836
01837 insn = elf_hppa_relocate_insn (insn, (int) value, r_type);
01838 break;
01839 }
01840
01841 case R_PARISC_LTOFF_FPTR32:
01842 {
01843
01844
01845 if (dyn_h->h == NULL)
01846 {
01847
01848 memset (hppa_info->opd_sec->contents + dyn_h->opd_offset, 0, 16);
01849
01850
01851 bfd_put_64 (hppa_info->opd_sec->owner, value + addend,
01852 (hppa_info->opd_sec->contents
01853 + dyn_h->opd_offset + 16));
01854
01855
01856 value = _bfd_get_gp_value
01857 (hppa_info->opd_sec->output_section->owner);
01858 bfd_put_64 (hppa_info->opd_sec->owner, value,
01859 hppa_info->opd_sec->contents + dyn_h->opd_offset + 24);
01860
01861
01862 value = (dyn_h->opd_offset
01863 + hppa_info->opd_sec->output_offset
01864 + hppa_info->opd_sec->output_section->vma);
01865
01866 bfd_put_64 (hppa_info->dlt_sec->owner,
01867 value,
01868 hppa_info->dlt_sec->contents + dyn_h->dlt_offset);
01869 }
01870
01871
01872
01873
01874
01875 value = (dyn_h->dlt_offset
01876 + hppa_info->dlt_sec->output_offset
01877 + hppa_info->dlt_sec->output_section->vma);
01878 value -= _bfd_get_gp_value (output_bfd);
01879 bfd_put_32 (input_bfd, value, hit_data);
01880 return bfd_reloc_ok;
01881 }
01882
01883 case R_PARISC_LTOFF_FPTR64:
01884 case R_PARISC_LTOFF_TP64:
01885 {
01886
01887
01888 if (dyn_h->h == NULL && r_type == R_PARISC_LTOFF_FPTR64)
01889 {
01890
01891 memset (hppa_info->opd_sec->contents + dyn_h->opd_offset, 0, 16);
01892
01893
01894 bfd_put_64 (hppa_info->opd_sec->owner, value + addend,
01895 (hppa_info->opd_sec->contents
01896 + dyn_h->opd_offset + 16));
01897
01898
01899 value = _bfd_get_gp_value
01900 (hppa_info->opd_sec->output_section->owner);
01901 bfd_put_64 (hppa_info->opd_sec->owner, value,
01902 hppa_info->opd_sec->contents + dyn_h->opd_offset + 24);
01903
01904
01905 value = (dyn_h->opd_offset
01906 + hppa_info->opd_sec->output_offset
01907 + hppa_info->opd_sec->output_section->vma);
01908
01909 bfd_put_64 (hppa_info->dlt_sec->owner,
01910 value,
01911 hppa_info->dlt_sec->contents + dyn_h->dlt_offset);
01912 }
01913
01914
01915
01916
01917
01918 value = (dyn_h->dlt_offset
01919 + hppa_info->dlt_sec->output_offset
01920 + hppa_info->dlt_sec->output_section->vma);
01921 value -= _bfd_get_gp_value (output_bfd);
01922 bfd_put_64 (input_bfd, value, hit_data);
01923 return bfd_reloc_ok;
01924 }
01925
01926 case R_PARISC_DIR32:
01927 bfd_put_32 (input_bfd, value + addend, hit_data);
01928 return bfd_reloc_ok;
01929
01930 case R_PARISC_DIR64:
01931 bfd_put_64 (input_bfd, value + addend, hit_data);
01932 return bfd_reloc_ok;
01933
01934 case R_PARISC_GPREL64:
01935
01936
01937 value -= _bfd_get_gp_value (output_bfd);
01938
01939 bfd_put_64 (input_bfd, value + addend, hit_data);
01940 return bfd_reloc_ok;
01941
01942 case R_PARISC_LTOFF64:
01943
01944
01945
01946
01947 value = (dyn_h->dlt_offset
01948 + hppa_info->dlt_sec->output_offset
01949 + hppa_info->dlt_sec->output_section->vma);
01950 value -= _bfd_get_gp_value (output_bfd);
01951
01952 bfd_put_64 (input_bfd, value + addend, hit_data);
01953 return bfd_reloc_ok;
01954
01955 case R_PARISC_PCREL32:
01956 {
01957
01958
01959
01960 if (sym_sec == NULL || sym_sec->output_section == NULL)
01961 value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset
01962 + hppa_info->stub_sec->output_section->vma);
01963
01964
01965 value -= (offset + input_section->output_offset
01966 + input_section->output_section->vma);
01967
01968 value += addend;
01969 value -= 8;
01970 bfd_put_32 (input_bfd, value, hit_data);
01971 return bfd_reloc_ok;
01972 }
01973
01974 case R_PARISC_PCREL64:
01975 {
01976
01977
01978
01979 if (sym_sec == NULL || sym_sec->output_section == NULL)
01980 value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset
01981 + hppa_info->stub_sec->output_section->vma);
01982
01983
01984 value -= (offset + input_section->output_offset
01985 + input_section->output_section->vma);
01986
01987 value += addend;
01988 value -= 8;
01989 bfd_put_64 (input_bfd, value, hit_data);
01990 return bfd_reloc_ok;
01991 }
01992
01993 case R_PARISC_FPTR64:
01994 {
01995
01996
01997 if (dyn_h->h == NULL)
01998 {
01999
02000 memset (hppa_info->opd_sec->contents + dyn_h->opd_offset, 0, 16);
02001
02002
02003 bfd_put_64 (hppa_info->opd_sec->owner, value + addend,
02004 (hppa_info->opd_sec->contents
02005 + dyn_h->opd_offset + 16));
02006
02007
02008 value = _bfd_get_gp_value
02009 (hppa_info->opd_sec->output_section->owner);
02010 bfd_put_64 (hppa_info->opd_sec->owner, value,
02011 hppa_info->opd_sec->contents + dyn_h->opd_offset + 24);
02012 }
02013
02014 if (dyn_h->want_opd)
02015
02016 value = (dyn_h->opd_offset
02017 + hppa_info->opd_sec->output_offset
02018 + hppa_info->opd_sec->output_section->vma);
02019 else
02020
02021 value += addend;
02022
02023 bfd_put_64 (input_bfd, value, hit_data);
02024 return bfd_reloc_ok;
02025 }
02026
02027 case R_PARISC_SECREL32:
02028 bfd_put_32 (input_bfd,
02029 value + addend - sym_sec->output_section->vma,
02030 hit_data);
02031 return bfd_reloc_ok;
02032
02033 case R_PARISC_SEGREL32:
02034 case R_PARISC_SEGREL64:
02035 {
02036
02037
02038 if (hppa_info->text_segment_base == (bfd_vma) -1)
02039 bfd_map_over_sections (output_bfd, elf_hppa_record_segment_addrs,
02040 hppa_info);
02041
02042
02043
02044
02045
02046
02047
02048 value += addend;
02049
02050 if (sym_sec->flags & SEC_CODE)
02051 value -= hppa_info->text_segment_base;
02052 else
02053 value -= hppa_info->data_segment_base;
02054
02055 if (r_type == R_PARISC_SEGREL32)
02056 bfd_put_32 (input_bfd, value, hit_data);
02057 else
02058 bfd_put_64 (input_bfd, value, hit_data);
02059 return bfd_reloc_ok;
02060 }
02061
02062
02063 default:
02064 return bfd_reloc_notsupported;
02065 }
02066
02067
02068 bfd_put_32 (input_bfd, (bfd_vma) insn, hit_data);
02069 return bfd_reloc_ok;
02070 }
02071
02072
02073
02074
02075
02076
02077
02078 static int
02079 elf_hppa_relocate_insn (int insn, int sym_value, unsigned int r_type)
02080 {
02081 switch (r_type)
02082 {
02083
02084
02085 case R_PARISC_PCREL22F:
02086 case R_PARISC_PCREL22C:
02087 return (insn & ~0x3ff1ffd) | re_assemble_22 (sym_value);
02088
02089
02090 case R_PARISC_PCREL12F:
02091 return (insn & ~0x1ffd) | re_assemble_12 (sym_value);
02092
02093
02094
02095 case R_PARISC_PCREL17F:
02096 case R_PARISC_DIR17F:
02097 case R_PARISC_DIR17R:
02098 case R_PARISC_PCREL17C:
02099 case R_PARISC_PCREL17R:
02100 return (insn & ~0x1f1ffd) | re_assemble_17 (sym_value);
02101
02102
02103 case R_PARISC_DLTREL21L:
02104 case R_PARISC_DLTIND21L:
02105 case R_PARISC_LTOFF_FPTR21L:
02106 case R_PARISC_PCREL21L:
02107 case R_PARISC_LTOFF_TP21L:
02108 case R_PARISC_DPREL21L:
02109 case R_PARISC_PLTOFF21L:
02110 case R_PARISC_DIR21L:
02111 return (insn & ~0x1fffff) | re_assemble_21 (sym_value);
02112
02113
02114 case R_PARISC_DLTREL14R:
02115 case R_PARISC_DLTREL14F:
02116 case R_PARISC_DLTIND14R:
02117 case R_PARISC_DLTIND14F:
02118 case R_PARISC_LTOFF_FPTR14R:
02119 case R_PARISC_PCREL14R:
02120 case R_PARISC_PCREL14F:
02121 case R_PARISC_LTOFF_TP14R:
02122 case R_PARISC_LTOFF_TP14F:
02123 case R_PARISC_DPREL14R:
02124 case R_PARISC_DPREL14F:
02125 case R_PARISC_PLTOFF14R:
02126 case R_PARISC_PLTOFF14F:
02127 case R_PARISC_DIR14R:
02128 case R_PARISC_DIR14F:
02129 return (insn & ~0x3fff) | low_sign_unext (sym_value, 14);
02130
02131
02132 case R_PARISC_LTOFF_FPTR16F:
02133 case R_PARISC_PCREL16F:
02134 case R_PARISC_LTOFF_TP16F:
02135 case R_PARISC_GPREL16F:
02136 case R_PARISC_PLTOFF16F:
02137 case R_PARISC_DIR16F:
02138 case R_PARISC_LTOFF16F:
02139 return (insn & ~0xffff) | re_assemble_16 (sym_value);
02140
02141
02142 case R_PARISC_DLTREL14DR:
02143 case R_PARISC_DLTIND14DR:
02144 case R_PARISC_LTOFF_FPTR14DR:
02145 case R_PARISC_LTOFF_FPTR16DF:
02146 case R_PARISC_PCREL14DR:
02147 case R_PARISC_PCREL16DF:
02148 case R_PARISC_LTOFF_TP14DR:
02149 case R_PARISC_LTOFF_TP16DF:
02150 case R_PARISC_DPREL14DR:
02151 case R_PARISC_GPREL16DF:
02152 case R_PARISC_PLTOFF14DR:
02153 case R_PARISC_PLTOFF16DF:
02154 case R_PARISC_DIR14DR:
02155 case R_PARISC_DIR16DF:
02156 case R_PARISC_LTOFF16DF:
02157 return (insn & ~0x3ff1) | (((sym_value & 0x2000) >> 13)
02158 | ((sym_value & 0x1ff8) << 1));
02159
02160
02161 case R_PARISC_DLTREL14WR:
02162 case R_PARISC_DLTIND14WR:
02163 case R_PARISC_LTOFF_FPTR14WR:
02164 case R_PARISC_LTOFF_FPTR16WF:
02165 case R_PARISC_PCREL14WR:
02166 case R_PARISC_PCREL16WF:
02167 case R_PARISC_LTOFF_TP14WR:
02168 case R_PARISC_LTOFF_TP16WF:
02169 case R_PARISC_DPREL14WR:
02170 case R_PARISC_GPREL16WF:
02171 case R_PARISC_PLTOFF14WR:
02172 case R_PARISC_PLTOFF16WF:
02173 case R_PARISC_DIR16WF:
02174 case R_PARISC_DIR14WR:
02175 case R_PARISC_LTOFF16WF:
02176 return (insn & ~0x3ff9) | (((sym_value & 0x2000) >> 13)
02177 | ((sym_value & 0x1ffc) << 1));
02178
02179 default:
02180 return insn;
02181 }
02182 }
02183 #endif