/* Copyright 2009-2021 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.  */

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

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

/* Absolute jump with leading prefixes.
   These don't occur in normal code, but gdb should still DTRT.  */

	nop
	.global test_prefixed_abs_jump
test_prefixed_abs_jump:
	ds
	jmp *test_prefixed_abs_jump_addr
	.data
test_prefixed_abs_jump_addr:
	.4byte test_prefixed_abs_jump_target
	.text
test_prefixed_abs_jump_target:
	nop
	.global test_prefixed_abs_jump_end
test_prefixed_abs_jump_end:
	nop

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

/* Test syscall.  */

	mov $0x14,%eax /* getpid */
	.global test_syscall
test_syscall:
	int $0x80
	nop
	.global test_syscall_end
test_syscall_end:
	nop

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

/* Test syscall again, this time with a prefix.
   These don't occur in normal code, but gdb should still DTRT.  */

	mov $0x14,%eax /* getpid */
	.global test_prefixed_syscall
test_prefixed_syscall:
	repnz
	int $0x80
	nop
	.global test_prefixed_syscall_end
test_prefixed_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

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

/* all done */

	pushl $0
	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
