diff options
author | Nate Begeman <natebegeman@mac.com> | 2007-03-03 06:18:18 +0000 |
---|---|---|
committer | Nate Begeman <natebegeman@mac.com> | 2007-03-03 06:18:18 +0000 |
commit | af8063886966fd1f59d170335902d6da4e3fe1aa (patch) | |
tree | d894ecb78dc0ea56fc78d5f3875932b21e00ef18 | |
parent | 93a2875456a61f072f74a2b6b5c37bc2463a43ca (diff) | |
download | external_llvm-af8063886966fd1f59d170335902d6da4e3fe1aa.zip external_llvm-af8063886966fd1f59d170335902d6da4e3fe1aa.tar.gz external_llvm-af8063886966fd1f59d170335902d6da4e3fe1aa.tar.bz2 |
http://llvm.org/bugs/show_bug.cgi?id=1237
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34875 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/MachOWriter.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/CodeGen/MachOWriter.cpp b/lib/CodeGen/MachOWriter.cpp index 981113b..0c0e03f 100644 --- a/lib/CodeGen/MachOWriter.cpp +++ b/lib/CodeGen/MachOWriter.cpp @@ -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); |