summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp8
-rw-r--r--llvm/test/MC/X86/fp-setup-macho.s11
2 files changed, 17 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
index 524b48b9aab..1bde4bcfa29 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
@@ -546,8 +546,12 @@ protected:
// .cfi_def_cfa_register %rbp
//
HasFP = true;
- assert(MRI.getLLVMRegNum(Inst.getRegister(), true) ==
- (Is64Bit ? X86::RBP : X86::EBP) && "Invalid frame pointer!");
+
+ // If the frame pointer is other than esp/rsp, we do not have a way to
+ // generate a compact unwinding representation, so bail out.
+ if (MRI.getLLVMRegNum(Inst.getRegister(), true) !=
+ (Is64Bit ? X86::RBP : X86::EBP))
+ return 0;
// Reset the counts.
memset(SavedRegs, 0, sizeof(SavedRegs));
diff --git a/llvm/test/MC/X86/fp-setup-macho.s b/llvm/test/MC/X86/fp-setup-macho.s
new file mode 100644
index 00000000000..aaae07a48c0
--- /dev/null
+++ b/llvm/test/MC/X86/fp-setup-macho.s
@@ -0,0 +1,11 @@
+// RUN: llvm-mc -triple x86_64-apple-macho -filetype obj -o - %s | llvm-readobj -sections | FileCheck %s
+
+_label:
+ .cfi_startproc
+ .cfi_def_cfa_register rsp
+ .cfi_endproc
+
+// CHECK: Section {
+// CHECK: Name: __eh_frame
+// CHECK: }
+
OpenPOWER on IntegriCloud