Files
binutils-gdb/gdb/testsuite/gdb.python/py-shared.exp
Andrew Burgess 52ca06e807 gdb/python: test exception case for gdb.solib_name
The gdb.solib_name() and Progspace.solib_name() functions can throw an
exception if the address argument is not a valid address, but this is
not currently tested.

This commit adds a couple of tests to check that exceptions are thrown
correctly.

An early version of this commit updated the documentation, but it was
pointed out that lots of functions throw an exception if passed an
argument of the wrong type, and we don't document all of these, it's
kind-of assumed that passing an object of the incorrect type might
result in an exception, so this updated version leaves the docs alone,
but I do think adding the extra tests has value.

There's no changes to GDB itself in this commit.

Approved-By: Tom Tromey <tom@tromey.com>
2024-03-19 16:03:34 +00:00

82 lines
2.8 KiB
Plaintext

# Copyright (C) 2008-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/>.
# This file is part of the GDB testsuite.
load_lib gdb-python.exp
require allow_shlib_tests allow_python_tests
standard_testfile
set libfile "py-shared-sl"
set libsrc ${libfile}.c
set library [standard_output_file ${libfile}.sl]
if { [gdb_compile_shlib ${srcdir}/${subdir}/${libsrc} ${library} "debug"] != "" } {
untested "failed to compile shared library"
return -1
}
set exec_opts [list debug shlib=${library}]
if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable $exec_opts] != "" } {
untested "failed to compile"
return -1
}
# Start with a fresh gdb.
clean_restart $testfile
gdb_load_shlib ${library}
# The following tests require execution.
if {![runto_main]} {
return 0
}
runto [gdb_get_line_number "Break to end."]
# Test gdb.solib_name
gdb_test "p &func1" "" "func1 address"
gdb_py_test_silent_cmd "python func1 = gdb.history(0)" "Acquire func1 address" 1
gdb_test "python print (gdb.solib_name(int(func1)))" "py-shared-sl.sl" \
"test func1 solib location"
gdb_test "python print (gdb.solib_name(func1))" "py-shared-sl.sl" \
"test func1 solib location using Value"
gdb_test "p &main" "" "main address"
gdb_py_test_silent_cmd "python main = gdb.history(0)" "Acquire main address" 1
gdb_test "python print (gdb.solib_name(int(main)))" "None" "test main solib location"
if {[is_lp64_target]} {
gdb_test "python print (len(\[gdb.solib_name(0xffffffffffffffff)\]))" "1"
}
gdb_test "python print(gdb.solib_name(-1))" \
[multi_line \
"Python Exception <class 'OverflowError'>: can't convert negative int to unsigned" \
"Error occurred in Python: can't convert negative int to unsigned"]
gdb_test "python print(gdb.current_progspace().solib_name(-1))" \
[multi_line \
"Python Exception <class 'OverflowError'>: can't convert negative int to unsigned" \
"Error occurred in Python: can't convert negative int to unsigned"]
gdb_test "python print(gdb.current_progspace().solib_name(\"string\"))" \
[multi_line \
"Python Exception <class 'ValueError'>: invalid literal for int\\(\\) with base 10: 'string'" \
"Error occurred in Python: invalid literal for int\\(\\) with base 10: 'string'"]