Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 95597e8

Browse files
committed
Auto merge of #141412 - cuviper:beta-next, r=Mark-Simulacrum
[beta] backports and stage0 bump - bump stage0 to 1.87.0 - Update the edition guide for let chains #140852 - Fix download of GCC from CI on non-nightly channels #140901 - Revert "Fix linking statics on Arm64EC #140176" #141024 - [win][arm64] Remove 'Arm64 Hazard' undocumented MSVC option and instead disable problematic test #141045 - Do not call name() on rpitit assoc_item #141308 - Temporarily use Windows Server 2022 instead of Windows Server 2025 images #141023 - Use Docker cache from the current repository #141280 - Move dist-x86_64-linux CI job to GitHub temporarily #141388 - ci: prepare aws access keys for migration #141389 - Add bors environment to CI #141323 - ci: split dist-arm-linux job #141078 r? cuviper
2 parents 5dadfd5 + 5257f89 commit 95597e8

File tree

26 files changed

+547
-701
lines changed

26 files changed

+547
-701
lines changed

‎.github/workflows/ci.yml‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,15 @@ jobs:
7373
needs: [ calculate_matrix ]
7474
runs-on: "${{ matrix.os }}"
7575
timeout-minutes: 360
76+
# The bors environment contains secrets required for elevated workflows (try and auto builds),
77+
# which need to access e.g. S3 and upload artifacts. We want to provide access to that
78+
# environment only on the try/auto branches, which are only accessible to bors.
79+
# This also ensures that PR CI (which doesn't get write access to S3) works, as it cannot
80+
# access the environment.
81+
#
82+
# We only enable the environment for the rust-lang/rust repository, so that rust-lang-ci/rust
83+
# CI works until we migrate off it (since that repository doesn't contain the environment).
84+
environment: ${{ ((github.repository == 'rust-lang/rust' && (github.ref == 'refs/heads/try' || github.ref == 'refs/heads/auto')) && 'bors') || '' }}
7685
env:
7786
CI_JOB_NAME: ${{ matrix.name }}
7887
CI_JOB_DOC_URL: ${{ matrix.doc_url }}
@@ -225,8 +234,8 @@ jobs:
225234
fi
226235
exit ${STATUS}
227236
env:
228-
AWS_ACCESS_KEY_ID: ${{ env.CACHES_AWS_ACCESS_KEY_ID }}
229-
AWS_SECRET_ACCESS_KEY: ${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.CACHES_AWS_ACCESS_KEY_ID)] }}
237+
AWS_ACCESS_KEY_ID: ${{ (github.repository == 'rust-lang/rust' && secrets.CACHES_AWS_ACCESS_KEY_ID) || env.CACHES_AWS_ACCESS_KEY_ID }}
238+
AWS_SECRET_ACCESS_KEY: ${{ (github.repository == 'rust-lang/rust' && secrets.CACHES_AWS_SECRET_ACCESS_KEY) || secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.CACHES_AWS_ACCESS_KEY_ID)] }}
230239

231240
- name: create github artifacts
232241
run: src/ci/scripts/create-doc-artifacts.sh
@@ -248,8 +257,8 @@ jobs:
248257
- name: upload artifacts to S3
249258
run: src/ci/scripts/upload-artifacts.sh
250259
env:
251-
AWS_ACCESS_KEY_ID: ${{ env.ARTIFACTS_AWS_ACCESS_KEY_ID }}
252-
AWS_SECRET_ACCESS_KEY: ${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.ARTIFACTS_AWS_ACCESS_KEY_ID)] }}
260+
AWS_ACCESS_KEY_ID: ${{ (github.repository == 'rust-lang/rust' && secrets.ARTIFACTS_AWS_ACCESS_KEY_ID) || env.ARTIFACTS_AWS_ACCESS_KEY_ID }}
261+
AWS_SECRET_ACCESS_KEY: ${{ (github.repository == 'rust-lang/rust' && secrets.ARTIFACTS_AWS_SECRET_ACCESS_KEY) || secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.ARTIFACTS_AWS_ACCESS_KEY_ID)] }}
253262
# Adding a condition on DEPLOY=1 or DEPLOY_ALT=1 is not needed as all deploy
254263
# builders *should* have the AWS credentials available. Still, explicitly
255264
# adding the condition is helpful as this way CI will not silently skip

