@@ -9,7 +9,7 @@ use rustc_hir::Node;
99use rustc_index:: vec:: IndexVec ;
1010use rustc_middle:: middle:: codegen_fn_attrs:: CodegenFnAttrFlags ;
1111use rustc_middle:: middle:: exported_symbols:: {
12- metadata_symbol_name, ExportedSymbol , SymbolExportInfo , SymbolExportLevel ,
12+ metadata_symbol_name, ExportedSymbol , SymbolExportInfo , SymbolExportKind , SymbolExportLevel ,
1313} ;
1414use rustc_middle:: ty:: query:: { ExternProviders , Providers } ;
1515use rustc_middle:: ty:: subst:: { GenericArgKind , SubstsRef } ;
@@ -124,21 +124,37 @@ fn reachable_non_generics_provider(tcx: TyCtxt<'_>, cnum: CrateNum) -> DefIdMap<
124124 } else {
125125 symbol_export_level ( tcx, def_id. to_def_id ( ) )
126126 } ;
127+ let codegen_attrs = tcx. codegen_fn_attrs ( def_id. to_def_id ( ) ) ;
127128 debug ! (
128129 "EXPORTED SYMBOL (local): {} ({:?})" ,
129130 tcx. symbol_name( Instance :: mono( tcx, def_id. to_def_id( ) ) ) ,
130131 export_level
131132 ) ;
132133 ( def_id. to_def_id ( ) , SymbolExportInfo {
133134 level : export_level,
135+ kind : if tcx. is_static ( def_id. to_def_id ( ) ) {
136+ if codegen_attrs. flags . contains ( CodegenFnAttrFlags :: THREAD_LOCAL ) {
137+ SymbolExportKind :: Tls
138+ } else {
139+ SymbolExportKind :: Data
140+ }
141+ } else {
142+ SymbolExportKind :: Text
143+ } ,
144+ used : codegen_attrs. flags . contains ( CodegenFnAttrFlags :: USED )
145+ || codegen_attrs. flags . contains ( CodegenFnAttrFlags :: USED_LINKER ) ,
134146 } )
135147 } )
136148 . collect ( ) ;
137149
138150 if let Some ( id) = tcx. proc_macro_decls_static ( ( ) ) {
139151 reachable_non_generics. insert (
140152 id. to_def_id ( ) ,
141- SymbolExportInfo { level : SymbolExportLevel :: C } ,
153+ SymbolExportInfo {
154+ level : SymbolExportLevel :: C ,
155+ kind : SymbolExportKind :: Data ,
156+ used : false ,
157+ } ,
142158 ) ;
143159 }
144160
@@ -180,7 +196,11 @@ fn exported_symbols_provider_local<'tcx>(
180196
181197 symbols. push ( (
182198 exported_symbol,
183- SymbolExportInfo { level : SymbolExportLevel :: C } ,
199+ SymbolExportInfo {
200+ level : SymbolExportLevel :: C ,
201+ kind : SymbolExportKind :: Text ,
202+ used : false ,
203+ } ,
184204 ) ) ;
185205 }
186206
@@ -191,7 +211,11 @@ fn exported_symbols_provider_local<'tcx>(
191211
192212 symbols. push ( (
193213 exported_symbol,
194- SymbolExportInfo { level : SymbolExportLevel :: Rust } ,
214+ SymbolExportInfo {
215+ level : SymbolExportLevel :: Rust ,
216+ kind : SymbolExportKind :: Text ,
217+ used : false ,
218+ } ,
195219 ) ) ;
196220 }
197221 }
@@ -207,7 +231,11 @@ fn exported_symbols_provider_local<'tcx>(
207231 let exported_symbol = ExportedSymbol :: NoDefId ( SymbolName :: new ( tcx, sym) ) ;
208232 (
209233 exported_symbol,
210- SymbolExportInfo { level : SymbolExportLevel :: C } ,
234+ SymbolExportInfo {
235+ level : SymbolExportLevel :: C ,
236+ kind : SymbolExportKind :: Data ,
237+ used : false ,
238+ } ,
211239 )
212240 } ) ) ;
213241 }
@@ -220,7 +248,11 @@ fn exported_symbols_provider_local<'tcx>(
220248 let exported_symbol = ExportedSymbol :: NoDefId ( SymbolName :: new ( tcx, sym) ) ;
221249 (
222250 exported_symbol,
223- SymbolExportInfo { level : SymbolExportLevel :: C } ,
251+ SymbolExportInfo {
252+ level : SymbolExportLevel :: C ,
253+ kind : SymbolExportKind :: Data ,
254+ used : false ,
255+ } ,
224256 )
225257 } ) ) ;
226258 }
@@ -231,7 +263,11 @@ fn exported_symbols_provider_local<'tcx>(
231263
232264 symbols. push ( (
233265 exported_symbol,
234- SymbolExportInfo { level : SymbolExportLevel :: Rust } ,
266+ SymbolExportInfo {
267+ level : SymbolExportLevel :: Rust ,
268+ kind : SymbolExportKind :: Data ,
269+ used : false ,
270+ } ,
235271 ) ) ;
236272 }
237273
@@ -269,6 +305,8 @@ fn exported_symbols_provider_local<'tcx>(
269305 symbol,
270306 SymbolExportInfo {
271307 level : SymbolExportLevel :: Rust ,
308+ kind : SymbolExportKind :: Text ,
309+ used : false ,
272310 } ,
273311 ) ) ;
274312 }
@@ -283,6 +321,8 @@ fn exported_symbols_provider_local<'tcx>(
283321 ExportedSymbol :: DropGlue ( ty) ,
284322 SymbolExportInfo {
285323 level : SymbolExportLevel :: Rust ,
324+ kind : SymbolExportKind :: Text ,
325+ used : false ,
286326 } ,
287327 ) ) ;
288328 }
0 commit comments