binutils-gdb/gdb/python
Andrew Burgess 25209e2c69 gdb/python: add gdb.format_address function
Add a new function, gdb.format_address, which is a wrapper around
GDB's print_address function.

This method takes an address, and returns a string with the format:

  ADDRESS <SYMBOL+OFFSET>

Where, ADDRESS is the original address, formatted as hexadecimal,
SYMBOL is a symbol with an address lower than ADDRESS, and OFFSET is
the offset from SYMBOL to ADDRESS in decimal.

If there's no SYMBOL suitably close to ADDRESS then the
<SYMBOL+OFFSET> part is not included.

This is useful if a user wants to write a Python script that
pretty-prints addresses, the user no longer needs to do manual symbol
lookup, or worry about correctly formatting addresses.

Additionally, there are some settings that effect how GDB picks
SYMBOL, and whether the file name and line number should be included
with the SYMBOL name, the gdb.format_address function ensures that the
users Python script also benefits from these settings.

The gdb.format_address by default selects SYMBOL from the current
inferiors program space, and address is formatted using the
architecture for the current inferior.  However, a user can also
explicitly pass a program space and architecture like this:

  gdb.format_address(ADDRESS, PROGRAM_SPACE, ARCHITECTURE)

In order to format an address for a different inferior.

Notes on the implementation:

In py-arch.c I extended arch_object_to_gdbarch to add an assertion for
the type of the PyObject being worked on.  Prior to this commit all
uses of arch_object_to_gdbarch were guaranteed to pass this function a
gdb.Architecture object, but, with this commit, this might not be the
case.

So, with this commit I've made it a requirement that the PyObject be a
gdb.Architecture, and this is checked with the assert.  And in order
that callers from other files can check if they have a
gdb.Architecture object, I've added the new function
gdbpy_is_architecture.

In py-progspace.c I've added two new function, the first
progspace_object_to_program_space, converts a PyObject of type
gdb.Progspace to the associated program_space pointer, and
gdbpy_is_progspace checks if a PyObject is a gdb.Progspace or not.
2022-03-22 10:05:05 +00:00
..
lib/gdb gdb/python: remove gdb._mi_commands dict 2022-03-18 20:29:57 -04:00
py-all-events.def Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-arch.c gdb/python: add gdb.format_address function 2022-03-22 10:05:05 +00:00
py-auto-load.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-block.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-bpevent.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-breakpoint.c Change how Python architecture and language are handled 2022-01-26 06:49:51 -07:00
py-cmd.c Change how Python architecture and language are handled 2022-01-26 06:49:51 -07:00
py-connection.c Change how Python architecture and language are handled 2022-01-26 06:49:51 -07:00
py-continueevent.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-event-types.def Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-event.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-event.h Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-events.h Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-evtregistry.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-evts.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-exitedevent.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-finishbreakpoint.c gdb: add a symbol* argument to get_return_value 2022-02-15 09:52:37 +00:00
py-frame.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-framefilter.c gdb: remove SYMBOL_IS_ARGUMENT macro 2022-02-06 16:03:46 -05:00
py-function.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-gdb-readline.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-inferior.c Change how Python architecture and language are handled 2022-01-26 06:49:51 -07:00
py-infevents.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-infthread.c Fix maybe-uninitialized warning in py-infthread.c 2022-02-28 10:53:13 -07:00
py-instruction.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-instruction.h Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-lazy-string.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-linetable.c gdb: remove SYMTAB_LINETABLE macro, add getter/setter 2022-02-06 15:48:19 -05:00
py-membuf.c Change how Python architecture and language are handled 2022-01-26 06:49:51 -07:00
py-micmd.c gdb/python: remove gdb._mi_commands dict 2022-03-18 20:29:57 -04:00
py-newobjfileevent.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-objfile.c Remove host_hex_value 2022-02-04 07:37:22 -07:00
py-param.c gdb/python: improve the auto help text for gdb.Parameter 2022-01-26 22:00:20 +00:00
py-prettyprint.c Always call the wrap_here method 2022-01-26 15:19:13 -07:00
py-progspace.c gdb/python: add gdb.format_address function 2022-03-22 10:05:05 +00:00
py-record-btrace.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-record-btrace.h Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-record-full.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-record-full.h Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-record.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-record.h Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-ref.h Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-registers.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-signalevent.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-stopevent.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-stopevent.h Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-symbol.c gdb: remove SYMBOL_LINE macro 2022-02-06 16:03:47 -05:00
py-symtab.c gdb: remove SYMTAB_OBJFILE macro 2022-02-06 16:03:46 -05:00
py-threadevent.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-tui.c Change how Python architecture and language are handled 2022-01-26 06:49:51 -07:00
py-type.c gdb/python: add Type.is_signed property 2022-03-07 19:42:08 +00:00
py-unwind.c Change how Python architecture and language are handled 2022-01-26 06:49:51 -07:00
py-utils.c gdb/python/mi: create MI commands using python 2022-03-14 14:09:09 +00:00
py-value.c gdb/python: allow Value.format_string to return styled output 2022-02-07 16:52:47 +00:00
py-varobj.c Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00
py-xmethods.c Change how Python architecture and language are handled 2022-01-26 06:49:51 -07:00
python-config.py gdb: re-format Python files using black 21.4b0 2021-05-07 10:56:20 -04:00
python-internal.h gdb/python: add gdb.format_address function 2022-03-22 10:05:05 +00:00
python.c gdb/python: add gdb.format_address function 2022-03-22 10:05:05 +00:00
python.h Automatic Copyright Year update after running gdb/copyright.py 2022-01-01 19:13:23 +04:00