aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.arch/arm-disp-step.S
diff options
context:
space:
mode:
authorYao Qi <yao@codesourcery.com>2010-12-23 15:10:24 +0000
committerYao Qi <yao@codesourcery.com>2010-12-23 15:10:24 +0000
commit2a20745c6f5dcf86417ebaabbfdb4b1c56e2c9c4 (patch)
tree208a10643ae7ec86182f31c5ec940a21bc3a3d1a /gdb/testsuite/gdb.arch/arm-disp-step.S
parent621c6d5b11309e6f9759fde43ee85961cc45e0da (diff)
downloadfsf-binutils-gdb-2a20745c6f5dcf86417ebaabbfdb4b1c56e2c9c4.zip
fsf-binutils-gdb-2a20745c6f5dcf86417ebaabbfdb4b1c56e2c9c4.tar.gz
fsf-binutils-gdb-2a20745c6f5dcf86417ebaabbfdb4b1c56e2c9c4.tar.bz2
2010-12-23 Yao Qi <yao@codesourcery.com>
* gdb.arch/arm-disp-step.exp: New. * gdb.arch/arm-disp-step.S: New.
Diffstat (limited to 'gdb/testsuite/gdb.arch/arm-disp-step.S')
-rw-r--r--gdb/testsuite/gdb.arch/arm-disp-step.S120
1 files changed, 120 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.arch/arm-disp-step.S b/gdb/testsuite/gdb.arch/arm-disp-step.S
new file mode 100644
index 0000000..d748718
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/arm-disp-step.S
@@ -0,0 +1,120 @@
+/* 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
+ .type main,%function
+#if defined (__thumb__) || defined (__thumb2__)
+ .code 16
+ .thumb_func
+#endif
+ .globl main
+main:
+ push {r7, lr}
+ add sp, sp, #4
+ mov r7, sp
+
+
+ /* Test call and return */
+ .global test_call
+test_call:
+ bl test_call_subr
+ .global test_ret_end
+test_ret_end:
+ nop @ Location test_ret_end
+
+ /* Test branch */
+ bl test_branch
+
+ /* Test ldr from pc */
+ bl test_ldr_pc
+
+ /* Test ldm/stm only in ARM mode */
+#if !defined (__thumb__) && !defined (__thumb2__)
+ bl test_ldm_stm_pc
+#endif
+
+ /* Return */
+ mov sp, r7
+ sub sp, sp, #4
+ movs r0, #0
+ pop {r7, pc}
+ .size main, .-main
+
+ .global test_call_subr
+#if defined (__thumb__) || defined (__thumb2__)
+ .code 16
+ .thumb_func
+#endif
+ .type test_call_subr, %function
+test_call_subr:
+ nop
+ .global test_call_end
+test_call_end:
+ nop @ Location test_call_end
+ .global test_ret
+test_ret:
+ bx lr
+ .size test_call_subr, .-test_call_subr
+
+
+ .global test_branch
+#if defined (__thumb__) || defined (__thumb2__)
+ .code 16
+ .thumb_func
+#endif
+ .type test_branch, %function
+test_branch:
+ b L_branch
+ .global
+L_branch:
+ bx lr
+ .size test_branch, .-test_branch
+
+ .global test_ldr_pc
+#if defined (__thumb__) || defined (__thumb2__)
+ .code 16
+ .thumb_func
+#endif
+ .type test_ldr_pc, %function
+test_ldr_pc:
+ ldr r1, [pc, #0]
+
+ .global
+test_ldr_pc_ret:
+ bx lr
+ .size test_ldr_pc, .-test_ldr_pc
+
+#if !defined (__thumb__) && !defined (__thumb2__)
+ .global test_ldm_stm_pc
+ .type test_ldm_stm_pc, %function
+test_ldm_stm_pc:
+ stmdb sp!, {lr, pc}
+ ldmia sp!, {r0, r1}
+ ldr r0, .L1
+ stmdb sp!, {r0}
+ .global
+test_ldm_pc:
+ ldmia sp!, {pc}
+ .global
+test_ldm_stm_pc_ret:
+ bx lr
+ .align 2
+.L1:
+ .word test_ldm_stm_pc_ret
+ .size test_ldm_stm_pc, .-test_ldm_stm_pc
+#endif