@@ -8,7 +8,7 @@ use rustc_errors::{ErrorGuaranteed, Handler};
88use rustc_fs_util:: fix_windows_verbatim_for_gcc;
99use rustc_hir:: def_id:: { CrateNum , LOCAL_CRATE } ;
1010use rustc_metadata:: find_native_static_library;
11- use rustc_metadata:: fs:: { emit_metadata , METADATA_FILENAME } ;
11+ use rustc_metadata:: fs:: { emit_wrapper_file , METADATA_FILENAME } ;
1212use rustc_middle:: middle:: dependency_format:: Linkage ;
1313use rustc_middle:: middle:: exported_symbols:: SymbolExportKind ;
1414use rustc_session:: config:: { self , CFGuard , CrateType , DebugInfo , LdImpl , Lto , Strip } ;
@@ -29,7 +29,7 @@ use rustc_target::spec::{RelocModel, RelroLevel, SanitizerSet, SplitDebuginfo};
2929use super :: archive:: { ArchiveBuilder , ArchiveBuilderBuilder } ;
3030use super :: command:: Command ;
3131use super :: linker:: { self , Linker } ;
32- use super :: metadata:: { create_rmeta_file , MetadataPosition } ;
32+ use super :: metadata:: { create_wrapper_file , MetadataPosition } ;
3333use super :: rpath:: { self , RPathConfig } ;
3434use crate :: {
3535 errors, looks_like_rust_object_file, CodegenResults , CompiledModule , CrateInfo , NativeLib ,
@@ -44,7 +44,7 @@ use std::borrow::Borrow;
4444use std:: cell:: OnceCell ;
4545use std:: collections:: BTreeSet ;
4646use std:: ffi:: OsString ;
47- use std:: fs:: { File , OpenOptions } ;
47+ use std:: fs:: { read , File , OpenOptions } ;
4848use std:: io:: { BufWriter , Write } ;
4949use std:: ops:: Deref ;
5050use std:: path:: { Path , PathBuf } ;
@@ -292,8 +292,8 @@ fn link_rlib<'a>(
292292 let trailing_metadata = match flavor {
293293 RlibFlavor :: Normal => {
294294 let ( metadata, metadata_position) =
295- create_rmeta_file ( sess, codegen_results. metadata . raw_data ( ) ) ;
296- let metadata = emit_metadata ( sess, & metadata, tmpdir) ;
295+ create_wrapper_file ( sess, b".rmeta" . to_vec ( ) , codegen_results. metadata . raw_data ( ) ) ;
296+ let metadata = emit_wrapper_file ( sess, & metadata, tmpdir, METADATA_FILENAME ) ;
297297 match metadata_position {
298298 MetadataPosition :: First => {
299299 // Most of the time metadata in rlib files is wrapped in a "dummy" object
@@ -376,12 +376,18 @@ fn link_rlib<'a>(
376376 let location =
377377 find_native_static_library ( name. as_str ( ) , lib. verbatim , & lib_search_paths, sess) ;
378378 if sess. opts . unstable_opts . packed_bundled_libs && flavor == RlibFlavor :: Normal {
379- packed_bundled_libs. push ( find_native_static_library (
380- lib. filename . unwrap ( ) . as_str ( ) ,
379+ let filename = lib. filename . unwrap ( ) ;
380+ let lib_path = find_native_static_library (
381+ filename. as_str ( ) ,
381382 Some ( true ) ,
382383 & lib_search_paths,
383384 sess,
384- ) ) ;
385+ ) ;
386+ let src = read ( lib_path)
387+ . map_err ( |e| sess. emit_fatal ( errors:: ReadFileError { message : e } ) ) ?;
388+ let ( data, _) = create_wrapper_file ( sess, b".bundled_lib" . to_vec ( ) , & src) ;
389+ let wrapper_file = emit_wrapper_file ( sess, & data, tmpdir, filename. as_str ( ) ) ;
390+ packed_bundled_libs. push ( wrapper_file) ;
385391 continue ;
386392 }
387393 ab. add_archive ( & location, Box :: new ( |_| false ) ) . unwrap_or_else ( |error| {
0 commit comments