merge from gcc
[external/binutils.git] / gas / testsuite / gas / cfi / cfi-x86_64.s
index 10035ad..65c2aa2 100644 (file)
@@ -1,5 +1,3 @@
-#; $ as -o test.o gas-cfi-test.s && gcc -nostdlib -o test test.o
-
        .text
 
 #; func_locvars
@@ -35,9 +33,9 @@ func_prologue:
        #; each instruction.
        pushq   %rbp
        .cfi_def_cfa_offset     16
-       .cfi_offset             rbp,-16
+       .cfi_offset             %rbp, -16
        movq    %rsp, %rbp
-       .cfi_def_cfa_register   rbp
+       .cfi_def_cfa_register   %rbp
 
        #; function body
        call    func_locvars
@@ -46,7 +44,7 @@ func_prologue:
        #; epilogue with valid CFI
        #; (we're better than gcc :-)
        leaveq
-       .cfi_def_cfa            rsp,8
+       .cfi_def_cfa            %rsp, 8
        ret
        .cfi_endproc
 
@@ -59,21 +57,21 @@ func_prologue:
 func_otherreg:
        .cfi_startproc
 
-       #; save frame pointer to r12
-       movq    %rsp,%r12
-       .cfi_def_cfa_register   r12
+       #; save frame pointer to r8
+       movq    %rsp,%r8
+       .cfi_def_cfa_register   r8
 
        #; alocate space for local vars
        #;  (no .cfi_{def,adjust}_cfa_offset here,
-       #;   because CFA is computed from r12!)
+       #;   because CFA is computed from r8!)
        sub     $100,%rsp
 
        #; function body
        call    func_prologue
        addl    $2, %eax
        
-       #; restore frame pointer from r12
-       movq    %r12,%rsp
+       #; restore frame pointer from r8
+       movq    %r8,%rsp
        .cfi_def_cfa_register   rsp
        ret
        .cfi_endproc
@@ -105,3 +103,112 @@ _start:
        syscall
        hlt
        .cfi_endproc
+
+#; func_alldirectives
+#; - test for all .cfi directives. 
+#;   This function is never called and the CFI info doesn't make sense.
+
+       .type   func_alldirectives,@function
+func_alldirectives:
+       .cfi_startproc simple
+       .cfi_def_cfa    rsp,8
+       nop
+       .cfi_def_cfa_offset     16
+       nop
+       .cfi_def_cfa_register   r8
+       nop
+       .cfi_adjust_cfa_offset  0x1234
+       nop
+       .cfi_offset     %rsi, 0x10
+       nop
+       .cfi_register   %r8, %r9
+       nop
+       .cfi_remember_state
+       nop
+       .cfi_restore %rbp
+       nop
+       .cfi_undefined %rip
+       nop
+       .cfi_same_value rbx
+       nop
+       .cfi_restore_state
+       ret
+       .cfi_endproc
+
+#; func_all_registers
+#; - test for all .cfi register numbers. 
+#;   This function is never called and the CFI info doesn't make sense.
+
+       .type   func_all_registers,@function
+func_all_registers:
+       .cfi_startproc simple
+
+       .cfi_undefined rip      ; nop
+       .cfi_undefined rax      ; nop
+       .cfi_undefined rcx      ; nop
+       .cfi_undefined rdx      ; nop
+       .cfi_undefined rbx      ; nop
+       .cfi_undefined rsp      ; nop
+       .cfi_undefined rbp      ; nop
+       .cfi_undefined rsi      ; nop
+       .cfi_undefined rdi      ; nop
+       .cfi_undefined r8       ; nop
+       .cfi_undefined r9       ; nop
+       .cfi_undefined r10      ; nop
+       .cfi_undefined r11      ; nop
+       .cfi_undefined r12      ; nop
+       .cfi_undefined r13      ; nop
+       .cfi_undefined r14      ; nop
+       .cfi_undefined r15      ; nop
+       .cfi_undefined rflags   ; nop
+
+       .cfi_undefined es       ; nop
+       .cfi_undefined cs       ; nop
+       .cfi_undefined ds       ; nop
+       .cfi_undefined ss       ; nop
+       .cfi_undefined fs       ; nop
+       .cfi_undefined gs       ; nop
+       .cfi_undefined tr       ; nop
+       .cfi_undefined ldtr     ; nop
+       .cfi_undefined fs.base  ; nop
+       .cfi_undefined gs.base  ; nop
+
+       .cfi_undefined mxcsr    ; nop
+       .cfi_undefined xmm0     ; nop
+       .cfi_undefined xmm1     ; nop
+       .cfi_undefined xmm2     ; nop
+       .cfi_undefined xmm3     ; nop
+       .cfi_undefined xmm4     ; nop
+       .cfi_undefined xmm5     ; nop
+       .cfi_undefined xmm6     ; nop
+       .cfi_undefined xmm7     ; nop
+       .cfi_undefined xmm8     ; nop
+       .cfi_undefined xmm9     ; nop
+       .cfi_undefined xmm10    ; nop
+       .cfi_undefined xmm11    ; nop
+       .cfi_undefined xmm12    ; nop
+       .cfi_undefined xmm13    ; nop
+       .cfi_undefined xmm14    ; nop
+       .cfi_undefined xmm15    ; nop
+
+       .cfi_undefined fcw      ; nop
+       .cfi_undefined fsw      ; nop
+       .cfi_undefined st       ; nop
+       .cfi_undefined st(1)    ; nop
+       .cfi_undefined st(2)    ; nop
+       .cfi_undefined st(3)    ; nop
+       .cfi_undefined st(4)    ; nop
+       .cfi_undefined st(5)    ; nop
+       .cfi_undefined st(6)    ; nop
+       .cfi_undefined st(7)    ; nop
+
+       .cfi_undefined mm0      ; nop
+       .cfi_undefined mm1      ; nop
+       .cfi_undefined mm2      ; nop
+       .cfi_undefined mm3      ; nop
+       .cfi_undefined mm4      ; nop
+       .cfi_undefined mm5      ; nop
+       .cfi_undefined mm6      ; nop
+       .cfi_undefined mm7      ; nop
+
+       .cfi_endproc