diff options
author | Bill Wendling <isanbard@gmail.com> | 2011-06-29 23:49:12 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2011-06-29 23:49:12 +0000 |
commit | 8fa4ada5cfa99c3f4d3547ee9f7bc4d674b2016f (patch) | |
tree | 94c41d3f96cbfc037340204a7e8d8090655d6255 /llvm/lib/MC/MCDwarf.cpp | |
parent | a8a8067dec5f44abae94badd58f38f95165ed3c1 (diff) | |
download | bcm5719-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.cpp | 23 |
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 } |