1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
# Copyright 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
if $tracelevel then {
strace $tracelevel
}
global usestubs
#
# test running programs
#
set prms_id 0
set bug_id 0
# This test exists solely to exercise the "section" command for
# code-coverage on HP-UX. (So far as I can tell, the "section"
# command isn't needed on HP-UX, but probably is for embedded
# apps.)
#
if ![istarget "hppa*-*-hpux*"] then {
return
}
set testfile "break"
set srcfile ${testfile}.c
set srcfile1 ${testfile}1.c
set binfile ${objdir}/${subdir}/${testfile}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}0.o" object {debug additional_flags=-w}] != "" } {
gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug additional_flags=-w}] != "" } {
gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}
if { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug additional_flags=-w}] != "" } {
gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
if ![runto_main] then { fail "section command tests suppressed" }
# Get the $CODE$ section's starting address.
#
# (Note that this works for PA32 programs, which use the SOM file
# format. PA64 uses ELF, and when support for that is added, it's
# not clear that there'll be a section named "$CODE$" in such
# programs.)
#
set address1 ""
set address2 ""
send_gdb "info files\n"
gdb_expect {
-re ".*(0x\[0-9a-fA-F\]*) - (0x\[0-9a-fA-F\]*) is .(CODE|text).*$gdb_prompt $"\
{pass "info files"
set address1 $expect_out(1,string)
set address2 $expect_out(2,string)}
-re "$gdb_prompt $"\
{fail "info files"}
timeout {fail "(timeout) info files"}
}
# Reset the section to that same starting address, which should be
# harmless (i.e., we just want to exercise the section command).
#
if [istarget "hppa2.0w-*-*"] then {
send_gdb "section \.text $address1\n"
gdb_expect {
-re ".*$address1 \- $address2 is .text.*$gdb_prompt $"\
{pass "set section command"}
-re "$gdb_prompt $"\
{fail "set section command"}
timeout {fail "(timeout) set section command"}
}
} else {
send_gdb "section \$CODE\$ $address1\n"
gdb_expect {
-re ".*$address1 \- $address2 is .CODE..*$gdb_prompt $"\
{pass "set section command"}
-re "$gdb_prompt $"\
{fail "set section command"}
timeout {fail "(timeout) set section command"}
}
}
# Verify that GDB responds gracefully to a non-existent section name.
#
send_gdb "section FOOBARBAZ 0x1234\n"
gdb_expect {
-re "Section FOOBARBAZ not found\r\n$gdb_prompt $"\
{pass "non-existent section disallowed"}
-re "$gdb_prompt $"\
{fail "non-existent section disallowed"}
timeout {fail "(timeout) non-existent section disallowed"}
}
# We "happen to know" that GDB uses a fixed size character buffer to
# parse the section name into, and the buffer is declared to be 100
# characters in length. Verify that GDB gracefully handles section
# names longer than that. (The section is also non-existent.)
#
send_gdb "section A234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123 0x1234\n"
gdb_expect {
-re "Section A23456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 not found\r\n$gdb_prompt $"\
{pass "non-existent too-long section disallowed"}
-re "$gdb_prompt $"\
{fail "non-existent too-long section disallowed"}
timeout {fail "(timeout) non-existent too-long section disallowed"}
}
gdb_exit
return 0
|