aboutsummaryrefslogtreecommitdiff
path: root/lib/MC/MCDwarf.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2011-09-06 18:37:11 +0000
committerBill Wendling <isanbard@gmail.com>2011-09-06 18:37:11 +0000
commitd8ab8e9707e6170218ce82516d15b36f54b4bc1c (patch)
treeed5450e5264257f95997e770bb5c49b76fb6ef7c /lib/MC/MCDwarf.cpp
parent81856f7313cb8cd64e0c3746ebcc3337ade9e5ee (diff)
As a first step, emit both the compact unwind and CIE/FDEs for a function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139152 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCDwarf.cpp')
-rw-r--r--lib/MC/MCDwarf.cpp20
1 files changed, 7 insertions, 13 deletions
diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp
index b57fd9a13b..4658a3093f 100644
--- a/lib/MC/MCDwarf.cpp
+++ b/lib/MC/MCDwarf.cpp
@@ -1013,24 +1013,18 @@ void MCDwarfFrameEmitter::Emit(MCStreamer &Streamer,
MCObjectFileInfo *MOFI =
const_cast<MCObjectFileInfo*>(Context.getObjectFileInfo());
FrameEmitterImpl Emitter(UsingCFI, IsEH);
- SmallVector<MCDwarfFrameInfo, 8> RequiresFDE;
- ArrayRef<MCDwarfFrameInfo> FrameArray;
+ ArrayRef<MCDwarfFrameInfo> FrameArray = Streamer.getFrameInfos();
- if (IsEH && MOFI->getCompactUnwindSection()) {
+ // Emit the compact unwind info if available.
+ // FIXME: This emits both the compact unwind and the old CIE/FDE
+ // information. Only one of those is needed.
+ if (IsEH && MOFI->getCompactUnwindSection())
for (unsigned i = 0, n = Streamer.getNumFrameInfos(); i < n; ++i) {
const MCDwarfFrameInfo &Frame = Streamer.getFrameInfo(i);
- if (!Frame.CompactUnwindEncoding ||
- !Emitter.EmitCompactUnwind(Streamer, Frame))
- RequiresFDE.push_back(Streamer.getFrameInfo(i));
+ if (!Frame.CompactUnwindEncoding)
+ Emitter.EmitCompactUnwind(Streamer, Frame);
}
- // Early exit if we don't need to emit FDEs.
- if (RequiresFDE.empty()) return;
- FrameArray = RequiresFDE;
- } else {
- FrameArray = Streamer.getFrameInfos();
- }
-
const MCSection &Section = IsEH ? *MOFI->getEHFrameSection() :
*MOFI->getDwarfFrameSection();
Streamer.SwitchSection(&Section);