binutils-gdb/gdb/testsuite/gdb.python
Andrew Burgess 33d569b709 gdb/python: Return None from Progspace.block_for_pc on error
The documentation for Progspace.block_for_pc says:

  Return the innermost gdb.Block containing the given pc value. If the
  block cannot be found for the pc value specified, the function will
  return None.

However, the implementation actually throws an error for invalid
addresses, like this:

    (gdb) python print gdb.current_progspace ().block_for_pc (1)
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    RuntimeError: Cannot locate object file for block.
    Error while executing Python code.
    (gdb)

This has been the behaviour since the command was first added (when
the documentation was still as above) in this commit:

    commit f3e9a8177c
    Date:   Wed Feb 24 21:18:28 2010 +0000

Since that commit the code in question has moved around, but the
important parts are largely unchanged.  The function in question is
now in py-progspace.c:pspy_block_for_pc.

Examining the code shows that the real state is more complex than just
the function throws an error instead of returning None, instead the
real situation is:

  1. If we can't find a compilation unit for the $pc value then we
  throw an error, but

  2. If we can find a compilation unit, but can't find a block within
  the compilation unit for the $pc then return None.

I suspect for most users of the Python API this distinction is
irrelevant, and I propose that we standardise on one single failure
mechanism.

Given the function can currently return None in some cases, and is
documented to return None on error, I propose we make that the case
for all error paths, which is what this patch does.

As the Progspace.block_for_pc method is currently untested, I've added
some basic tests including for a call with an invalid $pc.

This is potentially an API breaking change, though an undocumented
part of the API.  Also, users should have been checking and handling a
None return value anyway, so my hope is that this shouldn't be too
disruptive.

gdb/ChangeLog:

	* python/py-progspace.c (pspy_block_for_pc): Return None for all
	error paths.

gdb/testsuite/ChangeLog:

	* gdb.python/py-progspace.exp: Add tests for the
	Progspace.block_for_pc method.

