mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-06 08:04:04 +08:00
gdb/python: remove Py_TPFLAGS_BASETYPE from gdb.UnwindInfo
It is not currently possible to directly create gdb.UnwindInfo instances, they need to be created by calling gdb.PendingFrame.create_unwind_info so that the newly created UnwindInfo can be linked to the pending frame. As such there's no tp_init method defined for UnwindInfo. A consequence of all this is that it doesn't really make sense to allow sub-classing of gdb.UnwindInfo. Any sub-class can't call the parents __init__ method to correctly link up the PendingFrame object (there is no parent __init__ method). And any instances that sub-classes UnwindInfo but doesn't call the parent __init__ is going to be invalid for use in GDB. This commit removes the Py_TPFLAGS_BASETYPE flag from the UnwindInfo class, which prevents the class being sub-classed. Then I've added a test to check that this is indeed prevented. Any functional user code will not have any issues with this change. Reviewed-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
parent
7e6af18d0c
commit
df4447e4c4
@ -1097,7 +1097,7 @@ PyTypeObject unwind_info_object_type =
|
||||
0, /* tp_getattro */
|
||||
0, /* tp_setattro */
|
||||
0, /* tp_as_buffer */
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
|
||||
Py_TPFLAGS_DEFAULT, /* tp_flags */
|
||||
"GDB UnwindInfo object", /* tp_doc */
|
||||
0, /* tp_traverse */
|
||||
0, /* tp_clear */
|
||||
|
@ -211,3 +211,20 @@ check_for_fixed_backtrace \
|
||||
"check backtrace to validate all information"
|
||||
|
||||
gdb_test_no_output "python check_all_frame_information_matched()"
|
||||
|
||||
# Check we can't sub-class from gdb.UnwindInfo.
|
||||
gdb_test_multiline "Sub-class gdb.UnwindInfo " \
|
||||
"python" "" \
|
||||
"class my_unwind_info(gdb.UnwindInfo):" "" \
|
||||
" def __init__(self):" "" \
|
||||
" pass" "" \
|
||||
"end" \
|
||||
[multi_line \
|
||||
"TypeError: type 'gdb\\.UnwindInfo' is not an acceptable base type" \
|
||||
"Error while executing Python code\\."]
|
||||
|
||||
# Check we can't directly instantiate a gdb.UnwindInfo.
|
||||
gdb_test "python uw = gdb.UnwindInfo()" \
|
||||
[multi_line \
|
||||
"TypeError: cannot create 'gdb\\.UnwindInfo' instances" \
|
||||
"Error while executing Python code\\."]
|
||||
|
Loading…
Reference in New Issue
Block a user