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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [testsuite/] [gdb.asm/] [asm-source.exp] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
# Copyright 1998, 2000, 2002 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 2 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, write to the Free Software
15
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16
#
17
# Please email any bugs, comments, and/or additions to this file to:
18
# bug-gdb@prep.ai.mit.edu
19
#
20
# This file was written by Kendra.
21
 
22
if $tracelevel then {
23
    strace $tracelevel
24
}
25
 
26
#
27
# Test debugging assembly level programs.
28
# This file uses asmsrc[12].s for input.
29
#
30
 
31
set prms_id 0
32
set bug_id 0
33
 
34
set asm-arch ""
35
set asm-flags ""
36
set link-flags ""
37
 
38
if [istarget "*arm-*-*"] then {
39
    set asm-arch arm
40
}
41
if [istarget "xscale-*-*"] then {
42
    set asm-arch arm
43
}
44
if [istarget "d10v-*-*"] then {
45
    set asm-arch d10v
46
}
47
if [istarget "s390-*-*"] then {
48
    set asm-arch s390
49
}
50
if [istarget "x86_64-*-*"] then {
51
    set asm-arch x86_64
52
    set asm-flags "-gdwarf2 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
53
}
54
if [istarget "i\[3456\]86-*-*"] then {
55
    set asm-arch i386
56
}
57
if [istarget "m32r*-*"] then {
58
    set asm-arch m32r
59
}
60
if [istarget "powerpc*-*"] then {
61
    set asm-arch powerpc
62
}
63
if [istarget "sparc-*-*"] then {
64
    set asm-arch sparc
65
}
66
if [istarget "sparc64-*-*"] then {
67
    set asm-arch sparc64
68
    set asm-flags "-xarch=v9 -gstabs -I${srcdir}/${subdir} -I${objdir}/${subdir}"
69
}
70
if [istarget "xstormy16-*-*"] then {
71
    set asm-arch xstormy16
72
    set asm-flags "-gdwarf2 -I${srcdir}/${subdir} -I${objdir}/${subdir}"
73
}
74
if [istarget "v850-*-*"] then {
75
    set asm-arch v850
76
    set gdb_wrapper_initialized 1
77
}
78
if { "${asm-arch}" == "" } {
79
    gdb_suppress_entire_file "Assembly source test -- not implemented for this target."
80
}
81
 
82
# Watch out, we are invoking the assembler, but the testsuite sets multilib
83
# switches according to compiler syntax.  If we pass these options straight
84
# to the assembler, they won't always make sense.  If we don't pass them to
85
# the assembler, the final link will complain that the object files were
86
# built with different defaults.  So no matter what we do, we lose.  We may as
87
# well get out of this test sooner rather than later.
88
set dest [target_info name]
89
if [board_info $dest exists multilib_flags] {
90
        set multilib_flags [board_info $dest multilib_flags]
91
        if { "${multilib_flags}" != "" } {
92
           gdb_suppress_entire_file "Assembly source test -- multilibs not supported by this test."
93
           return;
94
         }
95
}
96
 
97
set testfile "asm-source"
98
set binfile ${objdir}/${subdir}/${testfile}
99
set src1 ${srcdir}/${subdir}/asmsrc1.s
100
set src2 ${srcdir}/${subdir}/asmsrc2.s
101
 
102
remote_exec build "rm -f ${subdir}/arch.inc"
103
remote_download host ${srcdir}/${subdir}/${asm-arch}.inc ${subdir}/arch.inc
104
 
105
if { "${asm-flags}" == "" } {
106
    #set asm-flags "-Wa,-gstabs,-I${srcdir}/${subdir},-I${objdir}/${subdir}"
107
    set asm-flags "-gstabs -I${srcdir}/${subdir} -I${objdir}/${subdir}"
108
}
109
 
110
if {[target_assemble ${src1} asmsrc1.o "${asm-flags}"] != ""} then {
111
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
112
}
113
if {[target_assemble ${src2} asmsrc2.o "${asm-flags}"] != ""} then {
114
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
115
}
116
 
117
set opts "debug ldflags=-nostartfiles"
118
foreach i ${link-flags} {
119
    append opts " ldflags=$i"
120
}
121
if { [gdb_compile "asmsrc1.o asmsrc2.o" "${binfile}" executable $opts] != "" } {
122
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
123
}
124
 
125
remote_exec build "mv asmsrc1.o asmsrc2.o ${objdir}/${subdir}"
126
 
127
 
128
gdb_start
129
gdb_reinitialize_dir $srcdir/$subdir
130
gdb_load ${binfile}
131
 
132
#
133
# Run to `main' where we begin our tests.
134
#
135
 
136
if ![runto_main] then {
137
    gdb_suppress_tests
138
}
139
 
140
# Execute the `f' command and see if the result includes source info.
141
gdb_test "f" "asmsrc1\[.\]s:29.*several_nops" "f at main"
142
 
143
# See if we properly `next' over a macro with several insns.
144
gdb_test "n" "33\[      \]*.*foo2" "next over macro"
145
 
146
# See if we can properly `step' into a subroutine call.
147
gdb_test "s" "8\[       \]*.*" "step into foo2"
148
 
149
# Test 'info target', and incidentally capture the entry point address.
150
set entry_point 0
151
send_gdb "info target\n"
152
gdb_expect {
153
    -re "Symbols from .*asm-source.*Entry point: 0x(\[01232456789abcdefABCDEF\]+).*$gdb_prompt $" {
154
        set entry_point $expect_out(1,string)
155
        pass "info target"
156
    }
157
    -re ".*$gdb_prompt $" {
158
        fail "info target"
159
    }
160
    timeout {
161
        fail "info target (timeout)"
162
    }
163
}
164
 
