@@ -220,8 +220,6 @@ fn prefix_and_suffix<'tcx>(
220220 let mut end = String :: new ( ) ;
221221 match asm_binary_format {
222222 BinaryFormat :: Elf => {
223- let section = link_section. unwrap_or_else ( || format ! ( ".text.{asm_name}" ) ) ;
224-
225223 let progbits = match is_arm {
226224 true => "%progbits" ,
227225 false => "@progbits" ,
@@ -232,7 +230,11 @@ fn prefix_and_suffix<'tcx>(
232230 false => "@function" ,
233231 } ;
234232
235- writeln ! ( begin, ".pushsection {section},\" ax\" , {progbits}" ) . unwrap ( ) ;
233+ if let Some ( section) = & link_section {
234+ writeln ! ( begin, ".pushsection {section},\" ax\" , {progbits}" ) . unwrap ( ) ;
235+ } else if function_sections {
236+ writeln ! ( begin, ".pushsection .text.{asm_name},\" ax\" , {progbits}" ) . unwrap ( ) ;
237+ }
236238 writeln ! ( begin, ".balign {align_bytes}" ) . unwrap ( ) ;
237239 write_linkage ( & mut begin) . unwrap ( ) ;
238240 match visibility {
@@ -251,14 +253,18 @@ fn prefix_and_suffix<'tcx>(
251253 // pattern match on assembly generated by LLVM.
252254 writeln ! ( end, ".Lfunc_end_{asm_name}:" ) . unwrap ( ) ;
253255 writeln ! ( end, ".size {asm_name}, . - {asm_name}" ) . unwrap ( ) ;
254- writeln ! ( end, ".popsection" ) . unwrap ( ) ;
256+ if link_section. is_some ( ) || function_sections {
257+ writeln ! ( end, ".popsection" ) . unwrap ( ) ;
258+ }
255259 if !arch_suffix. is_empty ( ) {
256260 writeln ! ( end, "{}" , arch_suffix) . unwrap ( ) ;
257261 }
258262 }
259263 BinaryFormat :: MachO => {
260- let section = link_section. unwrap_or_else ( || "__TEXT,__text" . to_string ( ) ) ;
261- writeln ! ( begin, ".pushsection {},regular,pure_instructions" , section) . unwrap ( ) ;
264+ // NOTE: LLVM ignores `-Zfunction-sections` on macos.
265+ if let Some ( section) = & link_section {
266+ writeln ! ( begin, ".pushsection {section},regular,pure_instructions" ) . unwrap ( ) ;
267+ }
262268 writeln ! ( begin, ".balign {align_bytes}" ) . unwrap ( ) ;
263269 write_linkage ( & mut begin) . unwrap ( ) ;
264270 match visibility {
@@ -269,7 +275,9 @@ fn prefix_and_suffix<'tcx>(
269275
270276 writeln ! ( end) . unwrap ( ) ;
271277 writeln ! ( end, ".Lfunc_end_{asm_name}:" ) . unwrap ( ) ;
272- writeln ! ( end, ".popsection" ) . unwrap ( ) ;
278+ if link_section. is_some ( ) {
279+ writeln ! ( end, ".popsection" ) . unwrap ( ) ;
280+ }
273281 if !arch_suffix. is_empty ( ) {
274282 writeln ! ( end, "{}" , arch_suffix) . unwrap ( ) ;
275283 }
0 commit comments