| # Copyright 2022-2024 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 the 'maint print frame-id' command. |
| |
| standard_testfile |
| |
| if {[prepare_for_testing "failed to prepare" $testfile \ |
| $srcfile {debug}]} { |
| return -1 |
| } |
| |
| if {![runto_main]} { |
| return -1 |
| } |
| |
| gdb_breakpoint foo |
| gdb_continue_to_breakpoint "run to foo" |
| |
| proc get_frame_id { level } { |
| set id "**unknown**" |
| |
| gdb_test_multiple "maint print frame-id ${level}" "" { |
| -wrap -re "^frame-id for frame #\[0-9\]+: (\[^\r\n\]+)" { |
| set id $expect_out(1,string) |
| pass $gdb_test_name |
| } |
| } |
| |
| return $id |
| } |
| |
| # Get the frame-id for each frame using the frame level. |
| array set ids {} |
| with_test_prefix "get id by level" { |
| for { set i 0 } { $i < 4 } { incr i } { |
| set ids($i) [get_frame_id $i] |
| } |
| } |
| |
| # Now get the frame-id of the currently selected frame, and check it |
| # matches the frame-id we got earlier. Then move up the stack, |
| # selecting a new frame. |
| for { set i 0 } { $i < 4 } { incr i } { |
| with_test_prefix "frame $i is current" { |
| set id [get_frame_id ""] |
| gdb_assert { [string equal $id $ids($i)] } \ |
| "check frame-id matches" |
| } |
| gdb_test "up" ".*" \ |
| "move up from frame $i" |
| } |