We don't want to use relocations inside the compact unwind section. Just use the
authorBill Wendling <isanbard@gmail.com>
Wed, 29 Jun 2011 23:49:12 +0000 (23:49 +0000)
committerBill Wendling <isanbard@gmail.com>
Wed, 29 Jun 2011 23:49:12 +0000 (23:49 +0000)
symbols instead.

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

lib/MC/MCDwarf.cpp

index d232d84cc36129adfefb52634f6a8ff89d6ac7b2..14a108158e7dcec59f47222f9d557746bda66a8b 100644 (file)
@@ -637,9 +637,6 @@ bool FrameEmitterImpl::EmitCompactUnwind(MCStreamer &Streamer,
   const TargetAsmInfo &TAI = Context.getTargetAsmInfo();
   Streamer.SwitchSection(TAI.getCompactUnwindSection());
 
-  unsigned FDEEncoding = TAI.getFDEEncoding(UsingCFI);
-  unsigned Size = getSizeForEncoding(Streamer, FDEEncoding);
-
   // range-start range-length  compact-unwind-enc personality-func   lsda
   //  _foo       LfooEnd-_foo  0x00000023          0                 0
   //  _bar       LbarEnd-_bar  0x00000025         __gxx_personality  except_tab1
@@ -663,13 +660,31 @@ bool FrameEmitterImpl::EmitCompactUnwind(MCStreamer &Streamer,
   //   .quad except_tab1
 
   // Range Start
-  EmitSymbol(Streamer, *Frame.Begin, FDEEncoding);
+  unsigned FDEEncoding = TAI.getFDEEncoding(UsingCFI);
+  unsigned Size = getSizeForEncoding(Streamer, FDEEncoding);
+  Streamer.EmitSymbolValue(Frame.Function, Size);
 
   // Range Length
   const MCExpr *Range = MakeStartMinusEndExpr(Streamer, *Frame.Begin,
                                               *Frame.End, 0);
   Streamer.EmitAbsValue(Range, Size);
 
+  // Personality Function
+  if (Frame.Personality) {
+    Size = getSizeForEncoding(Streamer, Frame.PersonalityEncoding);
+    Streamer.EmitSymbolValue(Frame.Personality, Size);
+  } else {
+    Streamer.EmitIntValue(Frame.PersonalityEncoding, 0); // No personality fn
+  }
+
+  // LSDA
+  if (Frame.Lsda) {
+    Size = getSizeForEncoding(Streamer, Frame.LsdaEncoding);
+    Streamer.EmitSymbolValue(Frame.Lsda, Size);
+  } else {
+    Streamer.EmitIntValue(Frame.LsdaEncoding, 0); // No LSDA
+  }
+
   return true;
 #endif
 }