binutils-gdb/gdb/testsuite/gdb.base/lineinc.exp
Joel Brobecker 61baf725ec update copyright year range in GDB files
This applies the second part of GDB's End of Year Procedure, which
updates the copyright year range in all of GDB's files.

gdb/ChangeLog:

        Update copyright year range in all GDB files.
2017-01-01 10:52:34 +04:00

113 lines
4.3 KiB
Plaintext

# Test macro handling of #included files.
# Copyright 2003-2017 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/>.
# The test program lineinc.c contains a mix of #line directives and
# #include directives that will cause the compiler to attribute more
# than one #inclusion to the same source line. You can get similar
# effects using things like GCC's '-imacros' flag.
#
# Compiling lineinc.c with Dwarf 2 macro information will produce
# something like this:
#
# $ gcc -g3 lineinc.c -o lineinc
# $ readelf -wml lineinc
# ...
# The File Name Table:
# Entry Dir Time Size Name
# 1 0 0 0 lineinc.c
# 2 0 0 0 lineinc1.h
# 3 0 0 0 lineinc2.h
# 4 0 0 0 lineinc3.h
# ...
# Contents of the .debug_macinfo section:
#
# DW_MACINFO_start_file - lineno: 0 filenum: 1
# DW_MACINFO_define - lineno : 1 macro : __VERSION__ "3.2 20020903 (Red Hat Linux 8.0 3.2-7)"
# DW_MACINFO_define - lineno : 2 macro : __USER_LABEL_PREFIX__
# ...
# DW_MACINFO_define - lineno : 1 macro : __i386__ 1
# DW_MACINFO_define - lineno : 1 macro : __tune_i386__ 1
# DW_MACINFO_start_file - lineno: 10 filenum: 2
# DW_MACINFO_define - lineno : 1 macro : FOO 1
# DW_MACINFO_end_file
# DW_MACINFO_start_file - lineno: 10 filenum: 3
# DW_MACINFO_undef - lineno : 1 macro : FOO
# DW_MACINFO_define - lineno : 2 macro : FOO 2
# DW_MACINFO_end_file
# DW_MACINFO_start_file - lineno: 11 filenum: 4
# DW_MACINFO_undef - lineno : 1 macro : FOO
# DW_MACINFO_define - lineno : 2 macro : FOO 3
# DW_MACINFO_end_file
# DW_MACINFO_end_file
# $
#
# Note how the inclusions of lineinc1.h and lineinc2.h are both
# attributed to line 10 of lineinc.c, and the #inclusion of lineinc3.h
# is attributed to line 11. This is all correct, given the #line
# directives in lineinc.c.
#
# Dwarf 2 macro information doesn't contain enough information to
# allow GDB to figure out what's really going on here --- it makes no
# mention of the #line directives --- so we just try to cope as best
# we can. If the macro table were to attribute more than one
# #inclusion to the same source line, then GDB wouldn't be able to
# tell which #included file's #definitions and #undefinitions come
# first, so it can't tell which #definitions are in scope following
# all the #inclusions. To cope with this, GDB puts all the files
# #included by a given source file in a list sorted by the line at
# which they were #included; this gives GDB the chance to detect
# multiple #inclusions at the same line, complain, and assign
# distinct, albiet incorrect, line numbers to each #inclusion.
#
# However, at one point GDB was sorting the list in reverse order,
# while the code to assign new, distinct line numbers assumed it was
# sorted in ascending order; GDB would get an internal error trying to
# read the above debugging info.
standard_testfile .c
if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" ${binfile} executable {debug}] != ""} {
untested "failed to compile"
return -1
}
clean_restart ${binfile}
# Any command that causes GDB to read the debugging info for the
# lineinc.c compilation unit will do here.
set test_name "tolerate macro info with multiple #inclusions per line"
gdb_test_multiple "break main" $test_name {
-re "Breakpoint 1 at 0x.*: file .*lineinc.c.*\\.\r\n${gdb_prompt}" {
pass $test_name
}
-re ".*internal-error:.*.y or n. " {
fail $test_name
send_gdb "y\n"
gdb_expect {
-re ".*.y or n. " {
send_gdb "n\n"
exp_continue
}
-re "$gdb_prompt" {
}
timeout {
fail "$test_name (timeout)"
}
}
}
}