[llvm] 5b1c62c - [MC][MachO]Do not emit DWARF for no-personality case

Vy Nguyen via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 12 06:37:49 PDT 2023


Author: oontvoo
Date: 2023-06-12T09:36:56-04:00
New Revision: 5b1c62c0f2e9a739707429f650cb897c067f86c2

URL: https://github.com/llvm/llvm-project/commit/5b1c62c0f2e9a739707429f650cb897c067f86c2
DIFF: https://github.com/llvm/llvm-project/commit/5b1c62c0f2e9a739707429f650cb897c067f86c2.diff

LOG: [MC][MachO]Do not emit DWARF for no-personality case

Detail: Follow up to D144999, where we emitted DWARF for non-canonical personality.

Reviewed By: jyknight

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

Added: 
    llvm/test/MC/MachO/AArch64/darwin-ARM64-no-personality.s
    llvm/test/MC/MachO/darwin-x86_64-no-personality.s

Modified: 
    llvm/lib/MC/MCAsmBackend.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/MC/MCAsmBackend.cpp b/llvm/lib/MC/MCAsmBackend.cpp
index cf3b3ae63b403..75db32e797f41 100644
--- a/llvm/lib/MC/MCAsmBackend.cpp
+++ b/llvm/lib/MC/MCAsmBackend.cpp
@@ -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
index 0000000000000..da9077e06e8a3
--- /dev/null
+++ b/llvm/test/MC/MachO/AArch64/darwin-ARM64-no-personality.s
@@ -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
index 0000000000000..e30663dfda58b
--- /dev/null
+++ b/llvm/test/MC/MachO/darwin-x86_64-no-personality.s
@@ -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


        


More information about the llvm-commits mailing list