[lld] r239222 - [Mips] Use signed/unsigned types in relocation calculations consistently

Simon Atanasyan simon at atanasyan.com
Sat Jun 6 10:26:04 PDT 2015


Author: atanasyan
Date: Sat Jun  6 12:26:04 2015
New Revision: 239222

URL: http://llvm.org/viewvc/llvm-project?rev=239222&view=rev
Log:
[Mips] Use signed/unsigned types in relocation calculations consistently

No functional changes.

Modified:
    lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp

Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp?rev=239222&r1=239221&r2=239222&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp Sat Jun  6 12:26:04 2015
@@ -167,32 +167,31 @@ static MipsRelocationParams getRelocatio
 
 /// \brief R_MIPS_32
 /// local/external: word32 S + A (truncate)
-static uint32_t reloc32(uint64_t S, int64_t A) { return S + A; }
+static int32_t reloc32(uint64_t S, int64_t A) { return S + A; }
 
 /// \brief R_MIPS_64
 /// local/external: word64 S + A (truncate)
-static uint64_t reloc64(uint64_t S, int64_t A) { return S + A; }
+static int64_t reloc64(uint64_t S, int64_t A) { return S + A; }
 
 /// \brief R_MIPS_SUB
 /// local/external: word64 S - A (truncate)
-static uint64_t relocSub(uint64_t S, int64_t A) { return S - A; }
+static int64_t relocSub(uint64_t S, int64_t A) { return S - A; }
 
 /// \brief R_MIPS_PC32
 /// local/external: word32 S + A - P (truncate)
