diff options
| author | David Blaikie <dblaikie@gmail.com> | 2014-03-27 20:45:58 +0000 |
|---|---|---|
| committer | David Blaikie <dblaikie@gmail.com> | 2014-03-27 20:45:58 +0000 |
| commit | 7400a979521a70be4d69071271e4543014fbfcf5 (patch) | |
| tree | 8ec8ed8cb7e1915b48136bb97b292a0ed8f45efe /llvm/lib/MC/MCObjectStreamer.cpp | |
| parent | 70bd1fd22f801fab4b01d7e0dd22d6fb927c8fcf (diff) | |
| download | bcm5719-llvm-7400a979521a70be4d69071271e4543014fbfcf5.tar.gz bcm5719-llvm-7400a979521a70be4d69071271e4543014fbfcf5.zip | |
DebugInfo: Support for compressed debug info sections
1) When creating a .debug_* section and instead create a .zdebug_
section.
2) When creating a fragment in a .zdebug_* section, make it a compressed
fragment.
3) When computing the size of a compressed section, compress the data
and use the size of the compressed data.
4) Emit the compressed bytes.
Also, check that only if a section has a compressed fragment, then that
is the only fragment in the section.
Assert-fail if the fragment's data is modified after it is compressed.
Initial review on llvm-commits by Eric Christopher and Rafael Espindola.
llvm-svn: 204958
Diffstat (limited to 'llvm/lib/MC/MCObjectStreamer.cpp')
| -rw-r--r-- | llvm/lib/MC/MCObjectStreamer.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp index 809cb11e36d..35786accb42 100644 --- a/llvm/lib/MC/MCObjectStreamer.cpp +++ b/llvm/lib/MC/MCObjectStreamer.cpp @@ -20,6 +20,7 @@ #include "llvm/MC/MCSection.h" #include "llvm/MC/MCSymbol.h" #include "llvm/Support/ErrorHandling.h" +#include "llvm/MC/MCSectionELF.h" using namespace llvm; MCObjectStreamer::MCObjectStreamer(MCContext &Context, MCAsmBackend &TAB, @@ -63,7 +64,11 @@ MCDataFragment *MCObjectStreamer::getOrCreateDataFragment() const { // When bundling is enabled, we don't want to add data to a fragment that // already has instructions (see MCELFStreamer::EmitInstToData for details) if (!F || (Assembler->isBundlingEnabled() && F->hasInstructions())) { - F = new MCDataFragment(); + const auto *Sec = dyn_cast<MCSectionELF>(&getCurrentSectionData()->getSection()); + if (Sec && Sec->getSectionName().startswith(".zdebug_")) + F = new MCCompressedFragment(); + else + F = new MCDataFragment(); insert(F); } return F; |