‎compiler/rustc_codegen_llvm/src/consts.rs‎

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -364,12 +364,7 @@ impl<'ll> CodegenCx<'ll, '_> {
364364

365365
if !def_id.is_local() {
366366
let needs_dll_storage_attr = self.use_dll_storage_attrs
367-
// If the symbol is a foreign item, then don't automatically apply DLLImport, as
368-
// we'll rely on the #[link] attribute instead. BUT, if this is an internal symbol
369-
// then it may be generated by the compiler in some crate, so we do need to apply
370-
// DLLImport when linking with the MSVC linker.
371-
&& (!self.tcx.is_foreign_item(def_id)
372-
|| (self.sess().target.is_like_msvc && fn_attrs.flags.contains(CodegenFnAttrFlags::RUSTC_STD_INTERNAL_SYMBOL)))
367+
&& !self.tcx.is_foreign_item(def_id)
373368
// Local definitions can never be imported, so we must not apply
374369
// the DLLImport annotation.
375370
&& !dso_local

‎compiler/rustc_codegen_ssa/src/back/linker.rs‎

Lines changed: 30 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -337,12 +337,7 @@ pub(crate) trait Linker {
337337
fn debuginfo(&mut self, strip: Strip, natvis_debugger_visualizers: &[PathBuf]);
338338
fn no_crt_objects(&mut self);
339339
fn no_default_libraries(&mut self);
340-
fn export_symbols(
341-
&mut self,
342-
tmpdir: &Path,
343-
crate_type: CrateType,
344-
symbols: &[(String, SymbolExportKind)],
345-
);
340+
fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType, symbols: &[String]);
346341
fn subsystem(&mut self, subsystem: &str);
347342
fn linker_plugin_lto(&mut self);
348343
fn add_eh_frame_header(&mut self) {}
@@ -775,12 +770,7 @@ impl<'a> Linker for GccLinker<'a> {
775770
}
776771
}
777772

