aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/sect-cmd.exp
blob: 4c4972594e834c21b9af834f0984fb475145f87e (plain)
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
# Copyright 1997, 1998, 1999, 2003, 2007, 2008, 2009, 2010
# 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 3 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, see <http://www.gnu.org/licenses/>.  */

if $tracelevel then {
	strace $tracelevel
	}

global usestubs

#
# test running programs
#

# 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 "sect-cmd"
set srcfile break.c
set srcfile1 break1.c
set binfile ${objdir}/${subdir}/${testfile}

if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}0.o" object {debug nowarnings}] != "" } {
    untested sect-cmd.exp
    return -1
}

if { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug nowarnings}] != "" } {
    untested sect-cmd.exp
    return -1
}

if { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug nowarnings}] != "" } {
    untested sect-cmd.exp
    return -1
}

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