Make debug info come out in data-only files.
authorDale Johannesen <dalej@apple.com>
Tue, 8 Jul 2008 21:56:22 +0000 (21:56 +0000)
committerDale Johannesen <dalej@apple.com>
Tue, 8 Jul 2008 21:56:22 +0000 (21:56 +0000)
This is a question of the debugging setup code not
being called at the right time, and it's called from
target-dependent code for some reason.  I have only
attempted to fix Darwin, but I'm pretty sure it's
broken elsewhere; I'll leave that to people who can
test it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53254 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMAsmPrinter.cpp
lib/Target/PowerPC/PPCAsmPrinter.cpp
lib/Target/X86/X86ATTAsmPrinter.cpp

index 23e5e37cf067a9acb7c79285146ebfc1a636580e..25b42c5db8ff32e672f800da7c8c9ac6cb2a8050 100644 (file)
@@ -42,11 +42,13 @@ STATISTIC(EmittedInsts, "Number of machine instrs printed");
 namespace {
   struct VISIBILITY_HIDDEN ARMAsmPrinter : public AsmPrinter {
     ARMAsmPrinter(std::ostream &O, TargetMachine &TM, const TargetAsmInfo *T)
-      : AsmPrinter(O, TM, T), DW(O, this, T), AFI(NULL), InCPMode(false) {
+      : AsmPrinter(O, TM, T), DW(O, this, T), MMI(0), AFI(NULL), 
+        InCPMode(false) {
       Subtarget = &TM.getSubtarget<ARMSubtarget>();
     }
 
     DwarfWriter DW;
+    MachineModuleInfo *MMI;
 
     /// Subtarget - Keep a pointer to the ARMSubtarget around so that we can
     /// make the right decision when printing asm code for different targets.
@@ -176,8 +178,6 @@ FunctionPass *llvm::createARMCodePrinterPass(std::ostream &o,
 bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
   AFI = MF.getInfo<ARMFunctionInfo>();
 
-  DW.SetModuleInfo(&getAnalysis<MachineModuleInfo>());
-
   SetupMachineFunction(MF);
   O << "\n";
 
@@ -800,6 +800,11 @@ bool ARMAsmPrinter::doInitialization(Module &M) {
   
   bool Result = AsmPrinter::doInitialization(M);
 
+  // AsmPrinter::doInitialization should have done this analysis.
+  MMI = getAnalysisToUpdate<MachineModuleInfo>();
+  assert(MMI);
+  DW.SetModuleInfo(MMI);
+
   // Darwin wants symbols to be quoted if they have complex names.
   if (Subtarget->isTargetDarwin())
     Mang->setUseQuotes(true);
index 9c9dd391be797af3eed892ada1f52e484bf124e7..ae967a8d00fd7d1ac85d25ad7d52fb1aef7ef379 100644 (file)
@@ -790,9 +790,6 @@ std::string DarwinAsmPrinter::getSectionForFunction(const Function &F) const {
 /// method to print assembly for each instruction.
 ///
 bool DarwinAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
-  // We need this for Personality functions.
-  MMI = &getAnalysis<MachineModuleInfo>();
-  DW.SetModuleInfo(MMI);
 
   SetupMachineFunction(MF);
   O << "\n\n";
@@ -887,6 +884,12 @@ bool DarwinAsmPrinter::doInitialization(Module &M) {
      
   bool Result = AsmPrinter::doInitialization(M);
   
+  // We need this for Personality functions.
+  // AsmPrinter::doInitialization should have done this analysis.
+  MMI = getAnalysisToUpdate<MachineModuleInfo>();
+  assert(MMI);
+  DW.SetModuleInfo(MMI);
+
   // Darwin wants symbols to be quoted if they have complex names.
   Mang->setUseQuotes(true);
   
index a61bb2261d613611bab267a06bf74435b17a7c83..4e1c1dfde1d105436e67ffb3e630c546e29a1cfa 100644 (file)
@@ -232,13 +232,6 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
   const Function *F = MF.getFunction();
   unsigned CC = F->getCallingConv();
 
-  if (TAI->doesSupportDebugInformation()) {
-    // Let PassManager know we need debug information and relay
-    // the MachineModuleInfo address on to DwarfWriter.
-    MMI = &getAnalysis<MachineModuleInfo>();
-    DW.SetModuleInfo(MMI);
-  }
-
   SetupMachineFunction(MF);
   O << "\n\n";
 
@@ -751,13 +744,20 @@ void X86ATTAsmPrinter::printMachineInstruction(const MachineInstr *MI) {
 
 /// doInitialization
 bool X86ATTAsmPrinter::doInitialization(Module &M) {
+
+  bool Result = AsmPrinter::doInitialization(M);
+
   if (TAI->doesSupportDebugInformation()) {
     // Emit initial debug information.
     DW.BeginModule(&M);
+    // Let PassManager know we need debug information and relay
+    // the MachineModuleInfo address on to DwarfWriter.
+    // AsmPrinter::doInitialization should have done this analysis.
+    MMI = getAnalysisToUpdate<MachineModuleInfo>();
+    assert(MMI);
+    DW.SetModuleInfo(MMI);
   }
 
-  bool Result = AsmPrinter::doInitialization(M);
-
   // Darwin wants symbols to be quoted if they have complex names.
   if (Subtarget->isTargetDarwin())
     Mang->setUseQuotes(true);