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