Change CurrentFnSym to be a non-const pointer since asmprinter mutates it
authorChris Lattner <sabre@nondot.org>
Mon, 18 Jan 2010 00:59:24 +0000 (00:59 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 18 Jan 2010 00:59:24 +0000 (00:59 +0000)
as it emits code.  Switch .globl directives to use OutStreamer instead of
doing it textually (in x86)

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

include/llvm/CodeGen/AsmPrinter.h
lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
lib/Target/X86/X86COFFMachineModuleInfo.cpp
lib/Target/X86/X86COFFMachineModuleInfo.h

index f327785c7cc33c4cb27748d3af1ccd2f56db7fd6..0f27940096940e8f886f2f47a1ea455611ca2877 100644 (file)
@@ -136,7 +136,7 @@ namespace llvm {
     /// The symbol for the current function. This is recalculated at the
     /// beginning of each call to runOnMachineFunction().
     ///
-    const MCSymbol *CurrentFnSym;
+    MCSymbol *CurrentFnSym;
     
     /// getCurrentSection() - Return the current section we are emitting to.
     const MCSection *getCurrentSection() const;
index 9409c0db227fcab80d632868d5664c77ea8461ce..10d2e3039a6dd7c5f6c5c58f3d01b3a178c36c51 100644 (file)
@@ -84,7 +84,7 @@ void X86AsmPrinter::emitFunctionHeader(const MachineFunction &MF) {
     break;
   case Function::DLLExportLinkage:
   case Function::ExternalLinkage:
-    O << "\t.globl\t" << *CurrentFnSym << '\n';
+    OutStreamer.EmitSymbolAttribute(CurrentFnSym, MCStreamer::Global);
     break;
   case Function::LinkerPrivateLinkage:
   case Function::LinkOnceAnyLinkage:
@@ -92,11 +92,11 @@ void X86AsmPrinter::emitFunctionHeader(const MachineFunction &MF) {
   case Function::WeakAnyLinkage:
   case Function::WeakODRLinkage:
     if (Subtarget->isTargetDarwin()) {
-      O << "\t.globl\t" << *CurrentFnSym << '\n';
+      OutStreamer.EmitSymbolAttribute(CurrentFnSym, MCStreamer::Global);
       O << MAI->getWeakDefDirective() << *CurrentFnSym << '\n';
     } else if (Subtarget->isTargetCygMing()) {
-      O << "\t.globl\t" << *CurrentFnSym;
-      O << "\n\t.linkonce discard\n";
+      OutStreamer.EmitSymbolAttribute(CurrentFnSym, MCStreamer::Global);
+      O << "\t.linkonce discard\n";
     } else {
       O << "\t.weak\t" << *CurrentFnSym << '\n';
     }
@@ -215,7 +215,7 @@ void X86AsmPrinter::printSymbolOperand(const MachineOperand &MO) {
   case MachineOperand::MO_GlobalAddress: {
     const GlobalValue *GV = MO.getGlobal();
     
-    const MCSymbol *GVSym;
+    MCSymbol *GVSym;
     if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB)
       GVSym = GetSymbolWithGlobalValueBase(GV, "$stub");
     else if (MO.getTargetFlags() == X86II::MO_DARWIN_NONLAZY ||
@@ -351,7 +351,7 @@ void X86AsmPrinter::print_pcrel_imm(const MachineInstr *MI, unsigned OpNo) {
 
 
 void X86AsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
-                                    const char *Modifier) {
+                                 const char *Modifier) {
   const MachineOperand &MO = MI->getOperand(OpNo);
   switch (MO.getType()) {
   default: llvm_unreachable("unknown operand type!");
@@ -686,7 +686,7 @@ void X86AsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
       !TheSection->getKind().isMergeableCString()) {
     if (GVar->hasExternalLinkage()) {
       if (const char *Directive = MAI->getZeroFillDirective()) {
-        O << "\t.globl " << *GVSym << '\n';
+        OutStreamer.EmitSymbolAttribute(GVSym, MCStreamer::Global);
         O << Directive << "__DATA, __common, " << *GVSym;
         O << ", " << Size << ", " << Align << '\n';
         return;
@@ -703,7 +703,7 @@ void X86AsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
           if (Subtarget->isTargetDarwin())
             O << ',' << Align;
         } else if (Subtarget->isTargetDarwin() && !GVar->hasCommonLinkage()) {
-          O << "\t.globl " << *GVSym << '\n';
+          OutStreamer.EmitSymbolAttribute(GVSym, MCStreamer::Global);
           O << MAI->getWeakDefDirective() << *GVSym << '\n';
           EmitAlignment(Align, GVar);
           O << *GVSym << ":";
@@ -747,11 +747,11 @@ void X86AsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
   case GlobalValue::WeakODRLinkage:
   case GlobalValue::LinkerPrivateLinkage:
     if (Subtarget->isTargetDarwin()) {
-      O << "\t.globl " << *GVSym << '\n';
+      OutStreamer.EmitSymbolAttribute(GVSym, MCStreamer::Global);
       O << MAI->getWeakDefDirective() << *GVSym << '\n';
     } else if (Subtarget->isTargetCygMing()) {
-      O << "\t.globl\t" << *GVSym;
-      O << "\n\t.linkonce same_size\n";
+      OutStreamer.EmitSymbolAttribute(GVSym, MCStreamer::Global);
+      O << "\t.linkonce same_size\n";
     } else
       O << "\t.weak\t" << *GVSym << '\n';
     break;
@@ -761,8 +761,8 @@ void X86AsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
     // their name or something.  For now, just emit them as external.
   case GlobalValue::ExternalLinkage:
     // If external or appending, declare as a global symbol
-    O << "\t.globl " << *GVSym << '\n';
-    // FALL THROUGH
+    OutStreamer.EmitSymbolAttribute(GVSym, MCStreamer::Global);
+    break;
   case GlobalValue::PrivateLinkage:
   case GlobalValue::InternalLinkage:
      break;
@@ -876,7 +876,7 @@ void X86AsmPrinter::EmitEndOfAsmFile(Module &M) {
 
       for (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I)
         if (I->hasDLLExportLinkage()) {
-          const MCSymbol *Sym = GetGlobalValueSymbol(I);
+          MCSymbol *Sym = GetGlobalValueSymbol(I);
           COFFMMI.DecorateCygMingName(Sym, OutContext, I, *TM.getTargetData());
           DLLExportedFns.push_back(Sym);
         }
index 07a1b38169886fc6de1214d9b6d882c2d7f189ae..ea527955e37af4db569e2fa1b7c539554590c2af 100644 (file)
@@ -115,7 +115,7 @@ void X86COFFMachineModuleInfo::DecorateCygMingName(SmallVectorImpl<char> &Name,
 
 /// DecorateCygMingName - Query FunctionInfoMap and use this information for
 /// various name decorations for Cygwin and MingW.
-void X86COFFMachineModuleInfo::DecorateCygMingName(const MCSymbol *&Name,
+void X86COFFMachineModuleInfo::DecorateCygMingName(MCSymbol *&Name,
                                                    MCContext &Ctx,
                                                    const GlobalValue *GV,
                                                    const TargetData &TD) {
index 2a9e61c2ebf254766484706b9399aff179a3b544..0e2009e003d3ee7f1ba79573415b06ae0a8f6826 100644 (file)
@@ -46,7 +46,7 @@ public:
   ~X86COFFMachineModuleInfo();
   
   
-  void DecorateCygMingName(const MCSymbol* &Name, MCContext &Ctx,
+  void DecorateCygMingName(MCSymbol* &Name, MCContext &Ctx,
                            const GlobalValue *GV, const TargetData &TD);
   void DecorateCygMingName(SmallVectorImpl<char> &Name, const GlobalValue *GV,
                            const TargetData &TD);