Updated copyright notices for most files.
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / lineinc.exp
CommitLineData
f2785d12 1# Test macro handling of #included files.
0fb0cc75 2# Copyright 2003, 2007, 2008, 2009 Free Software Foundation, Inc.
f2785d12
JB
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
e22f8b7c 6# the Free Software Foundation; either version 3 of the License, or
f2785d12 7# (at your option) any later version.
e22f8b7c 8#
f2785d12
JB
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.
e22f8b7c 13#
f2785d12 14# You should have received a copy of the GNU General Public License
e22f8b7c 15# along with this program. If not, see <http://www.gnu.org/licenses/>.
f2785d12 16
f2785d12
JB
17# The test program lineinc.c contains a mix of #line directives and
18# #include directives that will cause the compiler to attribute more
19# than one #inclusion to the same source line. You can get similar
20# effects using things like GCC's '-imacros' flag.
21#
22# Compiling lineinc.c with Dwarf 2 macro information will produce
23# something like this:
24#
25# $ gcc -g3 lineinc.c -o lineinc
26# $ readelf -wml lineinc
27# ...
28# The File Name Table:
29# Entry Dir Time Size Name
30# 1 0 0 0 lineinc.c
31# 2 0 0 0 lineinc1.h
32# 3 0 0 0 lineinc2.h
33# 4 0 0 0 lineinc3.h
34# ...
35# Contents of the .debug_macinfo section:
36#
37# DW_MACINFO_start_file - lineno: 0 filenum: 1
38# DW_MACINFO_define - lineno : 1 macro : __VERSION__ "3.2 20020903 (Red Hat Linux 8.0 3.2-7)"
39# DW_MACINFO_define - lineno : 2 macro : __USER_LABEL_PREFIX__
40# ...
41# DW_MACINFO_define - lineno : 1 macro : __i386__ 1
42# DW_MACINFO_define - lineno : 1 macro : __tune_i386__ 1
43# DW_MACINFO_start_file - lineno: 10 filenum: 2
44# DW_MACINFO_define - lineno : 1 macro : FOO 1
45# DW_MACINFO_end_file
46# DW_MACINFO_start_file - lineno: 10 filenum: 3
47# DW_MACINFO_undef - lineno : 1 macro : FOO
48# DW_MACINFO_define - lineno : 2 macro : FOO 2
49# DW_MACINFO_end_file
50# DW_MACINFO_start_file - lineno: 11 filenum: 4
51# DW_MACINFO_undef - lineno : 1 macro : FOO
52# DW_MACINFO_define - lineno : 2 macro : FOO 3
53# DW_MACINFO_end_file
54# DW_MACINFO_end_file
55# $
56#
57# Note how the inclusions of lineinc1.h and lineinc2.h are both
58# attributed to line 10 of lineinc.c, and the #inclusion of lineinc3.h
59# is attributed to line 11. This is all correct, given the #line
60# directives in lineinc.c.
61#
62# Dwarf 2 macro information doesn't contain enough information to
63# allow GDB to figure out what's really going on here --- it makes no
64# mention of the #line directives --- so we just try to cope as best
65# we can. If the macro table were to attribute more than one
66# #inclusion to the same source line, then GDB wouldn't be able to
67# tell which #included file's #definitions and #undefinitions come
68# first, so it can't tell which #definitions are in scope following
69# all the #inclusions. To cope with this, GDB puts all the files
70# #included by a given source file in a list sorted by the line at
71# which they were #included; this gives GDB the chance to detect
72# multiple #inclusions at the same line, complain, and assign
73# distinct, albiet incorrect, line numbers to each #inclusion.
74#
75# However, at one point GDB was sorting the list in reverse order,
76# while the code to assign new, distinct line numbers assumed it was
77# sorted in ascending order; GDB would get an internal error trying to
78# read the above debugging info.
79
80if $tracelevel then {
81 strace $tracelevel
82}
83
84set prms_id 0
85set bug_id 0
86
87set testfile "lineinc"
88set binfile ${objdir}/${subdir}/${testfile}
89
90
91if {[gdb_compile "${srcdir}/${subdir}/${testfile}.c" ${binfile} executable {debug}] != ""} {
b60f0898
JB
92 untested lineinc.exp
93 return -1
f2785d12
JB
94}
95
96gdb_exit
97gdb_start
98gdb_reinitialize_dir $srcdir/$subdir
99gdb_load ${binfile}
100
101# Any command that causes GDB to read the debugging info for the
102# lineinc.c compilation unit will do here.
103set test_name "tolerate macro info with multiple #inclusions per line"
104gdb_test_multiple "break main" $test_name {
105 -re "Breakpoint 1 at 0x.*: file .*lineinc.c.*\\.\r\n${gdb_prompt}" {
106 pass $test_name
107 }
108 -re ".*internal-error:.*.y or n. " {
109 fail $test_name
110 send_gdb "y\n"
111 gdb_expect {
112 -re ".*.y or n. " {
113 send_gdb "n\n"
114 exp_continue
115 }
116 -re "$gdb_prompt" {
117 }
118 timeout {
119 fail "$test_name (timeout)"
120 }
121 }
122 }
123}
This page took 0.416569 seconds and 4 git commands to generate.