@@ -8,7 +8,7 @@ use std::path::Path;
8
8
use object:: write:: { self , StandardSegment , Symbol , SymbolSection } ;
9
9
use object:: {
10
10
elf, pe, xcoff, Architecture , BinaryFormat , Endianness , FileFlags , Object , ObjectSection ,
11
- ObjectSymbol , SectionFlags , SectionKind , SymbolFlags , SymbolKind , SymbolScope ,
11
+ ObjectSymbol , SectionFlags , SectionKind , SubArchitecture , SymbolFlags , SymbolKind , SymbolScope ,
12
12
} ;
13
13
14
14
use rustc_data_structures:: memmap:: Mmap ;
@@ -182,37 +182,40 @@ pub(crate) fn create_object_file(sess: &Session) -> Option<write::Object<'static
182
182
Endian :: Little => Endianness :: Little ,
183
183
Endian :: Big => Endianness :: Big ,
184
184
} ;
185
- let architecture = match & sess. target . arch [ ..] {
186
- "arm" => Architecture :: Arm ,
187
- "aarch64" => {
185
+ let ( architecture, sub_architecture ) = match & sess. target . arch [ ..] {
186
+ "arm" => ( Architecture :: Arm , None ) ,
187
+ "aarch64" => (
188
188
if sess. target . pointer_width == 32 {
189
189
Architecture :: Aarch64_Ilp32
190
190
} else {
191
191
Architecture :: Aarch64
192
- }
193
- }
194
- "x86" => Architecture :: I386 ,
195
- "s390x" => Architecture :: S390x ,
196
- "mips" | "mips32r6" => Architecture :: Mips ,
197
- "mips64" | "mips64r6" => Architecture :: Mips64 ,
198
- "x86_64" => {
192
+ } ,
193
+ None ,
194
+ ) ,
195
+ "x86" => ( Architecture :: I386 , None ) ,
196
+ "s390x" => ( Architecture :: S390x , None ) ,
197
+ "mips" | "mips32r6" => ( Architecture :: Mips , None ) ,
198
+ "mips64" | "mips64r6" => ( Architecture :: Mips64 , None ) ,
199
+ "x86_64" => (
199
200
if sess. target . pointer_width == 32 {
200
201
Architecture :: X86_64_X32
201
202
} else {
202
203
Architecture :: X86_64
203
- }
204
- }
205
- "powerpc" => Architecture :: PowerPc ,
206
- "powerpc64" => Architecture :: PowerPc64 ,
207
- "riscv32" => Architecture :: Riscv32 ,
208
- "riscv64" => Architecture :: Riscv64 ,
209
- "sparc64" => Architecture :: Sparc64 ,
210
- "avr" => Architecture :: Avr ,
211
- "msp430" => Architecture :: Msp430 ,
212
- "hexagon" => Architecture :: Hexagon ,
213
- "bpf" => Architecture :: Bpf ,
214
- "loongarch64" => Architecture :: LoongArch64 ,
215
- "csky" => Architecture :: Csky ,
204
+ } ,
205
+ None ,
206
+ ) ,
207
+ "powerpc" => ( Architecture :: PowerPc , None ) ,
208
+ "powerpc64" => ( Architecture :: PowerPc64 , None ) ,
209
+ "riscv32" => ( Architecture :: Riscv32 , None ) ,
210
+ "riscv64" => ( Architecture :: Riscv64 , None ) ,
211
+ "sparc64" => ( Architecture :: Sparc64 , None ) ,
212
+ "avr" => ( Architecture :: Avr , None ) ,
213
+ "msp430" => ( Architecture :: Msp430 , None ) ,
214
+ "hexagon" => ( Architecture :: Hexagon , None ) ,
215
+ "bpf" => ( Architecture :: Bpf , None ) ,
216
+ "loongarch64" => ( Architecture :: LoongArch64 , None ) ,
217
+ "csky" => ( Architecture :: Csky , None ) ,
218
+ "arm64ec" => ( Architecture :: Aarch64 , Some ( SubArchitecture :: Arm64EC ) ) ,
216
219
// Unsupported architecture.
217
220
_ => return None ,
218
221
} ;
@@ -227,6 +230,7 @@ pub(crate) fn create_object_file(sess: &Session) -> Option<write::Object<'static
227
230
} ;
228
231
229
232
let mut file = write:: Object :: new ( binary_format, architecture, endianness) ;
233
+ file. set_sub_architecture ( sub_architecture) ;
230
234
if sess. target . is_like_osx {
231
235
if macho_is_arm64e ( & sess. target ) {
232
236
file. set_macho_cpu_subtype ( object:: macho:: CPU_SUBTYPE_ARM64E ) ;
0 commit comments