old-cross-binutils/gdb/testsuite/gdb.dwarf2/dw2-anonymous-func.exp

37 lines
1.2 KiB
Text
Raw Normal View History

# Copyright 2004-2015 Free Software Foundation, Inc.
[dwarf] Anonymous nested function causes SEGV during psymbol read According to the DWARF3 standard, a function always has a name attribute (Section 3.3 - Subroutine and Entry Point Entries). The only exception is when a DW_AT_abstract_origin attribute is provided, in which case the name may be inherited from the referenced DIE. The problem occured because our compiler generated a subprogram DIE for a nested function where the name attribute was missing (and no abstract-origin either). Our code in add_partial_symbol is not prepared to deal with the situation, and happily just tries to compute the length of the (NULL) function name. This normally cannot happen, because there is already a guard in scan_partial_symbols, where we (silently!) ignore anonymous dies, including anonymous subprograms. Unfortunately, there is a flaw that affects Ada and other languages that allow nested subprograms. For nested subprograms, we do not go through scan_partial_symbols and thus we are missing the name check. This patch adds the name check in the nested subprogram case. It also adds a complaint which is emitted during the psymtab->symtab conversion phase. gdb/ChangeLog: * dwarf2read.c (add_partial_subprogram): Make sure the subprogram DIE has a name before creating the associated partial symbol. (read_func_scope): Emit a complaint if the subprogram does not have a name or when we can't extract the subprogram PC bounds. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-anonymous-func.S: New file. * gdb.dwarf2/dw2-anonymous-func.exp: New testcase. Tested on x86_64-linux, no regression. Note that the testcase also verifies that the psymtab->symtab conversion does not crash (this is the purpose of the "list file1.txt:1" test.
2010-03-18 18:35:55 +00:00
# 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/>.
2011-01-19 Yao Qi <yao@codesourcery.com> * gdb.asm/asm-source.exp: Replace ARM target triplet with a canonical form. Remove "xscale-*-*" * gdb.xml/tdesc-regs.exp: Likewise. * gdb.python/py-section-script.exp: Replace ARM target triplet with canonical form. Match arm*-*-symbianelf*. * gdb.base/dup-sect.exp: Likewise. * lib/dwarf.exp: New. * gdb.dwarf2/callframecfa.exp: Check dwarf2 support by routine dwarf2_support. * gdb.dwarf2/dup-psym.exp: Likewise. * gdb.dwarf2/dw2-ada-ffffffff.exp: Likewise. * gdb.dwarf2/dw2-anonymous-func.exp: Likewise. * gdb.dwarf2/dw2-bad-parameter-type.exp: Likewise. * gdb.dwarf2/dw2-basic.exp: Likewise. * gdb.dwarf2/dw2-compressed.exp: Likewise. * gdb.dwarf2/dw2-const.exp: Likewise. * gdb.dwarf2/dw2-cp-infcall-ref-static.exp: Likewise. * gdb.dwarf2/dw2-cu-size.exp: Likewise. * gdb.dwarf2/dw2-double-set-die-type.exp: Likewise. * gdb.dwarf2/dw2-empty-namespace.exp: Likewise. * gdb.dwarf2/dw2-filename.exp: Likewise. * gdb.dwarf2/dw2-inheritance.exp: Likewise. * gdb.dwarf2/dw2-inline-param.exp: Likewise. * gdb.dwarf2/dw2-intercu.exp: Likewise. * gdb.dwarf2/dw2-intermix.exp: Likewise. * gdb.dwarf2/dw2-modula2-self-type.exp: Likewise. * gdb.dwarf2/dw2-noloc.exp: Likewise. * gdb.dwarf2/dw2-op-call.exp: Likewise. * gdb.dwarf2/dw2-producer.exp: Likewise. * gdb.dwarf2/dw2-ranges.exp: Likewise. * gdb.dwarf2/dw2-ref-missing-frame.exp: Likewise. * gdb.dwarf2/dw2-stack-boundary.exp: Likewise. * gdb.dwarf2/dw2-strp.exp: Likewise. * gdb.dwarf2/dw2-unresolved.exp: Likewise. * gdb.dwarf2/implptr.exp: Likewise. * gdb.dwarf2/mac-fileno.exp: Likewise. * gdb.dwarf2/member-ptr-forwardref.exp: Likewise. * gdb.dwarf2/pieces.exp: Likewise. * gdb.dwarf2/pr11465.exp: Likewise. * gdb.dwarf2/valop.exp: Likewise. * gdb.dwarf2/watch-notconst.exp: Likewise. * gdb.mi/dw2-ref-missing-frame.exp: Likewise.
2011-01-19 20:26:10 +00:00
load_lib dwarf.exp
[dwarf] Anonymous nested function causes SEGV during psymbol read According to the DWARF3 standard, a function always has a name attribute (Section 3.3 - Subroutine and Entry Point Entries). The only exception is when a DW_AT_abstract_origin attribute is provided, in which case the name may be inherited from the referenced DIE. The problem occured because our compiler generated a subprogram DIE for a nested function where the name attribute was missing (and no abstract-origin either). Our code in add_partial_symbol is not prepared to deal with the situation, and happily just tries to compute the length of the (NULL) function name. This normally cannot happen, because there is already a guard in scan_partial_symbols, where we (silently!) ignore anonymous dies, including anonymous subprograms. Unfortunately, there is a flaw that affects Ada and other languages that allow nested subprograms. For nested subprograms, we do not go through scan_partial_symbols and thus we are missing the name check. This patch adds the name check in the nested subprogram case. It also adds a complaint which is emitted during the psymtab->symtab conversion phase. gdb/ChangeLog: * dwarf2read.c (add_partial_subprogram): Make sure the subprogram DIE has a name before creating the associated partial symbol. (read_func_scope): Emit a complaint if the subprogram does not have a name or when we can't extract the subprogram PC bounds. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-anonymous-func.S: New file. * gdb.dwarf2/dw2-anonymous-func.exp: New testcase. Tested on x86_64-linux, no regression. Note that the testcase also verifies that the psymtab->symtab conversion does not crash (this is the purpose of the "list file1.txt:1" test.
2010-03-18 18:35:55 +00:00
# Minimal DWARF-2 unit test
# This test can only be run on targets which support DWARF-2 and use gas.
2011-01-19 Yao Qi <yao@codesourcery.com> * gdb.asm/asm-source.exp: Replace ARM target triplet with a canonical form. Remove "xscale-*-*" * gdb.xml/tdesc-regs.exp: Likewise. * gdb.python/py-section-script.exp: Replace ARM target triplet with canonical form. Match arm*-*-symbianelf*. * gdb.base/dup-sect.exp: Likewise. * lib/dwarf.exp: New. * gdb.dwarf2/callframecfa.exp: Check dwarf2 support by routine dwarf2_support. * gdb.dwarf2/dup-psym.exp: Likewise. * gdb.dwarf2/dw2-ada-ffffffff.exp: Likewise. * gdb.dwarf2/dw2-anonymous-func.exp: Likewise. * gdb.dwarf2/dw2-bad-parameter-type.exp: Likewise. * gdb.dwarf2/dw2-basic.exp: Likewise. * gdb.dwarf2/dw2-compressed.exp: Likewise. * gdb.dwarf2/dw2-const.exp: Likewise. * gdb.dwarf2/dw2-cp-infcall-ref-static.exp: Likewise. * gdb.dwarf2/dw2-cu-size.exp: Likewise. * gdb.dwarf2/dw2-double-set-die-type.exp: Likewise. * gdb.dwarf2/dw2-empty-namespace.exp: Likewise. * gdb.dwarf2/dw2-filename.exp: Likewise. * gdb.dwarf2/dw2-inheritance.exp: Likewise. * gdb.dwarf2/dw2-inline-param.exp: Likewise. * gdb.dwarf2/dw2-intercu.exp: Likewise. * gdb.dwarf2/dw2-intermix.exp: Likewise. * gdb.dwarf2/dw2-modula2-self-type.exp: Likewise. * gdb.dwarf2/dw2-noloc.exp: Likewise. * gdb.dwarf2/dw2-op-call.exp: Likewise. * gdb.dwarf2/dw2-producer.exp: Likewise. * gdb.dwarf2/dw2-ranges.exp: Likewise. * gdb.dwarf2/dw2-ref-missing-frame.exp: Likewise. * gdb.dwarf2/dw2-stack-boundary.exp: Likewise. * gdb.dwarf2/dw2-strp.exp: Likewise. * gdb.dwarf2/dw2-unresolved.exp: Likewise. * gdb.dwarf2/implptr.exp: Likewise. * gdb.dwarf2/mac-fileno.exp: Likewise. * gdb.dwarf2/member-ptr-forwardref.exp: Likewise. * gdb.dwarf2/pieces.exp: Likewise. * gdb.dwarf2/pr11465.exp: Likewise. * gdb.dwarf2/valop.exp: Likewise. * gdb.dwarf2/watch-notconst.exp: Likewise. * gdb.mi/dw2-ref-missing-frame.exp: Likewise.
2011-01-19 20:26:10 +00:00
if {![dwarf2_support]} {
[dwarf] Anonymous nested function causes SEGV during psymbol read According to the DWARF3 standard, a function always has a name attribute (Section 3.3 - Subroutine and Entry Point Entries). The only exception is when a DW_AT_abstract_origin attribute is provided, in which case the name may be inherited from the referenced DIE. The problem occured because our compiler generated a subprogram DIE for a nested function where the name attribute was missing (and no abstract-origin either). Our code in add_partial_symbol is not prepared to deal with the situation, and happily just tries to compute the length of the (NULL) function name. This normally cannot happen, because there is already a guard in scan_partial_symbols, where we (silently!) ignore anonymous dies, including anonymous subprograms. Unfortunately, there is a flaw that affects Ada and other languages that allow nested subprograms. For nested subprograms, we do not go through scan_partial_symbols and thus we are missing the name check. This patch adds the name check in the nested subprogram case. It also adds a complaint which is emitted during the psymtab->symtab conversion phase. gdb/ChangeLog: * dwarf2read.c (add_partial_subprogram): Make sure the subprogram DIE has a name before creating the associated partial symbol. (read_func_scope): Emit a complaint if the subprogram does not have a name or when we can't extract the subprogram PC bounds. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-anonymous-func.S: New file. * gdb.dwarf2/dw2-anonymous-func.exp: New testcase. Tested on x86_64-linux, no regression. Note that the testcase also verifies that the psymtab->symtab conversion does not crash (this is the purpose of the "list file1.txt:1" test.
2010-03-18 18:35:55 +00:00
return 0
}
* gdb.dwarf2/pr10770.exp: Use standard_testfile. * gdb.dwarf2/dw2-var-zero-addr.exp: Use standard_testfile. * gdb.dwarf2/dw2-param-error.exp: Use standard_testfile. * gdb.dwarf2/dw2-op-call.exp: Use standard_testfile. * gdb.dwarf2/dw2-inline-param.exp: Use standard_testfile, prepare_for_testing. * gdb.dwarf2/dw2-inline-break.exp: Use standard_testfile. * gdb.dwarf2/dw2-ifort-parameter.exp: Use standard_testfile. * gdb.dwarf2/dw2-cp-infcall-ref-static.exp: Use standard_testfile. * gdb.dwarf2/dw2-case-insensitive.exp: Use standard_testfile. * gdb.dwarf2/dw4-sig-types.exp: Use standard_testfile. * gdb.dwarf2/dw2-objfile-overlap.exp: Use standard_testfile. * gdb.dwarf2/callframecfa.exp: Use standard_testfile, prepare_for_testing. * gdb.dwarf2/dup-psym.exp: Use standard_testfile. * gdb.dwarf2/dw2-ada-ffffffff.exp: Use standard_testfile. * gdb.dwarf2/dw2-anonymous-func.exp: Use standard_testfile. * gdb.dwarf2/dw2-bad-parameter-type.exp: Use standard_testfile. * gdb.dwarf2/dw2-basic.exp: Use standard_testfile. * gdb.dwarf2/dw2-compressed.exp: Use standard_testfile. * gdb.dwarf2/dw2-const.exp: Use standard_testfile. * gdb.dwarf2/dw2-cu-size.exp: Use standard_testfile. * gdb.dwarf2/dw2-double-set-die-type.exp: Use standard_testfile. * gdb.dwarf2/dw2-empty-namespace.exp: Use standard_testfile. * gdb.dwarf2/dw2-empty-pc-range.exp: Use standard_testfile. * gdb.dwarf2/dw2-filename.exp: Use standard_testfile. * gdb.dwarf2/dw2-icc-opaque.exp: Use standard_testfile. * gdb.dwarf2/dw2-inheritance.exp: Use standard_testfile. * gdb.dwarf2/dw2-intercu.exp: Use standard_testfile. * gdb.dwarf2/dw2-intermix.exp: Use standard_testfile. * gdb.dwarf2/dw2-linkage-name-trust.exp: Use standard_testfile. * gdb.dwarf2/dw2-modula2-self-type.exp: Use standard_testfile. * gdb.dwarf2/dw2-namespaceless-anonymous.exp: Use standard_testfile. * gdb.dwarf2/dw2-op-stack-value.exp: Use standard_testfile. * gdb.dwarf2/dw2-producer.exp: Use standard_testfile. * gdb.dwarf2/dw2-ranges.exp: Use standard_testfile, standard_output_file. * gdb.dwarf2/dw2-ref-missing-frame.exp: Use standard_testfile, standard_output_file. * gdb.dwarf2/dw2-restore.exp: Use standard_testfile. * gdb.dwarf2/dw2-simple-locdesc.exp: Use standard_testfile. * gdb.dwarf2/dw2-skip-prologue.exp: Use standard_testfile. * gdb.dwarf2/dw2-stack-boundary.exp: Use standard_testfile. * gdb.dwarf2/dw2-strp.exp: Use standard_testfile. * gdb.dwarf2/dw4-sig-type-unused.exp: Use standard_testfile. * gdb.dwarf2/implptr-64bit.exp: Use standard_testfile. * gdb.dwarf2/implptr-optimized-out.exp: Use standard_testfile. * gdb.dwarf2/implptr.exp: Use standard_testfile. * gdb.dwarf2/mac-fileno.exp: Use standard_testfile. * gdb.dwarf2/member-ptr-forwardref.exp: Use standard_testfile. * gdb.dwarf2/pieces.exp: Use standard_testfile. * gdb.dwarf2/pr11465.exp: Use standard_testfile. * gdb.dwarf2/pr13961.exp: Use standard_testfile. * gdb.dwarf2/valop.exp: Use standard_testfile, prepare_for_testing.
2012-06-27 17:00:09 +00:00
standard_testfile .S
[dwarf] Anonymous nested function causes SEGV during psymbol read According to the DWARF3 standard, a function always has a name attribute (Section 3.3 - Subroutine and Entry Point Entries). The only exception is when a DW_AT_abstract_origin attribute is provided, in which case the name may be inherited from the referenced DIE. The problem occured because our compiler generated a subprogram DIE for a nested function where the name attribute was missing (and no abstract-origin either). Our code in add_partial_symbol is not prepared to deal with the situation, and happily just tries to compute the length of the (NULL) function name. This normally cannot happen, because there is already a guard in scan_partial_symbols, where we (silently!) ignore anonymous dies, including anonymous subprograms. Unfortunately, there is a flaw that affects Ada and other languages that allow nested subprograms. For nested subprograms, we do not go through scan_partial_symbols and thus we are missing the name check. This patch adds the name check in the nested subprogram case. It also adds a complaint which is emitted during the psymtab->symtab conversion phase. gdb/ChangeLog: * dwarf2read.c (add_partial_subprogram): Make sure the subprogram DIE has a name before creating the associated partial symbol. (read_func_scope): Emit a complaint if the subprogram does not have a name or when we can't extract the subprogram PC bounds. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-anonymous-func.S: New file. * gdb.dwarf2/dw2-anonymous-func.exp: New testcase. Tested on x86_64-linux, no regression. Note that the testcase also verifies that the psymtab->symtab conversion does not crash (this is the purpose of the "list file1.txt:1" test.
2010-03-18 18:35:55 +00:00
set dwarf_srcfile "file1.txt"
if {[prepare_for_testing_full $testfile.exp \
[list $testfile debug main.c debug $srcfile nodebug]]} {
[dwarf] Anonymous nested function causes SEGV during psymbol read According to the DWARF3 standard, a function always has a name attribute (Section 3.3 - Subroutine and Entry Point Entries). The only exception is when a DW_AT_abstract_origin attribute is provided, in which case the name may be inherited from the referenced DIE. The problem occured because our compiler generated a subprogram DIE for a nested function where the name attribute was missing (and no abstract-origin either). Our code in add_partial_symbol is not prepared to deal with the situation, and happily just tries to compute the length of the (NULL) function name. This normally cannot happen, because there is already a guard in scan_partial_symbols, where we (silently!) ignore anonymous dies, including anonymous subprograms. Unfortunately, there is a flaw that affects Ada and other languages that allow nested subprograms. For nested subprograms, we do not go through scan_partial_symbols and thus we are missing the name check. This patch adds the name check in the nested subprogram case. It also adds a complaint which is emitted during the psymtab->symtab conversion phase. gdb/ChangeLog: * dwarf2read.c (add_partial_subprogram): Make sure the subprogram DIE has a name before creating the associated partial symbol. (read_func_scope): Emit a complaint if the subprogram does not have a name or when we can't extract the subprogram PC bounds. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-anonymous-func.S: New file. * gdb.dwarf2/dw2-anonymous-func.exp: New testcase. Tested on x86_64-linux, no regression. Note that the testcase also verifies that the psymtab->symtab conversion does not crash (this is the purpose of the "list file1.txt:1" test.
2010-03-18 18:35:55 +00:00
return -1
}
Don't remove files copied to host Nowadays, if we do in-tree build and run tests sequentially, some source files are removed, due to the following pattern: set pi_txt [gdb_remote_download host ${srcdir}/${subdir}/pi.txt] remote_exec host "rm -f $pi_txt" If testing is run sequentially, file ${srcdir}/${subdir}/pi.txt is copied to ${objdir}/${subdir}/pi.txt. However, ${objdir} is ${srcdir} in the in-tree build/test, so the file is coped to itself, as a nop. As a result, the file in source is removed at the end of test. This patch fixes this problem by not removing files copied to host in each test. This patch also addresses the question we've had that why don't we keep files copied to host because they are needed to reproduce certain fails. gdb/testsuite: 2014-10-20 Yao Qi <yao@codesourcery.com> * gdb.base/checkpoint.exp: Don't remove file copied on host. * gdb.base/step-line.exp: Likewise. * gdb.dwarf2/dw2-anonymous-func.exp: Likewise. * gdb.dwarf2/dw2-basic.exp: Likewise. * gdb.dwarf2/dw2-compressed.exp: Likewise. * gdb.dwarf2/dw2-filename.exp: Likewise. * gdb.dwarf2/dw2-intercu.exp: Likewise. * gdb.dwarf2/dw2-intermix.exp: Likewise. * gdb.dwarf2/dw2-producer.exp: Likewise. * gdb.dwarf2/mac-fileno.exp: Likewise. * gdb.python/py-frame-args.exp: Likewise. * gdb.python/py-framefilter.exp: Likewise. * gdb.python/py-mi.exp: Likewise. * gdb.python/py-objfile-script.exp: Likewise * gdb.python/py-pp-integral.exp: Likewise. * gdb.python/py-pp-re-notag.exp: Likewise. * gdb.python/py-prettyprint.exp: Likewise. * gdb.python/py-section-script.exp: Likewise. * gdb.python/py-typeprint.exp: Likewise. * gdb.python/py-xmethods.exp: Likewise. * gdb.stabs/weird.exp: Likewise. * gdb.xml/tdesc-regs.exp: Likewise.
2014-09-29 12:47:30 +00:00
gdb_remote_download host ${srcdir}/${subdir}/${dwarf_srcfile}
[dwarf] Anonymous nested function causes SEGV during psymbol read According to the DWARF3 standard, a function always has a name attribute (Section 3.3 - Subroutine and Entry Point Entries). The only exception is when a DW_AT_abstract_origin attribute is provided, in which case the name may be inherited from the referenced DIE. The problem occured because our compiler generated a subprogram DIE for a nested function where the name attribute was missing (and no abstract-origin either). Our code in add_partial_symbol is not prepared to deal with the situation, and happily just tries to compute the length of the (NULL) function name. This normally cannot happen, because there is already a guard in scan_partial_symbols, where we (silently!) ignore anonymous dies, including anonymous subprograms. Unfortunately, there is a flaw that affects Ada and other languages that allow nested subprograms. For nested subprograms, we do not go through scan_partial_symbols and thus we are missing the name check. This patch adds the name check in the nested subprogram case. It also adds a complaint which is emitted during the psymtab->symtab conversion phase. gdb/ChangeLog: * dwarf2read.c (add_partial_subprogram): Make sure the subprogram DIE has a name before creating the associated partial symbol. (read_func_scope): Emit a complaint if the subprogram does not have a name or when we can't extract the subprogram PC bounds. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-anonymous-func.S: New file. * gdb.dwarf2/dw2-anonymous-func.exp: New testcase. Tested on x86_64-linux, no regression. Note that the testcase also verifies that the psymtab->symtab conversion does not crash (this is the purpose of the "list file1.txt:1" test.
2010-03-18 18:35:55 +00:00
# Force the debugger to create the file1.txt symtab, to make sure that
# the debugger does not crash doing so.
gdb_test "list file1.txt:1" "File 1 Line 1.*File 1 Line 8" "list file1.txt"