/* Copyright 2009 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.

   This file is part of the gdb testsuite.
   It tests displaced stepping over various insns that require special
   handling.  */

	.text

	.global main
main:
	nop

/***********************************************/

/* test call/ret */

	.global test_call
test_call:
	call test_call_subr
	nop
	.global test_ret_end
test_ret_end:
	nop

/***********************************************/

/* test abs-jmp/rep-ret */

test_abs_jmp_setup:
	mov $test_abs_jmp_return,%rdx
	push %rdx
	mov $test_abs_jmp_subr,%rdx
	.global test_abs_jmp
test_abs_jmp:
	jmp *%rdx
test_abs_jmp_return:
	nop
	.global test_rep_ret_end
test_rep_ret_end:
	nop

/***********************************************/

/* test syscall */

	.global test_syscall
	mov $0x27,%eax /* getpid */
test_syscall:
	syscall
	nop
test_syscall_end:
	nop

/***********************************************/

/* Test stepping over int3.
   The prefixes are pointless, but it's possible, so we exercise it.  */

	nop
	.global test_int3
test_int3:
	repz
	repz
	int3
	nop
	.global test_int3_end
test_int3_end:
	nop

/***********************************************/

/* test rip-relative
   GDB picks a spare register to hold the rip-relative address.
   Exercise all the possibilities (rax-rdi, sans rsp).  */

	.global test_rip_rax
test_rip_rax:
	add answer(%rip),%rax
	.global test_rip_rax_end
test_rip_rax_end:
	nop

	.global test_rip_rbx
test_rip_rbx:
	add answer(%rip),%rbx
	.global test_rip_rbx_end
test_rip_rbx_end:
	nop

	.global test_rip_rcx
test_rip_rcx:
	add answer(%rip),%rcx
	.global test_rip_rcx_end
test_rip_rcx_end:
	nop

	.global test_rip_rdx
test_rip_rdx:
	add answer(%rip),%rdx
	.global test_rip_rdx_end
test_rip_rdx_end:
	nop

	.global test_rip_rbp
test_rip_rbp:
	add answer(%rip),%rbp
	.global test_rip_rbp_end
test_rip_rbp_end:
	nop

	.global test_rip_rsi
test_rip_rsi:
	add answer(%rip),%rsi
	.global test_rip_rsi_end
test_rip_rsi_end:
	nop

	.global test_rip_rdi
test_rip_rdi:
	add answer(%rip),%rdi
	.global test_rip_rdi_end
test_rip_rdi_end:
	nop

	/* skip over test data */
	jmp done

/* test rip-relative data */

answer:	.8byte 42

/***********************************************/

/* all done */

done:
	mov $0,%rdi
	call exit
	hlt

/***********************************************/

/* subroutine to help test call/ret */

test_call_subr:
	nop
	.global test_call_end
test_call_end:
	nop

	.global test_ret
test_ret:
	ret

/***********************************************/

/* subroutine to help test abs-jmp/rep-ret */

test_abs_jmp_subr:
	nop
	.global test_abs_jmp_end
test_abs_jmp_end:
	nop

	.global test_rep_ret
test_rep_ret:
	repz
	ret
