aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNate Begeman <natebegeman@mac.com>2007-03-03 06:18:18 +0000
committerNate Begeman <natebegeman@mac.com>2007-03-03 06:18:18 +0000
commitaf8063886966fd1f59d170335902d6da4e3fe1aa (patch)
treed894ecb78dc0ea56fc78d5f3875932b21e00ef18
parent93a2875456a61f072f74a2b6b5c37bc2463a43ca (diff)
downloadexternal_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.cpp15
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);