From: Jan Vrany Date: Tue, 4 Feb 2025 13:56:49 +0000 (+0000) Subject: gdb/python: add void_type () method to gdb.Architecture object X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=13dad2fefb26f1972145084d58d013f12d98c5d0;p=thirdparty%2Fbinutils-gdb.git gdb/python: add void_type () method to gdb.Architecture object This commit adds a new method to Python architecture objects that returns a void type for that architecture. This will be useful later to create types for function symbols created using Python extension code. Reviewed-By: Eli Zaretskii Approved-By: Andrew Burgess --- diff --git a/gdb/NEWS b/gdb/NEWS index 401479e0a80..33d7af83d50 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -157,6 +157,9 @@ binary-upload in qSupported reply ** Added gdb.Symbol.domain. Contains the domain of the symbol. + ** Added gdb.Architecture.void_type. Returns a gdb.Type representing "void" + type for that architecture. + * Debugger Adapter Protocol changes ** The "scopes" request will now return a scope holding global diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 1e0fbdfc838..a6821325aa5 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -7193,6 +7193,10 @@ If the indicated type cannot be found, this function will throw a @code{ValueError} exception. @end defun +@defun Architecture.void_type () +This function returns a void type. +@end defun + @anchor{gdbpy_architecture_registers} @defun Architecture.registers (@r{[} reggroup @r{]}) Return a @code{gdb.RegisterDescriptorIterator} (@pxref{Registers In diff --git a/gdb/python/py-arch.c b/gdb/python/py-arch.c index f7e35a4aa2b..2bf6251a7cb 100644 --- a/gdb/python/py-arch.c +++ b/gdb/python/py-arch.c @@ -1,6 +1,6 @@ /* Python interface to architecture - Copyright (C) 2013-2024 Free Software Foundation, Inc. + Copyright (C) 2013-2025 Free Software Foundation, Inc. This file is part of GDB. @@ -318,6 +318,16 @@ archpy_integer_type (PyObject *self, PyObject *args, PyObject *kw) return type_to_type_object (type); } +/* Implementation of gdb.void_type. */ +static PyObject * +archpy_void_type (PyObject *self, PyObject *args) +{ + struct gdbarch *gdbarch; + ARCHPY_REQUIRE_VALID (self, gdbarch); + + return type_to_type_object (builtin_type (gdbarch)->builtin_void); +} + /* __repr__ implementation for gdb.Architecture. */ static PyObject * @@ -383,6 +393,10 @@ END_PC." }, "integer_type (size [, signed]) -> type\n\ Return an integer Type corresponding to the given bitsize and signed-ness.\n\ If not specified, the type defaults to signed." }, + { "void_type", (PyCFunction) archpy_void_type, + METH_NOARGS, + "void_type () -> type\n\ +Return a void Type." }, { "registers", (PyCFunction) archpy_registers, METH_VARARGS | METH_KEYWORDS, "registers ([ group-name ]) -> Iterator.\n\ diff --git a/gdb/testsuite/gdb.python/py-arch.exp b/gdb/testsuite/gdb.python/py-arch.exp index 14802ec80a3..c76fc778117 100644 --- a/gdb/testsuite/gdb.python/py-arch.exp +++ b/gdb/testsuite/gdb.python/py-arch.exp @@ -104,6 +104,10 @@ foreach_with_prefix test_data { {None None} \ "check 'signed' argument can handle non-bool type $bad_type" } +gdb_test "python print(arch.void_type())" \ + "void" \ + "get void type" + # Test for gdb.architecture_names(). First we're going to grab the # complete list of architecture names using the 'complete' command. set arch_names []