mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-24 07:44:10 +00:00
Use MetadataRef in the metadata loader to fix parallel rustc
This commit is contained in:
parent
1c40840738
commit
7045b101cc
@ -5,8 +5,9 @@ use std::fs::File;
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use rustc_codegen_ssa::METADATA_FILENAME;
|
use rustc_codegen_ssa::METADATA_FILENAME;
|
||||||
use rustc_data_structures::owning_ref::{self, OwningRef};
|
use rustc_data_structures::owning_ref::OwningRef;
|
||||||
use rustc_data_structures::rustc_erase_owner;
|
use rustc_data_structures::rustc_erase_owner;
|
||||||
|
use rustc_data_structures::sync::MetadataRef;
|
||||||
use rustc_middle::middle::cstore::{EncodedMetadata, MetadataLoader};
|
use rustc_middle::middle::cstore::{EncodedMetadata, MetadataLoader};
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
use rustc_session::config;
|
use rustc_session::config;
|
||||||
@ -17,11 +18,7 @@ use crate::backend::WriteMetadata;
|
|||||||
pub(crate) struct CraneliftMetadataLoader;
|
pub(crate) struct CraneliftMetadataLoader;
|
||||||
|
|
||||||
impl MetadataLoader for CraneliftMetadataLoader {
|
impl MetadataLoader for CraneliftMetadataLoader {
|
||||||
fn get_rlib_metadata(
|
fn get_rlib_metadata(&self, _target: &Target, path: &Path) -> Result<MetadataRef, String> {
|
||||||
&self,
|
|
||||||
_target: &Target,
|
|
||||||
path: &Path,
|
|
||||||
) -> Result<owning_ref::ErasedBoxRef<[u8]>, String> {
|
|
||||||
let mut archive = ar::Archive::new(File::open(path).map_err(|e| format!("{:?}", e))?);
|
let mut archive = ar::Archive::new(File::open(path).map_err(|e| format!("{:?}", e))?);
|
||||||
// Iterate over all entries in the archive:
|
// Iterate over all entries in the archive:
|
||||||
while let Some(entry_result) = archive.next_entry() {
|
while let Some(entry_result) = archive.next_entry() {
|
||||||
@ -38,14 +35,9 @@ impl MetadataLoader for CraneliftMetadataLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Err("couldn't find metadata entry".to_string())
|
Err("couldn't find metadata entry".to_string())
|
||||||
//self.get_dylib_metadata(target, path)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_dylib_metadata(
|
fn get_dylib_metadata(&self, _target: &Target, path: &Path) -> Result<MetadataRef, String> {
|
||||||
&self,
|
|
||||||
_target: &Target,
|
|
||||||
path: &Path,
|
|
||||||
) -> Result<owning_ref::ErasedBoxRef<[u8]>, String> {
|
|
||||||
use object::{Object, ObjectSection};
|
use object::{Object, ObjectSection};
|
||||||
let file = std::fs::read(path).map_err(|e| format!("read:{:?}", e))?;
|
let file = std::fs::read(path).map_err(|e| format!("read:{:?}", e))?;
|
||||||
let file = object::File::parse(&file).map_err(|e| format!("parse: {:?}", e))?;
|
let file = object::File::parse(&file).map_err(|e| format!("parse: {:?}", e))?;
|
||||||
|
Loading…
Reference in New Issue
Block a user