mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
gold/
* target.h (Sized_target::relocate_relocs): Use Elf_Off for offset_in_output_section parameter. (Sized_target::relocate_special_relocatable): Likewise. * arm.cc (Target_arm::relocate_relocs): Likewise. (Target_arm::relocate_special_relocatable): Likewise. * i386.cc (Target_i386::relocate_relocs): Likewise. * powerpc.cc (Target_powerpc::relocate_relocs): Likewise. * sparc.cc (Target_sparc::relocate_relocs): Likewise. * target-reloc.h (relocate_relocs): Likewise. * testsuite/testfile.cc (Target_test): Likewise. * tilegx.cc (Target_tilegx::relocate_relocs): Likewise. * x86_64.cc (Target_x86_64::relocate_relocs): Likewise.
This commit is contained in:
parent
c06dec1422
commit
62fe925ad4
@ -1,23 +1,32 @@
|
||||
2012-11-01 Roland McGrath <mcgrathr@google.com>
|
||||
|
||||
* target.h (Sized_target::relocate_relocs): Use Elf_Off
|
||||
for offset_in_output_section parameter.
|
||||
(Sized_target::relocate_special_relocatable): Likewise.
|
||||
* arm.cc (Target_arm::relocate_relocs): Likewise.
|
||||
(Target_arm::relocate_special_relocatable): Likewise.
|
||||
* i386.cc (Target_i386::relocate_relocs): Likewise.
|
||||
* powerpc.cc (Target_powerpc::relocate_relocs): Likewise.
|
||||
* sparc.cc (Target_sparc::relocate_relocs): Likewise.
|
||||
* target-reloc.h (relocate_relocs): Likewise.
|
||||
* testsuite/testfile.cc (Target_test): Likewise.
|
||||
* tilegx.cc (Target_tilegx::relocate_relocs): Likewise.
|
||||
* x86_64.cc (Target_x86_64::relocate_relocs): Likewise.
|
||||
|
||||
* system.h: Move inclusion of <clocale> to after <libintl.h> in
|
||||
[ENABLE_NLS] section, and separately at top of [!ENABLE_NLS] section.
|
||||
|
||||
* descriptors.cc (set_close_on_exec): Add ATTRIBUTE_UNUSED to the
|
||||
parameter, which is unused in the [!F_SETFD] case.
|
||||
|
||||
* dwarf_reader.cc (Sized_elf_reloc_mapper::symbol_section): Cast
|
||||
SYMNDX to off_t before comparing it to this->data_size().
|
||||
* output.cc (Output_symtab_xindex::endian_do_write): Likewise.
|
||||
* incremental.cc (Output_section_incremental_inputs::do_write):
|
||||
Cast GLOBAL_SYM_COUNT to off_t before comparing it to SYMTAB_SIZE.
|
||||
|
||||
2012-11-01 Roland McGrath <mcgrathr@google.com>
|
||||
|
||||
* system.h: Move inclusion of <clocale> to after <libintl.h> in
|
||||
[ENABLE_NLS] section, and separately at top of [!ENABLE_NLS] section.
|
||||
|
||||
* nacl.cc: Include "libiberty.h" for vasprintf declaration.
|
||||
|
||||
2012-11-01 Roland McGrath <mcgrathr@google.com>
|
||||
|
||||
* descriptors.cc (set_close_on_exec): Add ATTRIBUTE_UNUSED to the
|
||||
parameter, which is unused in the [!F_SETFD] case.
|
||||
|
||||
2012-10-30 Steve McIntyre <steve.mcintyre@linaro.org>
|
||||
|
||||
* gold.cc (Target_arm::do_adjust_elf_header): Add the
|
||||
|
10
gold/arm.cc
10
gold/arm.cc
@ -2293,7 +2293,8 @@ class Target_arm : public Sized_target<32, big_endian>
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<32>::Elf_Off
|
||||
offset_in_output_section,
|
||||
const Relocatable_relocs*,
|
||||
unsigned char* view,
|
||||
Arm_address view_address,
|
||||
@ -2309,7 +2310,8 @@ class Target_arm : public Sized_target<32, big_endian>
|
||||
const unsigned char* preloc_in,
|
||||
size_t relnum,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<32>::Elf_Off
|
||||
offset_in_output_section,
|
||||
unsigned char* view,
|
||||
typename elfcpp::Elf_types<32>::Elf_Addr
|
||||
view_address,
|
||||
@ -9603,7 +9605,7 @@ Target_arm<big_endian>::relocate_relocs(
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<32>::Elf_Off offset_in_output_section,
|
||||
const Relocatable_relocs* rr,
|
||||
unsigned char* view,
|
||||
Arm_address view_address,
|
||||
@ -9638,7 +9640,7 @@ Target_arm<big_endian>::relocate_special_relocatable(
|
||||
const unsigned char* preloc_in,
|
||||
size_t relnum,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<32>::Elf_Off offset_in_output_section,
|
||||
unsigned char* view,
|
||||
elfcpp::Elf_types<32>::Elf_Addr view_address,
|
||||
section_size_type,
|
||||
|
@ -414,7 +414,8 @@ class Target_i386 : public Sized_target<32, false>
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<32>::Elf_Off
|
||||
offset_in_output_section,
|
||||
const Relocatable_relocs*,
|
||||
unsigned char* view,
|
||||
elfcpp::Elf_types<32>::Elf_Addr view_address,
|
||||
@ -3617,7 +3618,7 @@ Target_i386::relocate_relocs(
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<32>::Elf_Off offset_in_output_section,
|
||||
const Relocatable_relocs* rr,
|
||||
unsigned char* view,
|
||||
elfcpp::Elf_types<32>::Elf_Addr view_address,
|
||||
|
@ -393,7 +393,8 @@ class Target_powerpc : public Sized_target<size, big_endian>
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<size>::Elf_Off
|
||||
offset_in_output_section,
|
||||
const Relocatable_relocs*,
|
||||
unsigned char*,
|
||||
Address view_address,
|
||||
@ -2511,7 +2512,7 @@ savegpr0_tail(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
restgpr0(unsigned char* p, int r)
|
||||
{
|
||||
uint32_t insn = ld_0_1 + (r << 21) + (1 << 16) - (32 - r) * 8;
|
||||
@ -2520,7 +2521,7 @@ restgpr0(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
restgpr0_tail(unsigned char* p, int r)
|
||||
{
|
||||
uint32_t insn = ld_0_1 + 16;
|
||||
@ -2539,7 +2540,7 @@ restgpr0_tail(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
savegpr1(unsigned char* p, int r)
|
||||
{
|
||||
uint32_t insn = std_0_12 + (r << 21) + (1 << 16) - (32 - r) * 8;
|
||||
@ -2548,7 +2549,7 @@ savegpr1(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
savegpr1_tail(unsigned char* p, int r)
|
||||
{
|
||||
p = savegpr1<big_endian>(p, r);
|
||||
@ -2557,7 +2558,7 @@ savegpr1_tail(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
restgpr1(unsigned char* p, int r)
|
||||
{
|
||||
uint32_t insn = ld_0_12 + (r << 21) + (1 << 16) - (32 - r) * 8;
|
||||
@ -2566,7 +2567,7 @@ restgpr1(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
restgpr1_tail(unsigned char* p, int r)
|
||||
{
|
||||
p = restgpr1<big_endian>(p, r);
|
||||
@ -2575,7 +2576,7 @@ restgpr1_tail(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
savefpr(unsigned char* p, int r)
|
||||
{
|
||||
uint32_t insn = stfd_0_1 + (r << 21) + (1 << 16) - (32 - r) * 8;
|
||||
@ -2584,7 +2585,7 @@ savefpr(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
savefpr0_tail(unsigned char* p, int r)
|
||||
{
|
||||
p = savefpr<big_endian>(p, r);
|
||||
@ -2595,7 +2596,7 @@ savefpr0_tail(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
restfpr(unsigned char* p, int r)
|
||||
{
|
||||
uint32_t insn = lfd_0_1 + (r << 21) + (1 << 16) - (32 - r) * 8;
|
||||
@ -2604,7 +2605,7 @@ restfpr(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
restfpr0_tail(unsigned char* p, int r)
|
||||
{
|
||||
write_insn<big_endian>(p, ld_0_1 + 16);
|
||||
@ -2622,7 +2623,7 @@ restfpr0_tail(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
savefpr1_tail(unsigned char* p, int r)
|
||||
{
|
||||
p = savefpr<big_endian>(p, r);
|
||||
@ -2631,7 +2632,7 @@ savefpr1_tail(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
restfpr1_tail(unsigned char* p, int r)
|
||||
{
|
||||
p = restfpr<big_endian>(p, r);
|
||||
@ -2640,7 +2641,7 @@ restfpr1_tail(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
savevr(unsigned char* p, int r)
|
||||
{
|
||||
uint32_t insn = li_12_0 + (1 << 16) - (32 - r) * 16;
|
||||
@ -2652,7 +2653,7 @@ savevr(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
savevr_tail(unsigned char* p, int r)
|
||||
{
|
||||
p = savevr<big_endian>(p, r);
|
||||
@ -2661,7 +2662,7 @@ savevr_tail(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
restvr(unsigned char* p, int r)
|
||||
{
|
||||
uint32_t insn = li_12_0 + (1 << 16) - (32 - r) * 16;
|
||||
@ -2673,7 +2674,7 @@ restvr(unsigned char* p, int r)
|
||||
}
|
||||
|
||||
template<bool big_endian>
|
||||
static unsigned char*
|
||||
static unsigned char*
|
||||
restvr_tail(unsigned char* p, int r)
|
||||
{
|
||||
p = restvr<big_endian>(p, r);
|
||||
@ -5177,7 +5178,7 @@ Target_powerpc<size, big_endian>::relocate_relocs(
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<size>::Elf_Off offset_in_output_section,
|
||||
const Relocatable_relocs* rr,
|
||||
unsigned char*,
|
||||
Address view_address,
|
||||
|
@ -138,7 +138,8 @@ class Target_sparc : public Sized_target<size, big_endian>
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<size>::Elf_Off
|
||||
offset_in_output_section,
|
||||
const Relocatable_relocs*,
|
||||
unsigned char* view,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr view_address,
|
||||
@ -4213,7 +4214,7 @@ Target_sparc<size, big_endian>::relocate_relocs(
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<size>::Elf_Off offset_in_output_section,
|
||||
const Relocatable_relocs* rr,
|
||||
unsigned char* view,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr view_address,
|
||||
|
@ -1,6 +1,7 @@
|
||||
// target-reloc.h -- target specific relocation support -*- C++ -*-
|
||||
|
||||
// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
|
||||
// Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
||||
// Free Software Foundation, Inc.
|
||||
// Written by Ian Lance Taylor <iant@google.com>.
|
||||
|
||||
// This file is part of gold.
|
||||
@ -87,7 +88,7 @@ scan_relocs(
|
||||
//
|
||||
// FIXME: We should issue a warning if this is an
|
||||
// allocated section; is this the best place to do it?
|
||||
//
|
||||
//
|
||||
// FIXME: The old GNU linker would in some cases look
|
||||
// for the linkonce section which caused this section to
|
||||
// be discarded, and, if the other section was the same
|
||||
@ -311,7 +312,7 @@ relocate_section(
|
||||
// If the local symbol belongs to a section we are discarding,
|
||||
// and that section is a debug section, try to find the
|
||||
// corresponding kept section and map this symbol to its
|
||||
// counterpart in the kept section. The symbol must not
|
||||
// counterpart in the kept section. The symbol must not
|
||||
// correspond to a section we are folding.
|
||||
bool is_ordinary;
|
||||
shndx = psymval->input_shndx(&is_ordinary);
|
||||
@ -606,7 +607,7 @@ relocate_relocs(
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr offset_in_output_section,
|
||||
typename elfcpp::Elf_types<size>::Elf_Off offset_in_output_section,
|
||||
const Relocatable_relocs* rr,
|
||||
unsigned char* view,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr view_address,
|
||||
|
@ -838,7 +838,8 @@ class Sized_target : public Target
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<size>::Elf_Off
|
||||
offset_in_output_section,
|
||||
const Relocatable_relocs*,
|
||||
unsigned char* view,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr view_address,
|
||||
@ -868,7 +869,8 @@ class Sized_target : public Target
|
||||
const unsigned char* /* preloc_in */,
|
||||
size_t /* relnum */,
|
||||
Output_section* /* output_section */,
|
||||
off_t /* offset_in_output_section */,
|
||||
typename elfcpp::Elf_types<size>::Elf_Off
|
||||
/* offset_in_output_section */,
|
||||
unsigned char* /* view */,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr
|
||||
/* view_address */,
|
||||
|
@ -74,8 +74,8 @@ class Target_test : public Sized_target<size, big_endian>
|
||||
void
|
||||
relocate_relocs(const Relocate_info<size, big_endian>*,
|
||||
unsigned int, const unsigned char*, size_t,
|
||||
Output_section*, off_t, const Relocatable_relocs*,
|
||||
unsigned char*,
|
||||
Output_section*, typename elfcpp::Elf_types<size>::Elf_Off,
|
||||
const Relocatable_relocs*, unsigned char*,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr,
|
||||
section_size_type, unsigned char*,
|
||||
section_size_type)
|
||||
|
@ -316,7 +316,7 @@ class Target_tilegx : public Sized_target<size, big_endian>
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<size>::Elf_Off offset_in_output_section,
|
||||
const Relocatable_relocs*,
|
||||
unsigned char* view,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr view_address,
|
||||
@ -780,7 +780,7 @@ public:
|
||||
// right shift operand by this number of bits.
|
||||
unsigned char srshift;
|
||||
|
||||
// the offset to apply relocation.
|
||||
// the offset to apply relocation.
|
||||
unsigned char doffset;
|
||||
|
||||
// set to 1 for pc-relative relocation.
|
||||
@ -899,7 +899,7 @@ private:
|
||||
Valtype* wv = reinterpret_cast<Valtype*>(view);
|
||||
Valtype val = elfcpp::Swap<valsize, big_endian>::readval(wv);
|
||||
Valtype reloc = 0;
|
||||
if (size == 32)
|
||||
if (size == 32)
|
||||
reloc = Bits<32>::sign_extend(psymval->value(object, addend) - address)
|
||||
>> srshift;
|
||||
else
|
||||
@ -927,7 +927,7 @@ private:
|
||||
Valtype;
|
||||
unsigned char* wv = view;
|
||||
Valtype reloc = 0;
|
||||
if (size == 32)
|
||||
if (size == 32)
|
||||
reloc = Bits<32>::sign_extend(psymval->value(object, addend) - address)
|
||||
>> srshift;
|
||||
else
|
||||
@ -954,7 +954,7 @@ private:
|
||||
Valtype* wv = reinterpret_cast<Valtype*>(view);
|
||||
Valtype val = elfcpp::Swap<valsize, big_endian>::readval(wv);
|
||||
Valtype reloc = 0;
|
||||
if (size == 32)
|
||||
if (size == 32)
|
||||
reloc = Bits<32>::sign_extend(psymval->value(object, addend) - address)
|
||||
>> srshift;
|
||||
else
|
||||
@ -1043,7 +1043,7 @@ public:
|
||||
const Symbol_value<size>* psymval,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr addend,
|
||||
Tilegx_howto &r_howto)
|
||||
{
|
||||
{
|
||||
This::template rela<64>(view, object, psymval, addend,
|
||||
(elfcpp::Elf_Xword)(r_howto.srshift),
|
||||
(elfcpp::Elf_Xword)(r_howto.doffset),
|
||||
@ -1057,7 +1057,7 @@ public:
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr addend,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr address,
|
||||
Tilegx_howto &r_howto)
|
||||
{
|
||||
{
|
||||
This::template pcrela<64>(view, object, psymval, addend, address,
|
||||
(elfcpp::Elf_Xword)(r_howto.srshift),
|
||||
(elfcpp::Elf_Xword)(r_howto.doffset),
|
||||
@ -1071,7 +1071,7 @@ public:
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr addend,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr address,
|
||||
unsigned int r_type)
|
||||
{
|
||||
{
|
||||
|
||||
elfcpp::Elf_Xword doffset1 = 0llu;
|
||||
elfcpp::Elf_Xword doffset2 = 0llu;
|
||||
@ -1111,8 +1111,8 @@ public:
|
||||
static inline void
|
||||
tls_relax(unsigned char* view, unsigned int r_type,
|
||||
tls::Tls_optimization opt_t)
|
||||
{
|
||||
|
||||
{
|
||||
|
||||
const uint64_t TILEGX_X_MOVE_R0_R0 = 0x283bf8005107f000llu;
|
||||
const uint64_t TILEGX_Y_MOVE_R0_R0 = 0xae05f800540bf000llu;
|
||||
const uint64_t TILEGX_X_LD = 0x286ae80000000000llu;
|
||||
@ -1176,7 +1176,7 @@ public:
|
||||
// LE: 1. copy dest operand into the first source operand
|
||||
// 2. change the opcode to "move"
|
||||
reloc = (val & 0x3Fllu) << 6;
|
||||
reloc |= (TILEGX_X_MOVE_R0_R0 & TILEGX_X0_RRR_SRCB_MASK);
|
||||
reloc |= (TILEGX_X_MOVE_R0_R0 & TILEGX_X0_RRR_SRCB_MASK);
|
||||
val &= ~R_TILEGX_IMM8_X0_TLS_ADD_LE_MASK;
|
||||
} else
|
||||
gold_unreachable();
|
||||
@ -1228,7 +1228,7 @@ public:
|
||||
break;
|
||||
case elfcpp::R_TILEGX_IMM8_X0_TLS_GD_ADD:
|
||||
if (opt_t == tls::TLSOPT_NONE) {
|
||||
// GD see comments for optimize_tls_reloc
|
||||
// GD see comments for optimize_tls_reloc
|
||||
reloc = TILEGX_X_MOVE_R0_R0 & TILEGX_X0_RRR_SRCB_MASK;
|
||||
val &= ~TILEGX_X0_RRR_SRCB_MASK;
|
||||
} else if (opt_t == tls::TLSOPT_TO_IE
|
||||
@ -1890,7 +1890,7 @@ Target_tilegx<size, big_endian>::got_section(Symbol_table* symtab,
|
||||
false, false);
|
||||
|
||||
this->got_->add_global(this->tilegx_dynamic_, GOT_TYPE_STANDARD);
|
||||
} else
|
||||
} else
|
||||
// for executable, just set the first entry to zero.
|
||||
this->got_->set_current_data_size(size / 8);
|
||||
|
||||
@ -2022,7 +2022,7 @@ Output_data_plt_tilegx<size, big_endian>::add_entry(Symbol_table* symtab,
|
||||
plt_index = *pcount;
|
||||
|
||||
// TILEGX .plt section layout
|
||||
//
|
||||
//
|
||||
// ----
|
||||
// plt_header
|
||||
// ----
|
||||
@ -2030,9 +2030,9 @@ Output_data_plt_tilegx<size, big_endian>::add_entry(Symbol_table* symtab,
|
||||
// ----
|
||||
// ...
|
||||
// ----
|
||||
//
|
||||
//
|
||||
// TILEGX .got.plt section layout
|
||||
//
|
||||
//
|
||||
// ----
|
||||
// reserv1
|
||||
// ----
|
||||
@ -2041,7 +2041,7 @@ Output_data_plt_tilegx<size, big_endian>::add_entry(Symbol_table* symtab,
|
||||
// entries for normal function
|
||||
// ----
|
||||
// ...
|
||||
// ----
|
||||
// ----
|
||||
// entries for ifunc
|
||||
// ----
|
||||
// ...
|
||||
@ -2874,8 +2874,8 @@ Target_tilegx<size, big_endian>::got_mod_index_entry(Symbol_table* symtab,
|
||||
// move r0, r0 Y0/Y1/X0/X1
|
||||
// move r0, r0 Y0/Y1/X0/X1
|
||||
// add adr, r0, tp Y0/Y1/X0/X1
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// compiler IE reference
|
||||
// |
|
||||
// V
|
||||
@ -3123,7 +3123,7 @@ Target_tilegx<size, big_endian>::Scan::unsupported_reloc_local(
|
||||
}
|
||||
|
||||
// We are about to emit a dynamic relocation of type R_TYPE. If the
|
||||
// dynamic linker does not support it, issue an error.
|
||||
// dynamic linker does not support it, issue an error.
|
||||
template<int size, bool big_endian>
|
||||
void
|
||||
Target_tilegx<size, big_endian>::Scan::check_non_pic(Relobj* object,
|
||||
@ -3296,7 +3296,7 @@ Target_tilegx<size, big_endian>::Scan::local(Symbol_table* symtab,
|
||||
data_shndx,
|
||||
reloc.get_r_offset(),
|
||||
reloc.get_r_addend());
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -3450,7 +3450,7 @@ Target_tilegx<size, big_endian>::Scan::local(Symbol_table* symtab,
|
||||
break;
|
||||
|
||||
// GD: requires two GOT entry for module index and offset
|
||||
// IE: requires one GOT entry for tp-relative offset
|
||||
// IE: requires one GOT entry for tp-relative offset
|
||||
// LE: shouldn't happen for global symbol
|
||||
case elfcpp::R_TILEGX_IMM16_X0_HW0_TLS_GD:
|
||||
case elfcpp::R_TILEGX_IMM16_X1_HW0_TLS_GD:
|
||||
@ -3473,7 +3473,7 @@ Target_tilegx<size, big_endian>::Scan::local(Symbol_table* symtab,
|
||||
r_sym, shndx);
|
||||
else
|
||||
got->add_local_pair_with_rel(object, r_sym, shndx,
|
||||
GOT_TYPE_TLS_PAIR,
|
||||
GOT_TYPE_TLS_PAIR,
|
||||
target->rela_dyn_section(layout),
|
||||
size == 32
|
||||
? elfcpp::R_TILEGX_TLS_DTPMOD32
|
||||
@ -3493,7 +3493,7 @@ Target_tilegx<size, big_endian>::Scan::local(Symbol_table* symtab,
|
||||
? elfcpp::R_TILEGX_TLS_TPOFF32
|
||||
: elfcpp::R_TILEGX_TLS_TPOFF64,
|
||||
got, off, 0);
|
||||
} else if (opt_t != tls::TLSOPT_TO_LE)
|
||||
} else if (opt_t != tls::TLSOPT_TO_LE)
|
||||
// only TO_LE is allowed for local symbol
|
||||
unsupported_reloc_local(object, r_type);
|
||||
}
|
||||
@ -4010,7 +4010,7 @@ Target_tilegx<size, big_endian>::Scan::global(Symbol_table* symtab,
|
||||
symtab->lookup("__tls_get_addr"));
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
// only make effect when applying relocation
|
||||
case elfcpp::R_TILEGX_TLS_IE_LOAD:
|
||||
case elfcpp::R_TILEGX_IMM8_X0_TLS_ADD:
|
||||
@ -4022,9 +4022,9 @@ Target_tilegx<size, big_endian>::Scan::global(Symbol_table* symtab,
|
||||
case elfcpp::R_TILEGX_IMM8_Y0_TLS_GD_ADD:
|
||||
case elfcpp::R_TILEGX_IMM8_Y1_TLS_GD_ADD:
|
||||
break;
|
||||
|
||||
|
||||
// GD: requires two GOT entry for module index and offset
|
||||
// IE: requires one GOT entry for tp-relative offset
|
||||
// IE: requires one GOT entry for tp-relative offset
|
||||
// LE: shouldn't happen for global symbol
|
||||
case elfcpp::R_TILEGX_IMM16_X0_HW0_TLS_GD:
|
||||
case elfcpp::R_TILEGX_IMM16_X1_HW0_TLS_GD:
|
||||
@ -4058,7 +4058,7 @@ Target_tilegx<size, big_endian>::Scan::global(Symbol_table* symtab,
|
||||
unsupported_reloc_global(object, r_type, gsym);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
// IE
|
||||
case elfcpp::R_TILEGX_IMM16_X0_HW0_TLS_IE:
|
||||
case elfcpp::R_TILEGX_IMM16_X1_HW0_TLS_IE:
|
||||
@ -4081,7 +4081,7 @@ Target_tilegx<size, big_endian>::Scan::global(Symbol_table* symtab,
|
||||
unsupported_reloc_global(object, r_type, gsym);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
// LE
|
||||
case elfcpp::R_TILEGX_IMM16_X0_HW0_TLS_LE:
|
||||
case elfcpp::R_TILEGX_IMM16_X1_HW0_TLS_LE:
|
||||
@ -4626,16 +4626,16 @@ Target_tilegx<size, big_endian>::Relocate::relocate(
|
||||
} // else if (opt_t == tls::TLSOPT_TO_LE)
|
||||
// both GD/IE are turned into LE, which
|
||||
// is absolute relocation.
|
||||
//
|
||||
//
|
||||
// | go through
|
||||
// |
|
||||
// |
|
||||
// V
|
||||
// LE
|
||||
//
|
||||
//
|
||||
// tp
|
||||
// |
|
||||
// V
|
||||
// t_var1 | t_var2 | t_var3 | ...
|
||||
// t_var1 | t_var2 | t_var3 | ...
|
||||
// --------------------------------------------------
|
||||
//
|
||||
// so offset to tp should be negative, we get offset
|
||||
@ -4656,7 +4656,7 @@ Target_tilegx<size, big_endian>::Relocate::relocate(
|
||||
|| issue_undefined_symbol_error(gsym));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr value
|
||||
= psymval->value(relinfo->object, 0);
|
||||
symval.set_output_value(value);
|
||||
@ -4836,7 +4836,7 @@ Target_tilegx<size, big_endian>::relocate_relocs(
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<size>::Elf_Off offset_in_output_section,
|
||||
const Relocatable_relocs* rr,
|
||||
unsigned char* view,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr view_address,
|
||||
@ -4889,7 +4889,7 @@ Target_tilegx<size, big_endian>::do_ehframe_datarel_base() const
|
||||
return ssym->value();
|
||||
}
|
||||
|
||||
// The selector for tilegx object files.
|
||||
// The selector for tilegx object files.
|
||||
|
||||
template<int size, bool big_endian>
|
||||
class Target_selector_tilegx : public Target_selector
|
||||
|
@ -477,7 +477,7 @@ class Target_x86_64 : public Sized_target<size, false>
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<size>::Elf_Off offset_in_output_section,
|
||||
const Relocatable_relocs*,
|
||||
unsigned char* view,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr view_address,
|
||||
@ -2307,7 +2307,7 @@ Target_x86_64<size>::Scan::local(Symbol_table* symtab,
|
||||
unsigned int r_sym = elfcpp::elf_r_sym<size>(reloc.get_r_info());
|
||||
Reloc_section* rela_dyn = target->rela_dyn_section(layout);
|
||||
rela_dyn->add_local_relative(object, r_sym,
|
||||
(size == 32
|
||||
(size == 32
|
||||
? elfcpp::R_X86_64_RELATIVE64
|
||||
: elfcpp::R_X86_64_RELATIVE),
|
||||
output_section, data_shndx,
|
||||
@ -4221,7 +4221,7 @@ Target_x86_64<size>::relocate_relocs(
|
||||
const unsigned char* prelocs,
|
||||
size_t reloc_count,
|
||||
Output_section* output_section,
|
||||
off_t offset_in_output_section,
|
||||
typename elfcpp::Elf_types<size>::Elf_Off offset_in_output_section,
|
||||
const Relocatable_relocs* rr,
|
||||
unsigned char* view,
|
||||
typename elfcpp::Elf_types<size>::Elf_Addr view_address,
|
||||
|
Loading…
Reference in New Issue
Block a user