OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gdb-7.2/] [gdb/] [testsuite/] [gdb.arch/] [amd64-disp-step.exp] - Blame information for rev 835

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
# Copyright 2009, 2010 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 .
15
 
16
# This file is part of the gdb testsuite.
17
 
18
# Test amd64 displaced stepping.
19
 
20
if $tracelevel {
21
    strace $tracelevel
22
}
23
 
24
 
25
if ![istarget "x86_64-*-linux*"] then {
26
    verbose "Skipping x86_64 displaced stepping tests."
27
    return
28
}
29
 
30
set newline "\[\r\n\]*"
31
 
32
set testfile "amd64-disp-step"
33
set srcfile ${testfile}.S
34
set binfile ${objdir}/${subdir}/${testfile}
35
 
36
set additional_flags "-Wa,-g"
37
 
38
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
39
    untested amd64-disp-step.exp
40
    return -1
41
}
42
 
43
# Get things started.
44
 
45
gdb_exit
46
gdb_start
47
gdb_reinitialize_dir $srcdir/$subdir
48
gdb_load ${binfile}
49
 
50
gdb_test "set displaced-stepping on" ""
51
gdb_test "show displaced-stepping" ".* displaced stepping .* is on.*"
52
 
53
if ![runto_main] then {
54
    fail "Can't run to main"
55
    return 0
56
}
57
 
58
##########################################
59
 
60
# Test call/ret.
61
 
62
gdb_test "break test_call" \
63
    "Breakpoint.*at.* file .*$srcfile, line.*" \
64
    "break test_call"
65
gdb_test "break test_call_end" \
66
    "Breakpoint.*at.* file .*$srcfile, line.*" \
67
    "break test_call_end"
68
 
69
gdb_test "break test_ret" \
70
    "Breakpoint.*at.* file .*$srcfile, line.*" \
71
    "break test_ret"
72
gdb_test "break test_ret_end" \
73
    "Breakpoint.*at.* file .*$srcfile, line.*" \
74
    "break test_ret_end"
75
 
76
gdb_test "continue" \
77
    "Continuing.*Breakpoint.*, test_call ().*" \
78
    "continue to test_call"
79
gdb_test "continue" \
80
    "Continuing.*Breakpoint.*, test_call_end ().*" \
81
    "continue to test_call_end"
82
 
83
gdb_test "continue" \
84
    "Continuing.*Breakpoint.*, test_ret ().*" \
85
    "continue to test_ret"
86
gdb_test "continue" \
87
    "Continuing.*Breakpoint.*, test_ret_end ().*" \
88
    "continue to test_ret_end"
89
 
90
##########################################
91
 
92
# Test abs-jmp/rep-ret.
93
 
94
gdb_test "break test_abs_jmp" \
95
    "Breakpoint.*at.* file .*$srcfile, line.*" \
96
    "break test_abs_jmp"
97
gdb_test "break test_abs_jmp_end" \
98
    "Breakpoint.*at.* file .*$srcfile, line.*" \
99
    "break test_abs_jmp_end"
100
 
101
gdb_test "break test_rep_ret" \
102
    "Breakpoint.*at.* file .*$srcfile, line.*" \
103
    "break test_rep_ret"
104
gdb_test "break test_rep_ret_end" \
105
    "Breakpoint.*at.* file .*$srcfile, line.*" \
106
    "break test_rep_ret_end"
107
 
108
gdb_test "continue" \
109
    "Continuing.*Breakpoint.*, test_abs_jmp ().*" \
110
    "continue to test_abs_jmp"
111
gdb_test "continue" \
112
    "Continuing.*Breakpoint.*, test_abs_jmp_end ().*" \
113
    "continue to test_abs_jmp_end"
114
 
115
gdb_test "continue" \
116
    "Continuing.*Breakpoint.*, test_rep_ret ().*" \
117
    "continue to test_rep_ret"
118
gdb_test "continue" \
119
    "Continuing.*Breakpoint.*, test_rep_ret_end ().*" \
120
    "continue to test_rep_ret_end"
121
 
122
##########################################
123
 
124
# Test syscall.
125
 
