http://llvm.org/bugs/show_bug.cgi?id=1237
authorNate Begeman <natebegeman@mac.com>
Sat, 3 Mar 2007 06:18:18 +0000 (06:18 +0000)
committerNate Begeman <natebegeman@mac.com>
Sat, 3 Mar 2007 06:18:18 +0000 (06:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34875 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MachOWriter.cpp

index 981113b19b044ad6bb23b87b1c53bcb0b6569061..0c0e03f4a51f1a658e44a6e78b7f70757917fd6b 100644 (file)
@@ -736,14 +736,14 @@ void MachOWriter::CalculateRelocations(MachOSection &MOS) {
   for (unsigned i = 0, e = MOS.Relocations.size(); i != e; ++i) {
     MachineRelocation &MR = MOS.Relocations[i];
     unsigned TargetSection = MR.getConstantVal();
-    unsigned TargetAddr;
-    unsigned TargetIndex;
+    unsigned TargetAddr = 0;
+    unsigned TargetIndex = 0;
 
     // This is a scattered relocation entry if it points to a global value with
     // a non-zero offset.
     bool Scattered = false;
     bool Extern = false;
-    
+
     // Since we may not have seen the GlobalValue we were interested in yet at
     // the time we emitted the relocation for it, fix it up now so that it
     // points to the offset into the correct section.
@@ -762,11 +762,16 @@ void MachOWriter::CalculateRelocations(MachOSection &MOS) {
       } else {
         Scattered = TargetSection != 0;
         TargetSection = MOSPtr->Index;
+      }
+      MR.setResultPointer((void*)Offset);
+    }
+    
+    // If the symbol is locally defined, pass in the address of the section and
+    // the section index to the code which will generate the target relocation.
+    if (!Extern) {
         MachOSection &To = *SectionList[TargetSection - 1];
         TargetAddr = To.addr;
         TargetIndex = To.Index;
-      }
-      MR.setResultPointer((void*)Offset);
     }
 
     OutputBuffer RelocOut(MOS.RelocBuffer, is64Bit, isLittleEndian);