rust/compiler
bors 04521fd10e Auto merge of #118636 - h1467792822:dev, r=michaelwoerister
Add the unstable option  to reduce the binary size of dynamic library…

# Motivation

The average length of symbol names in the rust standard library is about 100 bytes, while the average length of symbol names in the C++ standard library is about 65 bytes. In some embedded environments where dynamic library are widely used, rust dynamic library symbol name space hash become one of the key bottlenecks of application, Especially when the existing C/C++ module is reconstructed into the rust module.

The unstable option `-Z symbol_mangling_version=hashed` is added to solve the bottleneck caused by too long dynamic library symbol names.

## Test data

The following is a set of test data on the ubuntu 18.04 LTS environment. With this plug-in, the space saving rate of dynamic libraries can reach about 20%.

The test object is the standard library of rust (built based on Xargo), tokio crate, and hyper crate.

The contents of the Cargo.toml file in the construction project of the three dynamic libraries are as follows:

```txt
# Cargo.toml
[profile.release]
panic = "abort"
opt-leve="z"
codegen-units=1
strip=true
debug=true
```
The built dynamic library also removes the `.rustc` segments that are not needed at run time and then compares the size. The detailed data is as follows:

1. libstd.so
> | symbol_mangling_version | size | saving rate |
> | --- | --- | --- |
> | legacy | 804896 ||
> | hashed | 608288 | 0.244 |
> | v0 | 858144 ||
> | hashed | 608288 | 0.291 |

