Produce the EH_frame# symbols if needed.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 28 Apr 2011 03:26:11 +0000 (03:26 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 28 Apr 2011 03:26:11 +0000 (03:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130378 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCDwarf.cpp

index ec2bcf85edb665756ac2999623782ce2511a8f5e..a40e3853c0397754bb6669eefe621e3da1a30856 100644 (file)
@@ -494,9 +494,10 @@ static const MachineLocation TranslateMachineLocation(
 namespace {
   class FrameEmitterImpl {
     int CFAOffset;
+    int CIENum;
 
   public:
-    FrameEmitterImpl() : CFAOffset(0) {
+    FrameEmitterImpl() : CFAOffset(0), CIENum(0) {
     }
 
     const MCSymbol &EmitCIE(MCStreamer &streamer,
@@ -623,7 +624,15 @@ const MCSymbol &FrameEmitterImpl::EmitCIE(MCStreamer &streamer,
   const TargetAsmInfo &asmInfo = context.getTargetAsmInfo();
   const MCSection &section = *asmInfo.getEHFrameSection();
   streamer.SwitchSection(&section);
-  MCSymbol *sectionStart = context.CreateTempSymbol();
+
+  MCSymbol *sectionStart;
+  if (asmInfo.isFunctionEHFrameSymbolPrivate())
+    sectionStart = context.CreateTempSymbol();
+  else
+    sectionStart = context.GetOrCreateSymbol(Twine("EH_frame") + Twine(CIENum));
+
+  CIENum++;
+
   MCSymbol *sectionEnd = streamer.getContext().CreateTempSymbol();
 
   // Length