Home | History | Annotate | Download | only in gold

Lines Matching refs:elfcpp

28 #include "elfcpp.h"
81 typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
86 const typename elfcpp::Ehdr<size, big_endian>& ehdr)
217 typename elfcpp::Elf_types<size>::Elf_Addr dst_off)
226 add_gc_mark(typename elfcpp::Elf_types<size>::Elf_Addr dst_off)
302 { return this->e_flags_ & elfcpp::EF_PPC64_ABI; }
310 { return elfcpp::ppc64_decode_local_entry(sym->nonvis() >> 3); }
314 { return elfcpp::ppc64_decode_local_entry(this->st_other_[symndx] >> 5); }
371 elfcpp::Elf_Word e_flags_;
381 typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
384 const typename elfcpp::Ehdr<size, big_endian>& ehdr)
445 { return this->e_flags_ & elfcpp::EF_PPC64_ABI; }
490 elfcpp::Elf_Word e_flags_;
498 Output_data_reloc<elfcpp::SHT_RELA, true, size, big_endian> Reloc_section;
499 typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
500 typedef typename elfcpp::Elf_types<size>::Elf_Swxword Signed_address;
509 glink_(NULL), rela_dyn_(NULL), copy_relocs_(elfcpp::R_POWERPC_COPY),
582 if (r_type == elfcpp::R_POWERPC_REL14
583 || r_type == elfcpp::R_POWERPC_REL14_BRTAKEN
584 || r_type == elfcpp::R_POWERPC_REL14_BRNTAKEN)
662 typename elfcpp::Elf_types<size>::Elf_Off
734 const elfcpp::Ehdr<size, big_endian>&);
821 elfcpp::Swap<size, big_endian>::writeval(oview + p->second, p->first);
831 { return this->processor_specific_flags() & elfcpp::EF_PPC64_ABI; }
836 elfcpp::Elf_Word flags = this->processor_specific_flags();
837 flags &= ~elfcpp::EF_PPC64_ABI;
838 flags |= ver & elfcpp::EF_PPC64_ABI;
902 bool is_tls_call = ((r_type == elfcpp::R_POWERPC_REL24
903 || r_type == elfcpp::R_PPC_PLTREL24)
941 typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
955 const elfcpp::Rela<size, big_endian>& reloc, unsigned int r_type,
956 const elfcpp::Sym<size, big_endian>& lsym,
964 const elfcpp::Rela<size, big_endian>& reloc, unsigned int r_type,
973 const elfcpp::Rela<size, big_endian>& ,
975 const elfcpp::Sym<size, big_endian>&)
998 const elfcpp::Rela<size, big_endian>& ,
1061 const elfcpp::Rela<size, big_endian>&,
1065 typename elfcpp::Elf_types<size>::Elf_Addr,
1192 Symbol* sym, const elfcpp::Rela<size, big_endian>& reloc)
1295 Copy_relocs<elfcpp::SHT_RELA, size, big_endian> copy_relocs_;
1318 elfcpp::EM_PPC, // machine_code
1331 elfcpp::SHN_UNDEF, // small_common_shndx
1332 elfcpp::SHN_UNDEF, // large_common_shndx
1345 elfcpp::EM_PPC, // machine_code
1358 elfcpp::SHN_UNDEF, // small_common_shndx
1359 elfcpp::SHN_UNDEF, // large_common_shndx
1372 elfcpp::EM_PPC64, // machine_code
1385 elfcpp::SHN_UNDEF, // small_common_shndx
1386 elfcpp::SHN_UNDEF, // large_common_shndx
1399 elfcpp::EM_PPC64, // machine_code
1412 elfcpp::SHN_UNDEF, // small_common_shndx
1413 elfcpp::SHN_UNDEF, // large_common_shndx
1424 return (r_type == elfcpp::R_POWERPC_REL24
1425 || r_type == elfcpp::R_PPC_PLTREL24
1426 || r_type == elfcpp::R_PPC_LOCAL24PC
1427 || r_type == elfcpp::R_POWERPC_REL14
1428 || r_type == elfcpp::R_POWERPC_REL14_BRTAKEN
1429 || r_type == elfcpp::R_POWERPC_REL14_BRNTAKEN
1430 || r_type == elfcpp::R_POWERPC_ADDR24
1431 || r_type == elfcpp::R_POWERPC_ADDR14
1432 || r_type == elfcpp::R_POWERPC_ADDR14_BRTAKEN
1433 || r_type == elfcpp::R_POWERPC_ADDR14_BRNTAKEN);
1497 typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
1555 typedef typename elfcpp::Swap<fieldsize, big_endian>::Valtype Valtype;
1557 elfcpp::Swap<fieldsize, big_endian>::writeval(wv, value);
1565 typename elfcpp::Valtype_base<fieldsize>::Valtype dst_mask,
1569 typedef typename elfcpp::Swap<fieldsize, big_endian>::Valtype Valtype;
1571 Valtype val = elfcpp::Swap<fieldsize, big_endian>::readval(wv);
1575 elfcpp::Swap<fieldsize, big_endian>::writeval(wv, val | reloc);
1584 elfcpp::Swap_unaligned<fieldsize, big_endian>::writeval(view, value);
1592 typename elfcpp::Valtype_base<fieldsize>::Valtype dst_mask,
1596 typedef typename elfcpp::Swap_unaligned<fieldsize, big_endian>::Valtype
1598 Valtype val = elfcpp::Swap<fieldsize, big_endian>::readval(view);
1602 elfcpp::Swap_unaligned<fieldsize, big_endian>::writeval(view, val | reloc);
1741 unsigned int ndx = (s - pshdrs) / elfcpp::Elf_sizes<size>::shdr_size;
1766 typedef typename Reloc_types<elfcpp::SHT_RELA, size, big_endian>::Reloc
1769 = Reloc_types<elfcpp::SHT_RELA, size, big_endian>::reloc_size;
1770 const int sym_size = elfcpp::Elf_sizes<size>::sym_size;
1778 typename elfcpp::Elf_types<size>::Elf_WXword r_info
1780 unsigned int r_type = elfcpp::elf_r_type<size>(r_info);
1781 if (r_type == elfcpp::R_PPC64_ADDR64)
1783 unsigned int r_sym = elfcpp::elf_r_sym<size>(r_info);
1784 typename elfcpp::Elf_types<size>::Elf_Addr value;
1789 typename elfcpp::Sym<size, big_endian>
1809 else if (r_type == elfcpp::R_PPC64_TOC)
1870 const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
1876 const int sym_size = elfcpp::Elf_sizes<size>::sym_size;
1880 typename elfcpp::Shdr<size, big_endian> shdr(psymtab);
1886 elfcpp::Sym<size, big_endian> sym(psyms);
1889 if ((st_other & elfcpp::STO_PPC64_LOCAL_MASK) != 0)
1934 const int shdr_size = elfcpp::Elf_sizes<size>::shdr_size;
1951 typename elfcpp::Shdr<size, big_endian> shdr(s);
1952 if (shdr.get_sh_type() == elfcpp::SHT_PROGBITS
1953 && (shdr.get_sh_flags() & elfcpp::SHF_ALLOC) != 0)
1979 typename elfcpp::Shdr<size, big_endian> shdr(s);
1980 if (shdr.get_sh_type() == elfcpp::SHT_PROGBITS
1982 & (elfcpp::SHF_ALLOC | elfcpp::SHF_EXECINSTR))
1983 == (elfcpp::SHF_ALLOC | elfcpp::SHF_EXECINSTR))
2003 typedef typename elfcpp::Swap<64, big_endian>::Valtype Valtype;
2005 Valtype val = elfcpp::Swap<64, big_endian>::readval(valp);
2054 elfcpp::STT_OBJECT,
2055 elfcpp::STB_LOCAL,
2056 elfcpp::STV_HIDDEN, 0,
2067 elfcpp::SHF_ALLOC
2068 | elfcpp::SHF_WRITE,
2072 os, 32768, 0, elfcpp::STT_OBJECT,
2073 elfcpp::STB_LOCAL, elfcpp::STV_HIDDEN,
2091 elfcpp::STT_OBJECT,
2092 elfcpp::STB_LOCAL,
2093 elfcpp::STV_HIDDEN, 0,
2106 off_t offset, const elfcpp::Ehdr<size, big_endian>& ehdr)
2111 if (et == elfcpp::ET_REL
2112 || (et == elfcpp::ET_EXEC && input_file->just_symbols()))
2119 else if (et == elfcpp::ET_DYN)
2137 typedef typename elfcpp::Elf_types<size>::Elf_Addr Valtype;
2138 typedef Output_data_reloc<elfcpp::SHT_RELA, true, size, big_endian> Rela_dyn;
2307 elfcpp::STT_OBJECT,
2308 elfcpp::STB_LOCAL,
2309 elfcpp::STV_HIDDEN, 0,
2340 layout->add_output_section_data(".got", elfcpp::SHT_PROGBITS,
2341 elfcpp::SHF_ALLOC | elfcpp::SHF_WRITE,
2358 layout->add_output_section_data(".rela.dyn", elfcpp::SHT_RELA,
2359 elfcpp::SHF_ALLOC, this->rela_dyn_,
2597 if (r_type == elfcpp::R_POWERPC_REL14
2598 || r_type == elfcpp::R_POWERPC_REL14_BRTAKEN
2599 || r_type == elfcpp::R_POWERPC_REL14_BRNTAKEN)
2601 if (r_type == elfcpp::R_POWERPC_REL24
2602 || r_type == elfcpp::R_PPC_PLTREL24
2603 || r_type == elfcpp::R_PPC_LOCAL24PC)
2680 if (shndx == elfcpp::SHN_UNDEF)
2714 if (!(size == 32 && this->r_type_ == elfcpp::R_PPC_PLTREL24))
2996 if (oview[9] == elfcpp::DW_CFA_nop)
3025 typedef Output_data_reloc<elfcpp::SHT_RELA, true,
3119 unsigned int dynrel = elfcpp::R_POWERPC_JMP_SLOT;
3136 unsigned int dynrel = elfcpp::R_POWERPC_IRELATIVE;
3138 dynrel = elfcpp::R_PPC64_JMP_IREL;
3157 unsigned int dynrel = elfcpp::R_POWERPC_IRELATIVE;
3159 dynrel = elfcpp::R_PPC64_JMP_IREL;
3255 elfcpp::Elf_types<32>::Elf_Addr branch_tab = glink->address();
3259 elfcpp::Swap<32, big_endian>::writeval(pov, branch_tab);
3289 layout->add_output_section_data(".rela.plt", elfcpp::SHT_RELA,
3290 elfcpp::SHF_ALLOC, plt_rel,
3297 ? elfcpp::SHT_PROGBITS
3298 : elfcpp::SHT_NOBITS),
3299 elfcpp::SHF_ALLOC | elfcpp::SHF_WRITE,
3334 typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
3335 typedef Output_data_reloc<elfcpp::SHT_RELA, true,
3362 { this->rel_->add_relative(elfcpp::R_POWERPC_RELATIVE, this, off, to); }
3376 = Reloc_types<elfcpp::SHT_RELA, size, big_endian>::reloc_size;
3433 (is_pic ? elfcpp::SHT_NOBITS
3434 : elfcpp::SHT_PROGBITS),
3435 elfcpp::SHF_ALLOC | elfcpp::SHF_WRITE,
3494 (elfcpp::DW_EH_PE_pcrel
3495 | elfcpp::DW_EH_PE_sdata4), // FDE encoding.
3496 elfcpp::DW_CFA_def_cfa, 1, 0 // def_cfa: r1 offset 0.
3505 elfcpp::DW_CFA_advance_loc + 1,
3506 elfcpp::DW_CFA_register, 65, 12,
3507 elfcpp::DW_CFA_advance_loc + 4,
3508 elfcpp::DW_CFA_restore_extended, 65
3517 elfcpp::DW_CFA_advance_loc + 1,
3518 elfcpp::DW_CFA_register, 65, 0,
3519 elfcpp::DW_CFA_advance_loc + 4,
3520 elfcpp::DW_CFA_restore_extended, 65
3529 elfcpp::DW_CFA_advance_loc + 2,
3530 elfcpp::DW_CFA_register, 65, 0,
3531 elfcpp::DW_CFA_advance_loc + 4,
3532 elfcpp::DW_CFA_restore_extended, 65
3540 elfcpp::DW_CFA_nop, // Pad.
3541 elfcpp::DW_CFA_nop,
3542 elfcpp::DW_CFA_nop
3549 elfcpp::Swap<32, big_endian>::writeval(p, v);
3561 typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
3774 *is_iplt = (gsym->type() == elfcpp::STT_GNU_IFUNC
3860 && r_type == elfcpp::R_PPC_PLTREL24)
3877 && r_type == elfcpp::R_PPC_PLTREL24)
3891 typename elfcpp::Elf_types<size>::Elf_Addr addend_;
4082 typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
4564 typedef typename elfcpp::Elf_types<size>::Elf_Addr Address;
4576 elfcpp::Swap<64, big_endian>::writeval(p, pltoff), p += 8;
4643 if (ge->first->type() == elfcpp::STT_GNU_IFUNC
5058 elfcpp::STT_FUNC, elfcpp::STB_GLOBAL,
5059 elfcpp::STV_HIDDEN, 0, false, false);
5089 layout->add_output_section_data(".text", elfcpp::SHT_PROGBITS,
5090 elfcpp::SHF_ALLOC | elfcpp::SHF_EXECINSTR,
5103 if (gsym->type() == elfcpp::STT_GNU_IFUNC
5160 rela_dyn->add_local(object, 0, elfcpp::R_POWERPC_DTPMOD, got,
5179 case elfcpp::R_POWERPC_NONE:
5180 case elfcpp::R_POWERPC_GNU_VTINHERIT:
5181 case elfcpp::R_POWERPC_GNU_VTENTRY:
5182 case elfcpp::R_PPC64_TOC:
5186 case elfcpp::R_PPC64_ADDR64:
5187 case elfcpp::R_PPC64_UADDR64:
5188 case elfcpp::R_POWERPC_ADDR32:
5189 case elfcpp::R_POWERPC_UADDR32:
5190 case elfcpp::R_POWERPC_ADDR16:
5191 case elfcpp::R_POWERPC_UADDR16:
5192 case elfcpp::R_POWERPC_ADDR16_LO:
5193 case elfcpp::R_POWERPC_ADDR16_HI:
5194 case elfcpp::R_POWERPC_ADDR16_HA:
5198 case elfcpp::R_POWERPC_ADDR24:
5199 case elfcpp::R_POWERPC_ADDR14:
5200 case elfcpp::R_POWERPC_ADDR14_BRTAKEN:
5201 case elfcpp::R_POWERPC_ADDR14_BRNTAKEN:
5205 case elfcpp::R_PPC64_REL64:
5206 case elfcpp::R_POWERPC_REL32:
5207 case elfcpp::R_PPC_LOCAL24PC:
5208 case elfcpp::R_POWERPC_REL16:
5209 case elfcpp::R_POWERPC_REL16_LO:
5210 case elfcpp::R_POWERPC_REL16_HI:
5211 case elfcpp::R_POWERPC_REL16_HA:
5215 case elfcpp::R_POWERPC_REL24:
5216 case elfcpp::R_PPC_PLTREL24:
5217 case elfcpp::R_POWERPC_REL14:
5218 case elfcpp::R_POWERPC_REL14_BRTAKEN:
5219 case elfcpp::R_POWERPC_REL14_BRNTAKEN:
5223 case elfcpp::R_POWERPC_GOT16:
5224 case elfcpp::R_POWERPC_GOT16_LO:
5225 case elfcpp::R_POWERPC_GOT16_HI:
5226 case elfcpp::R_POWERPC_GOT16_HA:
5227 case elfcpp::R_PPC64_GOT16_DS:
5228 case elfcpp::R_PPC64_GOT16_LO_DS:
5229 case elfcpp::R_PPC64_TOC16:
5230 case elfcpp::R_PPC64_TOC16_LO:
5231 case elfcpp::R_PPC64_TOC16_HI:
5232 case elfcpp::R_PPC64_TOC16_HA:
5233 case elfcpp::R_PPC64_TOC16_DS:
5234 case elfcpp::R_PPC64_TOC16_LO_DS:
5239 case elfcpp::R_POWERPC_GOT_TPREL16:
5240 case elfcpp::R_POWERPC_TLS:
5244 case elfcpp::R_POWERPC_COPY:
5245 case elfcpp::R_POWERPC_GLOB_DAT:
5246 case elfcpp::R_POWERPC_JMP_SLOT:
5247 case elfcpp::R_POWERPC_RELATIVE:
5248 case elfcpp::R_POWERPC_DTPMOD:
5279 gold_assert(r_type != elfcpp::R_POWERPC_NONE);
5285 case elfcpp::R_POWERPC_NONE:
5286 case elfcpp::R_POWERPC_RELATIVE:
5287 case elfcpp::R_POWERPC_GLOB_DAT:
5288 case elfcpp::R_POWERPC_DTPMOD:
5289 case elfcpp::R_POWERPC_DTPREL:
5290 case elfcpp::R_POWERPC_TPREL:
5291 case elfcpp::R_POWERPC_JMP_SLOT:
5292 case elfcpp::R_POWERPC_COPY:
5293 case elfcpp::R_POWERPC_IRELATIVE:
5294 case elfcpp::R_POWERPC_ADDR32:
5295 case elfcpp::R_POWERPC_UADDR32:
5296 case elfcpp::R_POWERPC_ADDR24:
5297 case elfcpp::R_POWERPC_ADDR16:
5298 case elfcpp::R_POWERPC_UADDR16:
5299 case elfcpp::R_POWERPC_ADDR16_LO:
5300 case elfcpp::R_POWERPC_ADDR16_HI:
5301 case elfcpp::R_POWERPC_ADDR16_HA:
5302 case elfcpp::R_POWERPC_ADDR14:
5303 case elfcpp::R_POWERPC_ADDR14_BRTAKEN:
5304 case elfcpp::R_POWERPC_ADDR14_BRNTAKEN:
5305 case elfcpp::R_POWERPC_REL32:
5306 case elfcpp::R_POWERPC_REL24:
5307 case elfcpp::R_POWERPC_TPREL16:
5308 case elfcpp::R_POWERPC_TPREL16_LO:
5309 case elfcpp::R_POWERPC_TPREL16_HI:
5310 case elfcpp::R_POWERPC_TPREL16_HA:
5322 case elfcpp::R_PPC64_ADDR64:
5323 case elfcpp::R_PPC64_UADDR64:
5324 case elfcpp::R_PPC64_JMP_IREL:
5325 case elfcpp::R_PPC64_ADDR16_DS:
5326 case elfcpp::R_PPC64_ADDR16_LO_DS:
5327 case elfcpp::R_PPC64_ADDR16_HIGH:
5328 case elfcpp::R_PPC64_ADDR16_HIGHA:
5329 case elfcpp::R_PPC64_ADDR16_HIGHER:
5330 case elfcpp::R_PPC64_ADDR16_HIGHEST:
5331 case elfcpp::R_PPC64_ADDR16_HIGHERA:
5332 case elfcpp::R_PPC64_ADDR16_HIGHESTA:
5333 case elfcpp::R_PPC64_REL64:
5334 case elfcpp::R_POWERPC_ADDR30:
5335 case elfcpp::R_PPC64_TPREL16_DS:
5336 case elfcpp::R_PPC64_TPREL16_LO_DS:
5337 case elfcpp::R_PPC64_TPREL16_HIGH:
5338 case elfcpp::R_PPC64_TPREL16_HIGHA:
5339 case elfcpp::R_PPC64_TPREL16_HIGHER:
5340 case elfcpp::R_PPC64_TPREL16_HIGHEST:
5341 case elfcpp::R_PPC64_TPREL16_HIGHERA:
5342 case elfcpp::R_PPC64_TPREL16_HIGHESTA:
5355 case elfcpp::R_POWERPC_DTPREL16:
5356 case elfcpp::R_POWERPC_DTPREL16_LO:
5357 case elfcpp::R_POWERPC_DTPREL16_HI:
5358 case elfcpp::R_POWERPC_DTPREL16_HA:
5398 case elfcpp::R_POWERPC_ADDR32:
5399 case elfcpp::R_POWERPC_UADDR32:
5404 case elfcpp::R_PPC64_ADDR64:
5405 case elfcpp::R_PPC64_UADDR64:
5411 case elfcpp::R_POWERPC_GOT16:
5412 case elfcpp::R_POWERPC_GOT16_LO:
5413 case elfcpp::R_POWERPC_GOT16_HI:
5414 case elfcpp::R_POWERPC_GOT16_HA:
5415 case elfcpp::R_PPC64_GOT16_DS:
5416 case elfcpp::R_PPC64_GOT16_LO_DS:
5420 case elfcpp::R_POWERPC_ADDR24:
5421 case elfcpp::R_POWERPC_ADDR14:
5422 case elfcpp::R_POWERPC_ADDR14_BRTAKEN:
5423 case elfcpp::R_POWERPC_ADDR14_BRNTAKEN:
5424 case elfcpp::R_POWERPC_REL24:
5425 case elfcpp::R_PPC_PLTREL24:
5426 case elfcpp::R_POWERPC_REL14:
5427 case elfcpp::R_POWERPC_REL14_BRTAKEN:
5428 case elfcpp::R_POWERPC_REL14_BRNTAKEN:
5461 const elfcpp::Rela<size, big_endian>& reloc,
5463 const elfcpp::Sym<size, big_endian>& lsym,
5468 if ((size == 64 && r_type == elfcpp::R_PPC64_TLSGD)
5469 || (size == 32 && r_type == elfcpp::R_PPC_TLSGD))
5476 else if ((size == 64 && r_type == elfcpp::R_PPC64_TLSLD)
5477 || (size == 32 && r_type == elfcpp::R_PPC_TLSLD))
5492 && r_type == elfcpp::R_PPC64_ADDR64)
5498 bool is_ifunc = lsym.get_st_type() == elfcpp::STT_GNU_IFUNC;
5501 unsigned int r_sym = elfcpp::elf_r_sym<size>(reloc.get_r_info());
5509 case elfcpp::R_POWERPC_NONE:
5510 case elfcpp::R_POWERPC_GNU_VTINHERIT:
5511 case elfcpp::R_POWERPC_GNU_VTENTRY:
5512 case elfcpp::R_PPC64_TOCSAVE:
5513 case elfcpp::R_POWERPC_TLS:
5516 case elfcpp::R_PPC64_TOC:
5532 elfcpp::R_POWERPC_RELATIVE,
5540 case elfcpp::R_PPC64_ADDR64:
5541 case elfcpp::R_PPC64_UADDR64:
5542 case elfcpp::R_POWERPC_ADDR32:
5543 case elfcpp::R_POWERPC_UADDR32:
5544 case elfcpp::R_POWERPC_ADDR24:
5545 case elfcpp::R_POWERPC_ADDR16:
5546 case elfcpp::R_POWERPC_ADDR16_LO:
5547 case elfcpp::R_POWERPC_ADDR16_HI:
5548 case elfcpp::R_POWERPC_ADDR16_HA:
5549 case elfcpp::R_POWERPC_UADDR16:
5550 case elfcpp::R_PPC64_ADDR16_HIGH:
5551 elfcpp::R_PPC64_ADDR16_HIGHA:
5552 case elfcpp::R_PPC64_ADDR16_HIGHER:
5553 case elfcpp::R_PPC64_ADDR16_HIGHERA:
5554 case elfcpp::R_PPC64_ADDR16_HIGHEST:
5555 case elfcpp::R_PPC64_ADDR16_HIGHESTA:
5556 case elfcpp::R_PPC64_ADDR16_DS:
5557 case elfcpp::R_PPC64_ADDR16_LO_DS:
5558 case elfcpp::R_POWERPC_ADDR14:
5559 case elfcpp::R_POWERPC_ADDR14_BRTAKEN:
5560 case elfcpp::R_POWERPC_ADDR14_BRNTAKEN:
5569 unsigned int r_sym = elfcpp::elf_r_sym<size>(reloc.get_r_info());
5570 if ((size == 32 && r_type == elfcpp::R_POWERPC_ADDR32)
5571 || (size == 64 && r_type == elfcpp::R_PPC64_ADDR64))
5573 unsigned int dynrel = (is_ifunc ? elfcpp::R_POWERPC_IRELATIVE
5574 : elfcpp::R_POWERPC_RELATIVE);
5580 else if (lsym.get_st_type() != elfcpp::STT_SECTION)
5605 case elfcpp::R_POWERPC_REL24:
5606 case elfcpp::R_PPC_PLTREL24:
5607 case elfcpp::R_PPC_LOCAL24PC:
5608 case elfcpp::R_POWERPC_REL14:
5609 case elfcpp::R_POWERPC_REL14_BRTAKEN:
5610 case elfcpp::R_POWERPC_REL14_BRNTAKEN:
5613 r_type, elfcpp::elf_r_sym<size>(reloc.get_r_info()),
5617 case elfcpp::R_PPC64_REL64:
5618 case elfcpp::R_POWERPC_REL32:
5619 case elfcpp::R_POWERPC_REL16:
5620 case elfcpp::R_POWERPC_REL16_LO:
5621 case elfcpp::R_POWERPC_REL16_HI:
5622 case elfcpp::R_POWERPC_REL16_HA:
5623 case elfcpp::R_POWERPC_SECTOFF:
5624 case elfcpp::R_POWERPC_SECTOFF_LO:
5625 case elfcpp::R_POWERPC_SECTOFF_HI:
5626 case elfcpp::R_POWERPC_SECTOFF_HA:
5627 case elfcpp::R_PPC64_SECTOFF_DS:
5628 case elfcpp::R_PPC64_SECTOFF_LO_DS:
5629 case elfcpp::R_POWERPC_TPREL16:
5630 case elfcpp::R_POWERPC_TPREL16_LO:
5631 case elfcpp::R_POWERPC_TPREL16_HI:
5632 case elfcpp::R_POWERPC_TPREL16_HA:
5633 case elfcpp::R_PPC64_TPREL16_DS:
5634 case elfcpp::R_PPC64_TPREL16_LO_DS:
5635 case elfcpp::R_PPC64_TPREL16_HIGH:
5636 case elfcpp::R_PPC64_TPREL16_HIGHA:
5637 case elfcpp::R_PPC64_TPREL16_HIGHER:
5638 case elfcpp::R_PPC64_TPREL16_HIGHERA:
5639 case elfcpp::R_PPC64_TPREL16_HIGHEST:
5640 case elfcpp::R_PPC64_TPREL16_HIGHESTA:
5641 case elfcpp::R_POWERPC_DTPREL16:
5642 case elfcpp::R_POWERPC_DTPREL16_LO:
5643 case elfcpp::R_POWERPC_DTPREL16_HI:
5644 case elfcpp::R_POWERPC_DTPREL16_HA:
5645 case elfcpp::R_PPC64_DTPREL16_DS:
5646 case elfcpp::R_PPC64_DTPREL16_LO_DS:
5647 case elfcpp::R_PPC64_DTPREL16_HIGH:
5648 case elfcpp::R_PPC64_DTPREL16_HIGHA:
5649 case elfcpp::R_PPC64_DTPREL16_HIGHER:
5650 case elfcpp::R_PPC64_DTPREL16_HIGHERA:
5651 case elfcpp::R_PPC64_DTPREL16_HIGHEST:
5652 case elfcpp::R_PPC64_DTPREL16_HIGHESTA:
5653 case elfcpp::R_PPC64_TLSGD:
5654 case elfcpp::R_PPC64_TLSLD:
5655 case elfcpp::R_PPC64_ADDR64_LOCAL:
5658 case elfcpp::R_POWERPC_GOT16:
5659 case elfcpp::R_POWERPC_GOT16_LO:
5660 case elfcpp::R_POWERPC_GOT16_HI:
5661 case elfcpp::R_POWERPC_GOT16_HA:
5662 case elfcpp::R_PPC64_GOT16_DS:
5663 case elfcpp::R_PPC64_GOT16_LO_DS:
5668 unsigned int r_sym = elfcpp::elf_r_sym<size>(reloc.get_r_info());
5688 unsigned int dynrel = (is_ifunc ? elfcpp::R_POWERPC_IRELATIVE
5689 : elfcpp::R_POWERPC_RELATIVE);
5696 case elfcpp::R_PPC64_TOC16:
5697 case elfcpp::R_PPC64_TOC16_LO:
5698 case elfcpp::R_PPC64_TOC16_HI:
5699 case elfcpp::R_PPC64_TOC16_HA:
5700 case elfcpp::R_PPC64_TOC16_DS:
5701 case elfcpp::R_PPC64_TOC16_LO_DS:
5706 case elfcpp::R_POWERPC_GOT_TLSGD16:
5707 case elfcpp::R_POWERPC_GOT_TLSGD16_LO:
5708 case elfcpp::R_POWERPC_GOT_TLSGD16_HI:
5709 case elfcpp::R_POWERPC_GOT_TLSGD16_HA:
5716 unsigned int r_sym = elfcpp::elf_r_sym<size>(reloc.get_r_info());
5719 rela_dyn, elfcpp::R_POWERPC_DTPMOD);
5730 case elfcpp::R_POWERPC_GOT_TLSLD16:
5731 case elfcpp::R_POWERPC_GOT_TLSLD16_LO:
5732 case elfcpp::R_POWERPC_GOT_TLSLD16_HI:
5733 case elfcpp::R_POWERPC_GOT_TLSLD16_HA:
5753 case elfcpp::R_POWERPC_GOT_DTPREL16:
5754 case elfcpp::R_POWERPC_GOT_DTPREL16_LO:
5755 case elfcpp::R_POWERPC_GOT_DTPREL16_HI:
5756 case elfcpp::R_POWERPC_GOT_DTPREL16_HA:
5760 unsigned int r_sym = elfcpp::elf_r_sym<size>(reloc.get_r_info());
5765 case elfcpp::R_POWERPC_GOT_TPREL16:
5766 case elfcpp::R_POWERPC_GOT_TPREL16_LO:
5767 case elfcpp::R_POWERPC_GOT_TPREL16_HI:
5768 case elfcpp::R_POWERPC_GOT_TPREL16_HA:
5773 unsigned int r_sym = elfcpp::elf_r_sym<size>(reloc.get_r_info());
5783 elfcpp::R_POWERPC_TPREL,
5803 case elfcpp::R_POWERPC_GOT_TLSLD16:
5804 case elfcpp::R_POWERPC_GOT_TLSGD16:
5805 case elfcpp::R_POWERPC_GOT_TPREL16:
5806 case elfcpp::R_POWERPC_GOT_DTPREL16:
5807 case elfcpp::R_POWERPC_GOT16:
5808 case elfcpp::R_PPC64_GOT16_DS:
5809 case elfcpp::R_PPC64_TOC16:
5810 case elfcpp::R_PPC64_TOC16_DS:
5841 const elfcpp::Rela<size, big_endian>& reloc,
5848 if ((size == 64 && r_type == elfcpp::R_PPC64_TLSGD)
5849 || (size == 32 && r_type == elfcpp::R_PPC_TLSGD))
5857 else if ((size == 64 && r_type == elfcpp::R_PPC64_TLSLD)
5858 || (size == 32 && r_type == elfcpp::R_PPC_TLSLD))
5870 bool is_ifunc = gsym->type() == elfcpp::STT_GNU_IFUNC;
5875 r_type, elfcpp::elf_r_sym<size>(reloc.get_r_info()),
5883 case elfcpp::R_POWERPC_NONE:
5884 case elfcpp::R_POWERPC_GNU_VTINHERIT:
5885 case elfcpp::R_POWERPC_GNU_VTENTRY:
5886 case elfcpp::R_PPC_LOCAL24PC:
5887 case elfcpp::R_POWERPC_TLS:
5890 case elfcpp::R_PPC64_TOC:
5908 elfcpp::R_POWERPC_RELATIVE,
5916 case elfcpp::R_PPC64_ADDR64:
5927 case elfcpp::R_PPC64_UADDR64:
5928 case elfcpp::R_POWERPC_ADDR32:
5929 case elfcpp::R_POWERPC_UADDR32:
5930 case elfcpp::R_POWERPC_ADDR24:
5931 case elfcpp::R_POWERPC_ADDR16:
5932 case elfcpp::R_POWERPC_ADDR16_LO:
5933 case elfcpp::R_POWERPC_ADDR16_HI:
5934 case elfcpp::R_POWERPC_ADDR16_HA:
5935 case elfcpp::R_POWERPC_UADDR16:
5936 case elfcpp::R_PPC64_ADDR16_HIGH:
5937 case elfcpp::R_PPC64_ADDR16_HIGHA:
5938 case elfcpp::R_PPC64_ADDR16_HIGHER:
5939 case elfcpp::R_PPC64_ADDR16_HIGHERA:
5940 case elfcpp::R_PPC64_ADDR16_HIGHEST:
5941 case elfcpp::R_PPC64_ADDR16_HIGHESTA:
5942 case elfcpp::R_PPC64_ADDR16_DS:
5943 case elfcpp::R_PPC64_ADDR16_LO_DS:
5944 case elfcpp::R_POWERPC_ADDR14:
5945 case elfcpp::R_POWERPC_ADDR14_BRTAKEN:
5946 case elfcpp::R_POWERPC_ADDR14_BRNTAKEN:
5967 elfcpp::elf_r_sym<size>(reloc.get_r_info()),
5983 && r_type == elfcpp::R_POWERPC_ADDR32)
5985 && r_type == elfcpp::R_PPC64_ADDR64
5988 && !(gsym->visibility() == elfcpp::STV_PROTECTED
5991 && r_type == elfcpp::R_PPC64_ADDR64
5998 unsigned int dynrel = (is_ifunc ? elfcpp::R_POWERPC_IRELATIVE
5999 : elfcpp::R_POWERPC_RELATIVE);
6018 case elfcpp::R_PPC_PLTREL24:
6019 case elfcpp::R_POWERPC_REL24:
6024 elfcpp::elf_r_sym<size>(reloc.get_r_info()),
6035 case elfcpp::R_PPC64_REL64:
6036 case elfcpp::R_POWERPC_REL32:
6059 case elfcpp::R_POWERPC_REL14:
6060 case elfcpp::R_POWERPC_REL14_BRTAKEN:
6061 case elfcpp::R_POWERPC_REL14_BRNTAKEN:
6064 r_type, elfcpp::elf_r_sym<size>(reloc.get_r_info()),
6068 case elfcpp::R_POWERPC_REL16:
6069 case elfcpp::R_POWERPC_REL16_LO:
6070 case elfcpp::R_POWERPC_REL16_HI:
6071 case elfcpp::R_POWERPC_REL16_HA:
6072 case elfcpp::R_POWERPC_SECTOFF:
6073 case elfcpp::R_POWERPC_SECTOFF_LO:
6074 case elfcpp::R_POWERPC_SECTOFF_HI:
6075 case elfcpp::R_POWERPC_SECTOFF_HA:
6076 case elfcpp::R_PPC64_SECTOFF_DS:
6077 case elfcpp::R_PPC64_SECTOFF_LO_DS:
6078 case elfcpp::R_POWERPC_TPREL16:
6079 case elfcpp::R_POWERPC_TPREL16_LO:
6080 case elfcpp::R_POWERPC_TPREL16_HI:
6081 case elfcpp::R_POWERPC_TPREL16_HA:
6082 case elfcpp::R_PPC64_TPREL16_DS:
6083 case elfcpp::R_PPC64_TPREL16_LO_DS:
6084 case elfcpp::R_PPC64_TPREL16_HIGH:
6085 case elfcpp::R_PPC64_TPREL16_HIGHA:
6086 case elfcpp::R_PPC64_TPREL16_HIGHER:
6087 case elfcpp::R_PPC64_TPREL16_HIGHERA:
6088 case elfcpp::R_PPC64_TPREL16_HIGHEST:
6089 case elfcpp::R_PPC64_TPREL16_HIGHESTA:
6090 case elfcpp::R_POWERPC_DTPREL16:
6091 case elfcpp::R_POWERPC_DTPREL16_LO:
6092 case elfcpp::R_POWERPC_DTPREL16_HI:
6093 case elfcpp::R_POWERPC_DTPREL16_HA:
6094 case elfcpp::R_PPC64_DTPREL16_DS:
6095 case elfcpp::R_PPC64_DTPREL16_LO_DS:
6096 case elfcpp::R_PPC64_DTPREL16_HIGH:
6097 case elfcpp::R_PPC64_DTPREL16_HIGHA:
6098 case elfcpp::R_PPC64_DTPREL16_HIGHER:
6099 case elfcpp::R_PPC64_DTPREL16_HIGHERA:
6100 case elfcpp::R_PPC64_DTPREL16_HIGHEST:
6101 case elfcpp::R_PPC64_DTPREL16_HIGHESTA:
6102 case elfcpp::R_PPC64_TLSGD:
6103 case elfcpp::R_PPC64_TLSLD:
6104 case elfcpp::R_PPC64_ADDR64_LOCAL:
6107 case elfcpp::R_POWERPC_GOT16:
6108 case elfcpp::R_POWERPC_GOT16_LO:
6109 case elfcpp::R_POWERPC_GOT16_HI:
6110 case elfcpp::R_POWERPC_GOT16_HA:
6111 case elfcpp::R_PPC64_GOT16_DS:
6112 case elfcpp::R_PPC64_GOT16_LO_DS:
6139 && gsym->visibility() == elfcpp::STV_PROTECTED
6142 unsigned int dynrel = (is_ifunc ? elfcpp::R_POWERPC_IRELATIVE
6143 : elfcpp::R_POWERPC_RELATIVE);
6148 unsigned int dynrel = elfcpp::R_POWERPC_GLOB_DAT;
6155 case elfcpp::R_PPC64_TOC16:
6156 case elfcpp::R_PPC64_TOC16_LO:
6157 case elfcpp::R_PPC64_TOC16_HI:
6158 case elfcpp::R_PPC64_TOC16_HA:
6159 case elfcpp::R_PPC64_TOC16_DS:
6160 case elfcpp::R_PPC64_TOC16_LO_DS:
6165 case elfcpp::R_POWERPC_GOT_TLSGD16:
6166 case elfcpp::R_POWERPC_GOT_TLSGD16_LO:
6167 case elfcpp::R_POWERPC_GOT_TLSGD16_HI:
6168 case elfcpp::R_POWERPC_GOT_TLSGD16_HA:
6178 elfcpp::R_POWERPC_DTPMOD,
6179 elfcpp::R_POWERPC_DTPREL);
6192 elfcpp::R_POWERPC_TPREL);
6198 unsigned int dynrel = elfcpp::R_POWERPC_TPREL;
6213 case elfcpp::R_POWERPC_GOT_TLSLD16:
6214 case elfcpp::R_POWERPC_GOT_TLSLD16_LO:
6215 case elfcpp::R_POWERPC_GOT_TLSLD16_HI:
6216 case elfcpp::R_POWERPC_GOT_TLSLD16_HA:
6236 case elfcpp::R_POWERPC_GOT_DTPREL16:
6237 case elfcpp::R_POWERPC_GOT_DTPREL16_LO:
6238 case elfcpp::R_POWERPC_GOT_DTPREL16_HI:
6239 case elfcpp::R_POWERPC_GOT_DTPREL16_HA:
6249 elfcpp::R_POWERPC_DTPREL);
6255 case elfcpp::R_POWERPC_GOT_TPREL16:
6256 case elfcpp::R_POWERPC_GOT_TPREL16_LO:
6257 case elfcpp::R_POWERPC_GOT_TPREL16_HI:
6258 case elfcpp::R_POWERPC_GOT_TPREL16_HA:
6273 elfcpp::R_POWERPC_TPREL);
6279 unsigned int dynrel = elfcpp::R_POWERPC_TPREL;
6301 case elfcpp::R_POWERPC_GOT_TLSLD16:
6302 case elfcpp::R_POWERPC_GOT_TLSGD16:
6303 case elfcpp::R_POWERPC_GOT_TPREL16:
6304 case elfcpp::R_POWERPC_GOT_DTPREL16:
6305 case elfcpp::R_POWERPC_GOT16:
6306 case elfcpp::R_PPC64_GOT16_DS:
6307 case elfcpp::R_PPC64_TOC16:
6308 case elfcpp::R_PPC64_TOC16_DS:
6363 gold::gc_process_relocs<size, big_endian, Powerpc, elfcpp::SHT_RELA, Scan,
6501 if (sh_type == elfcpp::SHT_REL)
6508 gold::scan_relocs<size, big_endian, Powerpc, elfcpp::SHT_RELA, Scan>(
6554 sym->set_visibility(elfcpp::STV_DEFAULT);
6571 layout->add_output_section_data(".text", elfcpp::SHT_PROGBITS,
6572 elfcpp::SHF_ALLOC | elfcpp::SHF_EXECINSTR,
6621 elfcpp::STT_NOTYPE, elfcpp::STB_GLOBAL,
6622 elfcpp::STV_HIDDEN, 0, false, true);
6625 elfcpp::STT_NOTYPE, elfcpp::STB_GLOBAL,
6626 elfcpp::STV_HIDDEN, 0, true, true);
6632 elfcpp::STT_NOTYPE, elfcpp::STB_GLOBAL,
6633 elfcpp::STV_HIDDEN, 0, true, false);
6636 elfcpp::STT_NOTYPE, elfcpp::STB_GLOBAL,
6637 elfcpp::STV_HIDDEN, 0, true, false);
6682 odyn->add_section_plus_offset(elfcpp::DT_PPC_GOT,
6691 odyn->add_section_plus_offset(elfcpp::DT_PPC64_GLINK,
6792 const elfcpp::Rela<size, big_endian>& rela,
6819 typedef typename elfcpp::Swap<32, big_endian>::Valtype Insn;
6824 unsigned int r_sym = elfcpp::elf_r_sym<size>(rela.get_r_info());
6873 gold_assert(has_stub_value || !(os->flags() & elfcpp::SHF_ALLOC));
6876 if (r_type == elfcpp::R_POWERPC_GOT16
6877 || r_type == elfcpp::R_POWERPC_GOT16_LO
6878 || r_type == elfcpp::R_POWERPC_GOT16_HI
6879 || r_type == elfcpp::R_POWERPC_GOT16_HA
6880 || r_type == elfcpp::R_PPC64_GOT16_DS
6881 || r_type == elfcpp::R_PPC64_GOT16_LO_DS)
6890 unsigned int r_sym = elfcpp::elf_r_sym<size>(rela.get_r_info());
6896 else if (r_type == elfcpp::R_PPC64_TOC)
6902 && (r_type == elfcpp::R_POWERPC_REL24
6903 || r_type == elfcpp::R_PPC_PLTREL24)
6908 typedef typename elfcpp::Swap<32, big_endian>::Valtype Valtype;
6913 Valtype insn = elfcpp::Swap<32, big_endian>::readval(wv);
6914 Valtype insn2 = elfcpp::Swap<32, big_endian>::readval(wv + 1);
6919 elfcpp::Swap<32, big_endian>::
6970 else if (r_type == elfcpp::R_POWERPC_GOT_TLSGD16
6971 || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_LO
6972 || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_HI
6973 || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_HA)
6992 unsigned int r_sym = elfcpp::elf_r_sym<size>(rela.get_r_info());
7000 if (r_type == elfcpp::R_POWERPC_GOT_TLSGD16
7001 || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_LO)
7004 Insn insn = elfcpp::Swap<32, big_endian>::readval(iview);
7010 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7012 r_type += (elfcpp::R_POWERPC_GOT_TPREL16
7013 - elfcpp::R_POWERPC_GOT_TLSGD16);
7017 if (r_type == elfcpp::R_POWERPC_GOT_TLSGD16
7018 || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_LO)
7021 Insn insn = elfcpp::Swap<32, big_endian>::readval(iview);
7027 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7028 r_type = elfcpp::R_POWERPC_TPREL16_HA;
7035 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7036 r_type = elfcpp::R_POWERPC_NONE;
7040 else if (r_type == elfcpp::R_POWERPC_GOT_TLSLD16
7041 || r_type == elfcpp::R_POWERPC_GOT_TLSLD16_LO
7042 || r_type == elfcpp::R_POWERPC_GOT_TLSLD16_HI
7043 || r_type == elfcpp::R_POWERPC_GOT_TLSLD16_HA)
7055 if (r_type == elfcpp::R_POWERPC_GOT_TLSLD16
7056 || r_type == elfcpp::R_POWERPC_GOT_TLSLD16_LO)
7059 Insn insn = elfcpp::Swap<32, big_endian>::readval(iview);
7065 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7066 r_type = elfcpp::R_POWERPC_TPREL16_HA;
7073 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7074 r_type = elfcpp::R_POWERPC_NONE;
7078 else if (r_type == elfcpp::R_POWERPC_GOT_DTPREL16
7079 || r_type == elfcpp::R_POWERPC_GOT_DTPREL16_LO
7080 || r_type == elfcpp::R_POWERPC_GOT_DTPREL16_HI
7081 || r_type == elfcpp::R_POWERPC_GOT_DTPREL16_HA)
7092 unsigned int r_sym = elfcpp::elf_r_sym<size>(rela.get_r_info());
7098 else if (r_type == elfcpp::R_POWERPC_GOT_TPREL16
7099 || r_type == elfcpp::R_POWERPC_GOT_TPREL16_LO
7100 || r_type == elfcpp::R_POWERPC_GOT_TPREL16_HI
7101 || r_type == elfcpp::R_POWERPC_GOT_TPREL16_HA)
7115 unsigned int r_sym = elfcpp::elf_r_sym<size>(rela.get_r_info());
7124 if (r_type == elfcpp::R_POWERPC_GOT_TPREL16
7125 || r_type == elfcpp::R_POWERPC_GOT_TPREL16_LO)
7128 Insn insn = elfcpp::Swap<32, big_endian>::readval(iview);
7134 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7135 r_type = elfcpp::R_POWERPC_TPREL16_HA;
7142 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7143 r_type = elfcpp::R_POWERPC_NONE;
7147 else if ((size == 64 && r_type == elfcpp::R_PPC64_TLSGD)
7148 || (size == 32 && r_type == elfcpp::R_PPC_TLSGD))
7163 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7164 r_type = elfcpp::R_POWERPC_NONE;
7170 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7171 r_type = elfcpp::R_POWERPC_TPREL16_LO;
7178 else if ((size == 64 && r_type == elfcpp::R_PPC64_TLSLD)
7179 || (size == 32 && r_type == elfcpp::R_PPC_TLSLD))
7189 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7191 r_type = elfcpp::R_POWERPC_TPREL16_LO;
7196 else if (r_type == elfcpp::R_POWERPC_TLS)
7204 Insn insn = elfcpp::Swap<32, big_endian>::readval(iview);
7208 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7209 r_type = elfcpp::R_POWERPC_TPREL16_LO;
7217 if (!(size == 32 && r_type == elfcpp::R_PPC_PLTREL24))
7257 case elfcpp::R_PPC64_REL64:
7258 case elfcpp::R_POWERPC_REL32:
7259 case elfcpp::R_POWERPC_REL24:
7260 case elfcpp::R_PPC_PLTREL24:
7261 case elfcpp::R_PPC_LOCAL24PC:
7262 case elfcpp::R_POWERPC_REL16:
7263 case elfcpp::R_POWERPC_REL16_LO:
7264 case elfcpp::R_POWERPC_REL16_HI:
7265 case elfcpp::R_POWERPC_REL16_HA:
7266 case elfcpp::R_POWERPC_REL14:
7267 case elfcpp::R_POWERPC_REL14_BRTAKEN:
7268 case elfcpp::R_POWERPC_REL14_BRNTAKEN:
7272 case elfcpp::R_PPC64_TOC16:
7273 case elfcpp::R_PPC64_TOC16_LO:
7274 case elfcpp::R_PPC64_TOC16_HI:
7275 case elfcpp::R_PPC64_TOC16_HA:
7276 case elfcpp::R_PPC64_TOC16_DS:
7277 case elfcpp::R_PPC64_TOC16_LO_DS:
7283 case elfcpp::R_POWERPC_SECTOFF:
7284 case elfcpp::R_POWERPC_SECTOFF_LO:
7285 case elfcpp::R_POWERPC_SECTOFF_HI:
7286 case elfcpp::R_POWERPC_SECTOFF_HA:
7287 case elfcpp::R_PPC64_SECTOFF_DS:
7288 case elfcpp::R_PPC64_SECTOFF_LO_DS:
7293 case elfcpp::R_PPC64_TPREL16_DS:
7294 case elfcpp::R_PPC64_TPREL16_LO_DS:
7295 case elfcpp::R_PPC64_TPREL16_HIGH:
7296 case elfcpp::R_PPC64_TPREL16_HIGHA:
7300 case elfcpp::R_POWERPC_TPREL16:
7301 case elfcpp::R_POWERPC_TPREL16_LO:
7302 case elfcpp::R_POWERPC_TPREL16_HI:
7303 case elfcpp::R_POWERPC_TPREL16_HA:
7304 case elfcpp::R_POWERPC_TPREL:
7305 case elfcpp::R_PPC64_TPREL16_HIGHER:
7306 case elfcpp::R_PPC64_TPREL16_HIGHERA:
7307 case elfcpp::R_PPC64_TPREL16_HIGHEST:
7308 case elfcpp::R_PPC64_TPREL16_HIGHESTA:
7313 case elfcpp::R_PPC64_DTPREL16_DS:
7314 case elfcpp::R_PPC64_DTPREL16_LO_DS:
7315 case elfcpp::R_PPC64_DTPREL16_HIGHER:
7316 case elfcpp::R_PPC64_DTPREL16_HIGHERA:
7317 case elfcpp::R_PPC64_DTPREL16_HIGHEST:
7318 case elfcpp::R_PPC64_DTPREL16_HIGHESTA:
7323 case elfcpp::R_POWERPC_DTPREL16:
7324 case elfcpp::R_POWERPC_DTPREL16_LO:
7325 case elfcpp::R_POWERPC_DTPREL16_HI:
7326 case elfcpp::R_POWERPC_DTPREL16_HA:
7327 case elfcpp::R_POWERPC_DTPREL:
7328 case elfcpp::R_PPC64_DTPREL16_HIGH:
7329 case elfcpp::R_PPC64_DTPREL16_HIGHA:
7334 case elfcpp::R_PPC64_ADDR64_LOCAL:
7348 case elfcpp::R_POWERPC_ADDR14_BRTAKEN:
7349 case elfcpp::R_POWERPC_REL14_BRTAKEN:
7351 case elfcpp::R_POWERPC_ADDR14_BRNTAKEN:
7352 case elfcpp::R_POWERPC_REL14_BRNTAKEN:
7355 Insn insn = elfcpp::Swap<32, big_endian>::readval(iview);
7376 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7394 case elfcpp::R_POWERPC_GOT_TLSLD16_HA:
7395 case elfcpp::R_POWERPC_GOT_TLSGD16_HA:
7396 case elfcpp::R_POWERPC_GOT_TPREL16_HA:
7397 case elfcpp::R_POWERPC_GOT_DTPREL16_HA:
7398 case elfcpp::R_POWERPC_GOT16_HA:
7399 case elfcpp::R_PPC64_TOC16_HA:
7403 Insn insn = elfcpp::Swap<32, big_endian>::readval(iview);
7411 elfcpp::Swap<32, big_endian>::writeval(iview, nop);
7417 case elfcpp::R_POWERPC_GOT_TLSLD16_LO:
7418 case elfcpp::R_POWERPC_GOT_TLSGD16_LO:
7419 case elfcpp::R_POWERPC_GOT_TPREL16_LO:
7420 case elfcpp::R_POWERPC_GOT_DTPREL16_LO:
7421 case elfcpp::R_POWERPC_GOT16_LO:
7422 case elfcpp::R_PPC64_GOT16_LO_DS:
7423 case elfcpp::R_PPC64_TOC16_LO:
7424 case elfcpp::R_PPC64_TOC16_LO_DS:
7428 Insn insn = elfcpp::Swap<32, big_endian>::readval(iview);
7446 elfcpp::Swap<32, big_endian>::writeval(iview, insn);
7454 elfcpp::Shdr<size, big_endian> shdr(relinfo->data_shdr);
7457 case elfcpp::R_POWERPC_ADDR32:
7458 case elfcpp::R_POWERPC_UADDR32:
7463 case elfcpp::R_POWERPC_REL32:
7468 case elfcpp::R_POWERPC_UADDR16:
7472 case elfcpp::R_POWERPC_ADDR16:
7477 if ((shdr.get_sh_flags() & elfcpp::SHF_EXECINSTR) != 0)
7481 case elfcpp::R_POWERPC_ADDR16_HI:
7482 case elfcpp::R_POWERPC_ADDR16_HA:
7483 case elfcpp::R_POWERPC_GOT16_HI:
7484 case elfcpp::R_POWERPC_GOT16_HA:
7485 case elfcpp::R_POWERPC_PLT16_HI:
7486 case elfcpp::R_POWERPC_PLT16_HA:
7487 case elfcpp::R_POWERPC_SECTOFF_HI:
7488 case elfcpp::R_POWERPC_SECTOFF_HA:
7489 case elfcpp::R_PPC64_TOC16_HI:
7490 case elfcpp::R_PPC64_TOC16_HA:
7491 case elfcpp::R_PPC64_PLTGOT16_HI:
7492 case elfcpp::R_PPC64_PLTGOT16_HA:
7493 case elfcpp::R_POWERPC_TPREL16_HI:
7494 case elfcpp::R_POWERPC_TPREL16_HA:
7495 case elfcpp::R_POWERPC_DTPREL16_HI:
7496 case elfcpp::R_POWERPC_DTPREL16_HA:
7497 case elfcpp::R_POWERPC_GOT_TLSGD16_HI:
7498 case elfcpp::R_POWERPC_GOT_TLSGD16_HA:
7499 case elfcpp::R_POWERPC_GOT_TLSLD16_HI:
7500 case elfcpp::R_POWERPC_GOT_TLSLD16_HA:
7501 case elfcpp::R_POWERPC_GOT_TPREL16_HI:
7502 case elfcpp::R_POWERPC_GOT_TPREL16_HA:
7503 case elfcpp::R_POWERPC_GOT_DTPREL16_HI:
7504 case elfcpp::R_POWERPC_GOT_DTPREL16_HA:
7505 case elfcpp::R_POWERPC_REL16_HI:
7506 case elfcpp::R_POWERPC_REL16_HA:
7511 case elfcpp::R_POWERPC_REL16:
7512 case elfcpp::R_PPC64_TOC16:
7513 case elfcpp::R_POWERPC_GOT16:
7514 case elfcpp::R_POWERPC_SECTOFF:
7515 case elfcpp::R_POWERPC_TPREL16:
7516 case elfcpp::R_POWERPC_DTPREL16:
7517 case elfcpp::R_POWERPC_GOT_TLSGD16:
7518 case elfcpp::R_POWERPC_GOT_TLSLD16:
7519 case elfcpp::R_POWERPC_GOT_TPREL16:
7520 case elfcpp::R_POWERPC_GOT_DTPREL16:
7524 case elfcpp::R_POWERPC_ADDR24:
7525 case elfcpp::R_POWERPC_ADDR14:
7526 case elfcpp::R_POWERPC_ADDR14_BRTAKEN:
7527 case elfcpp::R_POWERPC_ADDR14_BRNTAKEN:
7528 case elfcpp::R_PPC64_ADDR16_DS:
7529 case elfcpp::R_POWERPC_REL24:
7530 case elfcpp::R_PPC_PLTREL24:
7531 case elfcpp::R_PPC_LOCAL24PC:
7532 case elfcpp::R_PPC64_TPREL16_DS:
7533 case elfcpp::R_PPC64_DTPREL16_DS:
7534 case elfcpp::R_PPC64_TOC16_DS:
7535 case elfcpp::R_PPC64_GOT16_DS:
7536 case elfcpp::R_PPC64_SECTOFF_DS:
7537 case elfcpp::R_POWERPC_REL14:
7538 case elfcpp::R_POWERPC_REL14_BRTAKEN:
7539 case elfcpp::R_POWERPC_REL14_BRNTAKEN:
7548 Insn insn = elfcpp::Swap<32, big_endian>::readval(iview);
7568 case elfcpp::R_POWERPC_NONE:
7569 case elfcpp::R_POWERPC_TLS:
7570 case elfcpp::R_POWERPC_GNU_VTINHERIT:
7571 case elfcpp::R_POWERPC_GNU_VTENTRY:
7574 case elfcpp::R_PPC64_ADDR64:
7575 case elfcpp::R_PPC64_REL64:
7576 case elfcpp::R_PPC64_TOC:
7577 case elfcpp::R_PPC64_ADDR64_LOCAL:
7581 case elfcpp::R_POWERPC_TPREL:
7582 case elfcpp::R_POWERPC_DTPREL:
7589 case elfcpp::R_PPC64_UADDR64:
7593 case elfcpp::R_POWERPC_ADDR32:
7597 case elfcpp::R_POWERPC_REL32:
7598 case elfcpp::R_POWERPC_UADDR32:
7602 case elfcpp::R_POWERPC_ADDR24:
7603 case elfcpp::R_POWERPC_REL24:
7604 case elfcpp::R_PPC_PLTREL24:
7605 case elfcpp::R_PPC_LOCAL24PC:
7609 case elfcpp::R_POWERPC_GOT_DTPREL16:
7610 case elfcpp::R_POWERPC_GOT_DTPREL16_LO:
7616 case elfcpp::R_POWERPC_ADDR16:
7617 case elfcpp::R_POWERPC_REL16:
7618 case elfcpp::R_PPC64_TOC16:
7619 case elfcpp::R_POWERPC_GOT16:
7620 case elfcpp::R_POWERPC_SECTOFF:
7621 case elfcpp::R_POWERPC_TPREL16:
7622 case elfcpp::R_POWERPC_DTPREL16:
7623 case elfcpp::R_POWERPC_GOT_TLSGD16:
7624 case elfcpp::R_POWERPC_GOT_TLSLD16:
7625 case elfcpp::R_POWERPC_GOT_TPREL16:
7626 case elfcpp::R_POWERPC_ADDR16_LO:
7627 case elfcpp::R_POWERPC_REL16_LO:
7628 case elfcpp::R_PPC64_TOC16_LO:
7629 case elfcpp::R_POWERPC_GOT16_LO:
7630 case elfcpp::R_POWERPC_SECTOFF_LO:
7631 case elfcpp::R_POWERPC_TPREL16_LO:
7632 case elfcpp::R_POWERPC_DTPREL16_LO:
7633 case elfcpp::R_POWERPC_GOT_TLSGD16_LO:
7634 case elfcpp::R_POWERPC_GOT_TLSLD16_LO:
7635 case elfcpp::R_POWERPC_GOT_TPREL16_LO:
7639 case elfcpp::R_POWERPC_UADDR16:
7643 case elfcpp::R_PPC64_ADDR16_HIGH:
7644 case elfcpp::R_PPC64_TPREL16_HIGH:
7645 case elfcpp::R_PPC64_DTPREL16_HIGH:
7649 case elfcpp::R_POWERPC_ADDR16_HI:
7650 case elfcpp::R_POWERPC_REL16_HI:
7651 case elfcpp::R_PPC64_TOC16_HI:
7652 case elfcpp::R_POWERPC_GOT16_HI:
7653 case elfcpp::R_POWERPC_SECTOFF_HI:
7654 case elfcpp::R_POWERPC_TPREL16_HI:
7655 case elfcpp::R_POWERPC_DTPREL16_HI:
7656 case elfcpp::R_POWERPC_GOT_TLSGD16_HI:
7657 case elfcpp::R_POWERPC_GOT_TLSLD16_HI:
7658 case elfcpp::R_POWERPC_GOT_TPREL16_HI:
7659 case elfcpp::R_POWERPC_GOT_DTPREL16_HI:
7663 case elfcpp::R_PPC64_ADDR16_HIGHA:
7664 case elfcpp::R_PPC64_TPREL16_HIGHA:
7665 case elfcpp::R_PPC64_DTPREL16_HIGHA:
7669 case elfcpp::R_POWERPC_ADDR16_HA:
7670 case elfcpp::R_POWERPC_REL16_HA:
7671 case elfcpp::R_PPC64_TOC16_HA:
7672 case elfcpp::R_POWERPC_GOT16_HA:
7673 case elfcpp::R_POWERPC_SECTOFF_HA:
7674 case elfcpp::R_POWERPC_TPREL16_HA:
7675 case elfcpp::R_POWERPC_DTPREL16_HA:
7676 case elfcpp::R_POWERPC_GOT_TLSGD16_HA:
7677 case elfcpp::R_POWERPC_GOT_TLSLD16_HA:
7678 case elfcpp::R_POWERPC_GOT_TPREL16_HA:
7679 case elfcpp::R_POWERPC_GOT_DTPREL16_HA:
7683 case elfcpp::R_PPC64_DTPREL16_HIGHER:
7687 case elfcpp::R_PPC64_ADDR16_HIGHER:
7688 case elfcpp::R_PPC64_TPREL16_HIGHER:
7692 case elfcpp::R_PPC64_DTPREL16_HIGHERA:
7696 case elfcpp::R_PPC64_ADDR16_HIGHERA:
7697 case elfcpp::R_PPC64_TPREL16_HIGHERA:
7701 case elfcpp::R_PPC64_DTPREL16_HIGHEST:
7705 case elfcpp::R_PPC64_ADDR16_HIGHEST:
7706 case elfcpp::R_PPC64_TPREL16_HIGHEST:
7710 case elfcpp::R_PPC64_DTPREL16_HIGHESTA:
7714 case elfcpp::R_PPC64_ADDR16_HIGHESTA:
7715 case elfcpp::R_PPC64_TPREL16_HIGHESTA:
7719 case elfcpp::R_PPC64_DTPREL16_DS:
7720 case elfcpp::R_PPC64_DTPREL16_LO_DS:
7724 case elfcpp::R_PPC64_TPREL16_DS:
7725 case elfcpp::R_PPC64_TPREL16_LO_DS:
7729 case elfcpp::R_PPC64_ADDR16_DS:
7730 case elfcpp::R_PPC64_ADDR16_LO_DS:
7731 case elfcpp::R_PPC64_TOC16_DS:
7732 case elfcpp::R_PPC64_TOC16_LO_DS:
7733 case elfcpp::R_PPC64_GOT16_DS:
7734 case elfcpp::R_PPC64_GOT16_LO_DS:
7735 case elfcpp::R_PPC64_SECTOFF_DS:
7736 case elfcpp::R_PPC64_SECTOFF_LO_DS:
7740 case elfcpp::R_POWERPC_ADDR14:
7741 case elfcpp::R_POWERPC_ADDR14_BRTAKEN:
7742 case elfcpp::R_POWERPC_ADDR14_BRNTAKEN:
7743 case elfcpp::R_POWERPC_REL14:
7744 case elfcpp::R_POWERPC_REL14_BRTAKEN:
7745 case elfcpp::R_POWERPC_REL14_BRNTAKEN:
7749 case elfcpp::R_POWERPC_COPY:
7750 case elfcpp::R_POWERPC_GLOB_DAT:
7751 case elfcpp::R_POWERPC_JMP_SLOT:
7752 case elfcpp::R_POWERPC_RELATIVE:
7753 case elfcpp::R_POWERPC_DTPMOD:
7754 case elfcpp::R_PPC64_JMP_IREL:
7755 case elfcpp::R_POWERPC_IRELATIVE:
7761 case elfcpp::R_PPC_EMB_SDA21:
7770 case elfcpp::R_PPC_EMB_SDA2I16:
7771 case elfcpp::R_PPC_EMB_SDA2REL:
7777 case elfcpp::R_POWERPC_PLT32:
7778 case elfcpp::R_POWERPC_PLTREL32:
7779 case elfcpp::R_POWERPC_PLT16_LO:
7780 case elfcpp::R_POWERPC_PLT16_HI:
7781 case elfcpp::R_POWERPC_PLT16_HA:
7782 case elfcpp::R_PPC_SDAREL16:
7783 case elfcpp::R_POWERPC_ADDR30:
7784 case elfcpp::R_PPC64_PLT64:
7785 case elfcpp::R_PPC64_PLTREL64:
7786 case elfcpp::R_PPC64_PLTGOT16:
7787 case elfcpp::R_PPC64_PLTGOT16_LO:
7788 case elfcpp::R_PPC64_PLTGOT16_HI:
7789 case elfcpp::R_PPC64_PLTGOT16_HA:
7790 case elfcpp::R_PPC64_PLT16_LO_DS:
7791 case elfcpp::R_PPC64_PLTGOT16_DS:
7792 case elfcpp::R_PPC64_PLTGOT16_LO_DS:
7793 case elfcpp::R_PPC_EMB_RELSDA:
7794 case elfcpp::R_PPC_TOC16:
7838 gold_assert(sh_type == elfcpp::SHT_RELA);
7840 gold::relocate_section<size, big_endian, Powerpc, elfcpp::SHT_RELA,
7880 if (r_type == elfcpp::R_PPC_PLTREL24)
7904 gold_assert(sh_type == elfcpp::SHT_RELA);
7906 gold::scan_relocatable_relocs<size, big_endian, elfcpp::SHT_RELA,
7935 typename elfcpp::Elf_types<size>::Elf_Off offset_in_output_section,
7943 gold_assert(sh_type == elfcpp::SHT_RELA);
7945 typedef typename Reloc_types<elfcpp::SHT_RELA, size, big_endian>::Reloc
7947 typedef typename Reloc_types<elfcpp::SHT_RELA, size, big_endian>::Reloc_write
7950 = Reloc_types<elfcpp::SHT_RELA, size, big_endian>::reloc_size;
7975 typename elfcpp::Elf_types<size>::Elf_WXword r_info = reloc.get_r_info();
7976 unsigned int r_sym = elfcpp::elf_r_sym<size>(r_info);
7977 unsigned int r_type = elfcpp::elf_r_type<size>(r_info);
7979 typename elfcpp::Elf_types<size>::Elf_Swxword addend
7988 r_type = elfcpp::R_POWERPC_NONE;
8082 if (r_type == elfcpp::R_POWERPC_GOT_TLSGD16
8083 || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_LO
8084 || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_HI
8085 || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_HA)
8093 r_type += (elfcpp::R_POWERPC_GOT_TPREL16
8094 - elfcpp::R_POWERPC_GOT_TLSGD16);
8097 if (r_type == elfcpp::R_POWERPC_GOT_TLSGD16
8098 || r_type == elfcpp::R_POWERPC_GOT_TLSGD16_LO)
8099 r_type = elfcpp::R_POWERPC_TPREL16_HA;
8102 r_type = elfcpp::R_POWERPC_NONE;
8110 else if (r_type == elfcpp::R_POWERPC_GOT_TLSLD16
8111 || r_type == elfcpp::R_POWERPC_GOT_TLSLD16_LO
8112 || r_type == elfcpp::R_POWERPC_GOT_TLSLD16_HI
8113 || r_type == elfcpp::R_POWERPC_GOT_TLSLD16_HA)
8119 if (r_type == elfcpp::R_POWERPC_GOT_TLSLD16
8120 || r_type == elfcpp::R_POWERPC_GOT_TLSLD16_LO)
8122 r_type = elfcpp::R_POWERPC_TPREL16_HA;
8132 r_type = elfcpp::R_POWERPC_NONE;
8137 else if (r_type == elfcpp::R_POWERPC_GOT_TPREL16
8138 elfcpp::R_POWERPC_GOT_TPREL16_LO
8139 || r_type == elfcpp::R_POWERPC_GOT_TPREL16_HI
8140 || r_type == elfcpp::R_POWERPC_GOT_TPREL16_HA)
8146 if (r_type == elfcpp::R_POWERPC_GOT_TPREL16
8147 || r_type == elfcpp::R_POWERPC_GOT_TPREL16_LO)
8148 r_type = elfcpp::R_POWERPC_TPREL16_HA;
8151 r_type = elfcpp::R_POWERPC_NONE;
8156 else if ((size == 64 && r_type == elfcpp::R_PPC64_TLSGD)
8157 || (size == 32 && r_type == elfcpp::R_PPC_TLSGD))
8165 r_type = elfcpp::R_POWERPC_NONE;
8169 r_type = elfcpp::R_POWERPC_TPREL16_LO;
8177 else if ((size == 64 && r_type == elfcpp::R_PPC64_TLSLD)
8178 || (size == 32 && r_type == elfcpp::R_PPC_TLSLD))
8190 r_type = elfcpp::R_POWERPC_TPREL16_LO;
8195 else if (r_type == elfcpp::R_POWERPC_TLS)
8201 r_type = elfcpp::R_POWERPC_TPREL16_LO;
8208 reloc_write.put_r_info(elfcpp::elf_r_info<size>(r_sym, r_type));
8339 if (gsym->type() == elfcpp::STT_TLS)
8368 : Target_selector(size == 64 ? elfcpp::EM_PPC64 : elfcpp::EM_PPC,