From 1686f5c68cc4503e5d2cbd22289302877aefb96c Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Mon, 27 Apr 2020 23:37:57 +0300 Subject: [PATCH] Disable localization for all linkers --- src/librustc_codegen_ssa/back/link.rs | 4 +++- src/librustc_codegen_ssa/back/linker.rs | 13 +++++++++++++ src/librustc_target/spec/msvc_base.rs | 4 ---- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/librustc_codegen_ssa/back/link.rs b/src/librustc_codegen_ssa/back/link.rs index 9d42db8ec4294..91d91fff68b2e 100644 --- a/src/librustc_codegen_ssa/back/link.rs +++ b/src/librustc_codegen_ssa/back/link.rs @@ -16,7 +16,7 @@ use rustc_target::spec::{LinkerFlavor, LldFlavor, PanicStrategy, RelocModel, Rel use super::archive::ArchiveBuilder; use super::command::Command; -use super::linker::Linker; +use super::linker::{self, Linker}; use super::rpath::{self, RPathConfig}; use crate::{ looks_like_rust_object_file, CodegenResults, CrateInfo, METADATA_FILENAME, @@ -498,6 +498,8 @@ fn link_natively<'a, B: ArchiveBuilder<'a>>( target_cpu, ); + linker::disable_localization(&mut cmd); + for &(ref k, ref v) in &sess.target.target.options.link_env { cmd.env(k, v); } diff --git a/src/librustc_codegen_ssa/back/linker.rs b/src/librustc_codegen_ssa/back/linker.rs index 5a911fcdc7d62..7c89fdfbe1b87 100644 --- a/src/librustc_codegen_ssa/back/linker.rs +++ b/src/librustc_codegen_ssa/back/linker.rs @@ -19,6 +19,19 @@ use rustc_session::Session; use rustc_span::symbol::Symbol; use rustc_target::spec::{LinkerFlavor, LldFlavor}; +/// Disables non-English messages from localized linkers. +/// Such messages may cause issues with text encoding on Windows (#35785) +/// and prevent inspection of linker output in case of errors, which we occasionally do. +/// This should be acceptable because other messages from rustc are in English anyway, +/// and may also be desirable to improve searchability of the linker diagnostics. +pub fn disable_localization(linker: &mut Command) { + // No harm in setting both env vars simultaneously. + // Unix-style linkers. + linker.env("LC_ALL", "C"); + // MSVC's `link.exe`. + linker.env("VSLANG", "1033"); +} + /// For all the linkers we support, and information they might /// need out of the shared crate context before we get rid of it. #[derive(RustcEncodable, RustcDecodable)] diff --git a/src/librustc_target/spec/msvc_base.rs b/src/librustc_target/spec/msvc_base.rs index 817a322a9e4da..f57ef87cf1294 100644 --- a/src/librustc_target/spec/msvc_base.rs +++ b/src/librustc_target/spec/msvc_base.rs @@ -21,10 +21,6 @@ pub fn opts() -> TargetOptions { executables: true, is_like_windows: true, is_like_msvc: true, - // set VSLANG to 1033 can prevent link.exe from using - // language packs, and avoid generating Non-UTF-8 error - // messages if a link error occurred. - link_env: vec![("VSLANG".to_string(), "1033".to_string())], lld_flavor: LldFlavor::Link, pre_link_args, abi_return_struct_as_int: true,