778-
fn export_symbols(
779-
&mut self,
780-
tmpdir: &Path,
781-
crate_type: CrateType,
782-
symbols: &[(String, SymbolExportKind)],
783-
) {
773+
fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType, symbols: &[String]) {
784774
// Symbol visibility in object files typically takes care of this.
785775
if crate_type == CrateType::Executable {
786776
let should_export_executable_symbols =
@@ -809,7 +799,7 @@ impl<'a> Linker for GccLinker<'a> {
809799
// Write a plain, newline-separated list of symbols
810800
let res: io::Result<()> = try {
811801
let mut f = File::create_buffered(&path)?;
812-
for (sym, _) in symbols {
802+
for sym in symbols {
813803
debug!(" _{sym}");
814804
writeln!(f, "_{sym}")?;
815805
}
@@ -824,12 +814,11 @@ impl<'a> Linker for GccLinker<'a> {
824814
// .def file similar to MSVC one but without LIBRARY section
825815
// because LD doesn't like when it's empty
826816
writeln!(f, "EXPORTS")?;
827-
for (symbol, kind) in symbols {
828-
let kind_marker = if *kind == SymbolExportKind::Data { " DATA" } else { "" };
817+
for symbol in symbols {
829818
debug!(" _{symbol}");
830819
// Quote the name in case it's reserved by linker in some way
831820
// (this accounts for names with dots in particular).
832-
writeln!(f, " \"{symbol}\"{kind_marker}")?;
821+
writeln!(f, " \"{symbol}\"")?;
833822
}
834823
};
835824
if let Err(error) = res {
@@ -842,7 +831,7 @@ impl<'a> Linker for GccLinker<'a> {
842831
writeln!(f, "{{")?;
843832
if !symbols.is_empty() {
844833
writeln!(f, " global:")?;
845-
for (sym, _) in symbols {
834+
for sym in symbols {
846835
debug!(" {sym};");
847836
writeln!(f, " {sym};")?;
848837
}
@@ -1109,12 +1098,7 @@ impl<'a> Linker for MsvcLinker<'a> {
11091098
// crates. Upstream rlibs may be linked statically to this dynamic library,
11101099
// in which case they may continue to transitively be used and hence need
11111100
// their symbols exported.
1112-
fn export_symbols(
1113-
&mut self,
1114-
tmpdir: &Path,
1115-
crate_type: CrateType,
1116-
symbols: &[(String, SymbolExportKind)],
1117-
) {
1101+
fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType, symbols: &[String]) {
11181102
// Symbol visibility takes care of this typically
11191103
if crate_type == CrateType::Executable {
11201104
let should_export_executable_symbols =
@@ -1132,10 +1116,9 @@ impl<'a> Linker for MsvcLinker<'a> {
11321116
// straight to exports.
11331117
writeln!(f, "LIBRARY")?;
11341118
writeln!(f, "EXPORTS")?;
1135-
for (symbol, kind) in symbols {
1136-
let kind_marker = if *kind == SymbolExportKind::Data { " DATA" } else { "" };
1119+
for symbol in symbols {
11371120
debug!(" _{symbol}");
1138-
writeln!(f, " {symbol}{kind_marker}")?;
1121+
writeln!(f, " {symbol}")?;
11391122
}
11401123
};
11411124
if let Err(error) = res {
@@ -1276,19 +1259,14 @@ impl<'a> Linker for EmLinker<'a> {
12761259
self.cc_arg("-nodefaultlibs");
12771260
}
12781261

1279-
fn export_symbols(
1280-
&mut self,
1281-
_tmpdir: &Path,
1282-
_crate_type: CrateType,
1283-
symbols: &[(String, SymbolExportKind)],
1284-
) {
1262+
fn export_symbols(&mut self, _tmpdir: &Path, _crate_type: CrateType, symbols: &[String]) {
12851263
debug!("EXPORTED SYMBOLS:");
12861264

12871265
self.cc_arg("-s");
12881266

12891267
let mut arg = OsString::from("EXPORTED_FUNCTIONS=");
12901268
let encoded = serde_json::to_string(
1291-
&symbols.iter().map(|(sym, _)| "_".to_owned() + sym).collect::<Vec<_>>(),
1269+
&symbols.iter().map(|sym| "_".to_owned() + sym).collect::<Vec<_>>(),
12921270
)
12931271
.unwrap();
12941272
debug!("{encoded}");
@@ -1450,13 +1428,8 @@ impl<'a> Linker for WasmLd<'a> {
14501428

14511429
fn no_default_libraries(&mut self) {}
14521430

1453-
fn export_symbols(
1454-
&mut self,
1455-
_tmpdir: &Path,
1456-
_crate_type: CrateType,
1457-
symbols: &[(String, SymbolExportKind)],
1458-
) {
1459-
for (sym, _) in symbols {
1431+
fn export_symbols(&mut self, _tmpdir: &Path, _crate_type: CrateType, symbols: &[String]) {
1432+
for sym in symbols {
14601433
self.link_args(&["--export", sym]);
14611434
}
14621435

@@ -1590,7 +1563,7 @@ impl<'a> Linker for L4Bender<'a> {
15901563
self.cc_arg("-nostdlib");
15911564
}
15921565

1593-
fn export_symbols(&mut self, _: &Path, _: CrateType, _: &[(String,SymbolExportKind)]) {
1566+
fn export_symbols(&mut self, _: &Path, _: CrateType, _: &[String]) {
15941567
// ToDo, not implemented, copy from GCC
15951568
self.sess.dcx().emit_warn(errors::L4BenderExportingSymbolsUnimplemented);
15961569
}
@@ -1747,17 +1720,12 @@ impl<'a> Linker for AixLinker<'a> {
17471720

17481721
fn no_default_libraries(&mut self) {}
17491722

1750-
fn export_symbols(
1751-
&mut self,
1752-
tmpdir: &Path,
1753-
_crate_type: CrateType,
1754-
symbols: &[(String, SymbolExportKind)],
1755-
) {
1723+
fn export_symbols(&mut self, tmpdir: &Path, _crate_type: CrateType, symbols: &[String]) {
17561724
let path = tmpdir.join("list.exp");
17571725
let res: io::Result<()> = try {
17581726
let mut f = File::create_buffered(&path)?;
17591727
// FIXME: use llvm-nm to generate export list.
1760-
for (symbol, _) in symbols {
1728+
for symbol in symbols {
17611729
debug!(" _{symbol}");
17621730
writeln!(f, " {symbol}")?;
17631731
}
@@ -1801,12 +1769,9 @@ fn for_each_exported_symbols_include_dep<'tcx>(
18011769
}
18021770
}
18031771

1804-
pub(crate) fn exported_symbols(
1805-
tcx: TyCtxt<'_>,
1806-
crate_type: CrateType,
1807-
) -> Vec<(String, SymbolExportKind)> {
1772+
pub(crate) fn exported_symbols(tcx: TyCtxt<'_>, crate_type: CrateType) -> Vec<String> {
18081773
if let Some(ref exports) = tcx.sess.target.override_export_symbols {
1809-
return exports.iter().map(|name| (name.to_string(),SymbolExportKind::Text)).collect();
1774+
return exports.iter().map(ToString::to_string).collect();
18101775
}
18111776

18121777
if let CrateType::ProcMacro = crate_type {
@@ -1816,29 +1781,25 @@ pub(crate) fn exported_symbols(
18161781
}
18171782
}
18181783

1819-
fn exported_symbols_for_non_proc_macro(
1820-
tcx: TyCtxt<'_>,
1821-
crate_type: CrateType,
1822-
) -> Vec<(String, SymbolExportKind)> {
1784+
fn exported_symbols_for_non_proc_macro(tcx: TyCtxt<'_>, crate_type: CrateType) -> Vec<String> {
18231785
let mut symbols = Vec::new();
18241786
let export_threshold = symbol_export::crates_export_threshold(&[crate_type]);
18251787
for_each_exported_symbols_include_dep(tcx, crate_type, |symbol, info, cnum| {
18261788
// Do not export mangled symbols from cdylibs and don't attempt to export compiler-builtins
18271789
// from any cdylib. The latter doesn't work anyway as we use hidden visibility for
18281790
// compiler-builtins. Most linkers silently ignore it, but ld64 gives a warning.
18291791
if info.level.is_below_threshold(export_threshold) && !tcx.is_compiler_builtins(cnum) {
1830-
symbols.push((
1831-
symbol_export::exporting_symbol_name_for_instance_in_crate(tcx, symbol, cnum),
1832-
info.kind,
1792+
symbols.push(symbol_export::exporting_symbol_name_for_instance_in_crate(
1793+
tcx, symbol, cnum,
18331794
));
1834-
symbol_export::extend_exported_symbols(&mut symbols, tcx, symbol, info,cnum);
1795+
symbol_export::extend_exported_symbols(&mut symbols, tcx, symbol, cnum);
18351796
}
18361797
});
18371798

18381799
symbols
18391800
}
18401801

1841-
fn exported_symbols_for_proc_macro_crate(tcx: TyCtxt<'_>) -> Vec<(String,SymbolExportKind)> {
1802+
fn exported_symbols_for_proc_macro_crate(tcx: TyCtxt<'_>) -> Vec<String> {
18421803
// `exported_symbols` will be empty when !should_codegen.
18431804
if !tcx.sess.opts.output_types.should_codegen() {
18441805
return Vec::new();
@@ -1848,10 +1809,7 @@ fn exported_symbols_for_proc_macro_crate(tcx: TyCtxt<'_>) -> Vec<(String, Symbol
18481809
let proc_macro_decls_name = tcx.sess.generate_proc_macro_decls_symbol(stable_crate_id);
18491810
let metadata_symbol_name = exported_symbols::metadata_symbol_name(tcx);
18501811

1851-
vec![
1852-
(proc_macro_decls_name, SymbolExportKind::Text),
1853-
(metadata_symbol_name, SymbolExportKind::Text),
1854-
]
1812+
vec![proc_macro_decls_name, metadata_symbol_name]
18551813
}
18561814

18571815
pub(crate) fn linked_symbols(
@@ -1873,9 +1831,7 @@ pub(crate) fn linked_symbols(
18731831
|| info.used
18741832
{
18751833
symbols.push((
1876-
symbol_export::linking_symbol_name_for_instance_in_crate(
1877-
tcx, symbol, info.kind, cnum,
1878-
),
1834+
symbol_export::linking_symbol_name_for_instance_in_crate(tcx, symbol, cnum),
18791835
info.kind,
18801836
));
18811837
}
@@ -1950,13 +1906,7 @@ impl<'a> Linker for PtxLinker<'a> {
19501906

19511907
fn ehcont_guard(&mut self) {}
19521908

1953-
fn export_symbols(
1954-
&mut self,
1955-
_tmpdir: &Path,
1956-
_crate_type: CrateType,
1957-
_symbols: &[(String, SymbolExportKind)],
1958-
) {
1959-
}
1909+
fn export_symbols(&mut self, _tmpdir: &Path, _crate_type: CrateType, _symbols: &[String]) {}
19601910

19611911
fn subsystem(&mut self, _subsystem: &str) {}
19621912

@@ -2025,15 +1975,10 @@ impl<'a> Linker for LlbcLinker<'a> {
20251975

20261976
fn ehcont_guard(&mut self) {}
20271977

2028-
fn export_symbols(
2029-
&mut self,
2030-
_tmpdir: &Path,
2031-
_crate_type: CrateType,
2032-
symbols: &[(String, SymbolExportKind)],
2033-
) {
1978+
fn export_symbols(&mut self, _tmpdir: &Path, _crate_type: CrateType, symbols: &[String]) {
20341979
match _crate_type {
20351980
CrateType::Cdylib => {
2036-
for (sym, _) in symbols {
1981+
for sym in symbols {
20371982
self.link_args(&["--export-symbol", sym]);
20381983
}
20391984
}
@@ -2107,16 +2052,11 @@ impl<'a> Linker for BpfLinker<'a> {
21072052

21082053
fn ehcont_guard(&mut self) {}
21092054

2110-
fn export_symbols(
2111-
&mut self,
2112-
tmpdir: &Path,
2113-
_crate_type: CrateType,
2114-
symbols: &[(String, SymbolExportKind)],
2115-
) {
2055+
fn export_symbols(&mut self, tmpdir: &Path, _crate_type: CrateType, symbols: &[String]) {
21162056
let path = tmpdir.join("symbols");
21172057
let res: io::Result<()> = try {
21182058
let mut f = File::create_buffered(&path)?;
2119-
for (sym, _) in symbols {
2059+
for sym in symbols {
21202060
writeln!(f, "{sym}")?;
21212061
}
21222062
};

‎compiler/rustc_codegen_ssa/src/back/symbol_export.rs‎

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,6 @@ fn calling_convention_for_symbol<'tcx>(
692692
pub(crate) fn linking_symbol_name_for_instance_in_crate<'tcx>(
693693
tcx: TyCtxt<'tcx>,
694694
symbol: ExportedSymbol<'tcx>,
695-
export_kind: SymbolExportKind,
696695
instantiating_crate: CrateNum,
697696
) -> String {
698697
let mut undecorated = symbol_name_for_instance_in_crate(tcx, symbol, instantiating_crate);
@@ -713,9 +712,8 @@ pub(crate) fn linking_symbol_name_for_instance_in_crate<'tcx>(
713712
let prefix = match &target.arch[..] {
714713
"x86" => Some('_'),
715714
"x86_64" => None,
716-
// Only functions are decorated for arm64ec.
717-
"arm64ec" if export_kind == SymbolExportKind::Text => Some('#'),
718-
// Only x86/64 and arm64ec use symbol decorations.
715+
"arm64ec" => Some('#'),
716+
// Only x86/64 use symbol decorations.
719717
_ => return undecorated,
720718
};
721719

@@ -755,10 +753,9 @@ pub(crate) fn exporting_symbol_name_for_instance_in_crate<'tcx>(
755753
/// Add it to the symbols list for all kernel functions, so that it is exported in the linked
756754
/// object.
757755
pub(crate) fn extend_exported_symbols<'tcx>(
758-
symbols: &mut Vec<(String,SymbolExportKind)>,
756+
symbols: &mut Vec<String>,
759757
tcx: TyCtxt<'tcx>,
760758
symbol: ExportedSymbol<'tcx>,
761-
info: SymbolExportInfo,
762759
instantiating_crate: CrateNum,
763760
) {
764761
let (conv, _) = calling_convention_for_symbol(tcx, symbol);
@@ -770,7 +767,7 @@ pub(crate) fn extend_exported_symbols<'tcx>(
770767
let undecorated = symbol_name_for_instance_in_crate(tcx, symbol, instantiating_crate);
771768

772769
// Add the symbol for the kernel descriptor (with .kd suffix)
773-
symbols.push((format!("{undecorated}.kd"), info.kind));
770+
symbols.push(format!("{undecorated}.kd"));
774771
}
775772

776773
fn maybe_emutls_symbol_name<'tcx>(

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /