From: Jan Vrany Date: Thu, 21 Nov 2024 12:31:20 +0000 (+0000) Subject: gdb/python: add void_type () method to gdb.Architecture object X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=418d86ec689d323f46a354c5833ec6fb4d6957cb;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 --- diff --git a/gdb/NEWS b/gdb/NEWS index 1ea9fcc65b9..765d14a1ae4 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -88,6 +88,9 @@ ** 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 09e374700a4..dac5115a5f8 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -7090,6 +7090,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..6aed133eedd 100644 --- a/gdb/python/py-arch.c +++ b/gdb/python/py-arch.c @@ -318,6 +318,18 @@ 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); + + builtin_type (gdbarch); + + return type_to_type_object (builtin_type (gdbarch)->builtin_void); +} + /* __repr__ implementation for gdb.Architecture. */ static PyObject * @@ -383,6 +395,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 an 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 []