diff options
-rw-r--r-- | llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp | 8 | ||||
-rw-r--r-- | llvm/test/MC/X86/fp-setup-macho.s | 11 |
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: } + |