2. libhyper.so
> | symbol_mangling_version(libhyper.so) | symbol_mangling_version(libstd.so) | size | saving rate |
> | --- | --- | --- | --- |
> | legacy | legacy | 866312 ||
> | hashed | legacy | 645128 |0.255|
> | legacy | hashed | 854024 ||
> | hashed | hashed | 632840 |0.259|
2024-01-27 02:32:30 +00:00
..
rustc
rustc_abi Fix rustc_abi build on stable 2024-01-16 21:15:31 +01:00
rustc_arena Fix Stable trait and its impls to work with the new with_tables 2024-01-19 09:42:51 +00:00
rustc_ast Rollup merge of #120329 - nnethercote:3349-precursors, r=fee1-dead 2024-01-26 14:43:31 +01:00
rustc_ast_lowering Remove unused features 2024-01-25 14:01:33 +00:00
rustc_ast_passes Remove unused features 2024-01-25 14:01:33 +00:00
rustc_ast_pretty Remove unused features 2024-01-25 14:01:33 +00:00
rustc_attr Pack the u128 in LitKind::Int 2024-01-19 20:10:39 -08:00
rustc_baked_icu_data
rustc_borrowck Remove unused features 2024-01-25 14:01:33 +00:00
rustc_builtin_macros Auto merge of #119968 - clubby789:unused-feature, r=compiler-errors 2024-01-26 03:18:34 +00:00
rustc_codegen_cranelift Merge commit '3e50cf65025f96854d6597e80449b0d64ad89589' into sync_cg_clif-2024-01-26 2024-01-26 18:33:45 +00:00
rustc_codegen_gcc Auto merge of #116167 - RalfJung:structural-eq, r=lcnr 2024-01-26 00:17:00 +00:00
rustc_codegen_llvm Remove unused features 2024-01-25 14:01:33 +00:00
rustc_codegen_ssa Auto merge of #119968 - clubby789:unused-feature, r=compiler-errors 2024-01-26 03:18:34 +00:00
rustc_const_eval Normalize field types before checking validity 2024-01-26 18:36:15 +00:00
rustc_data_structures Remove unused features 2024-01-25 14:01:33 +00:00
rustc_driver
rustc_driver_impl Remove unused features 2024-01-25 14:01:33 +00:00
rustc_error_codes Stabilize simple offset_of 2024-01-19 20:38:51 +00:00
rustc_error_messages Remove unused features 2024-01-25 14:01:33 +00:00
rustc_errors Remove unused features 2024-01-25 14:01:33 +00:00
rustc_expand Rollup merge of #117420 - Jules-Bertholet:internal-unstable-stmt-expr-attributes, r=petrochenkov 2024-01-26 14:43:29 +01:00
rustc_feature Add feature gate 2024-01-24 23:52:03 +01:00
rustc_fluent_macro annotate-snippets: update to 0.10 2024-01-07 16:53:32 +03:00
rustc_fs_util
rustc_graphviz
rustc_hir Auto merge of #119968 - clubby789:unused-feature, r=compiler-errors 2024-01-26 03:18:34 +00:00
rustc_hir_analysis Remove unused features 2024-01-25 14:01:33 +00:00
rustc_hir_pretty Add PatKind::Err 2024-01-17 03:14:16 +01:00
rustc_hir_typeck Rollup merge of #120378 - lcnr:normalize-ast, r=compiler-errors 2024-01-26 23:15:52 +01:00
rustc_incremental Remove unused features 2024-01-25 14:01:33 +00:00
rustc_index Rollup merge of #119800 - dev-ardi:tmp, r=wesleywiser 2024-01-26 23:15:50 +01:00
rustc_index_macros Restrict access to the private field of newtype indexes 2024-01-19 15:38:47 +00:00
rustc_infer Remove unused features 2024-01-25 14:01:33 +00:00
rustc_interface Remove unused features 2024-01-25 14:01:33 +00:00
rustc_lexer Use unescape_unicode for raw C string literals. 2024-01-25 12:28:11 +11:00
rustc_lint Rollup merge of #120360 - compiler-errors:afit-sized-lol, r=lcnr 2024-01-26 14:43:32 +01:00
rustc_lint_defs Rollup merge of #119948 - asquared31415:unsafe_op_in_unsafe_fn_fix, r=TaKO8Ki 2024-01-22 16:13:28 +01:00
rustc_llvm Revert "Auto merge of #113923 - DianQK:restore-no-builtins-lto, r=pnkfelix" 2024-01-12 18:23:04 +08:00
rustc_log
rustc_macros Remove unused features 2024-01-25 14:01:33 +00:00
rustc_metadata Remove unused features 2024-01-25 14:01:33 +00:00
rustc_middle interpret: project_downcast: do not ICE for uninhabited variants 2024-01-26 09:01:56 +01:00
rustc_mir_build Classify closure arguments in refutable pattern in argument error 2024-01-26 23:54:08 +08:00
rustc_mir_dataflow Remove unused features 2024-01-25 14:01:33 +00:00
rustc_mir_transform add test for GVN issue; cleanup in dataflow_const_prop 2024-01-26 10:40:29 +01:00
rustc_monomorphize Remove unused features 2024-01-25 14:01:33 +00:00
rustc_next_trait_solver Remove movability from TyKind::Coroutine 2023-12-28 16:35:01 +00:00
rustc_parse Rollup merge of #119342 - sjwang05:issue-112254, r=wesleywiser 2024-01-26 23:15:49 +01:00
rustc_parse_format Rename the unescaping functions. 2024-01-25 12:28:11 +11:00
rustc_passes Rebase slice_group_by stabilization PR 2024-01-25 22:20:59 -08:00
rustc_pattern_analysis Rollup merge of #118803 - Nadrieril:min-exhaustive-patterns, r=compiler-errors 2024-01-26 06:36:36 +01:00
rustc_privacy Rollup merge of #120339 - petrochenkov:nameprivisit, r=michaelwoerister 2024-01-26 14:43:31 +01:00
rustc_query_impl Remove unused features 2024-01-25 14:01:33 +00:00
rustc_query_system Tweak error counting. 2024-01-22 10:14:01 +11:00
rustc_resolve Rollup merge of #120322 - compiler-errors:higher-ranked-async-closures, r=oli-obk 2024-01-26 06:36:39 +01:00
rustc_serialize Remove unused features 2024-01-25 14:01:33 +00:00
rustc_session Auto merge of #118636 - h1467792822:dev, r=michaelwoerister 2024-01-27 02:32:30 +00:00
rustc_smir Do not normalize closure signature when building FnOnce shim 2024-01-22 16:50:30 +00:00
rustc_span Rollup merge of #118803 - Nadrieril:min-exhaustive-patterns, r=compiler-errors 2024-01-26 06:36:36 +01:00
rustc_symbol_mangling Auto merge of #118636 - h1467792822:dev, r=michaelwoerister 2024-01-27 02:32:30 +00:00
rustc_target Remove unused features 2024-01-25 14:01:33 +00:00
rustc_trait_selection Auto merge of #119968 - clubby789:unused-feature, r=compiler-errors 2024-01-26 03:18:34 +00:00
rustc_traits Remove unused features 2024-01-25 14:01:33 +00:00
rustc_transmute Remove unused features 2024-01-25 14:01:33 +00:00
rustc_ty_utils Auto merge of #119968 - clubby789:unused-feature, r=compiler-errors 2024-01-26 03:18:34 +00:00
rustc_type_ir Restrict access to the private field of newtype indexes 2024-01-19 15:38:47 +00:00
stable_mir Remove unused features 2024-01-25 14:01:33 +00:00