@@ -203,8 +203,6 @@ fn prefix_and_suffix<'tcx>(
203203 let mut end = String :: new ( ) ;
204204 match asm_binary_format {
205205 BinaryFormat :: Elf => {
206- let section = link_section. unwrap_or_else ( || format ! ( ".text.{asm_name}" ) ) ;
207-
208206 let progbits = match is_arm {
209207 true => "%progbits" ,
210208 false => "@progbits" ,
@@ -215,7 +213,11 @@ fn prefix_and_suffix<'tcx>(
215213 false => "@function" ,
216214 } ;
217215
218- writeln ! ( begin, ".pushsection {section},\" ax\" , {progbits}" ) . unwrap ( ) ;
216+ if let Some ( section) = & link_section {
217+ writeln ! ( begin, ".pushsection {section},\" ax\" , {progbits}" ) . unwrap ( ) ;
218+ } else if function_sections {
219+ writeln ! ( begin, ".pushsection .text.{asm_name},\" ax\" , {progbits}" ) . unwrap ( ) ;
220+ }
219221 writeln ! ( begin, ".balign {align_bytes}" ) . unwrap ( ) ;
220222 write_linkage ( & mut begin) . unwrap ( ) ;
221223 match item_data. visibility {
@@ -234,14 +236,19 @@ fn prefix_and_suffix<'tcx>(
234236 // pattern match on assembly generated by LLVM.
235237 writeln ! ( end, ".Lfunc_end_{asm_name}:" ) . unwrap ( ) ;
236238 writeln ! ( end, ".size {asm_name}, . - {asm_name}" ) . unwrap ( ) ;
237- writeln ! ( end, ".popsection" ) . unwrap ( ) ;
239+ if link_section. is_some ( ) || function_sections {
240+ writeln ! ( end, ".popsection" ) . unwrap ( ) ;
241+ }
238242 if !arch_suffix. is_empty ( ) {
239243 writeln ! ( end, "{}" , arch_suffix) . unwrap ( ) ;
240244 }
241245 }
242246 BinaryFormat :: MachO => {
243- let section = link_section. unwrap_or_else ( || "__TEXT,__text" . to_string ( ) ) ;
244- writeln ! ( begin, ".pushsection {},regular,pure_instructions" , section) . unwrap ( ) ;
247+ if let Some ( section) = & link_section {
248+ writeln ! ( begin, ".pushsection {section},regular,pure_instructions" ) . unwrap ( ) ;
249+ } else if function_sections {
250+ writeln ! ( begin, ".pushsection __TEXT,__text,regular,pure_instructions" ) . unwrap ( ) ;
251+ }
245252 writeln ! ( begin, ".balign {align_bytes}" ) . unwrap ( ) ;
246253 write_linkage ( & mut begin) . unwrap ( ) ;
247254 match item_data. visibility {
@@ -252,7 +259,9 @@ fn prefix_and_suffix<'tcx>(
252259
253260 writeln ! ( end) . unwrap ( ) ;
254261 writeln ! ( end, ".Lfunc_end_{asm_name}:" ) . unwrap ( ) ;
255- writeln ! ( end, ".popsection" ) . unwrap ( ) ;
262+ if link_section. is_some ( ) || function_sections {
263+ writeln ! ( end, ".popsection" ) . unwrap ( ) ;
264+ }
256265 if !arch_suffix. is_empty ( ) {
257266 writeln ! ( end, "{}" , arch_suffix) . unwrap ( ) ;
258267 }
0 commit comments