diff options
author | Gary Benson <gary@redhat.com> | 2012-03-16 16:47:34 +0000 |
---|---|---|
committer | Gary Benson <gary@redhat.com> | 2012-03-16 16:47:34 +0000 |
commit | 481860b396d7a4106d63b1a900486accc97bb56a (patch) | |
tree | 2a5706a6a591e3524d1917f019e13721cb16f6c8 /gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp | |
parent | ac56ee8f4c059ffc48b2691dfc3bdd18ae03d9b4 (diff) | |
download | gdb-481860b396d7a4106d63b1a900486accc97bb56a.zip gdb-481860b396d7a4106d63b1a900486accc97bb56a.tar.gz gdb-481860b396d7a4106d63b1a900486accc97bb56a.tar.bz2 |
gdb:
PR breakpoints/10738
* dwarf2read.c (use_deprecated_index_sections): New global.
(struct partial_die_info): New member may_be_inlined.
(read_partial_die): Set may_be_inlined where appropriate.
(add_partial_subprogram): Add partial symbols for partial
DIEs that may be inlined.
(new_symbol_full): Add inlined subroutines to the current
scope.
(write_psymtabs_to_index): Bump version number.
(dwarf2_read_index): Read only version 6 indices unless
use_deprecated_index_sections is set.
* linespec.c (symbol_and_data_callback): New structure.
(iterate_inline_only): New function.
(iterate_over_all_matching_symtabs): New argument
"include_inline". If nonzero, also call the callback for
symbols representing inlined subroutines.
(lookup_prefix_sym): Pass extra argument to the above.
(find_function_symbols): Likewise.
(add_matching_symbols_to_info): Likewise.
* NEWS: Mention that GDB can now set breakpoints on inlined
functions.
gdb/doc:
PR breakpoints/10738
* gdb.texinfo (Inline Functions): Remove the now-unnecessary @item
stating that GDB cannot set breakpoints on inlined functions.
(Mode Options): Document --use-deprecated-index-sections.
(Index Section Format): Document new index section version format.
gdb/testsuite:
PR breakpoints/10738
* gdb.opt/inline-break.exp: New file.
* gdb.opt/inline-break.c: Likewise.
* gdb.dwarf2/inline-break.exp: Likewise.
* gdb.dwarf2/inline-break.S: Likewise.
* gdb.base/annota1.exp: Cope with old .gdb_index warnings.
* gdb.base/async-shell.exp: Likewise.
* lib/mi-support.exp (library_loaded_re): Likewise.
Diffstat (limited to 'gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp')
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp b/gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp new file mode 100644 index 0000000..2ef7145 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-inline-break.exp @@ -0,0 +1,124 @@ +# Copyright 2012 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/>. + +# Note that the testcase gdb.opt/inline-break.exp largely mirrors +# this testcase, and should be updated if this testcase is changed. + +load_lib dwarf.exp + +# This test can only be run on targets which support DWARF-2 and use gas. +if ![dwarf2_support] { + return 0 +} + +# This test can only be run on x86_64 targets. +if {![istarget "x86_64-*-*"] || ![is_lp64_target]} { + return 0 +} + +set basename "inline-break" +set testfile "dw2-$basename" + +if { [prepare_for_testing $testfile.exp $testfile $testfile.S {nodebug}] } { + return -1 +} + +# +# func1 is a static inlined function that is called once. +# The result should be a single-location breakpoint. +# +gdb_test "break func1" \ + "Breakpoint.*at.* file .*$basename\\.c, line.*" + +# +# func2 is a non-static inlined function that is called once. +# The result should be a breakpoint with two locations: the +# out-of-line function and the single inlined instance. +# +gdb_test "break func2" \ + "Breakpoint.*at.*func2.*\\(2 locations\\)" + +# +# func3b is a static inlined function that is called once from +# within another static inlined function. The result should be +# a single-location breakpoint. +# +gdb_test "break func3b" \ + "Breakpoint.*at.* file .*$basename\\.c, line.*" + +# +# func4b is a static inlined function that is called once from +# within a non-static inlined function. The result should be +# a breakpoint with two locations: the inlined instance within +# the inlined call to func4a in main, and the inlined instance +# within the out-of-line func4a. +# +gdb_test "break func4b" \ + "Breakpoint.*at.*func4b.*\\(2 locations\\)" + +# +# func5b is a non-static inlined function that is called once +# from within a static inlined function. The result should be a +# breakpoint with two locations: the out-of-line function and the +# inlined instance within the inlined call to func5a in main. +# +gdb_test "break func5b" \ + "Breakpoint.*at.*func5b.*\\(2 locations\\)" +# +# func6b is a non-static inlined function that is called once from +# within another non-static inlined function. The result should be +# a breakpoint with three locations: the out-of-line function, the +# inlined instance within the out-of-line func6a, and the inlined +# instance within the inlined call to func6a in main, +# +gdb_test "break func6b" \ + "Breakpoint.*at.*func6b.*\\(3 locations\\)" + +# +# func7b is a static inlined function that is called twice: once from +# func7a, and once from main. The result should be a breakpoint with +# two locations: the inlined instance within the inlined instance of +# func7a, and the inlined instance within main. +# +gdb_test "break func7b" \ + "Breakpoint.*at.*func7b.*\\(2 locations\\)" + +# +# func8b is a non-static inlined function that is called twice: once +# func8a, and once from main. The result should be a breakpoint with +# three locations: the out-of-line function, the inlined instance +# within the inlined instance of func7a, and the inlined instance +# within main. +# +gdb_test "break func8b" \ + "Breakpoint.*at.*func8b.*\\(3 locations\\)" + +# +# func1 is a static inlined function. The result should be that no +# symbol is found to print. +# +gdb_test "print func1" \ + "No symbol \"func1\" in current context." + +# +# func2 is a non-static inlined function. The result should be that +# one symbol is found to print, and that the printed symbol is called +# "func2". Note that this does not cover the failure case that two +# symbols were found, but that gdb chose the out-of-line copy to +# print, but if this was failing the "print func1" test would likely +# fail instead. +# +gdb_test "print func2" \ + "\\\$.* = {int \\(int\\)} .* <func2>" |