[llvm-commits] [llvm] r133296 - /llvm/trunk/lib/MC/MCAsmStreamer.cpp

Bill Wendling isanbard at gmail.com
Fri Jun 17 14:29:06 PDT 2011


Author: void
Date: Fri Jun 17 16:29:06 2011
New Revision: 133296

URL: http://llvm.org/viewvc/llvm-project?rev=133296&view=rev
Log:
SjLj exception handling LSDA decoding support wasn't represented correctly. Use
the correct values, etc. In particular, the exception handling type is SjLj, not
ARM.

Modified:
    llvm/trunk/lib/MC/MCAsmStreamer.cpp

Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=133296&r1=133295&r2=133296&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Fri Jun 17 16:29:06 2011
@@ -1482,7 +1482,7 @@
   CMT << "@CallSite Encoding: " << DecodeDWARFEncoding(LSDAEncoding[4]) << "\n";
   CMT << "@Action Table Size: " << LSDAEncoding[5] << " bytes\n\n";
 
-  bool isSjLjEH = (MAI.getExceptionHandlingType() == ExceptionHandling::ARM);
+  bool isSjLjEH = (MAI.getExceptionHandlingType() == ExceptionHandling::SjLj);
 
   int64_t CallSiteTableSize = LSDAEncoding[5];
   unsigned CallSiteEntrySize;
@@ -1493,14 +1493,13 @@
                         1;  // TType index.
   else
     CallSiteEntrySize = 1 + // Call index.
-                        1 + // Landing pad.
                         1;  // TType index.
 
   unsigned NumEntries = CallSiteTableSize / CallSiteEntrySize;
   assert(CallSiteTableSize % CallSiteEntrySize == 0 &&
          "The action table size is not a multiple of what it should be!");
   unsigned TTypeIdx = 5 +              // Action table size index.
-     (isSjLjEH ? 3 : 4) * NumEntries + // Action table entries.
+     (isSjLjEH ? 2 : 4) * NumEntries + // Action table entries.
                       1;               // Just because.
 
   // Emit the action table.
@@ -1518,20 +1517,20 @@
       // The end of the throwing region.
       Idx = LSDAEncoding[I++];
       OS << *cast<MCBinaryExpr>(Assignments[Idx - 1])->getLHS();
-    } else {
-      CMT << "  A throw from call " << *Assignments[Idx - 1];
-    }
 
-    // The landing pad.
-    Idx = LSDAEncoding[I++];
-    if (Idx) {
-      OS << " jumps to "
-         << *cast<MCBinaryExpr>(Assignments[Idx - 1])->getLHS()
-         << " on an exception.\n";
+      // The landing pad.
+      Idx = LSDAEncoding[I++];
+      if (Idx) {
+        OS << " jumps to "
+           << *cast<MCBinaryExpr>(Assignments[Idx - 1])->getLHS()
+           << " on an exception.\n";
+      } else {
+        OS << " does not have a landing pad.\n";
+        ++I;
+        continue;
+      }
     } else {
-      OS << " does not have a landing pad.\n";
-      ++I;
-      continue;
+      CMT << "  A throw from call " << Idx << "\n";
     }
 
     // The index into the action table.
@@ -1606,11 +1605,10 @@
                                     bool useCFI, MCInstPrinter *IP,
                                     MCCodeEmitter *CE, TargetAsmBackend *TAB,
                                     bool ShowInst) {
-#if 0
   if (isVerboseAsm)
     return new MCLSDADecoderAsmStreamer(Context, OS, isVerboseAsm, useLoc,
                                         useCFI, IP, CE, TAB, ShowInst);
-#endif
+
   return new MCAsmStreamer(Context, OS, isVerboseAsm, useLoc, useCFI,
                            IP, CE, TAB, ShowInst);
 }





More information about the llvm-commits mailing list