1 # Test macro handling of #included files.
2 # Copyright
2003 Free Software Foundation
, Inc.
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
2 of the License
, or
7 #
(at your option
) any later version.
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.
14 # You should have received a copy of the GNU General Public License
15 # along with this
program; if not
, write to the Free Software
16 # Foundation
, Inc.
, 59 Temple Place
- Suite
330, Boston
, MA
02111-1307, USA.
18 # Please email
any bugs
, comments
, and
/or additions to this file to
:
19 # bug
-gdb@prep.ai.mit.edu
21 # The test
program lineinc.c contains a mix of #line directives and
22 # #
include directives that will cause the compiler to attribute more
23 # than one #inclusion to the same source line. You can
get similar
24 # effects using things like GCC
's '-imacros
' flag.
26 # Compiling lineinc.c with Dwarf 2 macro information will produce
27 # something like this:
29 # $ gcc -g3 lineinc.c -o lineinc
30 # $ readelf -wml lineinc
32 # The File Name Table:
33 # Entry Dir Time Size Name
39 # Contents of the .debug_macinfo section:
41 # DW_MACINFO_start_file - lineno: 0 filenum: 1
42 # DW_MACINFO_define - lineno : 1 macro : __VERSION__ "3.2 20020903 (Red Hat Linux 8.0 3.2-7)"
43 # DW_MACINFO_define - lineno : 2 macro : __USER_LABEL_PREFIX__
45 # DW_MACINFO_define - lineno : 1 macro : __i386__ 1
46 # DW_MACINFO_define - lineno : 1 macro : __tune_i386__ 1
47 # DW_MACINFO_start_file - lineno: 10 filenum: 2
48 # DW_MACINFO_define - lineno : 1 macro : FOO 1
50 # DW_MACINFO_start_file - lineno: 10 filenum: 3
51 # DW_MACINFO_undef - lineno : 1 macro : FOO
52 # DW_MACINFO_define - lineno : 2 macro : FOO 2
54 # DW_MACINFO_start_file - lineno: 11 filenum: 4
55 # DW_MACINFO_undef - lineno : 1 macro : FOO
56 # DW_MACINFO_define - lineno : 2 macro : FOO 3
61 # Note how the inclusions of lineinc1.h and lineinc2.h are both
62 # attributed to line 10 of lineinc.c, and the #inclusion of lineinc3.h
63 # is attributed to line 11. This is all correct, given the #line
64 # directives in lineinc.c.
66 # Dwarf 2 macro information doesn't contain enough information to
67 # allow GDB to figure out what
's really going on here --- it makes no
68 # mention of the #line directives --- so we just try to cope as best
69 # we can. If the macro table were to attribute more than one
70 # #inclusion to the same source line, then GDB wouldn't be able to
71 # tell which #included file
's #definitions and #undefinitions come
72 # first, so it can't tell which #definitions are in scope following
73 # all the #inclusions. To cope with this
, GDB puts all the files
74 # #included by a given source file in a list sorted by the line at
75 # which they were #included
; this gives GDB the chance to detect
76 # multiple #inclusions at the same line
, complain
, and assign
77 # distinct
, albiet incorrect
, line numbers to each #inclusion.
79 # However
, at one point GDB was sorting the list in reverse order
,
80 #
while the code to assign new
, distinct line numbers assumed it was
81 # sorted in ascending order
; GDB would
get an internal error trying to
82 # read the above debugging
info.
91 set testfile
"lineinc"
92 set binfile $
{objdir
}/$
{subdir
}/$
{testfile
}
95 if {[gdb_compile
"${srcdir}/${subdir}/${testfile}.c" ${binfile} executable {debug}] != ""} {
96 gdb_suppress_entire_file
"Testcase compile failed, so all tests in this file will automatically fail."
101 gdb_reinitialize_dir $srcdir
/$subdir
104 #
Any command that causes GDB to read the debugging
info for the
105 # lineinc.c compilation unit will
do here.
106 set test_name
"tolerate macro info with multiple #inclusions per line"
107 gdb_test_multiple
"break main" $test_name {
108 -re
"Breakpoint 1 at 0x.*: file .*lineinc.c.*\\.\r\n${gdb_prompt}" {
111 -re
".*internal-error:.*.y or n. " {
122 fail
"$test_name (timeout)"