1// RUN: llvm-mc -triple x86_64-apple-darwin -filetype=obj %s -o - | llvm-readobj -sections | FileCheck %s 2 3// We were trying to generate compact unwind info for assembly like this. 4// The .cfi_def_cfa directive, however, throws a wrench into that and was 5// causing an llvm_unreachable() failure. Make sure the assembler can handle 6// the input. The actual eh_frames created using these directives are checked 7// elsewhere. This test is a simpler "does the code assemble" check. 8 9// rdar://15406518 10 11.macro SaveRegisters 12 13 push %rbp 14 .cfi_def_cfa_offset 16 15 .cfi_offset rbp, -16 16 17 mov %rsp, %rbp 18 .cfi_def_cfa_register rbp 19 20 sub $$0x80+8, %rsp 21 22 movdqa %xmm0, -0x80(%rbp) 23 push %rax 24 movdqa %xmm1, -0x70(%rbp) 25 push %rdi 26 movdqa %xmm2, -0x60(%rbp) 27 push %rsi 28 movdqa %xmm3, -0x50(%rbp) 29 push %rdx 30 movdqa %xmm4, -0x40(%rbp) 31 push %rcx 32 movdqa %xmm5, -0x30(%rbp) 33 push %r8 34 movdqa %xmm6, -0x20(%rbp) 35 push %r9 36 movdqa %xmm7, -0x10(%rbp) 37 38.endmacro 39.macro RestoreRegisters 40 41 movdqa -0x80(%rbp), %xmm0 42 pop %r9 43 movdqa -0x70(%rbp), %xmm1 44 pop %r8 45 movdqa -0x60(%rbp), %xmm2 46 pop %rcx 47 movdqa -0x50(%rbp), %xmm3 48 pop %rdx 49 movdqa -0x40(%rbp), %xmm4 50 pop %rsi 51 movdqa -0x30(%rbp), %xmm5 52 pop %rdi 53 movdqa -0x20(%rbp), %xmm6 54 pop %rax 55 movdqa -0x10(%rbp), %xmm7 56 57 leave 58 .cfi_def_cfa rsp, 8 59 .cfi_same_value rbp 60 61.endmacro 62 63_foo: 64.cfi_startproc 65 SaveRegisters 66 67 RestoreRegisters 68 ret 69 .cfi_endproc 70 71// CHECK: Section { 72// CHECK: Index: 1 73// CHECK: Name: __eh_frame (5F 5F 65 68 5F 66 72 61 6D 65 00 00 00 00 00 00) 74// CHECK: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00) 75// CHECK: Address: 0x70 76// CHECK: Size: 0x40 77// CHECK: Offset: 480 78// CHECK: Alignment: 3 79// CHECK: RelocationOffset: 0x0 80// CHECK: RelocationCount: 0 81// CHECK: Type: 0xB 82// CHECK: Attributes [ (0x680000) 83// CHECK: LiveSupport (0x80000) 84// CHECK: NoTOC (0x400000) 85// CHECK: StripStaticSyms (0x200000) 86// CHECK: ] 87// CHECK: Reserved1: 0x0 88// CHECK: Reserved2: 0x0 89// CHECK: } 90