mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-31 18:20:12 +08:00
Add gdb.Objfile.is_file attribute
Sometimes an objfile comes from memory and not from a file. It can be useful to be able to check this from Python, so this patch adds a new "is_file" attribute.
This commit is contained in:
3
gdb/NEWS
3
gdb/NEWS
@ -118,6 +118,9 @@ GNU/Linux/LoongArch (gdbserver) loongarch*-*-linux*
|
|||||||
to wrap the result of a call to a Disassembler. It has
|
to wrap the result of a call to a Disassembler. It has
|
||||||
read-only attributes 'length' and 'string'.
|
read-only attributes 'length' and 'string'.
|
||||||
|
|
||||||
|
** gdb.Objfile now has an attribute named "is_file". This is True
|
||||||
|
if the objfile comes from a file, and False otherwise.
|
||||||
|
|
||||||
* New features in the GDB remote stub, GDBserver
|
* New features in the GDB remote stub, GDBserver
|
||||||
|
|
||||||
** GDBserver is now supported on LoongArch GNU/Linux.
|
** GDBserver is now supported on LoongArch GNU/Linux.
|
||||||
|
@ -4891,6 +4891,13 @@ The value is @code{None} if the objfile is no longer valid.
|
|||||||
See the @code{gdb.Objfile.is_valid} method, described below.
|
See the @code{gdb.Objfile.is_valid} method, described below.
|
||||||
@end defvar
|
@end defvar
|
||||||
|
|
||||||
|
@defvar Objfile.is_file
|
||||||
|
An objfile often comes from an ordinary file, but in some cases it may
|
||||||
|
be constructed from the contents of memory. This attribute is
|
||||||
|
@code{True} for file-backed objfiles, and @code{False} for other
|
||||||
|
kinds.
|
||||||
|
@end defvar
|
||||||
|
|
||||||
@defvar Objfile.owner
|
@defvar Objfile.owner
|
||||||
For separate debug info objfiles this is the corresponding @code{gdb.Objfile}
|
For separate debug info objfiles this is the corresponding @code{gdb.Objfile}
|
||||||
object that debug info is being provided for.
|
object that debug info is being provided for.
|
||||||
|
@ -101,6 +101,18 @@ objfpy_get_username (PyObject *self, void *closure)
|
|||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get the 'is_file' attribute. */
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
objfpy_get_is_file (PyObject *o, void *ignore)
|
||||||
|
{
|
||||||
|
objfile_object *self = (objfile_object *) o;
|
||||||
|
|
||||||
|
if (self->objfile != nullptr)
|
||||||
|
return PyBool_FromLong ((self->objfile->flags & OBJF_NOT_FILENAME) == 0);
|
||||||
|
Py_RETURN_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
/* If SELF is a separate debug-info file, return the "backlink" field.
|
/* If SELF is a separate debug-info file, return the "backlink" field.
|
||||||
Otherwise return None. */
|
Otherwise return None. */
|
||||||
|
|
||||||
@ -762,6 +774,8 @@ static gdb_PyGetSetDef objfile_getset[] =
|
|||||||
"Type printers.", NULL },
|
"Type printers.", NULL },
|
||||||
{ "xmethods", objfpy_get_xmethods, NULL,
|
{ "xmethods", objfpy_get_xmethods, NULL,
|
||||||
"Debug methods.", NULL },
|
"Debug methods.", NULL },
|
||||||
|
{ "is_file", objfpy_get_is_file, nullptr,
|
||||||
|
"Whether this objfile came from a file.", nullptr },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Optionally test a Python API here as well.
|
||||||
|
load_lib gdb-python.exp
|
||||||
|
|
||||||
standard_testfile jit-reader-host.c
|
standard_testfile jit-reader-host.c
|
||||||
|
|
||||||
if { (![istarget x86_64-*-*] && ![istarget i?86-*-*]) || ![is_lp64_target] } {
|
if { (![istarget x86_64-*-*] && ![istarget i?86-*-*]) || ![is_lp64_target] } {
|
||||||
@ -265,6 +268,15 @@ proc jit_reader_test {} {
|
|||||||
"#1 ${any} in main ${any}" \
|
"#1 ${any} in main ${any}" \
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if {![skip_python_tests]} {
|
||||||
|
gdb_test "python print(any(\[not x.is_file for x in gdb.objfiles()\]))" \
|
||||||
|
"True" \
|
||||||
|
"at least one non-file objfile"
|
||||||
|
gdb_test "python print(any(\[x.is_file for x in gdb.objfiles()\]))" \
|
||||||
|
"True" \
|
||||||
|
"at least one file-based objfile"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
jit_reader_test
|
jit_reader_test
|
||||||
|
Reference in New Issue
Block a user