From df4447e4c43e105bd6366081a07447506506f78b Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Fri, 10 Mar 2023 10:28:21 +0000 Subject: 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 --- gdb/testsuite/gdb.python/py-unwind.exp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'gdb/testsuite') diff --git a/gdb/testsuite/gdb.python/py-unwind.exp b/gdb/testsuite/gdb.python/py-unwind.exp index 7e6ac9a..d65b844 100644 --- a/gdb/testsuite/gdb.python/py-unwind.exp +++ b/gdb/testsuite/gdb.python/py-unwind.exp @@ -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\\."] -- cgit v1.1