forked from Imagelibrary/binutils-gdb
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>
82 lines
2.8 KiB
Plaintext
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'"]
|