@@ -7,6 +7,7 @@ use std::sync::Arc;
7
7
use std:: { io, iter, slice} ;
8
8
9
9
use object:: read:: archive:: ArchiveFile ;
10
+ use object:: { Object , ObjectSection } ;
10
11
use rustc_codegen_ssa:: back:: lto:: { SerializedModule , ThinModule , ThinShared } ;
11
12
use rustc_codegen_ssa:: back:: write:: { CodegenContext , FatLtoInput } ;
12
13
use rustc_codegen_ssa:: traits:: * ;
@@ -105,31 +106,15 @@ fn get_bitcode_slice_from_object_data<'a>(
105
106
// name" which in the public API for sections gets treated as part of the section name, but
106
107
// internally in MachOObjectFile.cpp gets treated separately.
107
108
let section_name = bitcode_section_name ( cgcx) . to_str ( ) . unwrap ( ) . trim_start_matches ( "__LLVM," ) ;
108
- let mut len = 0 ;
109
- let data = unsafe {
110
- llvm:: LLVMRustGetSliceFromObjectDataByName (
111
- obj. as_ptr ( ) ,
112
- obj. len ( ) ,
113
- section_name. as_ptr ( ) ,
114
- section_name. len ( ) ,
115
- & mut len,
116
- )
117
- } ;
118
- if !data. is_null ( ) {
119
- assert ! ( len != 0 ) ;
120
- let bc = unsafe { slice:: from_raw_parts ( data, len) } ;
121
109
122
- // `bc` must be a sub-slice of `obj`.
123
- assert ! ( obj. as_ptr( ) <= bc. as_ptr( ) ) ;
124
- assert ! ( bc[ bc. len( ) ..bc. len( ) ] . as_ptr( ) <= obj[ obj. len( ) ..obj. len( ) ] . as_ptr( ) ) ;
110
+ let obj =
111
+ object:: File :: parse ( obj) . map_err ( |err| LtoBitcodeFromRlib { err : err. to_string ( ) } ) ?;
125
112
126
- Ok ( bc)
127
- } else {
128
- assert ! ( len == 0 ) ;
129
- Err ( LtoBitcodeFromRlib {
130
- llvm_err : llvm:: last_error ( ) . unwrap_or_else ( || "unknown LLVM error" . to_string ( ) ) ,
131
- } )
132
- }
113
+ let section = obj
114
+ . section_by_name ( section_name)
115
+ . ok_or_else ( || LtoBitcodeFromRlib { err : format ! ( "Can't find section {section_name}" ) } ) ?;
116
+
117
+ section. data ( ) . map_err ( |err| LtoBitcodeFromRlib { err : err. to_string ( ) } )
133
118
}
134
119
135
120
/// Performs fat LTO by merging all modules into a single one and returning it
0 commit comments