OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-6.8/] [gdb/] [testsuite/] [gdb.base/] [lineinc.exp] - Diff between revs 827 and 840

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 827 Rev 840
# Test macro handling of #included files.
# Test macro handling of #included files.
# Copyright 2003, 2007, 2008 Free Software Foundation, Inc.
# Copyright 2003, 2007, 2008 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# 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
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# (at your option) any later version.
#
#
# This program is distributed in the hope that it will be useful,
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see .
# along with this program.  If not, see .
# Please email any bugs, comments, and/or additions to this file to:
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# bug-gdb@prep.ai.mit.edu
# The test program lineinc.c contains a mix of #line directives and
# The test program lineinc.c contains a mix of #line directives and
# #include directives that will cause the compiler to attribute more
# #include directives that will cause the compiler to attribute more
# than one #inclusion to the same source line.  You can get similar
# than one #inclusion to the same source line.  You can get similar
# effects using things like GCC's '-imacros' flag.
# effects using things like GCC's '-imacros' flag.
#
#
# Compiling lineinc.c with Dwarf 2 macro information will produce
# Compiling lineinc.c with Dwarf 2 macro information will produce
# something like this:
# something like this:
#
#
#     $ gcc -g3 lineinc.c -o lineinc
#     $ gcc -g3 lineinc.c -o lineinc
#     $ readelf -wml lineinc
#     $ readelf -wml lineinc
#     ...
#     ...
#      The File Name Table:
#      The File Name Table:
#       Entry   Dir     Time    Size    Name
#       Entry   Dir     Time    Size    Name
#       1       0        0        0        lineinc.c
#       1       0        0        0        lineinc.c
#       2       0        0        0        lineinc1.h
#       2       0        0        0        lineinc1.h
#       3       0        0        0        lineinc2.h
#       3       0        0        0        lineinc2.h
#       4       0        0        0        lineinc3.h
#       4       0        0        0        lineinc3.h
#     ...
#     ...
#     Contents of the .debug_macinfo section:
#     Contents of the .debug_macinfo section:
#
#
#      DW_MACINFO_start_file - lineno: 0 filenum: 1
#      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 : 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 : 2 macro : __USER_LABEL_PREFIX__
#     ...
#     ...
#      DW_MACINFO_define - lineno : 1 macro : __i386__ 1
#      DW_MACINFO_define - lineno : 1 macro : __i386__ 1
#      DW_MACINFO_define - lineno : 1 macro : __tune_i386__ 1
#      DW_MACINFO_define - lineno : 1 macro : __tune_i386__ 1
#      DW_MACINFO_start_file - lineno: 10 filenum: 2
#      DW_MACINFO_start_file - lineno: 10 filenum: 2
#      DW_MACINFO_define - lineno : 1 macro : FOO 1
#      DW_MACINFO_define - lineno : 1 macro : FOO 1
#      DW_MACINFO_end_file
#      DW_MACINFO_end_file
#      DW_MACINFO_start_file - lineno: 10 filenum: 3
#      DW_MACINFO_start_file - lineno: 10 filenum: 3
#      DW_MACINFO_undef - lineno : 1 macro : FOO
#      DW_MACINFO_undef - lineno : 1 macro : FOO
#      DW_MACINFO_define - lineno : 2 macro : FOO 2
#      DW_MACINFO_define - lineno : 2 macro : FOO 2
#      DW_MACINFO_end_file
#      DW_MACINFO_end_file
#      DW_MACINFO_start_file - lineno: 11 filenum: 4
#      DW_MACINFO_start_file - lineno: 11 filenum: 4
#      DW_MACINFO_undef - lineno : 1 macro : FOO
#      DW_MACINFO_undef - lineno : 1 macro : FOO
#      DW_MACINFO_define - lineno : 2 macro : FOO 3
#      DW_MACINFO_define - lineno : 2 macro : FOO 3
#      DW_MACINFO_end_file
#      DW_MACINFO_end_file
#      DW_MACINFO_end_file
#      DW_MACINFO_end_file
#     $
#     $
#
#
# Note how the inclusions of lineinc1.h and lineinc2.h are both
# 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
# 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
# is attributed to line 11.  This is all correct, given the #line
# directives in lineinc.c.
# directives in lineinc.c.
#
#
# Dwarf 2 macro information doesn't contain enough information to
# Dwarf 2 macro information doesn't contain enough information to
# allow GDB to figure out what's really going on here --- it makes no
# 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
# 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
# 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
# #inclusion to the same source line, then GDB wouldn't be able to
# tell which #included file's #definitions and #undefinitions come
# tell which #included file's #definitions and #undefinitions come
# first, so it can't tell which #definitions are in scope following
# first, so it can't tell which #definitions are in scope following
# all the #inclusions.  To cope with this, GDB puts all the files
# 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
# #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
# which they were #included; this gives GDB the chance to detect
# multiple #inclusions at the same line, complain, and assign
# multiple #inclusions at the same line, complain, and assign
# distinct, albiet incorrect, line numbers to each #inclusion.
# distinct, albiet incorrect, line numbers to each #inclusion.
#
#
# However, at one point GDB was sorting the list in reverse order,
# However, at one point GDB was sorting the list in reverse order,
# while the code to assign new, distinct line numbers assumed it was
# while the code to assign new, distinct line numbers assumed it was
# sorted in ascending order; GDB would get an internal error trying to
# sorted in ascending order; GDB would get an internal error trying to
# read the above debugging info.
# read the above debugging info.
if $tracelevel then {
if $tracelevel then {
    strace $tracelevel
    strace $tracelevel
}
}
set prms_id 0
set prms_id 0
set bug_id 0
set bug_id 0
set testfile "lineinc"
set testfile "lineinc"
set binfile ${objdir}/${subdir}/${testfile}
set binfile ${objdir}/${subdir}/${testfile}
if {[gdb_compile "${srcdir}/${subdir}/${testfile}.c" ${binfile} executable {debug}] != ""} {
if {[gdb_compile "${srcdir}/${subdir}/${testfile}.c" ${binfile} executable {debug}] != ""} {
    untested lineinc.exp
    untested lineinc.exp
    return -1
    return -1
}
}
gdb_exit
gdb_exit
gdb_start
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
gdb_load ${binfile}
# Any command that causes GDB to read the debugging info for the
# Any command that causes GDB to read the debugging info for the
# lineinc.c compilation unit will do here.
# lineinc.c compilation unit will do here.
set test_name "tolerate macro info with multiple #inclusions per line"
set test_name "tolerate macro info with multiple #inclusions per line"
gdb_test_multiple "break main" $test_name {
gdb_test_multiple "break main" $test_name {
    -re "Breakpoint 1 at 0x.*: file .*lineinc.c.*\\.\r\n${gdb_prompt}" {
    -re "Breakpoint 1 at 0x.*: file .*lineinc.c.*\\.\r\n${gdb_prompt}" {
        pass $test_name
        pass $test_name
    }
    }
    -re ".*internal-error:.*.y or n. " {
    -re ".*internal-error:.*.y or n. " {
        fail $test_name
        fail $test_name
        send_gdb "y\n"
        send_gdb "y\n"
        gdb_expect {
        gdb_expect {
            -re ".*.y or n. " {
            -re ".*.y or n. " {
                send_gdb "n\n"
                send_gdb "n\n"
                exp_continue
                exp_continue
            }
            }
            -re "$gdb_prompt" {
            -re "$gdb_prompt" {
            }
            }
            timeout {
            timeout {
                fail "$test_name (timeout)"
                fail "$test_name (timeout)"
            }
            }
        }
        }
    }
    }
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.