diff options
| author | Bill Wendling <isanbard@gmail.com> | 2013-09-09 02:37:14 +0000 |
|---|---|---|
| committer | Bill Wendling <isanbard@gmail.com> | 2013-09-09 02:37:14 +0000 |
| commit | 58e2d3d856b7dc7b97a18cfa2aeeb927bc7e6bd5 (patch) | |
| tree | 9ca8acad793e03df4d19dc005e687a499d33efb7 /llvm/lib/MC/MCStreamer.cpp | |
| parent | 1bda93a25220228385abee686163272b1d910e79 (diff) | |
| download | bcm5719-llvm-58e2d3d856b7dc7b97a18cfa2aeeb927bc7e6bd5.tar.gz bcm5719-llvm-58e2d3d856b7dc7b97a18cfa2aeeb927bc7e6bd5.zip | |
Generate compact unwind encoding from CFI directives.
We used to generate the compact unwind encoding from the machine
instructions. However, this had the problem that if the user used `-save-temps'
or compiled their hand-written `.s' file (with CFI directives), we wouldn't
generate the compact unwind encoding.
Move the algorithm that generates the compact unwind encoding into the
MCAsmBackend. This way we can generate the encoding whether the code is from a
`.ll' or `.s' file.
<rdar://problem/13623355>
llvm-svn: 190290
Diffstat (limited to 'llvm/lib/MC/MCStreamer.cpp')
| -rw-r--r-- | llvm/lib/MC/MCStreamer.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp index fb43a4adbda..806bec98968 100644 --- a/llvm/lib/MC/MCStreamer.cpp +++ b/llvm/lib/MC/MCStreamer.cpp @@ -10,6 +10,7 @@ #include "llvm/MC/MCStreamer.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/Twine.h" +#include "llvm/MC/MCAsmBackend.h" #include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCExpr.h" @@ -72,6 +73,14 @@ raw_ostream &MCStreamer::GetCommentOS() { return nulls(); } +void MCStreamer::generateCompactUnwindEncodings(MCAsmBackend &MAB) { + for (std::vector<MCDwarfFrameInfo>::iterator I = FrameInfos.begin(), + E = FrameInfos.end(); I != E; ++I) + if (!I->CompactUnwindEncoding) + I->CompactUnwindEncoding = + MAB.generateCompactUnwindEncoding(I->Instructions); +} + void MCStreamer::EmitDwarfSetLineAddr(int64_t LineDelta, const MCSymbol *Label, int PointerSize) { // emit the sequence to set the address |

