@@ -6,6 +6,7 @@ use rustc_ast::ast::{InlineAsmOptions, InlineAsmTemplatePiece};
66use rustc_middle:: mir:: InlineAsmOperand ;
77use rustc_span:: sym;
88use rustc_target:: asm:: * ;
9+ use target_lexicon:: BinaryFormat ;
910
1011use crate :: prelude:: * ;
1112
@@ -589,11 +590,29 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
589590 }
590591
591592 fn generate_asm_wrapper ( & self , asm_name : & str ) -> String {
593+ let binary_format = crate :: target_triple ( self . tcx . sess ) . binary_format ;
594+
592595 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+ }
597616
598617 let is_x86 = matches ! ( self . arch, InlineAsmArch :: X86 | InlineAsmArch :: X86_64 ) ;
599618
@@ -690,8 +709,19 @@ impl<'tcx> InlineAssemblyGenerator<'_, 'tcx> {
690709 if is_x86 {
691710 generated_asm. push_str ( ".att_syntax\n " ) ;
692711 }
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+
695725 generated_asm. push_str ( "\n \n " ) ;
696726
697727 generated_asm
0 commit comments