[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