diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-11-09 21:43:00 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-11-09 21:43:00 +0000 |
commit | e7e57b200f147e855d358f908ca40c38371ea233 (patch) | |
tree | 1a9910aba36d9fa5e387c3a1ed55460c4d143c52 | |
parent | 196ba0b18c5dfae52aa1925d37264ae10f833978 (diff) | |
download | bcm5719-llvm-e7e57b200f147e855d358f908ca40c38371ea233.tar.gz bcm5719-llvm-e7e57b200f147e855d358f908ca40c38371ea233.zip |
Use llvm provided read and write functions.
llvm-svn: 252518
-rw-r--r-- | lld/ELF/Target.cpp | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp index daaaa208d6d..83b723d0c0e 100644 --- a/lld/ELF/Target.cpp +++ b/lld/ELF/Target.cpp @@ -35,21 +35,12 @@ namespace elf2 { std::unique_ptr<TargetInfo> Target; -template <bool IsLE> static uint32_t read32(const uint8_t *L); -template <> uint32_t read32<true>(const uint8_t *L) { return read32le(L); } -template <> uint32_t read32<false>(const uint8_t *L) { return read32be(L); } - -template <bool IsLE> static void write32(uint8_t *L, uint32_t V); -template <> void write32<true>(uint8_t *L, uint32_t V) { write32le(L, V); } -template <> void write32<false>(uint8_t *L, uint32_t V) { write32be(L, V); } - -static void add32le(uint8_t *L, int32_t V) { write32le(L, read32le(L) + V); } -static void add32be(uint8_t *L, int32_t V) { write32be(L, read32be(L) + V); } -static void or32le(uint8_t *L, int32_t V) { write32le(L, read32le(L) | V); } +template <endianness E> static void add32(void *P, int32_t V) { + write32<E>(P, read32<E>(P) + V); +} -template <bool IsLE> static void add32(uint8_t *L, int32_t V); -template <> void add32<true>(uint8_t *L, int32_t V) { add32le(L, V); } -template <> void add32<false>(uint8_t *L, int32_t V) { add32be(L, V); } +static void add32le(uint8_t *P, int32_t V) { add32<support::little>(P, V); } +static void or32le(uint8_t *P, int32_t V) { write32le(P, read32le(P) | V); } namespace { class X86TargetInfo final : public TargetInfo { @@ -722,16 +713,16 @@ template <class ELFT> void MipsTargetInfo<ELFT>::relocateOne(uint8_t *Loc, uint8_t *BufEnd, uint32_t Type, uint64_t P, uint64_t SA) const { - const bool IsLE = ELFT::TargetEndianness == support::little; + const endianness E = ELFT::TargetEndianness; switch (Type) { case R_MIPS_32: - add32<IsLE>(Loc, SA); + add32<E>(Loc, SA); break; case R_MIPS_GOT16: { int64_t V = SA - getMipsGpAddr<ELFT>(); if (!isInt<16>(V)) error("Relocation R_MIPS_GOT16 out of range"); - write32<IsLE>(Loc, (read32<IsLE>(Loc) & 0xffff0000) | (V & 0xffff)); + write32<E>(Loc, (read32<E>(Loc) & 0xffff0000) | (V & 0xffff)); break; } default: |