| # Copyright 2008-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 <http://www.gnu.org/licenses/>. | 
 |  | 
 | # This file tests setting breakpoints according to the full path of a | 
 | # source file. | 
 |  | 
 | standard_testfile | 
 |  | 
 | # We rely on being able to copy things around and being able to set | 
 | # breakpoints by full path. | 
 | require {!is_remote host} | 
 |  | 
 | # Create a temporary file in the build directory.  Use a different | 
 | # filename in case ${srcdir} == ${objdir}. | 
 | if { [catch {file copy -force ${srcdir}/${subdir}/${srcfile} \ | 
 | 			      [standard_output_file tmp-${srcfile}]}] != 0 } { | 
 |     error "Could not create temporary file" | 
 |     return -1 | 
 | } | 
 |  | 
 | # Build the test executable using an absolute path. | 
 | if  { [gdb_compile [standard_output_file tmp-${srcfile}] "${binfile}" executable {debug}] != "" } { | 
 |     return -1 | 
 | } | 
 |  | 
 | # Unlike most GDB tests, we do not use gdb_reinitialize_dir in this script.  | 
 | # We're testing GDB's ability to find files in other ways. | 
 |  | 
 | # Get the line number. | 
 |  | 
 | set line [gdb_get_line_number "set breakpoint 1 here"] | 
 |  | 
 | # Initialize GDB after getting the line number, to make sure | 
 | # symbols aren't loaded. | 
 |  | 
 | clean_restart $binfile | 
 |  | 
 | set msg "set breakpoint by full path before loading symbols - built absolute" | 
 | if { [gdb_breakpoint [standard_output_file tmp-${srcfile}]:${line} {no-message}] != 0 } { | 
 |     pass $msg | 
 | } else { | 
 |     fail $msg | 
 | } | 
 |  | 
 | gdb_test "break -q main" \ | 
 | 	 "Breakpoint.*at.*line.*" "set breakpoint at main - built absolute" | 
 |  | 
 | set msg "set breakpoint by full path after loading symbols - built absolute" | 
 | if { [gdb_breakpoint [standard_output_file tmp-${srcfile}]:${line} {no-message}] != 0 } { | 
 |     pass $msg | 
 | } else { | 
 |     fail $msg | 
 | } | 
 |  | 
 | # Build the test executable using a relative path. | 
 | if  { [gdb_compile [relative_filename [pwd] [standard_output_file tmp-${srcfile}]] \ | 
 | 	   "${binfile}" executable {debug}] != "" } { | 
 |     return -1 | 
 | } | 
 |  | 
 | clean_restart $binfile | 
 |  | 
 | set msg "set breakpoint by full path before loading symbols - built relative" | 
 | if { [gdb_breakpoint [standard_output_file tmp-${srcfile}]:${line} {no-message}] != 0 } { | 
 |     pass $msg | 
 | } else { | 
 |     fail $msg | 
 | } | 
 |  | 
 | gdb_test "break -q main" \ | 
 | 	 "Breakpoint.*at.*line.*" "set breakpoint at main - built relative" | 
 |  | 
 | set msg "set breakpoint by full path after loading symbols - built relative" | 
 | if { [gdb_breakpoint [standard_output_file tmp-${srcfile}]:${line} {no-message}] != 0 } { | 
 |     pass $msg | 
 | } else { | 
 |     fail $msg | 
 | } | 
 |  | 
 | # Build the test executable using relative paths not relative to the directory | 
 | # we'll run GDB from. | 
 |  | 
 | with_cwd [standard_output_file {}] { | 
 |     if  { [gdb_compile [standard_output_file tmp-${srcfile}] "${testfile}" \ | 
 | 	       executable {debug}] != "" } { | 
 | 	return -1 | 
 |     } | 
 | } | 
 |  | 
 | clean_restart $binfile | 
 |  | 
 | set msg "set breakpoint by full path before loading symbols - built other" | 
 | if { [gdb_breakpoint [standard_output_file tmp-${srcfile}]:${line} {no-message}] != 0 } { | 
 |     pass $msg | 
 | } else { | 
 |     fail $msg | 
 | } | 
 |  | 
 | gdb_test "break -q main" \ | 
 | 	 "Breakpoint.*at.*line.*" "set breakpoint at main - built other" | 
 |  | 
 | set msg "set breakpoint by full path after loading symbols - built other" | 
 | if { [gdb_breakpoint [standard_output_file tmp-${srcfile}]:${line} {no-message}] != 0 } { | 
 |     pass $msg | 
 | } else { | 
 |     fail $msg | 
 | } |