[PATCH] D42421: [LLD][ELF] Make --fix-cortex-a53-843419 work on big endian hosts
Peter Smith via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 23 08:28:50 PST 2018
peter.smith updated this revision to Diff 131082.
peter.smith added a comment.
>> + const ulittle32_t *InstBuf = reinterpret_cast<const ulittle32_t *>(Buf + Off);
>
> This is OK.
>
>> + ulittle32_t Instr1 = *InstBuf++;
>> + ulittle32_t Instr2 = *InstBuf++;
>> + ulittle32_t Instr3 = *InstBuf++;
>
> But the values should still be uint32_t. The endian.h types should only
> ever be used to form pointers.
>
> Cheers,
> Rafael
Thanks for pointing that out. I've updated the diff accordingly.
https://reviews.llvm.org/D42421
Files:
ELF/AArch64ErrataFix.cpp
Index: ELF/AArch64ErrataFix.cpp
===================================================================
--- ELF/AArch64ErrataFix.cpp
+++ ELF/AArch64ErrataFix.cpp
@@ -47,6 +47,7 @@
using namespace llvm;
using namespace llvm::ELF;
using namespace llvm::object;
+using namespace llvm::support;
using namespace llvm::support::endian;
using namespace lld;
@@ -357,14 +358,14 @@
uint64_t PatchOff = 0;
const uint8_t *Buf = IS->Data.begin();
- const uint32_t *InstBuf = reinterpret_cast<const uint32_t *>(Buf + Off);
+ const ulittle32_t *InstBuf = reinterpret_cast<const ulittle32_t *>(Buf + Off);
uint32_t Instr1 = *InstBuf++;
uint32_t Instr2 = *InstBuf++;
uint32_t Instr3 = *InstBuf++;
if (is843419ErratumSequence(Instr1, Instr2, Instr3)) {
PatchOff = Off + 8;
} else if (OptionalAllowed && !isBranch(Instr3)) {
- uint32_t Instr4 = *InstBuf++;
+ ulittle32_t Instr4 = *InstBuf++;
if (is843419ErratumSequence(Instr1, Instr2, Instr4))
PatchOff = Off + 12;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42421.131082.patch
Type: text/x-patch
Size: 1004 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180123/14842d24/attachment.bin>
More information about the llvm-commits
mailing list