1*b725ae77Skettenis#   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
2*b725ae77Skettenis
3*b725ae77Skettenis# This program is free software; you can redistribute it and/or modify
4*b725ae77Skettenis# it under the terms of the GNU General Public License as published by
5*b725ae77Skettenis# the Free Software Foundation; either version 2 of the License, or
6*b725ae77Skettenis# (at your option) any later version.
7*b725ae77Skettenis#
8*b725ae77Skettenis# This program is distributed in the hope that it will be useful,
9*b725ae77Skettenis# but WITHOUT ANY WARRANTY; without even the implied warranty of
10*b725ae77Skettenis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11*b725ae77Skettenis# GNU General Public License for more details.
12*b725ae77Skettenis#
13*b725ae77Skettenis# You should have received a copy of the GNU General Public License
14*b725ae77Skettenis# along with this program; if not, write to the Free Software
15*b725ae77Skettenis# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16*b725ae77Skettenis
17*b725ae77Skettenis# Please email any bugs, comments, and/or additions to this file to:
18*b725ae77Skettenis# bug-gdb@prep.ai.mit.edu
19*b725ae77Skettenis
20*b725ae77Skettenis# GDB tests for names beginning with '$'
21*b725ae77Skettenis
22*b725ae77Skettenis# This is aimed at HP-UX systems where a lot of system
23*b725ae77Skettenis# routines and names begin with '$' or '$$'.  GDB 4.16 was
24*b725ae77Skettenis# unable to deal with these names as they clashed with
25*b725ae77Skettenis# convenience variables.  Wildebeest should accept such
26*b725ae77Skettenis# names in preference to convenience variables.
27*b725ae77Skettenis
28*b725ae77Skettenis# This file was written by Satish Pai <pai@apollo.hp.com>
29*b725ae77Skettenis# 1997-09-24
30*b725ae77Skettenis
31*b725ae77Skettenisif $tracelevel then {
32*b725ae77Skettenis	strace $tracelevel
33*b725ae77Skettenis	}
34*b725ae77Skettenis
35*b725ae77Skettenis#
36*b725ae77Skettenis# test running programs
37*b725ae77Skettenis#
38*b725ae77Skettenisset prms_id 0
39*b725ae77Skettenisset bug_id 0
40*b725ae77Skettenis
41*b725ae77Skettenisif { [skip_hp_tests] } { continue }
42*b725ae77Skettenis
43*b725ae77Skettenisset testfile "dollar"
44*b725ae77Skettenisset srcfile ${testfile}.c
45*b725ae77Skettenisset binfile ${objdir}/${subdir}/${testfile}
46*b725ae77Skettenis
47*b725ae77Skettenisif  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
48*b725ae77Skettenis     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
49*b725ae77Skettenis}
50*b725ae77Skettenis
51*b725ae77Skettenis#source ${binfile}.ci
52*b725ae77Skettenis
53*b725ae77Skettenisgdb_exit
54*b725ae77Skettenisgdb_start
55*b725ae77Skettenisgdb_reinitialize_dir $srcdir/$subdir
56*b725ae77Skettenisgdb_load ${binfile}
57*b725ae77Skettenis
58*b725ae77Skettenis#
59*b725ae77Skettenis# set it up at a breakpoint so we can play with the variable values
60*b725ae77Skettenis#
61*b725ae77Skettenis
62*b725ae77Skettenisif ![runto_main] then {
63*b725ae77Skettenis    perror "couldn't run to breakpoint"
64*b725ae77Skettenis    continue
65*b725ae77Skettenis}
66*b725ae77Skettenis
67*b725ae77Skettenis# Test for millicode routines
68*b725ae77Skettenis# hppa64 does not support dyncall
69*b725ae77Skettenisif ![istarget "hppa64*-*-*"] {
70*b725ae77Skettenissend_gdb "print \$\$dyncall\n"
71*b725ae77Skettenisgdb_expect {
72*b725ae77Skettenis   -re "\\$\[0-9\]* = \\{<text variable, no debug info>\\} $hex <>.*$gdb_prompt $" { pass "print \$\$dyncall" }
73*b725ae77Skettenis   -re "\\$\[0-9\]* = \\{<text variable, no debug info>\\} $hex <.*dyncall>.*$gdb_prompt $" { pass "print \$\$dyncall" }
74*b725ae77Skettenis   -re "\\$\[0-9\]* = void"            { fail "print \$\$dyncall -- interpreted as convenience var" }
75*b725ae77Skettenis   -re "$gdb_prompt $"                     { fail "print \$\$dyncall" }
76*b725ae77Skettenis   timeout                             { fail "(timeout) print \$\$dyncall" }
77*b725ae77Skettenis}
78*b725ae77Skettenissend_gdb "print \$\$dyncall_external\n"
79*b725ae77Skettenisgdb_expect {
80*b725ae77Skettenis   -re "\\$\[0-9\]* = \\{<text variable, no debug info>\\} $hex <>.*$gdb_prompt $" { pass "print \$\$dyncall_external" }
81*b725ae77Skettenis	-re "\\$\[0-9\]* = \\{<text variable, no debug info>\\} $hex <.*dyncall_external>.*$gdb_prompt $" { pass "print \$\$dyncall_external" }
82*b725ae77Skettenis   -re "\\$\[0-9\]* = void"            { fail "print \$\$dyncall_external -- interpreted as convenience var" }
83*b725ae77Skettenis   -re "$gdb_prompt $"                     { fail "print \$\$dyncall_external" }
84*b725ae77Skettenis   timeout                             { fail "(timeout) print \$\$dyncall_external" }
85*b725ae77Skettenis}
86*b725ae77Skettenis
87*b725ae77Skettenis# Set a breakpoint on a millicode routine
88*b725ae77Skettenissend_gdb "break \$\$dyncall\n"
89*b725ae77Skettenisgdb_expect {
90*b725ae77Skettenis   -re "Breakpoint \[0-9\]* at $hex.*$gdb_prompt $" { pass "break \$\$dyncall" }
91*b725ae77Skettenis   -re "Function.*not defined.*$gdb_prompt $" {fail "break \$\$dyncall -- no \$\$dyncall?" }
92*b725ae77Skettenis   -re "Convenience variables used in line specs must have integer values\\..*$gdb_prompt $" {
93*b725ae77Skettenis             fail "break \$\$dyncall -- treated as convenince variable"
94*b725ae77Skettenis       }
95*b725ae77Skettenis   -re "$gdb_prompt $"                     { fail "print break \$\$dyncall" }
96*b725ae77Skettenis   timeout                             { fail "(timeout) print break \$\$dyncall" }
97*b725ae77Skettenis}
98*b725ae77Skettenis
99*b725ae77Skettenis# Disassemble $$dyncall
100*b725ae77Skettenissend_gdb "disassemble \$\$dyncall\n"
101*b725ae77Skettenisgdb_expect {
102*b725ae77Skettenis   -re "Dump of assembler code for function.*$gdb_prompt $" { pass "disas \$\$dyncall" }
103*b725ae77Skettenis   -re "$gdb_prompt $"                     { fail "disas \$\$dyncall" }
104*b725ae77Skettenis   timeout                             { fail "(timeout) disas \$\$dyncall" }
105*b725ae77Skettenis}
106*b725ae77Skettenis
107*b725ae77Skettenis# Try to set $$dyncall like a convenience var.
108*b725ae77Skettenissend_gdb "set \$\$dyncall = 77\n"
109*b725ae77Skettenisgdb_expect {
110*b725ae77Skettenis   -re "Invalid cast.*$gdb_prompt $" { pass "set \$\$dyncall = 77" }
111*b725ae77Skettenis   -re "$gdb_prompt $"                     { fail "set \$\$dyncall = 77" }
112*b725ae77Skettenis   timeout                             { fail "(timeout) set \$\$dyncall = 77" }
113*b725ae77Skettenis}
114*b725ae77Skettenis}
115*b725ae77Skettenis
116*b725ae77Skettenis# Try out some other $ name, not millicode
117*b725ae77Skettenisif [istarget "hppa64*-*-*"] {
118*b725ae77Skettenis    #hppa64 uses __argv instead of $ARGV.
119*b725ae77Skettenis    send_gdb "print \__argv\n"
120*b725ae77Skettenis    gdb_expect {
121*b725ae77Skettenis        -re "\\$\[0-9\]* = \[0-9\]*.*$gdb_prompt $" { pass "print \__argv" }
122*b725ae77Skettenis        -re "\\$\[0-9\]* = void.*$gdb_prompt $" {
123*b725ae77Skettenis	    fail "print \__argv (interpreted as convenience var)"
124*b725ae77Skettenis	}
125*b725ae77Skettenis        -re "$gdb_prompt $" { fail "print \__argv" }
126*b725ae77Skettenis        timeout { fail "(timeout) print \__argv" }
127*b725ae77Skettenis    }
128*b725ae77Skettenis
129*b725ae77Skettenis    send_gdb "ptype \__argv\n"
130*b725ae77Skettenis    gdb_expect {
131*b725ae77Skettenis        -re "type = <data variable, no debug info>.*$gdb_prompt $" {
132*b725ae77Skettenis	    pass "ptype \__argv"
133*b725ae77Skettenis	}
134*b725ae77Skettenis        -re "type = void.*$gdb_prompt $" {
135*b725ae77Skettenis	    fail "ptype \__argv (interpreted as convenience var)"
136*b725ae77Skettenis	}
137*b725ae77Skettenis        -re "$gdb_prompt $" { fail "ptype \__argv" }
138*b725ae77Skettenis        timeout { fail "(timeout) ptype \__argv" }
139*b725ae77Skettenis    }
140*b725ae77Skettenis} else {
141*b725ae77Skettenissend_gdb "print \$ARGV\n"
142*b725ae77Skettenisgdb_expect {
143*b725ae77Skettenis   -re "\\$\[0-9\]* = \[0-9\]*.*$gdb_prompt $" { pass "print \$ARGV" }
144*b725ae77Skettenis   -re "\\$\[0-9\]* = void.*$gdb_prompt $" { fail "print \$ARGV (interpreted as convenience var)" }
145*b725ae77Skettenis   -re "$gdb_prompt $"                     { fail "print \$ARGV" }
146*b725ae77Skettenis   timeout                             { fail "(timeout) print \$ARGV" }
147*b725ae77Skettenis}
148*b725ae77Skettenissend_gdb "ptype \$ARGV\n"
149*b725ae77Skettenisgdb_expect {
150*b725ae77Skettenis   -re "type = <data variable, no debug info>.*$gdb_prompt $" { pass "ptype \$ARGV" }
151*b725ae77Skettenis   -re "type = void.*$gdb_prompt $" { fail "ptype \$ARGV (interpreted as convenience var)" }
152*b725ae77Skettenis   -re "$gdb_prompt $"                     { fail "ptype \$ARGV" }
153*b725ae77Skettenis   timeout                             { fail "(timeout) ptype \$ARGV" }
154*b725ae77Skettenis}
155*b725ae77Skettenis}
156