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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.2/] [gdb/] [testsuite/] [gdb.arch/] [pa-nullify.exp] - Blame information for rev 330

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
# Copyright 2004, 2007, 2008, 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
if $tracelevel {
19
    strace $tracelevel
20
}
21
 
22
 
23
# Test handling of nullified instructions for the pa target.
24
 
25
switch -glob -- [istarget] {
26
    "hppa-*-*" {
27
        set testfile "pa-nullify"
28
    }
29
    "hppa64-*-*" {
30
        set testfile "pa64-nullify"
31
    }
32
    "*" {
33
        verbose "Skipping hppa nullification tests."
34
        return
35
    }
36
}
37
 
38
set srcfile ${testfile}.s
39
set binfile ${objdir}/${subdir}/${testfile}
40
set gcorefile ${objdir}/${subdir}/${testfile}.gcore
41
 
42
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {}] != "" } {
43
    unsupported "Testcase compile failed."
44
    return -1
45
}
46
 
47
gdb_exit
48
gdb_start
49
gdb_reinitialize_dir $srcdir/$subdir
50
gdb_load ${binfile}
51
 
52
# In the first test, we do a "step" on a function whose last instruction
53
# contains a branch-with-nullify.  The instruction in the delay slot belongs
54
# to the next function.  We verify that when we step off the first function
55
# that we end up back at the caller and not at the second instruction.
56
 
57
gdb_breakpoint foo
58
gdb_test "run" "Breakpoint 1, .* in foo.*" "Breakpoint at foo"
59
 
60
set test "stepi till main"
61
gdb_test_multiple "stepi" "${test}" {
62
  -re ".*in foo.*$gdb_prompt $" {
63
    send_gdb "stepi\n"
64
    exp_continue -continue_timer
65
  }
66
  -re ".*in bar.*$gdb_prompt $" {
67
    fail $test
68
  }
69
  -re ".*in main.*$gdb_prompt $" {
70
    pass $test
71
  }
72
}
73
 
74
# In the second test, we verify that we can get a proper backtrace
75
# even when we are in a nullified instruction that belongs to the next function.
76
# We also verify that when stepping over a branch-with-nullify insn that we
77
# stay on the same insn for two steps.
78
 
79
proc get_addr_of_sym { sym } {
80
  set addr 0
81
  global gdb_prompt
82
  global hex
83
 
84
  set test "get address of $sym"
85
  gdb_test_multiple "print $sym" $test {
86
    -re ".*($hex) <$sym>.*$gdb_prompt $" {
87
      set addr $expect_out(1,string)
88
      pass $test
89
    }
90
  }
91
 
92
  return $addr
93
}
94
 
95
if { ! [ runto_main ] } then { gdb_suppress_tests; }
96
 
97
set foo [get_addr_of_sym "foo"]
98
set bar [get_addr_of_sym "bar"]
99
set foo_last "(bar - 4)"
100
 
101
gdb_breakpoint "*$foo_last"
102
 
103
gdb_test "continue" "Breakpoint \[0-9\]*,.* in foo.*"
104
gdb_test "backtrace" "in foo.*in main.*" "Backtrace from last insn in foo"
105
gdb_test "stepi" "in foo.*" "stepi to nullified instruction stays in foo"
106
gdb_test "backtrace" "in foo.*in main.*" "Backtrace from nullified insn"
107
gdb_test "stepi" "in main.*" "stepi to main"
108
 
109
# In the third test, we verify that backtraces from nullified instructions
110
# work even in coredumps
111
 
112
proc gen_core { test } {
113
  global gcorefile
114
  global gdb_prompt
115
  set gcore_works 0
116
  set escapedfilename [string_to_regexp $gcorefile]
117
 
118
  # gcore is not yet implemented for HPUX
119
  setup_xfail hppa*-*-hpux*
120
 
121
  gdb_test_multiple "gcore $gcorefile" "$test: gcore" {
122
    -re "Saved corefile ${escapedfilename}\[\r\n\]+$gdb_prompt $" {
123
      pass "$test: gcore"
124
      set gcore_works 1
125
    }
126
    -re "Undefined command.*$gdb_prompt $" {
127
      fail "$test: gcore (undefined command)"
128
    }
129
    -re "Can't create a corefile\[\r\n\]+$gdb_prompt $" {
130
      fail "$test: gcore (can't create corefile)"
131
    }
132
  }
133
 
134
  return $gcore_works
135
}
136
 
137
proc test_core_bt { test } {
138
  global gcorefile
139
 
140
  gdb_test "core $gcorefile" "Core was generated by.*" \
141
    "$test: load core file" "A program is being debugged already.*" "y"
142
 
143
  gdb_test "backtrace" ".*in foo.*in main.*" "$test: backtrace in gcore"
144
}
145
 
146
set test "core at last insn in foo"
147
if { ! [ runto_main ] } then { gdb_suppress_tests; }
148
gdb_breakpoint "*$foo_last"
149
gdb_test "continue" "Breakpoint \[0-9\]*,.* in foo.*" "$test: continue to breakpoint"
150
if [gen_core $test] {
151
  test_core_bt $test
152
}
153
 
154
set test "core at nullified insn"
155
if { ! [ runto_main ] } then { gdb_suppress_tests; }
156
gdb_breakpoint "*$foo_last"
157
gdb_test "continue" "Breakpoint \[0-9\]*,.* in foo.*" "$test: continue to breakpoint"
158
gdb_test "stepi" ".*in foo.*" "$test: step to nullified instruction"
159
if [gen_core $test] {
160
  test_core_bt $test
161
}

powered by: WebSVN 2.1.0

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