summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp
diff options
context:
space:
mode:
authorDaniel Sanders <daniel.sanders@imgtec.com>2016-05-06 14:37:24 +0000
committerDaniel Sanders <daniel.sanders@imgtec.com>2016-05-06 14:37:24 +0000
commit8de3d3cad6d17a0118584ddceaad587c77f869d8 (patch)
tree38a2bafb823759476aaac9de55f6b836752ebfe8 /llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp
parent2801d32c0740eefaa6ba71a0ab4de16e192c5cdb (diff)
downloadbcm5719-llvm-8de3d3cad6d17a0118584ddceaad587c77f869d8.tar.gz
bcm5719-llvm-8de3d3cad6d17a0118584ddceaad587c77f869d8.zip
[mips] Fix inconsistent .cprestore behaviour between direct object emission and assembling.
Summary: Direct object emission has an initialization order problem where an InitMCObjectFile is called after MipsTargetELFStreamer determines whether PIC is enabled by default or not. There doesn't seem to be point that initializes all cases so split the responsibility between MipsTargetELFStreamer and MipsAsmPrinter. Reviewers: sdardis Subscribers: dsanders, llvm-commits, sdardis Differential Revision: http://reviews.llvm.org/D19728 llvm-svn: 268737
Diffstat (limited to 'llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp')
-rw-r--r--llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp
index 58c1f0ee4ee..23c46351b82 100644
--- a/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp
+++ b/llvm/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp
@@ -652,6 +652,14 @@ MipsTargetELFStreamer::MipsTargetELFStreamer(MCStreamer &S,
const MCSubtargetInfo &STI)
: MipsTargetStreamer(S), MicroMipsEnabled(false), STI(STI) {
MCAssembler &MCA = getStreamer().getAssembler();
+
+ // It's possible that MCObjectFileInfo isn't fully initialized at this point
+ // due to an initialization order problem where LLVMTargetMachine creates the
+ // target streamer before TargetLoweringObjectFile calls
+ // InitializeMCObjectFileInfo. There doesn't seem to be a single place that
+ // covers all cases so this statement covers most cases and direct object
+ // emission must call setPic() once MCObjectFileInfo has been initialized. The
+ // cases we don't handle here are covered by MipsAsmPrinter.
Pic = MCA.getContext().getObjectFileInfo()->getRelocM() == Reloc::PIC_;
const FeatureBitset &Features = STI.getFeatureBits();
OpenPOWER on IntegriCloud