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