1 # Copyright
2006-2019 Free Software Foundation
, Inc.
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.
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.
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
/>.
16 # Test ARM
/Thumb prologue analyzer.
18 if {![is_aarch32_target
]} then {
19 verbose
"Skipping ARM prologue tests."
25 # Don
't use "debug", so that we don't have line information
for the assembly
27 if { [gdb_compile
"${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {"additional_flags=-mthumb"}] != "" } {
28 untested
"ARM prologue tests"
35 gdb_reinitialize_dir $srcdir
/$subdir
39 # Run to `main
' where we begin our tests.
42 if ![runto_main] then {
43 untested "ARM prologue tests"
47 # Testcase for TPCS prologue.
49 gdb_breakpoint "* *(int *)tpcs_offset + (int) &tpcs_frame_1"
50 gdb_test "continue" "Breakpoint .*, $hex in tpcs_frame_1 \\(\\)" \
53 gdb_test "backtrace 10" \
54 "#0\[ \t\]*$hex in tpcs_frame_1 .*\r\n#1\[ \t\]*$hex in tpcs_frame .*\r\n#2\[ \t\]*$hex in main.*" \
57 gdb_test "info frame" \
58 ".*Saved registers:.*r7 at.*r10 at.*r11 at.*lr at.*" \
59 "saved registers in TPCS"
62 # Testcase for "switching" the stack to the same stack in the prologue.
64 gdb_breakpoint "switch_stack_to_same"
66 gdb_test "continue" "Breakpoint .*, $hex in switch_stack_to_same \\(\\)" \
67 "continue to switch_stack_to_same"
69 gdb_test "stepi 2" "in write_sp \\(\\)" "stepi over mov sp, sp"
71 gdb_test "backtrace 10" \
72 "#0\[ \t\]*$hex in write_sp .*\r\n#1\[ \t\]*$hex in switch_stack_to_same .*\r\n#2\[ \t\]*$hex in main.*" \
73 "backtrace in write_sp"
75 # Testcase for switching to another stack in the prologue.
77 gdb_breakpoint "switch_stack_to_other"
79 gdb_test "continue" "Breakpoint .*, $hex in switch_stack_to_other \\(\\)" \
80 "continue to switch_stack_to_other"
82 gdb_test "stepi 2" "in write_sp \\(\\)" "stepi over mov sp, 128"
84 gdb_test "backtrace 10" \
85 "#0\[ \t\]*$hex in write_sp .*\r\n#1\[ \t\]*$hex in switch_stack_to_other .*\r\n#2\[ \t\]*$hex in main.*" \
86 "backtrace in write_sp"