165
# Capture the start symbol (may be '_start' or 'start')
166
set entry_symbol ""
167
send_gdb "info symbol 0x$entry_point\n"
168
gdb_expect {
169
    -re "info symbol 0x$entry_point\[\r\n\]+(\[^\r\n\]*) in section .*$gdb_prompt $" {
170
        # We match the echoed `info symbol' command here, to help us
171
        # reliably identify the beginning of the start symbol in the
172
        # command's output.  You might think we could just use '^' to
173
        # start matching at the beginning of the line, but
174
        # unfortunately, in Expect, '^' matches the beginning of the
175
        # input that hasn't been matched by any expect clause yet.  If
176
        # every expect clause consumes a complete line, along with its
177
        # terminating CR/LF, this is equivalent to the beginning of a
178
        # line.  But expect clauses that end with `.*' will consume as
179
        # much as happened to arrive from the TTY --- exactly where
180
        # they leave you depends on inter-process timing.  :(
181
        set entry_symbol $expect_out(1,string)
182
        pass "info symbol"
183
    }
184
    -re ".*$gdb_prompt $" {
185
        fail "info symbol"
186
    }
187
    timeout {
188
        fail "info symbol (timeout)"
189
    }
190
}
191
 
192
# Now try a 'list' from the other source file.
193
gdb_test "list $entry_symbol" ".*gdbasm_startup.*" "list"
194
 
195
# Now try a source file search
196
gdb_test "search A routine for foo2 to call" \
197
        "39\[ \t\]+comment \"A routine for foo2 to call.\"" "search"
198
 
199
# See if `f' prints the right source file.
200
gdb_test "f" ".*asmsrc2\[.\]s:8.*" "f in foo2"
201
 
202
# `next' one insn (or macro) to set up our stackframe (for the following bt).
203
gdb_test "n" "12\[      \]*.*foo3" "n in foo2"
204
 
205
# See if a simple `bt' prints the right source files and
206
# doesn't fall off the stack.
207
 
208
gdb_test "bt 10" \
209
        "\#0.*foo2.*asmsrc2\[.\]s:12.*\#1.*main.*asmsrc1\[.\]s:33(.*\#2.*start\[^\r\n\]*)?" \
210
        "bt ALL in foo2"
211
 
212
# See if a capped `bt' prints the right source files.
213
gdb_test "bt 2" "\#0.*foo2.*asmsrc2\[.\]s:12.*\#1.*main.*asmsrc1\[.\]s:33.*" "bt 2 in foo2"
214
 
215
# Step into another subroutine which lives back in the first source file.
216
gdb_test "s" "" "s 2"
217
 
218
# Next over insns to set up the stack frame.
219
gdb_test "n" "" "n 2"
220
 
221
# Now see if a capped `bt' is correct.
222
gdb_test "bt 3" "\#0.*foo3.*asmsrc1\[.\]s:44.*\#1.*foo2.*asmsrc2\[.\]s:12.*\#2.*main.*asmsrc1\[.\]s:33.*" "bt 3 in foo3"
223
 
224
# Try 'info source' from asmsrc1.s
225
gdb_test "info source" \
226
        "Current source file is .*asmsrc1.s.*Source language is asm.*" \
227
        "info source asmsrc1.s"
228
 
229
# Try 'finishing' from foo3
230
gdb_test "finish" "Run till exit from.*\[\r\n\]13\[ \t\]+gdbasm_call foo3" \
231
        "finish from foo3"
232
 
233
# Try 'info source' from asmsrc2.s
234
gdb_test "info source" \
235
        "Current source file is .*asmsrc2.s.*Source language is asm.*" \
236
        "info source asmsrc2.s"
237
 
238
# Try 'info sources'.  This can produce a lot of output on systems
239
# with dynamic linking, where the system's shared libc was compiled
240
# with debugging info; for example, on Linux, this produces 47kb of
241
# output.  So we consume it as we go.
242
send_gdb "info sources\n"
243
set seen_asmsrc_1 0
244
set seen_asmsrc_2 0
245
gdb_expect {
246
    -re "^\[^,\]*asmsrc1.s(, |\[\r\n\]+)" {
247
        set seen_asmsrc_1 1
248
        exp_continue
249
    }
250
    -re "^\[^,\]*asmsrc2.s(, |\[\r\n\]+)" {
251
        set seen_asmsrc_2 1
252
        exp_continue
253
    }
254
    -re ", " {
255
        exp_continue
256
    }
257
    -re "$gdb_prompt $" {
258
        if {$seen_asmsrc_1 && $seen_asmsrc_2} {
259
            pass "info sources"
260
        } else {
261
            fail "info sources"
262
        }
263
    }
264
    timeout {
265
            fail "info sources (timeout)"
266
    }
267
}
268
 
269
 
270
# Try 'info line'
271
gdb_test "info line" \
272
        "Line 13 of.*asmsrc2.s.*starts at.* and ends at.*." \
273
        "info line"
274
 
275
# Try 'nexting' over next call to foo3
276
gdb_test "next" "17\[ \t\]+gdbasm_leave" "next over foo3"
277
 
278
# Try 'return' from foo2
279
gdb_test "return" "\#0  main .*37\[ \t\]+gdbasm_exit0" "return from foo2" \
280
        "Make selected stack frame return now\?.*" "y"
281
 
282
# See if we can look at a global variable
283
gdb_test "print globalvar" ".* = 11" "look at global variable"
284
 
285
# See if we can look at a static variable
286
gdb_test "print staticvar" ".* = 5" "look at static variable"
287
 
288
# See if we can look at a static function
289
gdb_test "disassem foostatic" ".*:.*End of assembler dump." \
290
        "look at static function"
291
 
292
remote_exec build "rm -f ${subdir}/arch.inc"

powered by: WebSVN 2.1.0

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