summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCDwarf.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2011-06-29 23:49:12 +0000
committerBill Wendling <isanbard@gmail.com>2011-06-29 23:49:12 +0000
commit8fa4ada5cfa99c3f4d3547ee9f7bc4d674b2016f (patch)
tree94c41d3f96cbfc037340204a7e8d8090655d6255 /llvm/lib/MC/MCDwarf.cpp
parenta8a8067dec5f44abae94badd58f38f95165ed3c1 (diff)
downloadbcm5719-llvm-8fa4ada5cfa99c3f4d3547ee9f7bc4d674b2016f.tar.gz
bcm5719-llvm-8fa4ada5cfa99c3f4d3547ee9f7bc4d674b2016f.zip
We don't want to use relocations inside the compact unwind section. Just use the
symbols instead. llvm-svn: 134115
Diffstat (limited to 'llvm/lib/MC/MCDwarf.cpp')
-rw-r--r--llvm/lib/MC/MCDwarf.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp
index d232d84cc36..14a108158e7 100644
--- a/llvm/lib/MC/MCDwarf.cpp
+++ b/llvm/lib/MC/MCDwarf.cpp
@@ -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
}
OpenPOWER on IntegriCloud