forked from OSchip/llvm-project
90 lines
2.0 KiB
ArmAsm
90 lines
2.0 KiB
ArmAsm
// RUN: llvm-mc -triple x86_64-apple-darwin -filetype=obj %s -o - | llvm-readobj --sections | FileCheck %s
|
|
|
|
// We were trying to generate compact unwind info for assembly like this.
|
|
// The .cfi_def_cfa directive, however, throws a wrench into that and was
|
|
// causing an llvm_unreachable() failure. Make sure the assembler can handle
|
|
// the input. The actual eh_frames created using these directives are checked
|
|
// elsewhere. This test is a simpler "does the code assemble" check.
|
|
|
|
// rdar://15406518
|
|
|
|
.macro SaveRegisters
|
|
|
|
push %rbp
|
|
.cfi_def_cfa_offset 16
|
|
.cfi_offset rbp, -16
|
|
|
|
mov %rsp, %rbp
|
|
.cfi_def_cfa_register rbp
|
|
|
|
sub $$0x80+8, %rsp
|
|
|
|
movdqa %xmm0, -0x80(%rbp)
|
|
push %rax
|
|
movdqa %xmm1, -0x70(%rbp)
|
|
push %rdi
|
|
movdqa %xmm2, -0x60(%rbp)
|
|
push %rsi
|
|
movdqa %xmm3, -0x50(%rbp)
|
|
push %rdx
|
|
movdqa %xmm4, -0x40(%rbp)
|
|
push %rcx
|
|
movdqa %xmm5, -0x30(%rbp)
|
|
push %r8
|
|
movdqa %xmm6, -0x20(%rbp)
|
|
push %r9
|
|
movdqa %xmm7, -0x10(%rbp)
|
|
|
|
.endmacro
|
|
.macro RestoreRegisters
|
|
|
|
movdqa -0x80(%rbp), %xmm0
|
|
pop %r9
|
|
movdqa -0x70(%rbp), %xmm1
|
|
pop %r8
|
|
movdqa -0x60(%rbp), %xmm2
|
|
pop %rcx
|
|
movdqa -0x50(%rbp), %xmm3
|
|
pop %rdx
|
|
movdqa -0x40(%rbp), %xmm4
|
|
pop %rsi
|
|
movdqa -0x30(%rbp), %xmm5
|
|
pop %rdi
|
|
movdqa -0x20(%rbp), %xmm6
|
|
pop %rax
|
|
movdqa -0x10(%rbp), %xmm7
|
|
|
|
leave
|
|
.cfi_def_cfa rsp, 8
|
|
.cfi_same_value rbp
|
|
|
|
.endmacro
|
|
|
|
_foo:
|
|
.cfi_startproc
|
|
SaveRegisters
|
|
|
|
RestoreRegisters
|
|
ret
|
|
.cfi_endproc
|
|
|
|
// CHECK: Section {
|
|
// CHECK: Index: 1
|
|
// CHECK: Name: __eh_frame (5F 5F 65 68 5F 66 72 61 6D 65 00 00 00 00 00 00)
|
|
// CHECK: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
|
|
// CHECK: Address: 0x70
|
|
// CHECK: Size: 0x40
|
|
// CHECK: Offset: 480
|
|
// CHECK: Alignment: 3
|
|
// CHECK: RelocationOffset: 0x0
|
|
// CHECK: RelocationCount: 0
|
|
// CHECK: Type: 0xB
|
|
// CHECK: Attributes [ (0x680000)
|
|
// CHECK: LiveSupport (0x80000)
|
|
// CHECK: NoTOC (0x400000)
|
|
// CHECK: StripStaticSyms (0x200000)
|
|
// CHECK: ]
|
|
// CHECK: Reserved1: 0x0
|
|
// CHECK: Reserved2: 0x0
|
|
// CHECK: }
|