summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2014-09-11 23:19:52 +0000
committerRui Ueyama <ruiu@google.com>2014-09-11 23:19:52 +0000
commit75f1fd334c5eebae678a6f0a0bdef88c639455c7 (patch)
tree6ab000fb254e12c8d9bb8476f6417d595233d7f6
parent13460a59fd354beff0aee560bb465654851cbe17 (diff)
downloadbcm5719-llvm-75f1fd334c5eebae678a6f0a0bdef88c639455c7.tar.gz
bcm5719-llvm-75f1fd334c5eebae678a6f0a0bdef88c639455c7.zip
[PECOFF] Do r217639 leftover.
llvm-svn: 217645
-rw-r--r--lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
index bcc93e3e799..c3f0a71b1e9 100644
--- a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
+++ b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
@@ -518,34 +518,34 @@ void AtomChunk::applyRelocations32(uint8_t *buffer,
uint64_t targetAddr = atomRva[ref->target()];
// Also account for whatever offset is already stored at the relocation
// site.
- targetAddr += *relocSite32;
switch (ref->kindValue()) {
case llvm::COFF::IMAGE_REL_I386_ABSOLUTE:
// This relocation is no-op.
break;
case llvm::COFF::IMAGE_REL_I386_DIR32:
// Set target's 32-bit VA.
- *relocSite32 = targetAddr + imageBaseAddress;
+ *relocSite32 += targetAddr + imageBaseAddress;
break;
case llvm::COFF::IMAGE_REL_I386_DIR32NB:
// Set target's 32-bit RVA.
- *relocSite32 = targetAddr;
+ *relocSite32 += targetAddr;
break;
case llvm::COFF::IMAGE_REL_I386_REL32: {
// Set 32-bit relative address of the target. This relocation is
// usually used for relative branch or call instruction.
uint32_t disp = atomRva[atom] + ref->offsetInAtom() + 4;
- *relocSite32 = targetAddr - disp;
+ *relocSite32 += targetAddr - disp;
break;
}
case llvm::COFF::IMAGE_REL_I386_SECTION:
// The 16-bit section index that contains the target symbol.
- *relocSite16 = getSectionIndex(targetAddr, sectionRva);
+ *relocSite16 += getSectionIndex(targetAddr, sectionRva);
break;
case llvm::COFF::IMAGE_REL_I386_SECREL:
// The 32-bit relative address from the beginning of the section that
// contains the target symbol.
- *relocSite32 = targetAddr - getSectionStartAddr(targetAddr, sectionRva);
+ *relocSite32 +=
+ targetAddr - getSectionStartAddr(targetAddr, sectionRva);
break;
default:
llvm_unreachable("Unsupported relocation kind");
@@ -573,13 +573,13 @@ void AtomChunk::applyRelocations64(uint8_t *buffer,
switch (ref->kindValue()) {
case llvm::COFF::IMAGE_REL_AMD64_ADDR64:
- *relocSite64 = *relocSite64 + targetAddr + imageBase;
+ *relocSite64 += targetAddr + imageBase;
break;
case llvm::COFF::IMAGE_REL_AMD64_ADDR32:
- *relocSite32 = *relocSite32 + targetAddr + imageBase;
+ *relocSite32 += targetAddr + imageBase;
break;
case llvm::COFF::IMAGE_REL_AMD64_ADDR32NB:
- *relocSite32 = *relocSite32 + targetAddr;
+ *relocSite32 += targetAddr;
break;
case llvm::COFF::IMAGE_REL_AMD64_REL32:
*relocSite32 += targetAddr - atomRva[atom] - ref->offsetInAtom() - 4;
OpenPOWER on IntegriCloud