126
gdb_test "break test_syscall" \
127
    "Breakpoint.*at.* file .*$srcfile, line.*" \
128
    "break test_syscall"
129
gdb_test "break test_syscall_end" \
130
    "Breakpoint.*at.* file .*$srcfile, line.*" \
131
    "break test_syscall_end"
132
 
133
gdb_test "continue" \
134
    "Continuing.*Breakpoint.*, test_syscall ().*" \
135
    "continue to test_syscall"
136
gdb_test "continue" \
137
    "Continuing.*Breakpoint.*, test_syscall_end ().*" \
138
    "continue to test_syscall_end"
139
 
140
##########################################
141
 
142
# int3 (with prefixes)
143
# These don't occur in normal code, but gdb should still DTRT.
144
 
145
gdb_test "break test_int3" \
146
    "Breakpoint.*at.* file .*$srcfile, line.*" \
147
    "break test_int3"
148
gdb_test "break test_int3_end" \
149
    "Breakpoint.*at.* file .*$srcfile, line.*" \
150
    "break test_int3_end"
151
 
152
gdb_test "continue" \
153
    "Continuing.*Breakpoint.*, test_int3 ().*" \
154
    "continue to test_int3"
155
 
156
gdb_test "continue" \
157
    "Continuing.*Breakpoint.*, test_int3_end ().*" \
158
    "continue to test_int3_end"
159
 
160
##########################################
161
 
162
# Test rip-relative.
163
# GDB picks a spare register to hold the rip-relative address.
164
# Exercise all the possibilities (rax-rdi, sans rsp).
165
 
166
# The order must much the order in srcfile.
167
set rip_regs { "rax" "rbx" "rcx" "rdx" "rbp" "rsi" "rdi" }
168
 
169
# Assign val to all specified regs.
170
 
171
proc set_regs { regs val } {
172
    global gdb_prompt
173
 
174
    foreach reg ${regs} {
175
        # Use send_gdb/gdb_expect so that these aren't logged as pass/fail.
176
        send_gdb "set \$${reg} = ${val}\n"
177
        gdb_expect 10 {
178
            -re "$gdb_prompt $" {
179
                verbose "Setting ${reg} to ${val}." 2
180
            }
181
            timeout {
182
                warning "Couldn't set ${reg} to ${val}."
183
            }
184
        }
185
    }
186
}
187
 
188
# Verify all REGS equal VAL, except REG which equals REG_VAL.
189
 
190
proc verify_regs { test_name regs val except_reg except_reg_val } {
191
    global newline
192
 
193
    foreach reg ${regs} {
194
        set expected ${val}
195
        if { "${reg}" == "${except_reg}" } {
196
            set expected ${except_reg_val}
197
        }
198
        # The cast to (int) is because RBP is printed as a pointer.
199
        gdb_test "p (int) \$${reg}" " = ${expected}${newline}" "${test_name} ${reg} expected value"
200
    }
201
}
202
 
203
proc rip_test { reg } {
204
    global srcfile rip_regs
205
 
206
    set test_start_label "test_rip_${reg}"
207
    set test_end_label "test_rip_${reg}_end"
208
 
209
    gdb_test "break ${test_start_label}" \
210
        "Breakpoint.*at.* file .*$srcfile, line.*" \
211
        "break ${test_start_label}"
212
    gdb_test "break ${test_end_label}" \
213
        "Breakpoint.*at.* file .*$srcfile, line.*" \
214
        "break ${test_end_label}"
215
 
216
    gdb_test "continue" \
217
        "Continuing.*Breakpoint.*, ${test_start_label} ().*" \
218
        "continue to ${test_start_label}"
219
 
220
    set_regs ${rip_regs} 0
221
 
222
    gdb_test "continue" \
223
        "Continuing.*Breakpoint.*, ${test_end_label} ().*" \
224
        "continue to ${test_end_label}"
225
 
226
    verify_regs "test rip w/${reg}" ${rip_regs} 0 ${reg} 42
227
}
228
 
229
foreach reg ${rip_regs} {
230
    rip_test $reg
231
}
232
 
233
##########################################
234
 
235
# Done, run program to exit.
236
 
237
gdb_continue_to_end "amd64-disp-step"

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.