File tree Expand file tree Collapse file tree 1 file changed +14
-0
lines changed
compiler/rustc_codegen_ssa/src/back Expand file tree Collapse file tree 1 file changed +14
-0
lines changed Original file line number Diff line number Diff line change 1
1
use std:: ffi:: CString ;
2
2
use std:: sync:: Arc ;
3
3
4
+ use rustc_ast:: expand:: allocator:: AllocatorKind ;
4
5
use rustc_data_structures:: memmap:: Mmap ;
5
6
use rustc_hir:: def_id:: { CrateNum , LOCAL_CRATE } ;
6
7
use rustc_middle:: middle:: exported_symbols:: { ExportedSymbol , SymbolExportInfo , SymbolExportLevel } ;
@@ -95,6 +96,19 @@ pub(super) fn exported_symbols_for_lto(
95
96
. filter_map ( |& ( s, info) : & ( ExportedSymbol < ' _ > , SymbolExportInfo ) | {
96
97
if info. level . is_below_threshold ( export_threshold) || info. used {
97
98
Some ( symbol_name_for_instance_in_crate ( tcx, s, cnum) )
99
+ } else if export_threshold == SymbolExportLevel :: C
100
+ && info. rustc_std_internal_symbol
101
+ && let Some ( AllocatorKind :: Default ) = allocator_kind_for_codegen ( tcx)
102
+ {
103
+ // Export the __rdl_* exports for usage by the allocator shim when not using
104
+ // #[global_allocator]. Most of the conditions above are only used to avoid
105
+ // unnecessary expensive symbol_name_for_instance_in_crate calls.
106
+ let sym = symbol_name_for_instance_in_crate ( tcx, s, cnum) ;
107
+ if sym. contains ( "__rdl_" ) || sym. contains ( "__rg_oom" ) {
108
+ Some ( sym)
109
+ } else {
110
+ None
111
+ }
98
112
} else {
99
113
None
100
114
}
You can’t perform that action at this time.
0 commit comments