#   Copyright 2021-2025 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/>.  */
#
# 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"
