Skip to content

Commit e30f5e2

Browse files
committed
Avoid adding compiler-used functions to symbols.o
1 parent 7ceaf19 commit e30f5e2

File tree

5 files changed

+24
-5
lines changed

5 files changed

+24
-5
lines changed

compiler/rustc_codegen_llvm/src/back/lto.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ fn prepare_lto(
6060
};
6161

6262
let symbol_filter = &|&(ref name, info): &(String, SymbolExportInfo)| {
63-
if info.level.is_below_threshold(export_threshold) || info.used {
63+
if info.level.is_below_threshold(export_threshold) || info.used || info.used_compiler {
6464
Some(CString::new(name.as_str()).unwrap())
6565
} else {
6666
None

compiler/rustc_codegen_ssa/src/back/symbol_export.rs

+14-4
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ fn reachable_non_generics_provider(tcx: TyCtxt<'_>, _: LocalCrate) -> DefIdMap<S
111111
let is_builtin_fn = is_compiler_builtins
112112
&& symbol_export_level(tcx, def_id.to_def_id())
113113
.is_below_threshold(SymbolExportLevel::C);
114-
let used = is_builtin_fn || name == "rust_eh_personality";
114+
let used = name == "rust_eh_personality";
115115

116116
let export_level = if special_runtime_crate {
117117
SymbolExportLevel::Rust
@@ -135,9 +135,9 @@ fn reachable_non_generics_provider(tcx: TyCtxt<'_>, _: LocalCrate) -> DefIdMap<S
135135
} else {
136136
SymbolExportKind::Text
137137
},
138-
used: codegen_attrs.flags.contains(CodegenFnAttrFlags::USED)
139-
|| codegen_attrs.flags.contains(CodegenFnAttrFlags::USED_LINKER)
140-
|| used,
138+
used: codegen_attrs.flags.contains(CodegenFnAttrFlags::USED_LINKER) || used,
139+
used_compiler: codegen_attrs.flags.contains(CodegenFnAttrFlags::USED)
140+
|| is_builtin_fn,
141141
};
142142
(def_id.to_def_id(), info)
143143
})
@@ -150,6 +150,7 @@ fn reachable_non_generics_provider(tcx: TyCtxt<'_>, _: LocalCrate) -> DefIdMap<S
150150
level: SymbolExportLevel::C,
151151
kind: SymbolExportKind::Data,
152152
used: false,
153+
used_compiler: false,
153154
},
154155
);
155156
}
@@ -198,6 +199,7 @@ fn exported_symbols_provider_local(
198199
level: info.level,
199200
kind: SymbolExportKind::Text,
200201
used: info.used,
202+
used_compiler: false,
201203
},
202204
)
203205
})
@@ -214,6 +216,7 @@ fn exported_symbols_provider_local(
214216
level: SymbolExportLevel::C,
215217
kind: SymbolExportKind::Text,
216218
used: false,
219+
used_compiler: false,
217220
},
218221
));
219222
}
@@ -233,6 +236,7 @@ fn exported_symbols_provider_local(
233236
level: SymbolExportLevel::Rust,
234237
kind: SymbolExportKind::Text,
235238
used: false,
239+
used_compiler: false,
236240
},
237241
));
238242
}
@@ -245,6 +249,7 @@ fn exported_symbols_provider_local(
245249
level: SymbolExportLevel::Rust,
246250
kind: SymbolExportKind::Data,
247251
used: false,
252+
used_compiler: false,
248253
},
249254
))
250255
}
@@ -264,6 +269,7 @@ fn exported_symbols_provider_local(
264269
level: SymbolExportLevel::C,
265270
kind: SymbolExportKind::Data,
266271
used: false,
272+
used_compiler: false,
267273
},
268274
)
269275
}));
@@ -289,6 +295,7 @@ fn exported_symbols_provider_local(
289295
level: SymbolExportLevel::C,
290296
kind: SymbolExportKind::Data,
291297
used: false,
298+
used_compiler: false,
292299
},
293300
)
294301
}));
@@ -306,6 +313,7 @@ fn exported_symbols_provider_local(
306313
level: SymbolExportLevel::C,
307314
kind: SymbolExportKind::Data,
308315
used: true,
316+
used_compiler: false,
309317
},
310318
));
311319
}
@@ -346,6 +354,7 @@ fn exported_symbols_provider_local(
346354
level: SymbolExportLevel::Rust,
347355
kind: SymbolExportKind::Text,
348356
used: false,
357+
used_compiler: false,
349358
},
350359
));
351360
}
@@ -362,6 +371,7 @@ fn exported_symbols_provider_local(
362371
level: SymbolExportLevel::Rust,
363372
kind: SymbolExportKind::Text,
364373
used: false,
374+
used_compiler: false,
365375
},
366376
));
367377
}

compiler/rustc_middle/src/middle/exported_symbols.rs

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ pub struct SymbolExportInfo {
3636
pub level: SymbolExportLevel,
3737
pub kind: SymbolExportKind,
3838
pub used: bool,
39+
pub used_compiler: bool,
3940
}
4041

4142
#[derive(Eq, PartialEq, Debug, Copy, Clone, TyEncodable, TyDecodable, HashStable)]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
include ../tools.mk
2+
3+
# only-x86_64-unknown-linux-gnu
4+
5+
all:
6+
$(RUSTC) main.rs -o $(TMPDIR)/main
7+
[ "$$("$(LLVM_BIN_DIR)"/llvm-nm -U $(TMPDIR)/main | grep -c __fixunssfti)" -eq "0" ]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fn main() {}

0 commit comments

Comments
 (0)