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