mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-16 23:06:48 +08:00

As follow-up to this discussion: https://sourceware.org/pipermail/gdb-patches/2020-August/171385.html ... make runto_main not pass no-message to runto. This means that if we fail to run to main, for some reason, we'll emit a FAIL. This is the behavior we want the majority of (if not all) the time. Without this, we rely on tests logging a failure if runto_main fails, otherwise. They do so in a very inconsisteny mannet, sometimes using "fail", "unsupported" or "untested". The messages also vary widly. This patch removes all these messages as well. Also, remove a few "fail" where we call runto (and not runto_main). by default (without an explicit no-message argument), runto prints a failure already. In two places, gdb.multi/multi-re-run.exp and gdb.python/py-pp-registration.exp, remove "message" passed to runto. This removes a few PASSes that we don't care about (but FAILs will still be printed if we fail to run to where we want to). This aligns their behavior with the rest of the testsuite. Change-Id: Ib763c98c5f4fb6898886b635210d7c34bd4b9023
96 lines
4.1 KiB
Plaintext
96 lines
4.1 KiB
Plaintext
# Copyright (C) 2010-2021 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 is part of the GDB testsuite. It tests the mechanism
|
|
# exposing values to Python.
|
|
|
|
load_lib gdb-python.exp
|
|
|
|
standard_testfile
|
|
|
|
if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
|
|
return -1
|
|
}
|
|
|
|
# Skip all tests if Python scripting is not enabled.
|
|
if { [skip_python_tests] } { continue }
|
|
|
|
if ![runto_main] then {
|
|
return 0
|
|
}
|
|
|
|
global hex decimal
|
|
gdb_breakpoint [gdb_get_line_number "Block break here."]
|
|
gdb_continue_to_breakpoint "Block break here."
|
|
|
|
# Test initial innermost block.
|
|
gdb_py_test_silent_cmd "python frame = gdb.selected_frame()" "Get Frame" 0
|
|
gdb_py_test_silent_cmd "python block = frame.block()" \
|
|
"Get block, initial innermost block" 0
|
|
gdb_test "python print (block)" "<gdb.Block object at $hex>" "check block not None"
|
|
gdb_test "python print (block.function)" "None" "first anonymous block"
|
|
gdb_test "python print (block.start)" "${decimal}" "check start not None"
|
|
gdb_test "python print (block.end)" "${decimal}" "check end not None"
|
|
gdb_test "python print (block\['f'\].name == 'f')" "True" "check variable access"
|
|
gdb_test "python print (block\['nonexistent'\])" ".*KeyError: 'nonexistent'.*" \
|
|
"check nonexistent variable"
|
|
gdb_test "python print (block\[42\])" ".*TypeError: Expected a string.*" \
|
|
"check non-string key"
|
|
|
|
# Test global/static blocks
|
|
gdb_py_test_silent_cmd "python frame = gdb.selected_frame()" "Get Frame" 0
|
|
gdb_py_test_silent_cmd "python block = frame.block()" \
|
|
"Get block, frame.block" 0
|
|
gdb_test "python print (block.is_global)" "False" "not a global block"
|
|
gdb_test "python print (block.is_static)" "False" "not a static block"
|
|
gdb_py_test_silent_cmd "python gblock = block.global_block" \
|
|
"Get block, global_block" 1
|
|
gdb_py_test_silent_cmd "python sblock = block.static_block" \
|
|
"Get block, static_block" 1
|
|
gdb_test "python print (gblock.is_global)" "True" "is the global block"
|
|
gdb_test "python print (sblock.is_static)" "True" "is the static block"
|
|
|
|
# Move up superblock(s) until we reach function block_func.
|
|
gdb_test_no_output "python block = block.superblock" "get superblock"
|
|
gdb_test "python print (block.function)" "None" "second anonymous block"
|
|
gdb_test_no_output "python block = block.superblock" "get superblock 2"
|
|
gdb_test "python print (block.function)" "block_func" \
|
|
"Print superblock 2 function"
|
|
|
|
# Switch frames, then test for main block.
|
|
gdb_test "up" ".*"
|
|
gdb_py_test_silent_cmd "python frame = gdb.selected_frame()" "Get Frame 2" 0
|
|
gdb_py_test_silent_cmd "python block = frame.block()" "Get Frame 2's block" 0
|
|
gdb_test "python print (block)" "<gdb.Block object at $hex>" \
|
|
"Check Frame 2's block not None"
|
|
gdb_test "python print (block.function)" "main" "main block"
|
|
|
|
|
|
# Test Block is_valid. This must always be the last test in this
|
|
# testcase as it unloads the object file.
|
|
delete_breakpoints
|
|
gdb_py_test_silent_cmd "python frame = gdb.selected_frame()" "Get Frame" 0
|
|
gdb_py_test_silent_cmd "python block = frame.block()" "Get Frame block" 0
|
|
gdb_py_test_silent_cmd "python block_iter = iter (block)" "Get Frame block" 0
|
|
gdb_test "python print (block.is_valid())" "True" \
|
|
"Check block validity"
|
|
gdb_test "python print (block_iter.is_valid())" "True" \
|
|
"Check block_iter validity"
|
|
gdb_unload
|
|
gdb_test "python print (block.is_valid())" "False" \
|
|
"Check block validity after unload"
|
|
gdb_test "python print (block_iter.is_valid())" "False" \
|
|
"Check block_iter validity after unload"
|