--- a/gold/powerpc.cc 2015-01-09 12:22:41.336190605 -0700 +++ b/gold/powerpc.cc 2015-01-09 12:25:12.129711802 -0700 @@ -72,19 +72,12 @@ public: const typename elfcpp::Ehdr& ehdr) : Sized_relobj_file(name, input_file, offset, ehdr), special_(0), has_small_toc_reloc_(false), opd_valid_(false), - opd_ent_(), access_from_map_(), has14_(), stub_table_(), - e_flags_(ehdr.get_e_flags()), st_other_() - { - this->set_abiversion(0); - } + opd_ent_(), access_from_map_(), has14_(), stub_table_() + { } ~Powerpc_relobj() { } - // Read the symbols then set up st_other vector. - void - do_read_symbols(Read_symbols_data*); - // The .got2 section shndx. unsigned int got2_shndx() const @@ -270,22 +263,6 @@ public: return NULL; } - int - abiversion() const - { return this->e_flags_ & elfcpp::EF_PPC64_ABI; } - - // Set ABI version for input and output - void - set_abiversion(int ver); - - unsigned int - ppc64_local_entry_offset(const Symbol* sym) const - { return elfcpp::ppc64_decode_local_entry(sym->nonvis() >> 3); } - - unsigned int - ppc64_local_entry_offset(unsigned int symndx) const - { return elfcpp::ppc64_decode_local_entry(this->st_other_[symndx] >> 5); } - private: struct Opd_ent { @@ -339,12 +316,6 @@ private: // The stub table to use for a given input section. std::vector*> stub_table_; - - // Header e_flags - elfcpp::Elf_Word e_flags_; - - // ELF st_other field for local symbols. - std::vector st_other_; }; template @@ -1334,14 +1305,6 @@ public: STATUS_OVERFLOW }; - int - abiversion() const - { return this->e_flags_ & elfcpp::EF_PPC64_ABI; } - - // Set ABI version for input and output. - void - set_abiversion(int ver); - private: typedef Powerpc_relocate_functions This; typedef typename elfcpp::Elf_types::Elf_Addr Address; @@ -1967,24 +1930,6 @@ class Stub_control output_section() { return output_section_; } - int - abiversion () const - { return this->processor_specific_flags() & elfcpp::EF_PPC64_ABI; } - - void - set_abiversion (int ver) - { - elfcpp::Elf_Word flags = this->processor_specific_flags(); - flags &= ~elfcpp::EF_PPC64_ABI; - flags |= ver & elfcpp::EF_PPC64_ABI; - this->set_processor_specific_flags(flags); - } - - // Offset to to save stack slot - int - stk_toc () const - { return this->abiversion() < 2 ? 40 : 24; } - private: typedef enum { @@ -3660,26 +3605,6 @@ Stub_table::do_write(O } } } - else - { - // Define .TOC. as for 32-bit _GLOBAL_OFFSET_TABLE_ - Symbol *gotsym = symtab->lookup(".TOC.", NULL); - if (gotsym != NULL && gotsym->is_undefined()) - { - Target_powerpc* target = - static_cast*>( - parameters->sized_target()); - Output_data_got_powerpc* got - = target->got_section(symtab, layout); - symtab->define_in_output_data(".TOC.", NULL, - Symbol_table::PREDEFINED, - got, 0x8000, 0, - elfcpp::STT_OBJECT, - elfcpp::STB_LOCAL, - elfcpp::STV_HIDDEN, 0, - false, false); - } - } } // Write out .glink. @@ -3707,34 +3632,16 @@ Output_data_glink::do_ elfcpp::Swap<64, big_endian>::writeval(p, pltoff), p += 8; - if (this->targ_->abiversion() < 2) - { - write_insn(p, mflr_12), p += 4; - write_insn(p, bcl_20_31), p += 4; - write_insn(p, mflr_11), p += 4; - write_insn(p, ld_2_11 + l(-16)), p += 4; - write_insn(p, mtlr_12), p += 4; - write_insn(p, add_11_2_11), p += 4; - write_insn(p, ld_12_11 + 0), p += 4; - write_insn(p, ld_2_11 + 8), p += 4; - write_insn(p, mtctr_12), p += 4; - write_insn(p, ld_11_11 + 16), p += 4; - } - else - { - write_insn(p, mflr_0), p += 4; - write_insn(p, bcl_20_31), p += 4; - write_insn(p, mflr_11), p += 4; - write_insn(p, ld_2_11 + l(-16)), p += 4; - write_insn(p, mtlr_0), p += 4; - write_insn(p, sub_12_12_11), p += 4; - write_insn(p, add_11_2_11), p += 4; - write_insn(p, addi_0_12 + l(-48)), p += 4; - write_insn(p, ld_12_11 + 0), p += 4; - write_insn(p, srdi_0_0_2), p += 4; - write_insn(p, mtctr_12), p += 4; - write_insn(p, ld_11_11 + 8), p += 4; - } + write_insn(p, mflr_12), p += 4; + write_insn(p, bcl_20_31), p += 4; + write_insn(p, mflr_11), p += 4; + write_insn(p, ld_2_11 + l(-16)), p += 4; + write_insn(p, mtlr_12), p += 4; + write_insn(p, add_12_2_11), p += 4; + write_insn(p, ld_11_12 + 0), p += 4; + write_insn(p, ld_2_12 + 8), p += 4; + write_insn(p, mtctr_11), p += 4; + write_insn(p, ld_11_12 + 16), p += 4; write_insn(p, bctr), p += 4; while (p < oview + this->pltresolve_size) write_insn(p, nop), p += 4; @@ -3743,17 +3650,14 @@ Output_data_glink::do_ uint32_t indx = 0; while (p < oview + oview_size) { - if (this->targ_->abiversion() < 2) + if (indx < 0x8000) { - if (indx < 0x8000) - { - write_insn(p, li_0_0 + indx), p += 4; - } - else - { - write_insn(p, lis_0_0 + hi(indx)), p += 4; - write_insn(p, ori_0_0_0 + l(indx)), p += 4; - } + write_insn(p, li_0_0 + indx), p += 4; + } + else + { + write_insn(p, lis_0_0 + hi(indx)), p += 4; + write_insn(p, ori_0_0_0 + l(indx)), p += 4; } uint32_t branch_off = 8 - (p - oview); write_insn(p, b + (branch_off & 0x3fffffc)), p += 4; @@ -4240,6 +4144,24 @@ Target_powerpc::plt_en return count; } +// Return the offset of the first non-reserved PLT entry. + +template +unsigned int +Target_powerpc::first_plt_entry_offset() const +{ + return this->plt_->first_plt_entry_offset(); +} + +// Return the size of each PLT entry. + +template +unsigned int +Target_powerpc::plt_entry_size() const +{ + return Output_data_plt_powerpc::get_plt_entry_size(); +} + // Create a GOT entry for local dynamic __tls_get_addr calls. template @@ -4267,12 +4189,8 @@ Target_powerpc::tlsld_ template int -Target_powerpc::Scan::get_reference_flags( - unsigned int r_type, - const Target_powerpc* target) +Target_powerpc::Scan::get_reference_flags(unsigned int r_type) { - int ref = 0; - switch (r_type) { case elfcpp::R_POWERPC_NONE: @@ -4280,7 +4198,7 @@ Target_powerpc::Scan:: case elfcpp::R_POWERPC_GNU_VTENTRY: case elfcpp::R_PPC64_TOC: // No symbol reference. - break; + return 0; case elfcpp::R_PPC64_ADDR64: case elfcpp::R_PPC64_UADDR64: @@ -4291,15 +4209,13 @@ Target_powerpc::Scan:: case elfcpp::R_POWERPC_ADDR16_LO: case elfcpp::R_POWERPC_ADDR16_HI: case elfcpp::R_POWERPC_ADDR16_HA: - ref = Symbol::ABSOLUTE_REF; - break; + return Symbol::ABSOLUTE_REF; case elfcpp::R_POWERPC_ADDR24: case elfcpp::R_POWERPC_ADDR14: case elfcpp::R_POWERPC_ADDR14_BRTAKEN: case elfcpp::R_POWERPC_ADDR14_BRNTAKEN: - ref = Symbol::FUNCTION_CALL | Symbol::ABSOLUTE_REF; - break; + return Symbol::FUNCTION_CALL | Symbol::ABSOLUTE_REF; case elfcpp::R_PPC64_REL64: case elfcpp::R_POWERPC_REL32: @@ -4308,16 +4224,14 @@ Target_powerpc::Scan:: case elfcpp::R_POWERPC_REL16_LO: case elfcpp::R_POWERPC_REL16_HI: case elfcpp::R_POWERPC_REL16_HA: - ref = Symbol::RELATIVE_REF; - break; + return Symbol::RELATIVE_REF; case elfcpp::R_POWERPC_REL24: case elfcpp::R_PPC_PLTREL24: case elfcpp::R_POWERPC_REL14: case elfcpp::R_POWERPC_REL14_BRTAKEN: case elfcpp::R_POWERPC_REL14_BRNTAKEN: - ref = Symbol::FUNCTION_CALL | Symbol::RELATIVE_REF; - break; + return Symbol::FUNCTION_CALL | Symbol::RELATIVE_REF; case elfcpp::R_POWERPC_GOT16: case elfcpp::R_POWERPC_GOT16_LO: @@ -4332,13 +4246,11 @@ Target_powerpc::Scan:: case elfcpp::R_PPC64_TOC16_DS: case elfcpp::R_PPC64_TOC16_LO_DS: // Absolute in GOT. - ref = Symbol::ABSOLUTE_REF; - break; + return Symbol::ABSOLUTE_REF; case elfcpp::R_POWERPC_GOT_TPREL16: case elfcpp::R_POWERPC_TLS: - ref = Symbol::TLS_REF; - break; + return Symbol::TLS_REF; case elfcpp::R_POWERPC_COPY: case elfcpp::R_POWERPC_GLOB_DAT: @@ -4347,12 +4259,8 @@ Target_powerpc::Scan:: case elfcpp::R_POWERPC_DTPMOD: default: // Not expected. We will give an error later. - break; + return 0; } - - if (size == 64 && target->abiversion() < 2) - ref |= Symbol::FUNC_DESC_ABI; - return ref; } // Report an unsupported relocation against a local symbol. @@ -4423,8 +4331,6 @@ Target_powerpc::Scan:: case elfcpp::R_PPC64_JMP_IREL: case elfcpp::R_PPC64_ADDR16_DS: case elfcpp::R_PPC64_ADDR16_LO_DS: - case elfcpp::R_PPC64_ADDR16_HIGH: - case elfcpp::R_PPC64_ADDR16_HIGHA: case elfcpp::R_PPC64_ADDR16_HIGHER: case elfcpp::R_PPC64_ADDR16_HIGHEST: case elfcpp::R_PPC64_ADDR16_HIGHERA: @@ -4433,8 +4339,6 @@ Target_powerpc::Scan:: case elfcpp::R_POWERPC_ADDR30: case elfcpp::R_PPC64_TPREL16_DS: case elfcpp::R_PPC64_TPREL16_LO_DS: - case elfcpp::R_PPC64_TPREL16_HIGH: - case elfcpp::R_PPC64_TPREL16_HIGHA: case elfcpp::R_PPC64_TPREL16_HIGHER: case elfcpp::R_PPC64_TPREL16_HIGHEST: case elfcpp::R_PPC64_TPREL16_HIGHERA: @@ -4605,6 +4509,7 @@ Target_powerpc::Scan:: case elfcpp::R_POWERPC_GNU_VTINHERIT: case elfcpp::R_POWERPC_GNU_VTENTRY: case elfcpp::R_PPC64_TOCSAVE: + case elfcpp::R_PPC_EMB_MRKREF: case elfcpp::R_POWERPC_TLS: break; @@ -4641,8 +4546,6 @@ Target_powerpc::Scan:: case elfcpp::R_POWERPC_ADDR16_HI: case elfcpp::R_POWERPC_ADDR16_HA: case elfcpp::R_POWERPC_UADDR16: - case elfcpp::R_PPC64_ADDR16_HIGH: - case elfcpp::R_PPC64_ADDR16_HIGHA: case elfcpp::R_PPC64_ADDR16_HIGHER: case elfcpp::R_PPC64_ADDR16_HIGHERA: case elfcpp::R_PPC64_ADDR16_HIGHEST: @@ -4709,35 +4612,31 @@ Target_powerpc::Scan:: case elfcpp::R_POWERPC_REL16_HI: case elfcpp::R_POWERPC_REL16_HA: case elfcpp::R_POWERPC_SECTOFF: - case elfcpp::R_POWERPC_SECTOFF_LO: - case elfcpp::R_POWERPC_SECTOFF_HI: - case elfcpp::R_POWERPC_SECTOFF_HA: - case elfcpp::R_PPC64_SECTOFF_DS: - case elfcpp::R_PPC64_SECTOFF_LO_DS: case elfcpp::R_POWERPC_TPREL16: + case elfcpp::R_POWERPC_DTPREL16: + case elfcpp::R_POWERPC_SECTOFF_LO: case elfcpp::R_POWERPC_TPREL16_LO: + case elfcpp::R_POWERPC_DTPREL16_LO: + case elfcpp::R_POWERPC_SECTOFF_HI: case elfcpp::R_POWERPC_TPREL16_HI: + case elfcpp::R_POWERPC_DTPREL16_HI: + case elfcpp::R_POWERPC_SECTOFF_HA: case elfcpp::R_POWERPC_TPREL16_HA: - case elfcpp::R_PPC64_TPREL16_DS: - case elfcpp::R_PPC64_TPREL16_LO_DS: - case elfcpp::R_PPC64_TPREL16_HIGH: - case elfcpp::R_PPC64_TPREL16_HIGHA: + case elfcpp::R_POWERPC_DTPREL16_HA: + case elfcpp::R_PPC64_DTPREL16_HIGHER: case elfcpp::R_PPC64_TPREL16_HIGHER: + case elfcpp::R_PPC64_DTPREL16_HIGHERA: case elfcpp::R_PPC64_TPREL16_HIGHERA: + case elfcpp::R_PPC64_DTPREL16_HIGHEST: case elfcpp::R_PPC64_TPREL16_HIGHEST: + case elfcpp::R_PPC64_DTPREL16_HIGHESTA: case elfcpp::R_PPC64_TPREL16_HIGHESTA: - case elfcpp::R_POWERPC_DTPREL16: - case elfcpp::R_POWERPC_DTPREL16_LO: - case elfcpp::R_POWERPC_DTPREL16_HI: - case elfcpp::R_POWERPC_DTPREL16_HA: + case elfcpp::R_PPC64_TPREL16_DS: + case elfcpp::R_PPC64_TPREL16_LO_DS: case elfcpp::R_PPC64_DTPREL16_DS: case elfcpp::R_PPC64_DTPREL16_LO_DS: - case elfcpp::R_PPC64_DTPREL16_HIGH: - case elfcpp::R_PPC64_DTPREL16_HIGHA: - case elfcpp::R_PPC64_DTPREL16_HIGHER: - case elfcpp::R_PPC64_DTPREL16_HIGHERA: - case elfcpp::R_PPC64_DTPREL16_HIGHEST: - case elfcpp::R_PPC64_DTPREL16_HIGHESTA: + case elfcpp::R_PPC64_SECTOFF_DS: + case elfcpp::R_PPC64_SECTOFF_LO_DS: case elfcpp::R_PPC64_TLSGD: case elfcpp::R_PPC64_TLSLD: break; @@ -4971,6 +4870,7 @@ Target_powerpc::Scan:: case elfcpp::R_POWERPC_GNU_VTINHERIT: case elfcpp::R_POWERPC_GNU_VTENTRY: case elfcpp::R_PPC_LOCAL24PC: + case elfcpp::R_PPC_EMB_MRKREF: case elfcpp::R_POWERPC_TLS: break; @@ -5019,8 +4919,6 @@ Target_powerpc::Scan:: case elfcpp::R_POWERPC_ADDR16_HI: case elfcpp::R_POWERPC_ADDR16_HA: case elfcpp::R_POWERPC_UADDR16: - case elfcpp::R_PPC64_ADDR16_HIGH: - case elfcpp::R_PPC64_ADDR16_HIGHA: case elfcpp::R_PPC64_ADDR16_HIGHER: case elfcpp::R_PPC64_ADDR16_HIGHERA: case elfcpp::R_PPC64_ADDR16_HIGHEST: @@ -5107,7 +5005,7 @@ Target_powerpc::Scan:: case elfcpp::R_PPC64_REL64: case elfcpp::R_POWERPC_REL32: // Make a dynamic relocation if necessary. - if (gsym->needs_dynamic_reloc(Scan::get_reference_flags(r_type, target))) + if (needs_dynamic_reloc(gsym, Scan::get_reference_flags(r_type))) { if (gsym->may_need_copy_reloc()) { @@ -5139,35 +5037,31 @@ Target_powerpc::Scan:: case elfcpp::R_POWERPC_REL16_HI: case elfcpp::R_POWERPC_REL16_HA: case elfcpp::R_POWERPC_SECTOFF: - case elfcpp::R_POWERPC_SECTOFF_LO: - case elfcpp::R_POWERPC_SECTOFF_HI: - case elfcpp::R_POWERPC_SECTOFF_HA: - case elfcpp::R_PPC64_SECTOFF_DS: - case elfcpp::R_PPC64_SECTOFF_LO_DS: case elfcpp::R_POWERPC_TPREL16: + case elfcpp::R_POWERPC_DTPREL16: + case elfcpp::R_POWERPC_SECTOFF_LO: case elfcpp::R_POWERPC_TPREL16_LO: + case elfcpp::R_POWERPC_DTPREL16_LO: + case elfcpp::R_POWERPC_SECTOFF_HI: case elfcpp::R_POWERPC_TPREL16_HI: + case elfcpp::R_POWERPC_DTPREL16_HI: + case elfcpp::R_POWERPC_SECTOFF_HA: case elfcpp::R_POWERPC_TPREL16_HA: - case elfcpp::R_PPC64_TPREL16_DS: - case elfcpp::R_PPC64_TPREL16_LO_DS: - case elfcpp::R_PPC64_TPREL16_HIGH: - case elfcpp::R_PPC64_TPREL16_HIGHA: + case elfcpp::R_POWERPC_DTPREL16_HA: + case elfcpp::R_PPC64_DTPREL16_HIGHER: case elfcpp::R_PPC64_TPREL16_HIGHER: + case elfcpp::R_PPC64_DTPREL16_HIGHERA: case elfcpp::R_PPC64_TPREL16_HIGHERA: + case elfcpp::R_PPC64_DTPREL16_HIGHEST: case elfcpp::R_PPC64_TPREL16_HIGHEST: + case elfcpp::R_PPC64_DTPREL16_HIGHESTA: case elfcpp::R_PPC64_TPREL16_HIGHESTA: - case elfcpp::R_POWERPC_DTPREL16: - case elfcpp::R_POWERPC_DTPREL16_LO: - case elfcpp::R_POWERPC_DTPREL16_HI: - case elfcpp::R_POWERPC_DTPREL16_HA: + case elfcpp::R_PPC64_TPREL16_DS: + case elfcpp::R_PPC64_TPREL16_LO_DS: case elfcpp::R_PPC64_DTPREL16_DS: case elfcpp::R_PPC64_DTPREL16_LO_DS: - case elfcpp::R_PPC64_DTPREL16_HIGH: - case elfcpp::R_PPC64_DTPREL16_HIGHA: - case elfcpp::R_PPC64_DTPREL16_HIGHER: - case elfcpp::R_PPC64_DTPREL16_HIGHERA: - case elfcpp::R_PPC64_DTPREL16_HIGHEST: - case elfcpp::R_PPC64_DTPREL16_HIGHESTA: + case elfcpp::R_PPC64_SECTOFF_DS: + case elfcpp::R_PPC64_SECTOFF_LO_DS: case elfcpp::R_PPC64_TLSGD: case elfcpp::R_PPC64_TLSLD: break; @@ -5900,8 +5794,7 @@ Target_powerpc::Reloca && (insn2 == nop || insn2 == cror_15_15_15 || insn2 == cror_31_31_31)) { - elfcpp::Swap<32, big_endian>:: - writeval(wv + 1, ld_2_1 + target->stk_toc()); + elfcpp::Swap<32, big_endian>::writeval(wv + 1, ld_2_1 + 40); can_plt_call = true; } } @@ -6190,10 +6083,6 @@ Target_powerpc::Reloca if (r_type != elfcpp::R_PPC_PLTREL24) addend = rela.get_r_addend(); value = psymval->value(object, addend); - if (gsym != NULL) - value += object->ppc64_local_entry_offset(gsym); - else - value += object->ppc64_local_entry_offset(r_sym); if (size == 64 && is_branch_reloc(r_type)) value = target->symval_for_branch(value, gsym, object, &dest_shndx); unsigned int max_branch_offset = 0; @@ -6257,10 +6146,8 @@ Target_powerpc::Reloca case elfcpp::R_PPC64_TPREL16_DS: case elfcpp::R_PPC64_TPREL16_LO_DS: - case elfcpp::R_PPC64_TPREL16_HIGH: - case elfcpp::R_PPC64_TPREL16_HIGHA: if (size != 64) - // R_PPC_TLSGD, R_PPC_TLSLD, R_PPC_EMB_RELST_LO, R_PPC_EMB_RELST_HI + // R_PPC_TLSGD and R_PPC_TLSLD break; case elfcpp::R_POWERPC_TPREL16: case elfcpp::R_POWERPC_TPREL16_LO: @@ -6290,8 +6177,6 @@ Target_powerpc::Reloca case elfcpp::R_POWERPC_DTPREL16_HI: case elfcpp::R_POWERPC_DTPREL16_HA: case elfcpp::R_POWERPC_DTPREL: - case elfcpp::R_PPC64_DTPREL16_HIGH: - case elfcpp::R_PPC64_DTPREL16_HIGHA: // tls symbol values are relative to tls_segment()->vaddr() value -= dtp_offset; break; @@ -6432,34 +6317,6 @@ Target_powerpc::Reloca overflow = Reloc::CHECK_BITFIELD; break; - case elfcpp::R_POWERPC_ADDR16_HI: - case elfcpp::R_POWERPC_ADDR16_HA: - case elfcpp::R_POWERPC_GOT16_HI: - case elfcpp::R_POWERPC_GOT16_HA: - case elfcpp::R_POWERPC_PLT16_HI: - case elfcpp::R_POWERPC_PLT16_HA: - case elfcpp::R_POWERPC_SECTOFF_HI: - case elfcpp::R_POWERPC_SECTOFF_HA: - case elfcpp::R_PPC64_TOC16_HI: - case elfcpp::R_PPC64_TOC16_HA: - case elfcpp::R_PPC64_PLTGOT16_HI: - case elfcpp::R_PPC64_PLTGOT16_HA: - case elfcpp::R_POWERPC_TPREL16_HI: - case elfcpp::R_POWERPC_TPREL16_HA: - case elfcpp::R_POWERPC_DTPREL16_HI: - case elfcpp::R_POWERPC_DTPREL16_HA: - case elfcpp::R_POWERPC_GOT_TLSGD16_HI: - case elfcpp::R_POWERPC_GOT_TLSGD16_HA: - case elfcpp::R_POWERPC_GOT_TLSLD16_HI: - case elfcpp::R_POWERPC_GOT_TLSLD16_HA: - case elfcpp::R_POWERPC_GOT_TPREL16_HI: - case elfcpp::R_POWERPC_GOT_TPREL16_HA: - case elfcpp::R_POWERPC_GOT_DTPREL16_HI: - case elfcpp::R_POWERPC_GOT_DTPREL16_HA: - case elfcpp::R_POWERPC_REL16_HI: - case elfcpp::R_POWERPC_REL16_HA: - if (size == 32) - break; case elfcpp::R_POWERPC_REL24: case elfcpp::R_PPC_PLTREL24: case elfcpp::R_PPC_LOCAL24PC: @@ -6493,6 +6350,7 @@ Target_powerpc::Reloca case elfcpp::R_POWERPC_TLS: case elfcpp::R_POWERPC_GNU_VTINHERIT: case elfcpp::R_POWERPC_GNU_VTENTRY: + case elfcpp::R_PPC_EMB_MRKREF: break; case elfcpp::R_PPC64_ADDR64: @@ -6563,12 +6421,6 @@ Target_powerpc::Reloca status = Reloc::addr16_u(view, value, overflow); break; - case elfcpp::R_PPC64_ADDR16_HIGH: - case elfcpp::R_PPC64_TPREL16_HIGH: - case elfcpp::R_PPC64_DTPREL16_HIGH: - if (size == 32) - // R_PPC_EMB_MRKREF, R_PPC_EMB_RELST_LO, R_PPC_EMB_RELST_HA - goto unsupp; case elfcpp::R_POWERPC_ADDR16_HI: case elfcpp::R_POWERPC_REL16_HI: case elfcpp::R_PPC64_TOC16_HI: @@ -6583,12 +6435,6 @@ Target_powerpc::Reloca Reloc::addr16_hi(view, value); break; - case elfcpp::R_PPC64_ADDR16_HIGHA: - case elfcpp::R_PPC64_TPREL16_HIGHA: - case elfcpp::R_PPC64_DTPREL16_HIGHA: - if (size == 32) - // R_PPC_EMB_RELSEC16, R_PPC_EMB_RELST_HI, R_PPC_EMB_BIT_FLD - goto unsupp; case elfcpp::R_POWERPC_ADDR16_HA: case elfcpp::R_POWERPC_REL16_HA: case elfcpp::R_PPC64_TOC16_HA: @@ -6713,6 +6559,11 @@ Target_powerpc::Reloca case elfcpp::R_PPC64_PLT16_LO_DS: case elfcpp::R_PPC64_PLTGOT16_DS: case elfcpp::R_PPC64_PLTGOT16_LO_DS: + case elfcpp::R_PPC_EMB_RELSEC16: + case elfcpp::R_PPC_EMB_RELST_LO: + case elfcpp::R_PPC_EMB_RELST_HI: + case elfcpp::R_PPC_EMB_RELST_HA: + case elfcpp::R_PPC_EMB_BIT_FLD: case elfcpp::R_PPC_EMB_RELSDA: case elfcpp::R_PPC_TOC16: default: