[llvm-commits] [llvm] r41838 - in /llvm/trunk: include/llvm/Target/TargetAsmInfo.h lib/CodeGen/DwarfWriter.cpp lib/Target/TargetAsmInfo.cpp lib/Target/X86/X86ATTAsmPrinter.cpp lib/Target/X86/X86AsmPrinter.cpp lib/Target/X86/X86AsmPrinter.h lib/Target/X86/X86TargetAsmInfo.cpp

Bill Wendling isanbard at gmail.com
Tue Sep 11 01:27:22 PDT 2007


Author: void
Date: Tue Sep 11 03:27:17 2007
New Revision: 41838

URL: http://llvm.org/viewvc/llvm-project?rev=41838&view=rev
Log:
The personality function on Darwin needs a global stub. We then refer to
that global stub instead of doing the ".set" thingy we were doing before.


Modified:
    llvm/trunk/include/llvm/Target/TargetAsmInfo.h
    llvm/trunk/lib/CodeGen/DwarfWriter.cpp
    llvm/trunk/lib/Target/TargetAsmInfo.cpp
    llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp
    llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp
    llvm/trunk/lib/Target/X86/X86AsmPrinter.h
    llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp

Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=41838&r1=41837&r2=41838&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
+++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Tue Sep 11 03:27:17 2007
@@ -110,6 +110,12 @@
     const char *FunctionAddrPrefix;       // Defaults to ""
     const char *FunctionAddrSuffix;       // Defaults to ""
 
+    /// PersonalityPrefix/Suffix - If these are nonempty, these strings will
+    /// enclose any personality function in the common frame section.
+    /// 
+    const char *PersonalityPrefix;        // Defaults to ""
+    const char *PersonalitySuffix;        // Defaults to ""
+
     /// InlineAsmStart/End - If these are nonempty, they contain a directive to
     /// emit before and after an inline assembly statement.
     const char *InlineAsmStart;           // Defaults to "#APP\n"
@@ -428,6 +434,12 @@
     const char *getFunctionAddrSuffix() const {
       return FunctionAddrSuffix;
     }
+    const char *getPersonalityPrefix() const {
+      return PersonalityPrefix;
+    }
+    const char *getPersonalitySuffix() const {
+      return PersonalitySuffix;
+    }
     const char *getInlineAsmStart() const {
       return InlineAsmStart;
     }

