xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/testsuite/gdb.arch/i386-disp-step.S (revision 8b657b0747480f8989760d71343d6dd33f8d4cf9)
1/* Copyright 2009-2023 Free Software Foundation, Inc.
2
3   This program is free software; you can redistribute it and/or modify
4   it under the terms of the GNU General Public License as published by
5   the Free Software Foundation; either version 3 of the License, or
6   (at your option) any later version.
7
8   This program is distributed in the hope that it will be useful,
9   but WITHOUT ANY WARRANTY; without even the implied warranty of
10   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11   GNU General Public License for more details.
12
13   You should have received a copy of the GNU General Public License
14   along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16   This file is part of the gdb testsuite.
17   It tests displaced stepping over various insns that require special
18   handling.  */
19
20	.text
21
22	.global main
23main:
24	nop
25
26/***********************************************/
27
28/* Test call/ret.  */
29
30	nop
31	.global test_call
32test_call:
33	call test_call_subr
34	nop
35	.global test_ret_end
36test_ret_end:
37	nop
38
39/***********************************************/
40
41/* Absolute jump with leading prefixes.
42   These don't occur in normal code, but gdb should still DTRT.  */
43
44	nop
45	.global test_prefixed_abs_jump
46test_prefixed_abs_jump:
47	ds
48	jmp *test_prefixed_abs_jump_addr
49	.data
50test_prefixed_abs_jump_addr:
51	.4byte test_prefixed_abs_jump_target
52	.text
53test_prefixed_abs_jump_target:
54	nop
55	.global test_prefixed_abs_jump_end
56test_prefixed_abs_jump_end:
57	nop
58
59/***********************************************/
60
61/* Test syscall.  */
62
63	mov $0x14,%eax /* getpid */
64	.global test_syscall
65test_syscall:
66	int $0x80
67	nop
68	.global test_syscall_end
69test_syscall_end:
70	nop
71
72/***********************************************/
73
74/* Test syscall again, this time with a prefix.
75   These don't occur in normal code, but gdb should still DTRT.  */
76
77	mov $0x14,%eax /* getpid */
78	.global test_prefixed_syscall
79test_prefixed_syscall:
80	repnz
81	int $0x80
82	nop
83	.global test_prefixed_syscall_end
84test_prefixed_syscall_end:
85	nop
86
87/***********************************************/
88
89/* Test stepping over int3.
90   The prefixes are pointless, but it's possible, so we exercise it.  */
91
92	nop
93	.global test_int3
94test_int3:
95	repz
96	repz
97	int3
98	nop
99	.global test_int3_end
100test_int3_end:
101	nop
102
103/***********************************************/
104
105/* all done */
106
107	pushl $0
108	call exit
109	hlt
110
111/***********************************************/
112
113/* subroutine to help test call/ret */
114
115test_call_subr:
116	nop
117	.global test_call_end
118test_call_end:
119	nop
120
121	.global test_ret
122test_ret:
123	ret
124	.section	.note.GNU-stack,"",@progbits
125