llvm-6502/test/MC/ELF
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
..
abs.s
alias-reloc.s
alias.s
align-bss.s
align-nops.s
align-size.s
align-text.s
align.s
bad-expr2.s
bad-expr3.s
bad-expr.s
bad-relocation.s
bad-section.s
basic-elf-32.s
basic-elf-64.s
bracket-exprs.s
bracket.s
bss-large.ll
bss.ll
call-abs.s
cfi-adjust-cfa-offset.s
cfi-advance-loc2.s
cfi-def-cfa-offset.s
cfi-def-cfa-register.s
cfi-def-cfa.s
cfi-escape.s
cfi-offset.s
cfi-reg.s
cfi-register.s
cfi-rel-offset2.s
cfi-rel-offset.s
cfi-remember.s
cfi-restore.s
cfi-same-value.s
cfi-sections.s
cfi-signal-frame.s
cfi-undefined.s
cfi-window-save.s
cfi-zero-addr-delta.s
cfi.s
comdat-dup-group-name.s
comdat-reloc.s
comdat.s
common2.s
common.s
comp-dir.s
compression.s
debug-line2.s
debug-line.s
debug-loc.s
diff2.s
diff.s
discriminator.s
dot-symbol-assignment.s
elf_directive_previous.s
elf_directive_section.s
empty-dwarf-lines.s
empty.s
entsize.ll
entsize.s
fde.s
file-double.s
file.s
gen-dwarf.s
global-offset.s
got.s
ident.s
ifunc-reloc.s
invalid-symver.s
lcomm.s
leb128.s
lit.local.cfg
local-reloc.s
many-sections-2.s
many-sections.s
merge.s
n_bytes.s
no-fixup.s
nocompression.s
noexec.s
norelocation.s
offset.s
org.s
pic-diff.s
plt.s
pr9292.s
relax-all-flag.s
relax-arith.s
relax-crash.s
relax.s
relocation-386.s
relocation-pc.s
relocation.s
rename.s
section-quoting.s
section.s
set.s
sleb.s
subsection.s
symbol-names.s
symref.s
tls-i386.s
tls.s
type-propagate.s
type.s
uleb.s
undef2.s
undef.s
version.s
weak-relocation.s
weak.s
weakref-plt.s
weakref-reloc.s
weakref.s
x86_64-reloc-sizetest.s
zero.s