Skip to content
Permalink
Browse files

[mips] Assign R_TLS type to the R_MIPS_TLS_TPREL_XXX relocations. NFC

That allows to remove duplicated code which subtracts 0x7000 from the
R_MIPS_TLS_TPREL_XXX relocations values in the `MIPS::relocateOne`
function.

llvm-svn: 366888
  • Loading branch information...
atanasyan committed Jul 24, 2019
1 parent 3daefb0 commit 5adbfdda2db97811e5e8f34a86d730d90e25ca15
Showing with 5 additions and 8 deletions.
  1. +4 −8 lld/ELF/Arch/Mips.cpp
  2. +1 −0 lld/ELF/InputSection.cpp
@@ -120,15 +120,16 @@ RelExpr MIPS<ELFT>::getRelExpr(RelType type, const Symbol &s,
case R_MIPS_TLS_DTPREL_LO16:
case R_MIPS_TLS_DTPREL32:
case R_MIPS_TLS_DTPREL64:
case R_MICROMIPS_TLS_DTPREL_HI16:
case R_MICROMIPS_TLS_DTPREL_LO16:
return R_ABS;
case R_MIPS_TLS_TPREL_HI16:
case R_MIPS_TLS_TPREL_LO16:
case R_MIPS_TLS_TPREL32:
case R_MIPS_TLS_TPREL64:
case R_MICROMIPS_TLS_DTPREL_HI16:
case R_MICROMIPS_TLS_DTPREL_LO16:
case R_MICROMIPS_TLS_TPREL_HI16:
case R_MICROMIPS_TLS_TPREL_LO16:
return R_ABS;
return R_TLS;
case R_MIPS_PC32:
case R_MIPS_PC16:
case R_MIPS_PC19_S2:
@@ -538,11 +539,6 @@ void MIPS<ELFT>::relocateOne(uint8_t *loc, RelType type, uint64_t val) const {
type == R_MICROMIPS_TLS_DTPREL_HI16 ||
type == R_MICROMIPS_TLS_DTPREL_LO16) {
val -= 0x8000;
} else if (type == R_MIPS_TLS_TPREL_HI16 || type == R_MIPS_TLS_TPREL_LO16 ||
type == R_MIPS_TLS_TPREL32 || type == R_MIPS_TLS_TPREL64 ||
type == R_MICROMIPS_TLS_TPREL_HI16 ||
type == R_MICROMIPS_TLS_TPREL_LO16) {
val -= 0x7000;
}

switch (type) {
@@ -619,6 +619,7 @@ static int64_t getTlsTpOffset(const Symbol &s) {
case EM_X86_64:
// Variant 2. The TLS segment is located just before the thread pointer.
return s.getVA(0) - alignTo(Out::tlsPhdr->p_memsz, Out::tlsPhdr->p_align);
case EM_MIPS:
case EM_PPC:
case EM_PPC64:
// The thread pointer points to a fixed offset from the start of the

0 comments on commit 5adbfdd

Please sign in to comment.
You can’t perform that action at this time.