old-cross-binutils/gdb/testsuite/gdb.arch/thumb2-it.S
Daniel Jacobowitz 177321bd85 * arm-linux-tdep.c (arm_linux_thumb2_be_breakpoint)
(arm_linux_thumb2_le_breakpoint): New constants.
	(arm_linux_init_abi): Set thumb2_breakpoint and
	thumb2_breakpoint_size.
	* arm-tdep.c (thumb_insn_size, thumb_advance_itstate): New functions.
	(thumb_get_next_pc): Add a comment.  Rename IT to ITSTATE.
	Implement support for single stepping through IT blocks if
	a 32-bit Thumb breakpoint instruction is available.
	(arm_breakpoint_from_pc): If a 32-bit Thumb breakpoint instruction
	is available, use it when needed.
	(arm_remote_breakpoint_from_pc): New function.
	(arm_gdbarch_init): Register arm_remote_breakpoint_from_pc.
	* arm-tdep.h (struct gdbarch_tdep): Correct thumb_breakpoint
	comment.  Add thumb2_breakpoint and thumb2_breakpoint_size.

	gdbserver/
	* linux-arm-low.c (thumb_breakpoint_len): Delete.
	(thumb2_breakpoint): New.
	(arm_breakpoint_at): Check for Thumb-2 breakpoints.

	testsuite/
	* gdb.arch/thumb2-it.S, gdb.arch/thumb2-it.exp: New files.
2010-02-01 16:13:17 +00:00

139 lines
3.1 KiB
ArmAsm

/* Thumb-2 IT blocks test program.
Copyright 2010 Free Software Foundation, Inc.
This file is part of GDB.
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/>. */
.syntax unified
.text
.p2align 2
.code 16
#ifndef __thumb2__
.type main,%function
.thumb_func
.globl main
main:
mov r0, #0
bx lr @ No Thumb-2
#else
.type main,%function
.thumb_func
.globl main
main:
mov r0, #0
bx lr @ Thumb-2 OK
@ One conditional instruction, executed.
.type it_1,%function
.thumb_func
it_1:
mov r0, #0 @ Setup
cmp r0, #0 @ Setup
it eq @ IT instruction, Expected == 1
addeq r0, #1 @ Reached
bx lr @ Done
@ One conditional instruction, skipped.
.type it_2,%function
.thumb_func
it_2:
mov r0, #0 @ Setup
cmp r0, #0 @ Setup
it ne @ IT instruction, Expected == 0
addne r0, #1 @ Not reached
bx lr @ Done, Check $r0 == 0
@ Block of four, alternating, starting with executed.
.type it_3,%function
.thumb_func
it_3:
mov r0, #0 @ Setup
cmp r0, #0 @ Setup
itete ge @ IT instruction, Expected == 2
addge r0, #1 @ Reached
addlt r0, #2 @ Not reached
addge r0, #4 @ Reached
addlt r0, #8 @ Not reached
bx lr @ Done, Check $r0 == 5
@ Block of four, changing flags.
.type it_4,%function
.thumb_func
it_4:
mov r0, #0 @ Setup
cmp r0, #0 @ Setup
itttt ge @ IT instruction, Expected == 2
addge r0, #1 @ Reached
cmpge r0, #10 @ Reached
addge r0, #4 @ Not reached
addge r0, #8 @ Not reached
bx lr @ Done, Check $r0 == 1
@ Block of two, ending with taken branch.
.type it_5,%function
.thumb_func
it_5:
mov r0, #0 @ Setup
cmp r0, #0 @ Setup
itt ge @ IT instruction, Expected == 2
addge r0, #1 @ Reached
bge .L5 @ Reached
add r0, #2 @ Never reached
.L5: bx lr @ Done, Check $r0 == 1
@ Block of two, ending with untaken branch.
.type it_6,%function
.thumb_func
it_6:
mov r0, #0 @ Setup
cmp r0, #0 @ Setup
ite ge @ IT instruction, Expected == 2
addge r0, #1 @ Reached
blt .L6 @ Not reached
add r0, #2 @ Reached
.L6: bx lr @ Done, Check $r0 == 3
@ Block of four, taken, of different sizes
.type it_7,%function
.thumb_func
it_7:
mov r0, #0 @ Setup
cmp r0, #0 @ Setup
itttt ge @ IT instruction, Expected == 4
addge.n r0, #1 @ Reached
addge.w r0, #2 @ Reached
addge.n r0, #4 @ Reached
addge.w r0, #8 @ Reached
bx lr @ Done, Check $r0 == 15
@ Block of four, only first executed.
.type it_3,%function
.thumb_func
it_8:
mov r0, #0 @ Setup
cmp r0, #0 @ Setup
iteee ge @ IT instruction, Expected == 1
addge r0, #1 @ Reached
addlt r0, #2 @ Not reached
addlt r0, #4 @ Not reached
addlt r0, #8 @ Not reached
bx lr @ Done, Check $r0 == 1
#endif /* __thumb2__ */