[MC][MachO]Do not emit DWARF for no-personality case
authoroontvoo <vyng@google.com>
Mon, 12 Jun 2023 12:16:08 +0000 (08:16 -0400)
committerVy Nguyen <vyng@google.com>
Mon, 12 Jun 2023 13:36:56 +0000 (09:36 -0400)
Detail: Follow up to D144999, where we emitted DWARF for non-canonical personality.

Reviewed By: jyknight

Differential Revision: https://reviews.llvm.org/D152540

llvm/lib/MC/MCAsmBackend.cpp
llvm/test/MC/MachO/AArch64/darwin-ARM64-no-personality.s [new file with mode: 0644]
llvm/test/MC/MachO/darwin-x86_64-no-personality.s [new file with mode: 0644]

index cf3b3ae..75db32e 100644 (file)
@@ -117,12 +117,17 @@ bool MCAsmBackend::fixupNeedsRelaxationAdvanced(
 }
 
 bool MCAsmBackend::isDarwinCanonicalPersonality(const MCSymbol *Sym) const {
-  if (Sym && Sym->isMachO()) {
-    StringRef name = Sym->getName();
-    // XXX: We intentionally leave out "___gcc_personality_v0" because, despite
-    // being system-defined like these two, it is not very commonly-used.
-    // Reserving an empty slot for it seems silly.
-    return name == "___gxx_personality_v0" || name == "___objc_personality_v0";
-  }
-  return false;
+  // Consider a NULL personality (ie., no personality encoding) to be canonical
+  // because it's always at 0.
+  if (!Sym)
+    return true;
+
+  if (!Sym->isMachO())
+    llvm_unreachable("Expected MachO symbols only");
+
+  StringRef name = Sym->getName();
+  // XXX: We intentionally leave out "___gcc_personality_v0" because, despite
+  // being system-defined like these two, it is not very commonly-used.
+  // Reserving an empty slot for it seems silly.
+  return name == "___gxx_personality_v0" || name == "___objc_personality_v0";
 }
diff --git a/llvm/test/MC/MachO/AArch64/darwin-ARM64-no-personality.s b/llvm/test/MC/MachO/AArch64/darwin-ARM64-no-personality.s
new file mode 100644 (file)
index 0000000..da9077e
--- /dev/null
@@ -0,0 +1,73 @@
+# RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos11.0 %s | llvm-objdump --unwind-info - | FileCheck %s
+
+# Check that we emit the right encoding for the no-personality case.
+
+# CHECK: Contents of __compact_unwind section:
+# CHECK:  Entry at offset {{.+}}
+# CHECK:    start:                {{.+}} ltmp0
+# CHECK:    length:               {{.+}}
+# CHECK:    compact encoding:     0x02001000
+# CHECK:  Entry at offset {{.+}}
+# CHECK:    start:                {{.+}} __Z3foov
+# CHECK:    length:               {{.+}}
+# CHECK:    compact encoding:     0x04000000
+# CHECK:  Entry at offset {{.+}}
+# CHECK:    start:                {{.+}} _main
+# CHECK:    length:               {{.+}}
+# CHECK:    compact encoding:     0x04000000
+
+
+               .section        __TEXT,__text,regular,pure_instructions
+       .build_version macos, 11, 0
+       .globl  __Z3barPi                     
+       .p2align        2
+__Z3barPi:         
+       .cfi_startproc
+       sub     sp, sp, #16
+       .cfi_def_cfa_offset 16
+       str     x0, [sp, #8]
+       add     sp, sp, #16
+       ret
+       .cfi_endproc
+
+       .globl  __Z3foov           
+       .p2align        2
+__Z3foov:                             
+       .cfi_startproc
+
+       sub     sp, sp, #32
+       .cfi_def_cfa_offset 32
+       stp     x29, x30, [sp, #16]   
+       add     x29, sp, #16
+       .cfi_def_cfa w29, 16
+       .cfi_offset w30, -8
+       .cfi_offset w29, -16
+       sub     x0, x29, #4
+       bl      __Z3barPi
+       ldp     x29, x30, [sp, #16]         
+       add     sp, sp, #32
+       ret
+       .cfi_endproc
+                                       
+       .globl  _main                    
+       .p2align        2
+_main:                               
+       .cfi_startproc
+       sub     sp, sp, #32
+       .cfi_def_cfa_offset 32
+       stp     x29, x30, [sp, #16]          
+       add     x29, sp, #16
+       .cfi_def_cfa w29, 16
+       .cfi_offset w30, -8
+       .cfi_offset w29, -16
+       mov     w8, #0                         
+       str     w8, [sp, #8]                  
+       stur    wzr, [x29, #-4]
+       bl      __Z3foov
+       ldr     w0, [sp, #8]                  
+       ldp     x29, x30, [sp, #16]           
+       add     sp, sp, #32
+       ret
+       .cfi_endproc
+
+.subsections_via_symbols
diff --git a/llvm/test/MC/MachO/darwin-x86_64-no-personality.s b/llvm/test/MC/MachO/darwin-x86_64-no-personality.s
new file mode 100644 (file)
index 0000000..e30663d
--- /dev/null
@@ -0,0 +1,68 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin10.0 %s | llvm-objdump --unwind-info - | FileCheck %s
+
+# Check that we emit the right encoding for the no-personality case.
+
+# CHECK: Contents of __compact_unwind section:
+# CHECK:   Entry at offset {{.+}}
+# CHECK:     start:                {{.+}} __Z3barPi
+# CHECK:     length:               {{.+}}
+# CHECK:     compact encoding:     0x01000000
+# CHECK:   Entry at offset {{.+}}
+# CHECK:     start:                {{.+}} __Z3foov
+# CHECK:     length:               {{.+}}
+# CHECK:     compact encoding:     0x01000000
+# CHECK:   Entry at offset {{.+}}
+# CHECK:     start:                {{.+}} _main
+# CHECK:     length:               0x1c
+
+        .section       __TEXT,__text,regular,pure_instructions
+       .globl  __Z3barPi        
+       .p2align        4, 0x90
+__Z3barPi:   
+       .cfi_startproc
+       pushq   %rbp
+       .cfi_def_cfa_offset 16
+       .cfi_offset %rbp, -16
+       movq    %rsp, %rbp
+       .cfi_def_cfa_register %rbp
+       movq    %rdi, -8(%rbp)
+       popq    %rbp
+       retq
+       .cfi_endproc
+
+       .globl  __Z3foov        
+       .p2align        4, 0x90
+__Z3foov:                        
+       .cfi_startproc
+       pushq   %rbp
+       .cfi_def_cfa_offset 16
+       .cfi_offset %rbp, -16
+       movq    %rsp, %rbp
+       .cfi_def_cfa_register %rbp
+       subq    $16, %rsp
+       leaq    -4(%rbp), %rdi
+       callq   __Z3barPi
+       addq    $16, %rsp
+       popq    %rbp
+       retq
+       .cfi_endproc
+
+       .globl  _main          
+       .p2align        4, 0x90
+_main:                       
+       .cfi_startproc
+       pushq   %rbp
+       .cfi_def_cfa_offset 16
+       .cfi_offset %rbp, -16
+       movq    %rsp, %rbp
+       .cfi_def_cfa_register %rbp
+       subq    $16, %rsp
+       movl    $0, -4(%rbp)
+       callq   __Z3foov
+       xorl    %eax, %eax
+       addq    $16, %rsp
+       popq    %rbp
+       retq
+       .cfi_endproc
+
+.subsections_via_symbols