[lld] r217645 - [PECOFF] Do r217639 leftover.

Rui Ueyama ruiu at google.com
Thu Sep 11 16:19:52 PDT 2014


Author: ruiu
Date: Thu Sep 11 18:19:52 2014
New Revision: 217645

URL: http://llvm.org/viewvc/llvm-project?rev=217645&view=rev
Log:
[PECOFF] Do r217639 leftover.

Modified:
    lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp

Modified: lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp?rev=217645&r1=217644&r2=217645&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp Thu Sep 11 18:19:52 2014
@@ -518,34 +518,34 @@ void AtomChunk::applyRelocations32(uint8
       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
 
       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;





More information about the llvm-commits mailing list