summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShankar Easwaran <shankare@codeaurora.org>2012-12-27 01:04:00 +0000
committerShankar Easwaran <shankare@codeaurora.org>2012-12-27 01:04:00 +0000
commitb3cb257b8b0e9d85bd3315e635c51b0bbde6117e (patch)
treebde57ff9607634ac03a65cec8b40493921c5d5ae
parent5350cd314bf775e3aca4342fb10b1ddc93a2f72e (diff)
downloadbcm5719-llvm-b3cb257b8b0e9d85bd3315e635c51b0bbde6117e.tar.gz
bcm5719-llvm-b3cb257b8b0e9d85bd3315e635c51b0bbde6117e.zip
changes to fix Hexagon Relocation so that it accounts for the bitmask properly as documented in the ABI
llvm-svn: 171125
-rw-r--r--lld/lib/ReaderWriter/ELF/HexagonReference.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/lld/lib/ReaderWriter/ELF/HexagonReference.cpp b/lld/lib/ReaderWriter/ELF/HexagonReference.cpp
index 9883203da26..7f14b87d871 100644
--- a/lld/lib/ReaderWriter/ELF/HexagonReference.cpp
+++ b/lld/lib/ReaderWriter/ELF/HexagonReference.cpp
@@ -67,7 +67,7 @@ int relocB15PCREL(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
/// \brief Word32_LO: 0x00c03fff : (S + A) : Truncate
int relocLO16(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
uint32_t result = (uint32_t)(S + A);
- result = ((result & 0x3fff) | ((result << 2) & 0x00c00000));
+ result = ((result & 0x3fff) | ((result << 8) & 0x00c00000));
*reinterpret_cast<llvm::support::ulittle32_t *>(location) = result |
(uint32_t)*reinterpret_cast<llvm::support::ulittle32_t *>(location);
return HexagonKindHandler::NoError;
@@ -76,7 +76,7 @@ int relocLO16(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
/// \brief Word32_LO: 0x00c03fff : (S + A) >> 16 : Truncate
int relocHI16(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
uint32_t result = (uint32_t)((S + A)>>16);
- result = ((result & 0x3fff) | ((result << 2) & 0x00c00000));
+ result = ((result & 0x3fff) | ((result << 8) & 0x00c00000));
*reinterpret_cast<llvm::support::ulittle32_t *>(location) = result |
(uint32_t)*reinterpret_cast<llvm::support::ulittle32_t *>(location);
return HexagonKindHandler::NoError;
OpenPOWER on IntegriCloud