| # Copyright 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/>. |
| |
| # Test that tilde expansion works for the 'save gdb-index' command. |
| |
| # This test relies on using the $HOME directory. We could make this |
| # work for remote hosts, but right now, this isn't supported. |
| require {!is_remote host} |
| |
| # Can't save an index with readnow. |
| require !readnow |
| |
| standard_testfile main.c |
| |
| # Create a directory to generate an index file into. |
| set full_dir [standard_output_file "index_files"] |
| remote_exec host "mkdir -p ${full_dir}" |
| |
| # The users home directory. |
| set home $::env(HOME) |
| |
| # Check that FULL_DIR is within the $HOME directory. If it's not, then |
| # that's fine, but we can't test tilde expansion in this case. |
| if { [string compare -length [string length $home] $full_dir $home] != 0 } { |
| unsupported "test not run within home directory" |
| return -1 |
| } |
| |
| # Convert the $HOME prefix in to ~. |
| set dir "~[string range $full_dir [string length $home] end]" |
| |
| # Build the test executable. |
| if { [prepare_for_testing "failed to prepare" "${testfile}" ${srcfile}] } { |
| return -1 |
| } |
| |
| # Start GDB and load in the executable. |
| clean_restart ${binfile} |
| |
| # If the executable was built with an index, or lacks the debug |
| # information required to create an index, then we'll not be able to |
| # generate an index, so lets not even try. |
| set has_index false |
| set can_dump_index false |
| gdb_test_multiple "maint print objfile $binfile" "check we can generate an index" { |
| -re "\r\n\\.gdb_index: version ${decimal}(?=\r\n)" { |
| set has_index true |
| gdb_test_lines "" $gdb_test_name ".*" |
| } |
| -re "\r\n\\.debug_names: exists(?=\r\n)" { |
| set has_index true |
| gdb_test_lines "" $gdb_test_name ".*" |
| } |
| -re "\r\n(Cooked index in use:|Psymtabs)(?=\r\n)" { |
| set can_dump_index true |
| gdb_test_lines "" $gdb_test_name ".*" |
| } |
| -re -wrap "" { |
| } |
| } |
| |
| if { $has_index } { |
| unsupported "already have an index" |
| return -1 |
| } |
| |
| if { !$can_dump_index } { |
| unsupported "lacks debug information needed to dump index" |
| return -1 |
| } |
| |
| # Generate an index file. |
| gdb_test_no_output "save gdb-index $dir" \ |
| "save gdb-index to tilde based directory" |
| gdb_exit |
| |
| # Confirm that the index file exists. |
| set index_filename "${full_dir}/${gdb_test_file_name}.gdb-index" |
| gdb_assert { [remote_file host exists $index_filename] } \ |
| "confirm the index file exists" |