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: }
 |