[llvm-commits] [llvm] r98370 - in /llvm/trunk/lib/Target/X86: AsmPrinter/X86AsmPrinter.cpp X86ISelLowering.cpp

Bill Wendling isanbard at gmail.com
Fri Mar 12 11:20:40 PST 2010


Author: void
Date: Fri Mar 12 13:20:40 2010
New Revision: 98370

URL: http://llvm.org/viewvc/llvm-project?rev=98370&view=rev
Log:
Add a beta-test for placing the LSDA into the TEXT section on X86.

Modified:
    llvm/trunk/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp

Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp?rev=98370&r1=98369&r2=98370&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp Fri Mar 12 13:20:40 2010
@@ -523,10 +523,18 @@
         // L_foo$non_lazy_ptr:
         OutStreamer.EmitLabel(Stubs[i].first);
         // .indirect_symbol _foo
-        OutStreamer.EmitSymbolAttribute(Stubs[i].second.getPointer(),
+        MachineModuleInfoImpl::StubValueTy &MCSym = Stubs[i].second;
+        OutStreamer.EmitSymbolAttribute(MCSym.getPointer(),
                                         MCSA_IndirectSymbol);
         // .long 0
-        OutStreamer.EmitIntValue(0, 4/*size*/, 0/*addrspace*/);
+        if (MCSym.getInt())
+          // External to current translation unit.
+          OutStreamer.EmitIntValue(0, 4/*size*/, 0/*addrspace*/);
+        else
+          // Internal to current translation unit.
+          OutStreamer.EmitValue(MCSymbolRefExpr::Create(MCSym.getPointer(),
+                                                        OutContext),
+                                4/*size*/, 0/*addrspace*/);
       }
       Stubs.clear();
       OutStreamer.AddBlankLine();

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=98370&r1=98369&r2=98370&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Fri Mar 12 13:20:40 2010
@@ -37,6 +37,7 @@
 #include "llvm/CodeGen/PseudoSourceValue.h"
 #include "llvm/MC/MCAsmInfo.h"
 #include "llvm/MC/MCContext.h"
+#include "llvm/MC/MCSectionMachO.h"
 #include "llvm/MC/MCSymbol.h"
 #include "llvm/ADT/BitVector.h"
 #include "llvm/ADT/SmallSet.h"
@@ -45,10 +46,12 @@
 #include "llvm/ADT/VectorExtras.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Debug.h"
+#include "llvm/Support/Dwarf.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/MathExtras.h"
 #include "llvm/Support/raw_ostream.h"
 using namespace llvm;
+using namespace dwarf;
 
 STATISTIC(NumTailCalls, "Number of tail calls");
 
@@ -67,10 +70,54 @@
 static SDValue getMOVL(SelectionDAG &DAG, DebugLoc dl, EVT VT, SDValue V1,
                        SDValue V2);
 
+// FIXME: This is for a test.
+static cl::opt<bool>
+EnableX86EHTest("enable-x86-eh-test", cl::Hidden);
+
+namespace llvm {
+  class X86_test_MachoTargetObjectFile : public TargetLoweringObjectFileMachO {
+  public:
+    virtual void Initialize(MCContext &Ctx, const TargetMachine &TM) {
+      TargetLoweringObjectFileMachO::Initialize(Ctx, TM);
+
+      // Exception Handling.
+      LSDASection = getMachOSection("__TEXT", "__gcc_except_tab", 0,
+                                    SectionKind::getReadOnlyWithRel());
+    }
+
+    virtual unsigned getTTypeEncoding() const {
+      return DW_EH_PE_indirect | DW_EH_PE_pcrel | DW_EH_PE_sdata4;
+    }
+  };
+
+  class X8664_test_MachoTargetObjectFile : public X8664_MachoTargetObjectFile {
+  public:
+    virtual void Initialize(MCContext &Ctx, const TargetMachine &TM) {
+      TargetLoweringObjectFileMachO::Initialize(Ctx, TM);
+
+      // Exception Handling.
+      LSDASection = getMachOSection("__TEXT", "__gcc_except_tab", 0,
+                                    SectionKind::getReadOnlyWithRel());
+    }
+
+    virtual unsigned getTTypeEncoding() const {
+      return DW_EH_PE_indirect | DW_EH_PE_pcrel | DW_EH_PE_sdata4;
+    }
+  };
+}
+
 static TargetLoweringObjectFile *createTLOF(X86TargetMachine &TM) {
   switch (TM.getSubtarget<X86Subtarget>().TargetType) {
   default: llvm_unreachable("unknown subtarget type");
   case X86Subtarget::isDarwin:
+    // FIXME: This is for an EH test.
+    if (EnableX86EHTest) {
+      if (TM.getSubtarget<X86Subtarget>().is64Bit())
+        return new X8664_test_MachoTargetObjectFile();
+      else
+        return new X86_test_MachoTargetObjectFile();
+    }
+
     if (TM.getSubtarget<X86Subtarget>().is64Bit())
       return new X8664_MachoTargetObjectFile();
     return new TargetLoweringObjectFileMachO();





More information about the llvm-commits mailing list