@@ -6,6 +6,7 @@ use rustc_ast::ast::{InlineAsmOptions, InlineAsmTemplatePiece};
6
6
use rustc_middle:: mir:: InlineAsmOperand ;
7
7
use rustc_span:: sym;
8
8
use rustc_target:: asm:: * ;
9
+ use target_lexicon:: BinaryFormat ;
9
10
10
11
use crate :: prelude:: * ;
11
12
@@ -589,11 +590,29 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
589
590
}
590
591
591
592
fn generate_asm_wrapper ( & self , asm_name : & str ) -> String {
593
+ let binary_format = crate :: target_triple ( self . tcx . sess ) . binary_format ;
594
+
592
595
let mut generated_asm = String :: new ( ) ;
593
- writeln ! ( generated_asm, ".globl {}" , asm_name) . unwrap ( ) ;
594
- writeln ! ( generated_asm, ".type {},@function" , asm_name) . unwrap ( ) ;
595
- writeln ! ( generated_asm, ".section .text.{},\" ax\" ,@progbits" , asm_name) . unwrap ( ) ;
596
- writeln ! ( generated_asm, "{}:" , asm_name) . unwrap ( ) ;
596
+ match binary_format {
597
+ BinaryFormat :: Elf => {
598
+ writeln ! ( generated_asm, ".globl {}" , asm_name) . unwrap ( ) ;
599
+ writeln ! ( generated_asm, ".type {},@function" , asm_name) . unwrap ( ) ;
600
+ writeln ! ( generated_asm, ".section .text.{},\" ax\" ,@progbits" , asm_name) . unwrap ( ) ;
601
+ writeln ! ( generated_asm, "{}:" , asm_name) . unwrap ( ) ;
602
+ }
603
+ BinaryFormat :: Macho => {
604
+ writeln ! ( generated_asm, ".globl _{}" , asm_name) . unwrap ( ) ;
605
+ writeln ! ( generated_asm, "_{}:" , asm_name) . unwrap ( ) ;
606
+ }
607
+ BinaryFormat :: Coff => {
608
+ writeln ! ( generated_asm, ".globl {}" , asm_name) . unwrap ( ) ;
609
+ writeln ! ( generated_asm, "{}:" , asm_name) . unwrap ( ) ;
610
+ }
611
+ _ => self
612
+ . tcx
613
+ . sess
614
+ . fatal ( format ! ( "Unsupported binary format for inline asm: {binary_format:?}" ) ) ,
615
+ }
597
616
598
617
let is_x86 = matches ! ( self . arch, InlineAsmArch :: X86 | InlineAsmArch :: X86_64 ) ;
599
618
@@ -690,8 +709,19 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
690
709
if is_x86 {
691
710
generated_asm. push_str ( ".att_syntax\n " ) ;
692
711
}
693
- writeln ! ( generated_asm, ".size {name}, .-{name}" , name = asm_name) . unwrap ( ) ;
694
- generated_asm. push_str ( ".text\n " ) ;
712
+
713
+ match binary_format {
714
+ BinaryFormat :: Elf => {
715
+ writeln ! ( generated_asm, ".size {name}, .-{name}" , name = asm_name) . unwrap ( ) ;
716
+ generated_asm. push_str ( ".text\n " ) ;
717
+ }
718
+ BinaryFormat :: Macho | BinaryFormat :: Coff => { }
719
+ _ => self
720
+ . tcx
721
+ . sess
722
+ . fatal ( format ! ( "Unsupported binary format for inline asm: {binary_format:?}" ) ) ,
723
+ }
724
+
695
725
generated_asm. push_str ( "\n \n " ) ;
696
726
697
727
generated_asm
0 commit comments