Modified: llvm/trunk/lib/CodeGen/DwarfWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/DwarfWriter.cpp?rev=41838&r1=41837&r2=41838&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/DwarfWriter.cpp (original)
+++ llvm/trunk/lib/CodeGen/DwarfWriter.cpp Tue Sep 11 03:27:17 2007
@@ -2789,26 +2789,15 @@
     if (Personality) {
       Asm->EmitULEB128Bytes(7);
       Asm->EOL("Augmentation Size");
-      Asm->EmitInt8(DW_EH_PE_pcrel | DW_EH_PE_sdata4);
-      Asm->EOL("Personality (pcrel sdata4)");
+      Asm->EmitInt8(DW_EH_PE_pcrel | DW_EH_PE_sdata4 | DW_EH_PE_indirect);
+      Asm->EOL("Personality (pcrel sdata4 indirect)");
       
-      if (TAI->needsSet()) {
-        O << "\t.set\t";
-        PrintLabelName("set", SetCounter);
-        O << ",";
-        Asm->EmitExternalGlobal((const GlobalVariable *)(Personality));
-        O << "-" << TAI->getPCSymbol();
-        Asm->EOL("Set Personality");
-        PrintRelDirective();
-        PrintLabelName("set", SetCounter);
-        Asm->EOL("Personality");
-        ++SetCounter;
-      } else {
-        PrintRelDirective();
-        Asm->EmitExternalGlobal((const GlobalVariable *)(Personality));
-        O << "-" << TAI->getPCSymbol();
-        Asm->EOL("Personality");
-      }
+      PrintRelDirective();
+      O << TAI->getPersonalityPrefix();
+      Asm->EmitExternalGlobal((const GlobalVariable *)(Personality));
+      O << TAI->getPersonalitySuffix();
+      O << "-" << TAI->getPCSymbol();
+      Asm->EOL("Personality");
 
       Asm->EmitULEB128Bytes(DW_EH_PE_pcrel);
       Asm->EOL("LSDA Encoding (pcrel)");
@@ -3297,7 +3286,7 @@
     const std::vector<Function *> Personalities = MMI->getPersonalities();
     for (unsigned i =0; i < Personalities.size(); ++i)
       EmitCommonEHFrame(Personalities[i], i);
-    
+
     for (std::vector<FunctionEHFrameInfo>::iterator I = EHFrames.begin(),
            E = EHFrames.end(); I != E; ++I)
       EmitEHFrame(*I);

Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=41838&r1=41837&r2=41838&view=diff

==============================================================================
--- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Tue Sep 11 03:27:17 2007
@@ -38,6 +38,8 @@
   GlobalVarAddrSuffix(""),
   FunctionAddrPrefix(""),
   FunctionAddrSuffix(""),
+  PersonalityPrefix(""),
+  PersonalitySuffix(""),
   InlineAsmStart("#APP"),
   InlineAsmEnd("#NO_APP"),
   AssemblerDialect(0),

Modified: llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp?rev=41838&r1=41837&r2=41838&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ATTAsmPrinter.cpp Tue Sep 11 03:27:17 2007
@@ -74,7 +74,8 @@
   if (TAI->doesSupportDebugInformation()) {
     // Let PassManager know we need debug information and relay
     // the MachineModuleInfo address on to DwarfWriter.
-    DW.SetModuleInfo(&getAnalysis<MachineModuleInfo>());
+    MMI = &getAnalysis<MachineModuleInfo>();
+    DW.SetModuleInfo(MMI);
   }
 
   SetupMachineFunction(MF);

Modified: llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp?rev=41838&r1=41837&r2=41838&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86AsmPrinter.cpp Tue Sep 11 03:27:17 2007
@@ -352,6 +352,15 @@
 
     O << "\n";
 
+    if (MMI) {
+      // Add the (possibly multiple) personalities to the set of global values.
+      const std::vector<Function *>& Personalities = MMI->getPersonalities();
+
+      for (std::vector<Function *>::const_iterator I = Personalities.begin(),
+             E = Personalities.end(); I != E; ++I)
+        if (*I) GVStubs.insert("_" + (*I)->getName());
+    }
+
     // Output stubs for external and common global variables.
     if (GVStubs.begin() != GVStubs.end())
       SwitchToDataSection(

Modified: llvm/trunk/lib/Target/X86/X86AsmPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86AsmPrinter.h?rev=41838&r1=41837&r2=41838&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86AsmPrinter.h (original)
+++ llvm/trunk/lib/Target/X86/X86AsmPrinter.h Tue Sep 11 03:27:17 2007
@@ -30,10 +30,11 @@
 
 struct VISIBILITY_HIDDEN X86SharedAsmPrinter : public AsmPrinter {
   DwarfWriter DW;
+  MachineModuleInfo *MMI;
 
   X86SharedAsmPrinter(std::ostream &O, X86TargetMachine &TM,
                       const TargetAsmInfo *T)
-    : AsmPrinter(O, TM, T), DW(O, this, T) {
+    : AsmPrinter(O, TM, T), DW(O, this, T), MMI(0) {
     Subtarget = &TM.getSubtarget<X86Subtarget>();
   }
 

Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=41838&r1=41837&r2=41838&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Tue Sep 11 03:27:17 2007
@@ -68,6 +68,8 @@
       StaticCtorsSection = ".mod_init_func";
       StaticDtorsSection = ".mod_term_func";
     }
+    PersonalityPrefix = "L";
+    PersonalitySuffix = "$non_lazy_ptr";
     InlineAsmStart = "# InlineAsm Start";
     InlineAsmEnd = "# InlineAsm End";
     SetDirective = "\t.set";





More information about the llvm-commits mailing list