granite-rust/compiler/rustc_llvm/llvm-wrapper
bors e2a3c9b3f0 Auto merge of #117962 - weihanglo:debug-name-table, r=wesleywiser
fix: stop emitting `.debug_pubnames` and `.debug_pubtypes`

A continuation of #94181.
Fixes #48762
MCP can be found in <https://github.com/rust-lang/compiler-team/issues/688>.

`.debug_pubnames` and `.debug_pubtypes` are poorly designed and people
seldom use them. However, they take a considerable portion of size in
the final binary. This tells LLVM stop emitting those sections on
DWARFv4 or lower. DWARFv5 use `.debug_names` which is more concise
in size and performant for name lookup.

Some other no-really-useful personal notes:

<details><summary>Details</summary>
<p>

## Pepole saying they are not useful

* https://github.com/rust-lang/rust/issues/48762
* https://rust-lang.zulipchat.com/#narrow/stream/317568-t-compiler.2Fwg-debugging/topic/investigating.20debuginfo.20size/near/342713604
* `DwarfCompileUnit::hasDwarfPubSections()` — f633f325a1/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (L1477-L1494)
* clang default to no debug name table when no option provided — f633f325a1/clang/lib/Frontend/CompilerInvocation.cpp (L1819-L1824)
* GCC explicitly says GDB doesn't use pub sections (`TARGET_WANT_DEBUG_PUB_SECTIONS` only be true on Darwin) — 5d2a360f0a/gcc/target.def (L6985-L6990) and 319b460545/gold/dwarf_reader.h (L424-L427)
* Probably the only place that makes use of pub section in lldb — 725115d7bb/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (L2117-L2135)

* "The -gsplit-dwarf option requires -ggnu-pubnames." — 5d2a360f0a/gcc/opts.cc (L1205)

* LLVM: Always emit `.debug_names` with dwarf 5 for Apple platforms — https://reviews.llvm.org/D118754

</p>
</details>
2023-12-11 22:32:08 +00:00
..
.editorconfig Move rustllvm into rustc_llvm 2020-09-09 23:05:43 +03:00
ArchiveWrapper.cpp ArchiveWrapper: handle LLVM API update 2023-08-22 12:26:35 -04:00
CoverageMappingWrapper.cpp coverage: Don't convert symbol names to CString for FFI 2023-08-04 10:48:05 +10:00
Linker.cpp suppress warnings on msvc 2023-11-22 09:10:53 -08:00
LLVMWrapper.h Rollup merge of #118177 - sivadeilra:suppress-llvm-warnings, r=cuviper 2023-12-06 21:52:31 +01:00
PassWrapper.cpp llvm-wrapper: adapt for LLVM API change 2023-12-11 09:27:09 +00:00
README Move rustllvm into rustc_llvm 2020-09-09 23:05:43 +03:00
RustWrapper.cpp fix: stop emitting .debug_pubnames and .debug_pubtypes 2023-12-11 14:58:02 -05:00
SuppressLLVMWarnings.h fix long lines 2023-11-22 10:17:50 -08:00
SymbolWrapper.cpp suppress warnings on msvc 2023-11-22 09:10:53 -08:00

This directory currently contains some LLVM support code. This will generally
be sent upstream to LLVM in time; for now it lives here.

NOTE: the LLVM C++ ABI is subject to between-version breakage and must *never*
be exposed to Rust. To allow for easy auditing of that, all Rust-exposed types
must be typedef-ed as "LLVMXyz", or "LLVMRustXyz" if they were defined here.

Functions that return a failure status and leave the error in
the LLVM last error should return an LLVMRustResult rather than an
int or anything to avoid confusion.

When translating enums, add a single `Other` variant as the first
one to allow for new variants to be added. It should abort when used
as an input.

All other types must not be typedef-ed as such.