llvm/test/MC
David Blaikie fe25521451 Reimplement debug info compression by compressing the whole section, rather than a fragment.
To support compressing the debug_line section that contains multiple
fragments (due, I believe, to variation in choices of line table
encoding depending on the size of instruction ranges in the actual
program code) we needed to support compressing multiple MCFragments in a
single pass.

This patch implements that behavior by mutating the post-relaxed and
relocated section to be the compressed form of its former self,
including renaming the section.

This is a more flexible (and less invasive, to a degree) implementation
that will allow for other features such as "use compression only if it's
smaller than the uncompressed data".

Compressing debug_frame would be a possible further extension to this
work, but I've left it for now. The hurdle there is alignment sections -
which might require going as far as to refactor
MCAssembler.cpp:writeFragment to handle writing to a byte buffer or an
MCObjectWriter (there's already a virtual call there, so it shouldn't
add substantial compile-time cost) which could in turn involve
refactoring MCAsmBackend::writeNopData to use that same abstraction...
which involves touching all the backends. This would remove the limited
handling of fragment writing seen in
ELFObjectWriter.cpp:getUncompressedData which would be nice - but it's
more invasive.

I did discover that I (perhaps obviously) don't need to handle
relocations when I rewrite the fragments - since the relocations have
already been applied and computed (and stored into
ELFObjectWriter::Relocations) by this stage (necessarily, because we
need to have written any immediate values or assembly-time relocations
into the data already before we compress it, which we have). The test
case doesn't necessarily cover that in detail - I can add more test
coverage if that's preferred.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205990 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-10 21:53:53 +00:00
..
AArch64 PR18929: 2014-03-30 17:09:54 +00:00
ARM For the ARM integrated assembler add checking of the 2014-04-10 20:18:58 +00:00
ARM64 Fix some doc and comment typos 2014-04-09 14:47:27 +00:00
AsmParser Move tests that require ARM to an ARM test directory. 2014-03-18 22:43:59 +00:00
COFF WinCOFF: Emit common symbols as specified in the COFF spec 2014-04-08 22:33:40 +00:00
Disassembler [ARM64] Change SYS without a register to an alias to make disassembling more consistant. 2014-04-09 14:44:58 +00:00
ELF Reimplement debug info compression by compressing the whole section, rather than a fragment. 2014-04-10 21:53:53 +00:00
MachO ARM: consolidate MachO checks for ARM asm parser 2014-04-05 22:09:51 +00:00
Markup
Mips [mips] Switch the MIPS-III and MIPS-IV assembler tests to use -mcpu=mips4. 2014-04-10 13:16:49 +00:00
PowerPC [PowerPC] Generate little-endian object files 2014-03-24 18:16:09 +00:00
Sparc [Sparc] Add trap on integer condition codes (Ticc) instructions to Sparc backend. 2014-03-02 23:39:07 +00:00
SystemZ [SystemZ] Add support for z196 float<->unsigned conversions 2014-03-21 10:56:30 +00:00
X86 AVX-512: Implemented masking for integer arithmetic & logic instructions. 2014-03-27 09:45:08 +00:00