# Copyright 2021-2023 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 . */ # # Tests GDBs support for jump, when the source line is in multiple # object files. standard_testfile .c -foo.c .h if { [prepare_for_testing "failed to prepare" $testfile \ [list ${srcfile} ${srcfile2}]] } { return -1 } if { ![runto_main] } { return -1 } set bar_first_line [gdb_get_line_number "bar-first-line" ${srcfile3}] set bar_middle_line [gdb_get_line_number "bar-middle-line" ${srcfile3}] set bar_last_line [gdb_get_line_number "bar-last-line" ${srcfile3}] # Set breakpoints in the function bar. Executable has two object files, # and both have a copy of the same source lines. Therefore breakpoints # will have two locations. gdb_breakpoint "${srcfile3}:${bar_first_line}" gdb_breakpoint "${srcfile3}:${bar_last_line}" # Run to the breakpoint in bar. gdb_continue_to_breakpoint "bar_first_line" \ ".*${srcfile3}:${bar_first_line}.*" # Jump within the function. Debugger shall be able to jump, even if the # target line is in two different object files. After jump, we will hit # the breakpoint at the last line of bar. gdb_test "jump ${bar_middle_line}" [multi_line \ "Continuing at ($hex).*" \ "Breakpoint ${decimal}.* at .*${srcfile3}:${bar_last_line}.*"] \ "Jump within the objectfile"