Change-Id: I9cea8d2132902bcad0013d1fd39080dd5423cc57
2019-10-24 15:27:02 +01:00
..
amd64-py-framefilter-invalidarg.S Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
lib-types.cc Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
lib-types.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-arch.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-arch.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-as-string.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-as-string.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-bad-printers.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-bad-printers.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-bad-printers.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-block.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-block.exp Add block['var'] accessor 2019-08-05 13:06:18 -05:00
py-breakpoint-create-fail.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-breakpoint-create-fail.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-breakpoint-create-fail.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-breakpoint.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-breakpoint.exp "catch catch/throw/rethrow", breakpoint -> catchpoint 2019-07-09 19:34:18 +01:00
py-caller-is.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-caller-is.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-cmd.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-cmd.exp Update tests following changes to "help" and "apropos" 2019-06-03 21:59:35 +02:00
py-completion.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-completion.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-error.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-error.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-events-shlib.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-events.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-events.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-events.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-evsignal.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-evthreads.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-evthreads.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-explore-cc.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-explore.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-explore.cc Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-explore.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-finish-breakpoint.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-finish-breakpoint.exp Remove Python 2.4 and 2.5 support 2019-02-27 11:43:06 -07:00
py-finish-breakpoint.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-finish-breakpoint2.cc Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-finish-breakpoint2.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-finish-breakpoint2.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-format-string.c gdb/testsuite: Fix py-format-string.exp on big-endian platforms 2019-10-02 20:01:44 +02:00
py-format-string.exp gdb/testsuite: Fix py-format-string.exp on big-endian platforms 2019-10-02 20:01:44 +02:00
py-format-string.py Add gdb.Value.format_string () 2019-04-01 10:00:04 +02:00
py-frame-args.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-frame-args.exp "set print raw frame-arguments" -> "set print raw-frame-arguments" 2019-06-13 00:18:41 +01:00
py-frame-args.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-frame-inline.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-frame-inline.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-frame.c
py-frame.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-framefilter-gdb.py.in Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-framefilter-invalidarg-gdb.py.in Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-framefilter-invalidarg.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-framefilter-invalidarg.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-framefilter-mi.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-framefilter-mi.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-framefilter.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-framefilter.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-framefilter.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-function.exp gdb/fortran: Handle internal function calls 2019-04-01 21:41:51 +01:00
py-inferior.c
py-inferior.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-infthread.c
py-infthread.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-lazy-string.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-lazy-string.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-linetable.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-linetable.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-linetable.S Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-lookup-type.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-mi-events-gdb.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-mi-events.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-mi-events.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-mi-objfile-gdb.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-mi-objfile.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-mi-objfile.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-mi-var-info-path-expression.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-mi-var-info-path-expression.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-mi-var-info-path-expression.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-mi.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-nested-maps.c gdb: Introduce 'print max-depth' feature 2019-04-29 22:01:09 +01:00
py-nested-maps.exp gdb: Introduce 'print max-depth' feature 2019-04-29 22:01:09 +01:00
py-nested-maps.py gdb: Introduce 'print max-depth' feature 2019-04-29 22:01:09 +01:00
py-objfile-script-gdb.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-objfile-script.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-objfile-script.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-objfile.c Add Objfile.lookup_{global,static}_symbol functions 2019-07-29 20:44:08 -05:00
py-objfile.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-parameter.exp gdb/testsuite: Reduce test name duplication in gdb.python tests 2019-10-03 17:48:03 +01:00
py-pp-integral.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-pp-integral.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-pp-integral.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-pp-maint.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-pp-maint.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-pp-maint.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-pp-re-notag.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-pp-re-notag.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-pp-re-notag.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-pp-registration.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-pp-registration.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-pp-registration.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-prettyprint.c gdb: Make python display_hint None handling defined behaviour 2019-03-26 18:25:10 +00:00
py-prettyprint.exp gdb: Make python display_hint None handling defined behaviour 2019-03-26 18:25:10 +00:00
py-prettyprint.py gdb: Make python display_hint None handling defined behaviour 2019-03-26 18:25:10 +00:00
py-progspace.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-progspace.exp gdb/python: Return None from Progspace.block_for_pc on error 2019-10-24 15:27:02 +01:00
py-prompt.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-prompt.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-rbreak-func2.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-rbreak.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-rbreak.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-record-btrace-threads.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-record-btrace-threads.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-record-btrace.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-record-btrace.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-record-full.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-record-full.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-recurse-unwind.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-recurse-unwind.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-recurse-unwind.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-rvalue-ref-value-cc.cc Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-rvalue-ref-value-cc.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-section-script.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-section-script.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-section-script.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-shared-sl.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-shared.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-shared.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-strfns.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-strfns.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-symbol.c [PR/24474] Add gdb.lookup_static_symbol to the python API 2019-07-30 11:04:37 -05:00
py-symbol.exp [PR/24474] Add gdb.lookup_static_symbol to the python API 2019-07-30 11:04:37 -05:00
py-symtab.exp Fixes for gdb.python tests on remote Windows host. 2019-08-13 09:09:30 -07:00
py-sync-interp.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-sync-interp.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-template.cc Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-template.exp gdb/testsuite: Reduce test name duplication in gdb.python tests 2019-10-03 17:48:03 +01:00
py-thrhandle.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-thrhandle.exp Rename python function thread_from_thread_handle to thread_from_handle 2019-04-08 20:21:34 -07:00
py-type.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-type.exp Add an objfile getter to gdb.Type 2019-06-04 09:46:06 -06:00
py-typeprint.cc Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-typeprint.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-typeprint.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-unwind-maint.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-unwind-maint.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-unwind-maint.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-unwind.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-unwind.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-unwind.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-value-cc.cc Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-value-cc.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-value.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-value.exp gdb/testsuite: Reduce test name duplication in gdb.python tests 2019-10-03 17:48:03 +01:00
py-xmethods.cc Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-xmethods.exp Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
py-xmethods.py Use raw strings on gdb.python/py-xmethods.exp (and fix Python 3.8's "SyntaxWarning: invalid escape sequence") 2019-08-26 09:18:37 -04:00
python-1.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
python.c Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
python.exp Rename internal Python functions to start with an underscore 2019-08-15 14:21:57 -05:00
source1 Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
source2.py Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00