-static uint32_t relocpc32(uint64_t P, uint64_t S, int64_t A) {
+static int32_t relocpc32(uint64_t P, uint64_t S, int64_t A) {
   return S + A - P;
 }
 
 /// \brief R_MIPS_26, R_MICROMIPS_26_S1
 /// local   : ((A | ((P + 4) & 0x3F000000)) + S) >> 2
-static uint32_t reloc26loc(uint64_t P, uint64_t S, int32_t A, uint32_t shift) {
-  uint32_t result = (A | ((P + 4) & (0xfc000000 << shift))) + S;
-  return result;
+static int32_t reloc26loc(uint64_t P, uint64_t S, int32_t A, uint32_t shift) {
+  return (A | ((P + 4) & (0xfc000000 << shift))) + S;
 }
 
 /// \brief LLD_R_MIPS_GLOBAL_26, LLD_R_MICROMIPS_GLOBAL_26_S1
 /// external: (sign-extend(A) + S) >> 2
-static uint32_t reloc26ext(uint64_t S, int32_t A, uint32_t shift) {
+static int32_t reloc26ext(uint64_t S, int32_t A, uint32_t shift) {
   A = shift == 1 ? llvm::SignExtend32<27>(A) : llvm::SignExtend32<28>(A);
   return A + S;
 }
@@ -202,14 +201,14 @@ static uint32_t reloc26ext(uint64_t S, i
 /// LLD_R_MIPS_HI16
 /// local/external: hi16 (AHL + S) - (short)(AHL + S) (truncate)
 /// _gp_disp      : hi16 (AHL + GP - P) - (short)(AHL + GP - P) (verify)
-static uint32_t relocHi16(uint64_t P, uint64_t S, int64_t AHL, bool isGPDisp) {
+static int32_t relocHi16(uint64_t P, uint64_t S, int64_t AHL, bool isGPDisp) {
   int32_t result = isGPDisp ? AHL + S - P : AHL + S;
   return (result + 0x8000) >> 16;
 }
 
 /// \brief R_MIPS_PCHI16
 /// local/external: hi16 (S + AHL - P)
-static uint32_t relocPcHi16(uint64_t P, uint64_t S, int64_t AHL) {
+static int32_t relocPcHi16(uint64_t P, uint64_t S, int64_t AHL) {
   int32_t result = S + AHL - P;
   return (result + 0x8000) >> 16;
 }
@@ -219,66 +218,63 @@ static uint32_t relocPcHi16(uint64_t P,
 /// LLD_R_MIPS_LO16
 /// local/external: lo16 AHL + S (truncate)
 /// _gp_disp      : lo16 AHL + GP - P + 4 (verify)
-static uint32_t relocLo16(uint64_t P, uint64_t S, int64_t AHL, bool isGPDisp,
-                          bool micro) {
-  int32_t result = isGPDisp ? AHL + S - P + (micro ? 3 : 4) : AHL + S;
-  return result;
+static int32_t relocLo16(uint64_t P, uint64_t S, int64_t AHL, bool isGPDisp,
+                         bool micro) {
+  return isGPDisp ? AHL + S - P + (micro ? 3 : 4) : AHL + S;
 }
 
 /// \brief R_MIPS_PCLO16
 /// local/external: lo16 (S + AHL - P)
-static uint32_t relocPcLo16(uint64_t P, uint64_t S, int64_t AHL) {
+static int32_t relocPcLo16(uint64_t P, uint64_t S, int64_t AHL) {
   AHL = llvm::SignExtend32<16>(AHL);
-  int32_t result = S + AHL - P;
-  return result;
+  return S + AHL - P;
 }
 
 /// \brief R_MIPS_GOT16, R_MIPS_CALL16, R_MICROMIPS_GOT16, R_MICROMIPS_CALL16
 /// rel16 G (verify)
-static uint64_t relocGOT(uint64_t S, uint64_t GP) {
-  int64_t G = (int64_t)(S - GP);
-  return G;
+static int64_t relocGOT(uint64_t S, uint64_t GP) {
+  return S - GP;
 }
 
 /// \brief R_MIPS_GOT_LO16, R_MIPS_CALL_LO16
 /// R_MICROMIPS_GOT_LO16, R_MICROMIPS_CALL_LO16
 /// rel16 G (truncate)
-static uint64_t relocGOTLo16(uint64_t S, uint64_t GP) {
+static int64_t relocGOTLo16(uint64_t S, uint64_t GP) {
   return S - GP;
 }
 
 /// \brief R_MIPS_GOT_HI16, R_MIPS_CALL_HI16,
 /// R_MICROMIPS_GOT_HI16, R_MICROMIPS_CALL_HI16
 /// rel16 %high(G) (truncate)
-static uint64_t relocGOTHi16(uint64_t S, uint64_t GP) {
+static int64_t relocGOTHi16(uint64_t S, uint64_t GP) {
   return (S - GP + 0x8000) >> 16;
 }
 
 /// R_MIPS_GOT_OFST, R_MICROMIPS_GOT_OFST
 /// rel16 offset of (S+A) from the page pointer (verify)
-static uint32_t relocGOTOfst(uint64_t S, int64_t A) {
-  uint64_t page = (S + A + 0x8000) & ~0xffff;
+static int32_t relocGOTOfst(uint64_t S, int64_t A) {
+  int64_t page = (S + A + 0x8000) & ~0xffff;
   return S + A - page;
 }
 
 /// \brief R_MIPS_GPREL16
 /// local: sign-extend(A) + S + GP0 - GP
 /// external: sign-extend(A) + S - GP
-static uint64_t relocGPRel16(uint64_t S, int64_t A, uint64_t GP) {
+static int64_t relocGPRel16(uint64_t S, int64_t A, uint64_t GP) {
   // We added GP0 to addendum for a local symbol during a Relocation pass.
   return llvm::SignExtend32<16>(A) + S - GP;
 }
 
 /// \brief R_MIPS_GPREL32
 /// local: rel32 A + S + GP0 - GP (truncate)
-static uint64_t relocGPRel32(uint64_t S, int64_t A, uint64_t GP) {
+static int64_t relocGPRel32(uint64_t S, int64_t A, uint64_t GP) {
   // We added GP0 to addendum for a local symbol during a Relocation pass.
   return A + S - GP;
 }
 
 /// \brief R_MIPS_PC18_S3, R_MICROMIPS_PC18_S3
 /// local/external: (S + A - P) >> 3 (P with cleared 3 less significant bits)
-static uint32_t relocPc18(uint64_t P, uint64_t S, int64_t A) {
+static int32_t relocPc18(uint64_t P, uint64_t S, int64_t A) {
   A = llvm::SignExtend32<21>(A);
   // FIXME (simon): Check that S + A has 8-byte alignment
   int32_t result = S + A - ((P | 7) ^ 7);
@@ -287,50 +283,44 @@ static uint32_t relocPc18(uint64_t P, ui
 
 /// \brief R_MIPS_PC19_S2, R_MICROMIPS_PC19_S2
 /// local/external: (S + A - P) >> 2
-static uint32_t relocPc19(uint64_t P, uint64_t S, int64_t A) {
+static int32_t relocPc19(uint64_t P, uint64_t S, int64_t A) {
   A = llvm::SignExtend32<21>(A);
   // FIXME (simon): Check that S + A has 4-byte alignment
-  int32_t result = S + A - P;
-  return result;
+  return S + A - P;
 }
 
 /// \brief R_MIPS_PC21_S2, R_MICROMIPS_PC21_S2
 /// local/external: (S + A - P) >> 2
-static uint32_t relocPc21(uint64_t P, uint64_t S, int64_t A) {
+static int32_t relocPc21(uint64_t P, uint64_t S, int64_t A) {
   A = llvm::SignExtend32<23>(A);
   // FIXME (simon): Check that S + A has 4-byte alignment
-  int32_t result = S + A - P;
-  return result;
+  return S + A - P;
 }
 
 /// \brief R_MIPS_PC26_S2, R_MICROMIPS_PC26_S2
 /// local/external: (S + A - P) >> 2
-static uint32_t relocPc26(uint64_t P, uint64_t S, int64_t A) {
+static int32_t relocPc26(uint64_t P, uint64_t S, int64_t A) {
   A = llvm::SignExtend32<28>(A);
   // FIXME (simon): Check that S + A has 4-byte alignment
-  int32_t result = S + A - P;
-  return result;
+  return S + A - P;
 }
 
 /// \brief R_MICROMIPS_PC7_S1
-static uint32_t relocPc7(uint64_t P, uint64_t S, int64_t A) {
+static int32_t relocPc7(uint64_t P, uint64_t S, int64_t A) {
   A = llvm::SignExtend32<8>(A);
-  int32_t result = S + A - P;
-  return result;
+  return S + A - P;
 }
 
 /// \brief R_MICROMIPS_PC10_S1
-static uint32_t relocPc10(uint64_t P, uint64_t S, int64_t A) {
+static int32_t relocPc10(uint64_t P, uint64_t S, int64_t A) {
   A = llvm::SignExtend32<11>(A);
-  int32_t result = S + A - P;
-  return result;
+  return S + A - P;
 }
 
 /// \brief R_MICROMIPS_PC16_S1
-static uint32_t relocPc16(uint64_t P, uint64_t S, int64_t A) {
+static int32_t relocPc16(uint64_t P, uint64_t S, int64_t A) {
   A = llvm::SignExtend32<17>(A);
-  int32_t result = S + A - P;
-  return result;
+  return S + A - P;
 }
 
 /// \brief R_MICROMIPS_PC23_S2
@@ -342,12 +332,11 @@ static uint32_t relocPc23(uint64_t P, ui
   if (result + 0x1000000 >= 0x2000000)
     llvm::errs() << "The addiupc instruction immediate "
                  << llvm::format_hex(result, 10) << " is out of range.\n";
-
   return result;
 }
 
 /// \brief LLD_R_MIPS_32_HI16, LLD_R_MIPS_64_HI16
-static uint64_t relocMaskLow16(uint64_t S, int64_t A) {
+static int64_t relocMaskLow16(uint64_t S, int64_t A) {
   return S + A + 0x8000;
 }
 
@@ -412,11 +401,11 @@ static uint32_t microShuffle(uint32_t in
   return ((ins & 0xffff) << 16) | ((ins & 0xffff0000) >> 16);
 }
 
-static ErrorOr<uint64_t> calculateRelocation(Reference::KindValue kind,
-                                             Reference::Addend addend,
-                                             uint64_t tgtAddr, uint64_t relAddr,
-                                             uint64_t gpAddr, bool isGP,
-                                             bool isCrossJump) {
+static ErrorOr<int64_t> calculateRelocation(Reference::KindValue kind,
+                                            Reference::Addend addend,
+                                            uint64_t tgtAddr, uint64_t relAddr,
+                                            uint64_t gpAddr, bool isGP,
+                                            bool isCrossJump) {
   if (!tgtAddr) {
     isGP = false;
     isCrossJump = false;





More information about the llvm-commits mailing list