Sync from rust 21ff67df15
This commit is contained in:
commit
216d1a7ad2
8 changed files with 49 additions and 82 deletions
|
|
@ -161,18 +161,35 @@ fn build_sysroot_for_triple(
|
|||
fn build_llvm_sysroot_for_triple(compiler: Compiler) -> SysrootTarget {
|
||||
let default_sysroot = crate::rustc_info::get_default_sysroot(&compiler.rustc);
|
||||
|
||||
let std_manifest_path = default_sysroot
|
||||
.join("lib")
|
||||
.join("rustlib")
|
||||
.join(format!("manifest-rust-std-{}", compiler.triple));
|
||||
let mut target_libs = SysrootTarget { triple: compiler.triple, libs: vec![] };
|
||||
|
||||
let libs = fs::read_to_string(std_manifest_path)
|
||||
.unwrap()
|
||||
.lines()
|
||||
.map(|entry| default_sysroot.join(entry.strip_prefix("file:").unwrap()))
|
||||
.collect();
|
||||
for entry in fs::read_dir(
|
||||
default_sysroot.join("lib").join("rustlib").join(&target_libs.triple).join("lib"),
|
||||
)
|
||||
.unwrap()
|
||||
{
|
||||
let entry = entry.unwrap();
|
||||
if entry.file_type().unwrap().is_dir() {
|
||||
continue;
|
||||
}
|
||||
let file = entry.path();
|
||||
let file_name_str = file.file_name().unwrap().to_str().unwrap();
|
||||
if (file_name_str.contains("rustc_")
|
||||
&& !file_name_str.contains("rustc_std_workspace_")
|
||||
&& !file_name_str.contains("rustc_demangle")
|
||||
&& !file_name_str.contains("rustc_literal_escaper"))
|
||||
|| file_name_str.contains("chalk")
|
||||
|| file_name_str.contains("tracing")
|
||||
|| file_name_str.contains("regex")
|
||||
{
|
||||
// These are large crates that are part of the rustc-dev component and are not
|
||||
// necessary to run regular programs.
|
||||
continue;
|
||||
}
|
||||
target_libs.libs.push(file);
|
||||
}
|
||||
|
||||
SysrootTarget { triple: compiler.triple, libs }
|
||||
target_libs
|
||||
}
|
||||
|
||||
fn build_clif_sysroot_for_triple(
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ use rustc_ast::expand::allocator::{
|
|||
AllocatorMethod, AllocatorTy, NO_ALLOC_SHIM_IS_UNSTABLE, default_fn_name, global_fn_name,
|
||||
};
|
||||
use rustc_codegen_ssa::base::{allocator_kind_for_codegen, allocator_shim_contents};
|
||||
use rustc_session::config::OomStrategy;
|
||||
use rustc_symbol_mangling::mangle_internal_symbol;
|
||||
|
||||
use crate::prelude::*;
|
||||
|
|
@ -15,16 +14,11 @@ use crate::prelude::*;
|
|||
pub(crate) fn codegen(tcx: TyCtxt<'_>, module: &mut dyn Module) -> bool {
|
||||
let Some(kind) = allocator_kind_for_codegen(tcx) else { return false };
|
||||
let methods = allocator_shim_contents(tcx, kind);
|
||||
codegen_inner(tcx, module, &methods, tcx.sess.opts.unstable_opts.oom);
|
||||
codegen_inner(tcx, module, &methods);
|
||||
true
|
||||
}
|
||||
|
||||
fn codegen_inner(
|
||||
tcx: TyCtxt<'_>,
|
||||
module: &mut dyn Module,
|
||||
methods: &[AllocatorMethod],
|
||||
oom_strategy: OomStrategy,
|
||||
) {
|
||||
fn codegen_inner(tcx: TyCtxt<'_>, module: &mut dyn Module, methods: &[AllocatorMethod]) {
|
||||
let usize_ty = module.target_config().pointer_type();
|
||||
|
||||
for method in methods {
|
||||
|
|
@ -65,35 +59,6 @@ fn codegen_inner(
|
|||
);
|
||||
}
|
||||
|
||||
{
|
||||
let sig = Signature {
|
||||
call_conv: module.target_config().default_call_conv,
|
||||
params: vec![],
|
||||
returns: vec![AbiParam::new(types::I8)],
|
||||
};
|
||||
let func_id = module
|
||||
.declare_function(
|
||||
&mangle_internal_symbol(tcx, OomStrategy::SYMBOL),
|
||||
Linkage::Export,
|
||||
&sig,
|
||||
)
|
||||
.unwrap();
|
||||
let mut ctx = Context::new();
|
||||
ctx.func.signature = sig;
|
||||
{
|
||||
let mut func_ctx = FunctionBuilderContext::new();
|
||||
let mut bcx = FunctionBuilder::new(&mut ctx.func, &mut func_ctx);
|
||||
|
||||
let block = bcx.create_block();
|
||||
bcx.switch_to_block(block);
|
||||
let value = bcx.ins().iconst(types::I8, oom_strategy.should_panic() as i64);
|
||||
bcx.ins().return_(&[value]);
|
||||
bcx.seal_all_blocks();
|
||||
bcx.finalize();
|
||||
}
|
||||
module.define_function(func_id, &mut ctx).unwrap();
|
||||
}
|
||||
|
||||
{
|
||||
let sig = Signature {
|
||||
call_conv: module.target_config().default_call_conv,
|
||||
|
|
|
|||
|
|
@ -167,7 +167,7 @@ pub(crate) fn compile_fn(
|
|||
context.clear();
|
||||
context.func = codegened_func.func;
|
||||
|
||||
#[cfg(any())] // This is never true
|
||||
#[cfg(false)]
|
||||
let _clif_guard = {
|
||||
use std::fmt::Write;
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,10 @@ use std::path::{Component, Path};
|
|||
use cranelift_codegen::MachSrcLoc;
|
||||
use cranelift_codegen::binemit::CodeOffset;
|
||||
use gimli::write::{FileId, FileInfo, LineProgram, LineString, LineStringTable};
|
||||
use rustc_span::{FileName, Pos, SourceFile, SourceFileAndLine, SourceFileHashAlgorithm, hygiene};
|
||||
use rustc_span::{
|
||||
FileName, Pos, RemapPathScopeComponents, SourceFile, SourceFileAndLine,
|
||||
SourceFileHashAlgorithm, hygiene,
|
||||
};
|
||||
|
||||
use crate::debuginfo::FunctionDebugContext;
|
||||
use crate::debuginfo::emit::address_for_func;
|
||||
|
|
@ -95,7 +98,7 @@ impl DebugContext {
|
|||
match &source_file.name {
|
||||
FileName::Real(path) => {
|
||||
let (dir_path, file_name) =
|
||||
split_path_dir_and_file(path.to_path(self.filename_display_preference));
|
||||
split_path_dir_and_file(path.path(RemapPathScopeComponents::DEBUGINFO));
|
||||
let dir_name = osstr_as_utf8_bytes(dir_path.as_os_str());
|
||||
let file_name = osstr_as_utf8_bytes(file_name);
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ use rustc_hir::def::DefKind;
|
|||
use rustc_hir::def_id::DefIdMap;
|
||||
use rustc_session::Session;
|
||||
use rustc_session::config::DebugInfo;
|
||||
use rustc_span::{FileNameDisplayPreference, SourceFileHash, StableSourceFileId};
|
||||
use rustc_span::{RemapPathScopeComponents, SourceFileHash, StableSourceFileId};
|
||||
use rustc_target::callconv::FnAbi;
|
||||
|
||||
pub(crate) use self::emit::{DebugReloc, DebugRelocName};
|
||||
|
|
@ -44,7 +44,6 @@ pub(crate) struct DebugContext {
|
|||
namespace_map: DefIdMap<UnitEntryId>,
|
||||
array_size_type: Option<UnitEntryId>,
|
||||
|
||||
filename_display_preference: FileNameDisplayPreference,
|
||||
embed_source: bool,
|
||||
}
|
||||
|
||||
|
|
@ -102,18 +101,18 @@ impl DebugContext {
|
|||
|
||||
let mut dwarf = DwarfUnit::new(encoding);
|
||||
|
||||
use rustc_session::config::RemapPathScopeComponents;
|
||||
|
||||
let filename_display_preference =
|
||||
tcx.sess.filename_display_preference(RemapPathScopeComponents::DEBUGINFO);
|
||||
|
||||
let producer = producer(tcx.sess);
|
||||
let comp_dir =
|
||||
tcx.sess.opts.working_dir.to_string_lossy(filename_display_preference).to_string();
|
||||
let comp_dir = tcx
|
||||
.sess
|
||||
.source_map()
|
||||
.working_dir()
|
||||
.path(RemapPathScopeComponents::DEBUGINFO)
|
||||
.to_string_lossy();
|
||||
|
||||
let (name, file_info) = match tcx.sess.local_crate_source_file() {
|
||||
Some(path) => {
|
||||
let name = path.to_string_lossy(filename_display_preference).to_string();
|
||||
let name =
|
||||
path.path(RemapPathScopeComponents::DEBUGINFO).to_string_lossy().into_owned();
|
||||
(name, None)
|
||||
}
|
||||
None => (tcx.crate_name(LOCAL_CRATE).to_string(), None),
|
||||
|
|
@ -137,7 +136,7 @@ impl DebugContext {
|
|||
|
||||
{
|
||||
let name = dwarf.strings.add(format!("{name}/@/{cgu_name}"));
|
||||
let comp_dir = dwarf.strings.add(comp_dir);
|
||||
let comp_dir = dwarf.strings.add(&*comp_dir);
|
||||
|
||||
let root = dwarf.unit.root();
|
||||
let root = dwarf.unit.get_mut(root);
|
||||
|
|
@ -180,7 +179,6 @@ impl DebugContext {
|
|||
stack_pointer_register,
|
||||
namespace_map: DefIdMap::default(),
|
||||
array_size_type,
|
||||
filename_display_preference,
|
||||
embed_source,
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -130,11 +130,9 @@ impl UnwindContext {
|
|||
return;
|
||||
}
|
||||
|
||||
let unwind_info = if let Some(unwind_info) =
|
||||
let Some(unwind_info) =
|
||||
context.compiled_code().unwrap().create_unwind_info(module.isa()).unwrap()
|
||||
{
|
||||
unwind_info
|
||||
} else {
|
||||
else {
|
||||
return;
|
||||
};
|
||||
|
||||
|
|
|
|||
12
src/lib.rs
12
src/lib.rs
|
|
@ -47,7 +47,7 @@ use rustc_codegen_ssa::{CodegenResults, TargetConfig};
|
|||
use rustc_log::tracing::info;
|
||||
use rustc_middle::dep_graph::{WorkProduct, WorkProductId};
|
||||
use rustc_session::Session;
|
||||
use rustc_session::config::{OutputFilenames, PrintKind, PrintRequest};
|
||||
use rustc_session::config::OutputFilenames;
|
||||
use rustc_span::{Symbol, sym};
|
||||
use rustc_target::spec::{Abi, Arch, Env, Os};
|
||||
|
||||
|
|
@ -160,16 +160,6 @@ impl CodegenBackend for CraneliftCodegenBackend {
|
|||
}
|
||||
}
|
||||
|
||||
fn print(&self, req: &PrintRequest, out: &mut String, _sess: &Session) {
|
||||
match req.kind {
|
||||
// FIXME have a default impl that returns false
|
||||
PrintKind::BackendHasZstd => {
|
||||
out.push_str("false\n");
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn target_config(&self, sess: &Session) -> TargetConfig {
|
||||
// FIXME return the actually used target features. this is necessary for #[cfg(target_feature)]
|
||||
let target_features = match sess.target.arch {
|
||||
|
|
|
|||
|
|
@ -29,11 +29,7 @@ pub(crate) fn maybe_known_branch_taken(
|
|||
arg: Value,
|
||||
test_zero: bool,
|
||||
) -> Option<bool> {
|
||||
let arg_inst = if let ValueDef::Result(arg_inst, 0) = bcx.func.dfg.value_def(arg) {
|
||||
arg_inst
|
||||
} else {
|
||||
return None;
|
||||
};
|
||||
let ValueDef::Result(arg_inst, 0) = bcx.func.dfg.value_def(arg) else { return None };
|
||||
|
||||
match bcx.func.dfg.insts[arg_inst] {
|
||||
InstructionData::UnaryImm { opcode: Opcode::Iconst, imm } => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue