debug-info: Use a packed debug fun representation.
This change significantly reduces the amount of space that debug-info takes
up in an image (about a 50% space reduction in total debug info space
usage). For example, the size of a cold image on an arm64 machine goes
down from 33 MB to 27 MB, and from 34 MB to 29 MB on x86-64.
Based closely on the long-ago-removed minimal debug fun representation
whose only vestiges remained as a block comment. (It was originally
removed as SBCL was being first bootstrapped due to package renaming
issues which are irrelevant now). The main difference with this new
implementation that this packed debug fun representation works on all
debug levels and so we are always able to pack debug funs into byte
vectors.
* COMPILED-DEBUG-FUN is now never dumped. This means there is no need
to have an additional layer of encoding in COMPILED-DEBUG-FUN, and we
can remove things like the :KIND hack and free up 7 fopcodes. The
tricks to do byte encoding previously are now subsumed by the packed
debug fun representation, where everything is byte-packed.
* Replace the test cross-checking the C and lisp implementations of
varint decoding with an end-to-end test demonstrating that the ldb
backtrace code produces the same debug fun names as the Lisp code,
making backtracing more robust to further changes to the debug fun
format.
* The disassembler code now includes local functions again, but it is
still based on PC ranges rather than names so that disassembling
different closures with the same name is correct still.
18 files changed: