1*b725ae77Skettenis# Copyright 1997, 1998, 1999, 2003 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*b725ae77Skettenisif $tracelevel then { 21*b725ae77Skettenis strace $tracelevel 22*b725ae77Skettenis } 23*b725ae77Skettenis 24*b725ae77Skettenisglobal usestubs 25*b725ae77Skettenis 26*b725ae77Skettenis# 27*b725ae77Skettenis# test running programs 28*b725ae77Skettenis# 29*b725ae77Skettenisset prms_id 0 30*b725ae77Skettenisset bug_id 0 31*b725ae77Skettenis 32*b725ae77Skettenis# This test exists solely to exercise the "environment" commands for 33*b725ae77Skettenis# code-coverage on HP-UX. 34*b725ae77Skettenis# 35*b725ae77Skettenisif ![istarget "hppa*-*-hpux*"] then { 36*b725ae77Skettenis return 37*b725ae77Skettenis} 38*b725ae77Skettenis 39*b725ae77Skettenisset testfile "break" 40*b725ae77Skettenisset srcfile ${testfile}.c 41*b725ae77Skettenisset srcfile1 ${testfile}1.c 42*b725ae77Skettenisset binfile ${objdir}/${subdir}/${testfile} 43*b725ae77Skettenis 44*b725ae77Skettenisif { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}0.o" object {debug additional_flags=-w}] != "" } { 45*b725ae77Skettenis gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." 46*b725ae77Skettenis} 47*b725ae77Skettenis 48*b725ae77Skettenisif { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug additional_flags=-w}] != "" } { 49*b725ae77Skettenis gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." 50*b725ae77Skettenis} 51*b725ae77Skettenis 52*b725ae77Skettenisif { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug additional_flags=-w}] != "" } { 53*b725ae77Skettenis gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." 54*b725ae77Skettenis} 55*b725ae77Skettenis 56*b725ae77Skettenisgdb_exit 57*b725ae77Skettenisgdb_start 58*b725ae77Skettenisgdb_reinitialize_dir $srcdir/$subdir 59*b725ae77Skettenisgdb_load ${binfile} 60*b725ae77Skettenis 61*b725ae77Skettenisif ![runto_main] then { fail "environment command tests suppressed" } 62*b725ae77Skettenis 63*b725ae77Skettenis# (No, this is not really related to the environment commands. But it's 64*b725ae77Skettenis# a convenient place to verify that this command works.) 65*b725ae77Skettenis# 66*b725ae77Skettenissend_gdb "info program\n" 67*b725ae77Skettenisgdb_expect { 68*b725ae77Skettenis -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped at breakpoint 1..*$gdb_prompt $"\ 69*b725ae77Skettenis {pass "info program"} 70*b725ae77Skettenis -re "$gdb_prompt $"\ 71*b725ae77Skettenis {fail "info program"} 72*b725ae77Skettenis timeout {fail "(timeout) info program"} 73*b725ae77Skettenis} 74*b725ae77Skettenis 75*b725ae77Skettenis# We don't really care where this step lands, so long as it gets 76*b725ae77Skettenis# the inferior pushed off the breakpoint it's currently on... 77*b725ae77Skettenis# 78*b725ae77Skettenissend_gdb "next\n" 79*b725ae77Skettenisgdb_expect { 80*b725ae77Skettenis -re ".*$gdb_prompt $"\ 81*b725ae77Skettenis {pass "step before info program"} 82*b725ae77Skettenis timeout {fail "(timeout) step before info program"} 83*b725ae77Skettenis} 84*b725ae77Skettenissend_gdb "info program\n" 85*b725ae77Skettenisgdb_expect { 86*b725ae77Skettenis -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped after being stepped..*$gdb_prompt $"\ 87*b725ae77Skettenis {pass "info program after step"} 88*b725ae77Skettenis -re "$gdb_prompt $"\ 89*b725ae77Skettenis {fail "info program after step"} 90*b725ae77Skettenis timeout {fail "(timeout) info program after step"} 91*b725ae77Skettenis} 92*b725ae77Skettenis 93*b725ae77Skettenisif ![runto_main] then { fail "environment command tests suppressed" } 94*b725ae77Skettenis 95*b725ae77Skettenissend_gdb "delete\n" 96*b725ae77Skettenisgdb_expect { 97*b725ae77Skettenis -re ".*y or n. $"\ 98*b725ae77Skettenis {send_gdb "y\n" 99*b725ae77Skettenis gdb_expect { 100*b725ae77Skettenis -re ".*$gdb_prompt $"\ 101*b725ae77Skettenis {pass "delete breakpoint before info program"} 102*b725ae77Skettenis timeout {fail "(timeout) delete breakpoint before info program"} 103*b725ae77Skettenis } 104*b725ae77Skettenis } 105*b725ae77Skettenis -re "$gdb_prompt $"\ 106*b725ae77Skettenis {fail "delete breakpoint before info program"} 107*b725ae77Skettenis timeout {fail "(timeout) delete breakpoint before info program"} 108*b725ae77Skettenis} 109*b725ae77Skettenissend_gdb "info program\n" 110*b725ae77Skettenisgdb_expect { 111*b725ae77Skettenis -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped at a breakpoint that has since been deleted..*$gdb_prompt $"\ 112*b725ae77Skettenis {pass "info program after deleted breakpoint"} 113*b725ae77Skettenis -re "$gdb_prompt $"\ 114*b725ae77Skettenis {fail "info program after deleted breakpoint"} 115*b725ae77Skettenis timeout {fail "(timeout) info program after deleted breakpoint"} 116*b725ae77Skettenis} 117*b725ae77Skettenis 118*b725ae77Skettenis# Verify that we can show all currently-set environment variables. 119*b725ae77Skettenis# (It's a bit hacky, but nonetheless probably safe to check for at 120*b725ae77Skettenis# least the SHELL variable.) 121*b725ae77Skettenis# 122*b725ae77Skettenis# need to increase timeout because of very long output 123*b725ae77Skettenisset oldtimeout $timeout 124*b725ae77Skettenisset timeout [expr "$timeout + 300"] 125*b725ae77Skettenis 126*b725ae77Skettenissend_gdb "show environment\n" 127*b725ae77Skettenisgdb_expect { 128*b725ae77Skettenis -re ".*SHELL=(\[a-zA-Z0-9\]*).*$gdb_prompt $"\ 129*b725ae77Skettenis {pass "show environment"} 130*b725ae77Skettenis -re "$gdb_prompt $"\ 131*b725ae77Skettenis {fail "show environment"} 132*b725ae77Skettenis timeout {fail "(timeout) show environment"} 133*b725ae77Skettenis} 134*b725ae77Skettenisset timeout $oldtimeout 135*b725ae77Skettenis 136*b725ae77Skettenis# Verify that we can unset a specific environment variable. 137*b725ae77Skettenis# 138*b725ae77Skettenissend_gdb "unset environment EDITOR\n" 139*b725ae77Skettenisgdb_expect { 140*b725ae77Skettenis -re "$gdb_prompt $"\ 141*b725ae77Skettenis {pass "issue unset environment"} 142*b725ae77Skettenis timeout {fail "(timeout) issue unset environment"} 143*b725ae77Skettenis} 144*b725ae77Skettenissend_gdb "show environment EDITOR\n" 145*b725ae77Skettenisgdb_expect { 146*b725ae77Skettenis -re "Environment variable \"EDITOR\" not defined.\r\n$gdb_prompt $"\ 147*b725ae77Skettenis {pass "unset environment"} 148*b725ae77Skettenis -re "$gdb_prompt $"\ 149*b725ae77Skettenis {fail "unset environment"} 150*b725ae77Skettenis timeout {fail "(timeout) unset environment"} 151*b725ae77Skettenis} 152*b725ae77Skettenis 153*b725ae77Skettenis# Verify that we can unset all environment variables. 154*b725ae77Skettenis# 155*b725ae77Skettenissend_gdb "unset environment\n" 156*b725ae77Skettenisgdb_expect { 157*b725ae77Skettenis -re "Delete all environment variables.*y or n. $"\ 158*b725ae77Skettenis {send_gdb "y\n" 159*b725ae77Skettenis gdb_expect { 160*b725ae77Skettenis -re "$gdb_prompt $"\ 161*b725ae77Skettenis {pass "unset entire environment"} 162*b725ae77Skettenis timeout {fail "(timeout) unset entire environment"} 163*b725ae77Skettenis } 164*b725ae77Skettenis } 165*b725ae77Skettenis -re "$gdb_prompt $"\ 166*b725ae77Skettenis {fail "unset entire environment"} 167*b725ae77Skettenis timeout {fail "(timeout) unset entire environment"} 168*b725ae77Skettenis} 169*b725ae77Skettenis 170*b725ae77Skettenis# Verify that we can set a specific environment variable. 171*b725ae77Skettenis# 172*b725ae77Skettenissend_gdb "set environment EDITOR emacs\n" 173*b725ae77Skettenisgdb_expect { 174*b725ae77Skettenis -re "$gdb_prompt $"\ 175*b725ae77Skettenis {pass "issue set environment"} 176*b725ae77Skettenis timeout {fail "(timeout) issue set environment"} 177*b725ae77Skettenis} 178*b725ae77Skettenissend_gdb "show environment EDITOR\n" 179*b725ae77Skettenisgdb_expect { 180*b725ae77Skettenis -re "EDITOR = emacs\r\n$gdb_prompt $"\ 181*b725ae77Skettenis {pass "set environment"} 182*b725ae77Skettenis -re "$gdb_prompt $"\ 183*b725ae77Skettenis {fail "set environment"} 184*b725ae77Skettenis timeout {fail "(timeout) set environment"} 185*b725ae77Skettenis} 186*b725ae77Skettenis 187*b725ae77Skettenis# Verify that GDB responds gracefully to a request to set environment, 188*b725ae77Skettenis# with no variable name. 189*b725ae77Skettenis# 190*b725ae77Skettenissend_gdb "set environment\n" 191*b725ae77Skettenisgdb_expect { 192*b725ae77Skettenis -re "Argument required .environment variable and value..*$gdb_prompt $"\ 193*b725ae77Skettenis {pass "set environment without variable disallowed"} 194*b725ae77Skettenis -re "$gdb_prompt $"\ 195*b725ae77Skettenis {fail "set environment without variable disallowed"} 196*b725ae77Skettenis timeout {fail "(timeout) set environment without variable disallowed"} 197*b725ae77Skettenis} 198*b725ae77Skettenis 199*b725ae77Skettenis# I'm not sure just what GDB has in mind in explicitly checking 200*b725ae77Skettenis# for this variant, but since GDB handles it, test it. 201*b725ae77Skettenis# 202*b725ae77Skettenissend_gdb "set environment =\n" 203*b725ae77Skettenisgdb_expect { 204*b725ae77Skettenis -re "Argument required .environment variable to set..*$gdb_prompt $"\ 205*b725ae77Skettenis {pass "set environment equals without variable disallowed"} 206*b725ae77Skettenis -re "$gdb_prompt $"\ 207*b725ae77Skettenis {fail "set environment equals without variable disallowed"} 208*b725ae77Skettenis timeout {fail "(timeout) set environment equals without variable disallowed"} 209*b725ae77Skettenis} 210*b725ae77Skettenis 211*b725ae77Skettenis# Setting an environment variable without a value sets it to a NULL 212*b725ae77Skettenis# value. 213*b725ae77Skettenis# 214*b725ae77Skettenissend_gdb "set environment EDITOR\n" 215*b725ae77Skettenisgdb_expect { 216*b725ae77Skettenis -re "Setting environment variable \"EDITOR\" to null value..*$gdb_prompt $"\ 217*b725ae77Skettenis {pass "issue set environment without variable value"} 218*b725ae77Skettenis -re "$gdb_prompt $"\ 219*b725ae77Skettenis {fail "issue set environment without variable value"} 220*b725ae77Skettenis timeout {fail "(timeout) issue set environment without variable value"} 221*b725ae77Skettenis} 222*b725ae77Skettenissend_gdb "show environment EDITOR\n" 223*b725ae77Skettenisgdb_expect { 224*b725ae77Skettenis -re "EDITOR = \r\n$gdb_prompt $"\ 225*b725ae77Skettenis {pass "set environment without variable value"} 226*b725ae77Skettenis -re "$gdb_prompt $"\ 227*b725ae77Skettenis {fail "set environment without variable value"} 228*b725ae77Skettenis timeout {fail "(timeout) set environment without variable value"} 229*b725ae77Skettenis} 230*b725ae77Skettenis 231*b725ae77Skettenis# Verify that GDB responds gracefully to an attempt to show a 232*b725ae77Skettenis# non-existent environment variable. (We hope this variable is 233*b725ae77Skettenis# undefined!) 234*b725ae77Skettenis# 235*b725ae77Skettenissend_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" 236*b725ae77Skettenisgdb_expect { 237*b725ae77Skettenis -re "Environment variable \"FOOBARBAZGRUNGESPAZBALL\" not defined..*$gdb_prompt $"\ 238*b725ae77Skettenis {pass "show non-existent environment variable disallowed"} 239*b725ae77Skettenis -re "$gdb_prompt $"\ 240*b725ae77Skettenis {fail "show non-existent environment variable disallowed"} 241*b725ae77Skettenis timeout {fail "(timeout) show non-existent environment variable disallowed"} 242*b725ae77Skettenis} 243*b725ae77Skettenis 244*b725ae77Skettenis# Verify that GDB can set an environment variable hitherto undefined. 245*b725ae77Skettenis# 246*b725ae77Skettenissend_gdb "set environment FOOBARBAZGRUNGESPAZBALL t\n" 247*b725ae77Skettenisgdb_expect { 248*b725ae77Skettenis -re "$gdb_prompt $"\ 249*b725ae77Skettenis {pass "issue set environment for previously undefined variable"} 250*b725ae77Skettenis timeout {fail "(timeout) issue set environment for previously undefined variable"} 251*b725ae77Skettenis} 252*b725ae77Skettenissend_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" 253*b725ae77Skettenisgdb_expect { 254*b725ae77Skettenis -re "FOOBARBAZGRUNGESPAZBALL = t\r\n$gdb_prompt $"\ 255*b725ae77Skettenis {pass "set environment for previously undefined variable"} 256*b725ae77Skettenis -re "$gdb_prompt $"\ 257*b725ae77Skettenis {fail "set environment for previously undefined variable"} 258*b725ae77Skettenis timeout {fail "(timeout) set environment for previously undefined variable"} 259*b725ae77Skettenis} 260*b725ae77Skettenis 261*b725ae77Skettenis# Verify that GDB can also set an environment variable using the "=" 262*b725ae77Skettenis# syntax. 263*b725ae77Skettenis# 264*b725ae77Skettenissend_gdb "set environment FOOBARBAZGRUNGESPAZBALL = t\n" 265*b725ae77Skettenisgdb_expect { 266*b725ae77Skettenis -re "$gdb_prompt $"\ 267*b725ae77Skettenis {pass "issue set environment with equals"} 268*b725ae77Skettenis timeout {fail "(timeout) issue set environment with equals"} 269*b725ae77Skettenis} 270*b725ae77Skettenissend_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" 271*b725ae77Skettenisgdb_expect { 272*b725ae77Skettenis -re "FOOBARBAZGRUNGESPAZBALL = t\r\n$gdb_prompt $"\ 273*b725ae77Skettenis {pass "set environment with equals"} 274*b725ae77Skettenis -re "$gdb_prompt $"\ 275*b725ae77Skettenis {fail "set environment with equals"} 276*b725ae77Skettenis timeout {fail "(timeout) set environment with equals"} 277*b725ae77Skettenis} 278*b725ae77Skettenis 279*b725ae77Skettenis# Verify that GDB can set an environment variable to a value that has 280*b725ae77Skettenis# an embedded (trailing, in this case) equals. 281*b725ae77Skettenis# 282*b725ae77Skettenissend_gdb "set environment FOOBARBAZGRUNGESPAZBALL t=\n" 283*b725ae77Skettenisgdb_expect { 284*b725ae77Skettenis -re "$gdb_prompt $"\ 285*b725ae77Skettenis {pass "issue set environment with trailing equals"} 286*b725ae77Skettenis timeout {fail "(timeout) issue set environment with trailing equals"} 287*b725ae77Skettenis} 288*b725ae77Skettenissend_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" 289*b725ae77Skettenisgdb_expect { 290*b725ae77Skettenis -re "FOOBARBAZGRUNGESPAZBALL = t=\r\n$gdb_prompt $"\ 291*b725ae77Skettenis {pass "set environment with trailing equals"} 292*b725ae77Skettenis -re "$gdb_prompt $"\ 293*b725ae77Skettenis {fail "set environment with trailing equals"} 294*b725ae77Skettenis timeout {fail "(timeout) set environment with trailing equals"} 295*b725ae77Skettenis} 296*b725ae77Skettenis 297*b725ae77Skettenis# Verify that GDB can set an environment variable to a value preceded 298*b725ae77Skettenis# by whitespace, and that such whitespace is ignored (not included 299*b725ae77Skettenis# in the set value). 300*b725ae77Skettenis# 301*b725ae77Skettenissend_gdb "set environment FOOBARBAZGRUNGESPAZBALL = foo\n" 302*b725ae77Skettenisgdb_expect { 303*b725ae77Skettenis -re "$gdb_prompt $"\ 304*b725ae77Skettenis {pass "issue set environment with preceding whitespace"} 305*b725ae77Skettenis timeout {fail "(timeout) issue set environment with preceding whitespace"} 306*b725ae77Skettenis} 307*b725ae77Skettenissend_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" 308*b725ae77Skettenisgdb_expect { 309*b725ae77Skettenis -re "FOOBARBAZGRUNGESPAZBALL = foo\r\n$gdb_prompt $"\ 310*b725ae77Skettenis {pass "set environment with preceding whitespace"} 311*b725ae77Skettenis -re "$gdb_prompt $"\ 312*b725ae77Skettenis {fail "set environment with preceding whitespace"} 313*b725ae77Skettenis timeout {fail "(timeout) set environment with preceding whitespace"} 314*b725ae77Skettenis} 315*b725ae77Skettenis 316*b725ae77Skettenis# Verify that GDB can manipulate the distinguished PATH variable. 317*b725ae77Skettenis# 318*b725ae77Skettenissend_gdb "path /tmp/FOOBARBAZGRUNGESPAZBALL\n" 319*b725ae77Skettenisgdb_expect { 320*b725ae77Skettenis -re ".*Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\ 321*b725ae77Skettenis {pass "issue path"} 322*b725ae77Skettenis -re "$gdb_prompt $"\ 323*b725ae77Skettenis {fail "issue path"} 324*b725ae77Skettenis timeout {fail "(timeout) issue path"} 325*b725ae77Skettenis} 326*b725ae77Skettenissend_gdb "show paths\n" 327*b725ae77Skettenisgdb_expect { 328*b725ae77Skettenis -re "Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\ 329*b725ae77Skettenis {pass "show paths"} 330*b725ae77Skettenis -re "$gdb_prompt $"\ 331*b725ae77Skettenis {fail "show paths"} 332*b725ae77Skettenis timeout {fail "(timeout) show paths"} 333*b725ae77Skettenis} 334*b725ae77Skettenis 335*b725ae77Skettenisgdb_exit 336*b725ae77Skettenisreturn 0 337