[lld] r249435 - ELF2: Define or{16, 32, 64}le that are analogous to add32le.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 6 11:08:04 PDT 2015


Author: ruiu
Date: Tue Oct  6 13:08:03 2015
New Revision: 249435

URL: http://llvm.org/viewvc/llvm-project?rev=249435&view=rev
Log:
ELF2: Define or{16,32,64}le that are analogous to add32le.

Modified:
    lld/trunk/ELF/Target.cpp

Modified: lld/trunk/ELF/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=249435&r1=249434&r2=249435&view=diff
==============================================================================
--- lld/trunk/ELF/Target.cpp (original)
+++ lld/trunk/ELF/Target.cpp Tue Oct  6 13:08:03 2015
@@ -60,6 +60,9 @@ bool X86TargetInfo::relocNeedsPlt(uint32
 }
 
 static void add32le(uint8_t *P, int32_t V) { write32le(P, read32le(P) + V); }
+static void or16le(uint8_t *P, int16_t V) { write16le(P, read16le(P) + V); }
+static void or32le(uint8_t *P, int32_t V) { write32le(P, read32le(P) + V); }
+static void or64le(uint8_t *P, int64_t V) { write64le(P, read64le(P) + V); }
 
 void X86TargetInfo::relocateOne(uint8_t *Buf, const void *RelP, uint32_t Type,
                                 uint64_t BaseAddr, uint64_t SymVA,
@@ -286,26 +289,26 @@ static void handle_ABS16(uint8_t *Locati
   uint64_t X = S + A;
   if (!isInt<16>(X)) // -2^15 <= X < 2^16
     error("Relocation R_AARCH64_ABS16 out of range");
-  write16le(Location, read16le(Location) | X);
+  or16le(Location, X);
 }
 
 static void handle_ABS32(uint8_t *Location, uint64_t S, int64_t A) {
   uint64_t X = S + A;
   if (!isInt<32>(X)) // -2^31 <= X < 2^32
     error("Relocation R_AARCH64_ABS32 out of range");
-  write32le(Location, read32le(Location) | X);
+  or32le(Location, X);
 }
 
 static void handle_ABS64(uint8_t *Location, uint64_t S, int64_t A) {
   uint64_t X = S + A;
   // No overflow check.
-  write64le(Location, read64le(Location) | X);
+  or64le(Location, X);
 }
 
 static void handle_ADD_ABS_LO12_NC(uint8_t *Location, uint64_t S, int64_t A) {
   // No overflow check.
   uint64_t X = ((S + A) & 0xFFF) << 10;
-  write32le(Location, read32le(Location) | X);
+  or32le(Location, X);
 }
 
 static void handle_ADR_PREL_LO21(uint8_t *Location, uint64_t S, int64_t A,




More information about the llvm-commits mailing list