binutils-gdb/gdb/testsuite/gdb.python
Michael Weghorn 2c473def12 gdb: do autoload before notifying Python side in new_objfile event
Without any explicit dependencies specified, the observers attached
to the 'gdb::observers::new_objfile' observable are always notified
in the order in which they have been attached.

The new_objfile observer callback to auto-load scripts is attached in
'_initialize_auto_load'.
The new_objfile observer callback that propagates the new_objfile event
to the Python side is attached in 'gdbpy_initialize_inferior', which is
called via '_initialize_python'.
With '_initialize_python' happening before '_initialize_auto_load',
the consequence was that the new_objfile event was emitted on the Python
side before autoloaded scripts had been executed when a new objfile was
loaded.
As a result, trying to access the objfile's pretty printers (defined in
the autoloaded script) from a handler for the Python-side
'new_objfile' event would fail. Those would only be initialized later on
(when the 'auto_load_new_objfile' callback was called).

To make sure that the objfile passed to the Python event handler
is properly initialized (including its 'pretty_printers' member),
make sure that the 'auto_load_new_objfile' observer is notified
before the 'python_new_objfile' one that propagates the event
to the Python side.

To do this, make use of the mechanism to explicitly specify
dependencies between observers (introduced in a preparatory commit).

Add a corresponding testcase that involves a test library with an autoloaded
Python script and a handler for the Python 'new_objfile' event.

(The real world use case where I came across this issue was in an attempt
to extend handling for GDB pretty printers for dynamically loaded
objfiles in the Qt Creator IDE, s. [1] and [2] for more background.)

[1] https://bugreports.qt.io/browse/QTCREATORBUG-25339
[2] https://codereview.qt-project.org/c/qt-creator/qt-creator/+/333857/1

Tested on x86_64-linux (Debian testing).

gdb/ChangeLog:

	* gdb/auto-load.c (_initialize_auto_load): 'Specify token
	when attaching the 'auto_load_new_objfile' observer, so
	other observers can specify it as a dependency.
	* gdb/auto-load.h (struct token): Declare
	'auto_load_new_objfile_observer_token' as token to be used
	for the 'auto_load_new_objfile' observer.
	* gdb/python/py-inferior.c (gdbpy_initialize_inferior): Make
	'python_new_objfile' observer depend on 'auto_load_new_objfile'
	observer, so it gets notified after the latter.

gdb/testsuite/ChangeLog:

	* gdb.python/libpy-autoloaded-pretty-printers-in-newobjfile-event.so-gdb.py: New test.
	* gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event-lib.cc: New test.
	* gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event-lib.h: New test.
	* gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event-main.cc: New test.
	* gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event.exp: New test.
	* gdb.python/py-autoloaded-pretty-printers-in-newobjfile-event.py: New test.

Change-Id: I8275b3f4c3bec32e56dd7892f9a59d89544edf89
2021-04-27 11:22:32 -04:00
..
amd64-py-framefilter-invalidarg.S Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
compare-enum-type-a.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
compare-enum-type-b.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
compare-enum-type.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
compare-enum-type.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
flexible-array-member.c gdb: fix getting range of flexible array member in Python 2021-04-22 15:01:28 -04:00
flexible-array-member.exp gdb/testsuite: add Python support check in gdb.python/flexible-array-member.exp 2021-04-22 15:45:34 -04:00
lib-types.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
lib-types.exp gdb/testsuite: check the correct Python variable in test 2021-03-12 12:18:33 +00:00
libpy-autoloaded-pretty-printers-in-newobjfile-event.so-gdb.py gdb: do autoload before notifying Python side in new_objfile event 2021-04-27 11:22:32 -04:00
py-arch-reg-groups.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-arch-reg-names.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-arch.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-arch.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-as-string.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-as-string.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-auto-load-chaining-f1.c gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-auto-load-chaining-f1.o-gdb.py gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-auto-load-chaining-f2.c gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-auto-load-chaining-f2.o-gdb.py gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-auto-load-chaining.c gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-auto-load-chaining.exp gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
py-autoloaded-pretty-printers-in-newobjfile-event-lib.cc gdb: do autoload before notifying Python side in new_objfile event 2021-04-27 11:22:32 -04:00
py-autoloaded-pretty-printers-in-newobjfile-event-lib.h gdb: do autoload before notifying Python side in new_objfile event 2021-04-27 11:22:32 -04:00
py-autoloaded-pretty-printers-in-newobjfile-event-main.cc gdb: do autoload before notifying Python side in new_objfile event 2021-04-27 11:22:32 -04:00
py-autoloaded-pretty-printers-in-newobjfile-event.exp gdb: do autoload before notifying Python side in new_objfile event 2021-04-27 11:22:32 -04:00
py-autoloaded-pretty-printers-in-newobjfile-event.py gdb: do autoload before notifying Python side in new_objfile event 2021-04-27 11:22:32 -04:00
py-bad-printers.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-bad-printers.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-bad-printers.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-block.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-block.exp gdb/testsuite: make test names unique in gdb.python/py-block.exp 2021-03-12 12:18:33 +00:00
py-breakpoint-create-fail.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-breakpoint-create-fail.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-breakpoint-create-fail.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-breakpoint.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-breakpoint.exp Add Python support for hardware breakpoints 2021-01-21 18:55:45 +01:00
py-caller-is.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-caller-is.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-cmd.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-cmd.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-completion.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-completion.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-error.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-error.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-events-shlib.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-events.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-events.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-events.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-evsignal.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-evthreads.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-evthreads.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-explore-cc.exp gdb/testsuite: make test names unique in gdb.python/py-explore-cc.exp 2021-03-12 12:18:33 +00:00
py-explore.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-explore.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-explore.exp gdb/testsuite: make test names unique in gdb.python/py-explore.exp 2021-03-12 12:18:33 +00:00
py-finish-breakpoint.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-finish-breakpoint.exp gdb/testsuite: make test names unique in gdb.python/py-finish-breakpoint.exp 2021-03-12 12:18:33 +00:00
py-finish-breakpoint.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-finish-breakpoint2.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-finish-breakpoint2.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-finish-breakpoint2.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-format-string.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-format-string.exp gdb/testsuite: make test names unique in gdb.python/py-format-string.exp 2021-03-12 12:18:33 +00:00
py-format-string.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-frame-args.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-frame-args.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-frame-args.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-frame-inline.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-frame-inline.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-frame.c
py-frame.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-framefilter-addr.c gdb/python: fix FrameDecorator regression on Python 2 2021-03-16 09:31:56 +00:00
py-framefilter-addr.exp gdb/python: fix FrameDecorator regression on Python 2 2021-03-16 09:31:56 +00:00
py-framefilter-addr.py gdb/python: fix FrameDecorator regression on Python 2 2021-03-16 09:31:56 +00:00
py-framefilter-gdb.py.in Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter-invalidarg-gdb.py.in Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter-invalidarg.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter-invalidarg.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter-mi.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter-mi.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-framefilter.exp gdb/python: reformat an error string 2021-02-08 11:03:54 +00:00
py-framefilter.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-function.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-inferior.c
py-inferior.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-infthread.c
py-infthread.exp gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp 2021-03-12 12:18:34 +00:00
py-lazy-string.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-lazy-string.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-linetable.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-linetable.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-linetable.S Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-lookup-type.exp gdb/testsuite: remove a duplicate test 2021-03-12 12:18:33 +00:00
py-mi-events-gdb.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-events.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-events.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-objfile-gdb.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-objfile.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-objfile.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-var-info-path-expression.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-var-info-path-expression.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi-var-info-path-expression.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-mi.exp gdb/testsuite: make test names unique in gdb.python/py-mi.exp 2021-03-12 12:18:33 +00:00
py-nested-maps.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-nested-maps.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-nested-maps.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-objfile-script-gdb.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-objfile-script.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-objfile-script.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-objfile.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-objfile.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-parameter.exp gdb/testsuite: don't include paths in test names 2021-04-15 21:33:58 +01:00
py-pp-integral.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-integral.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-integral.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-maint.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-maint.exp gdb/testsuite: make test names unique in gdb.python/py-pp-maint.exp 2021-03-12 12:18:33 +00:00
py-pp-maint.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-re-notag.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-re-notag.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-re-notag.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-registration.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-registration.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-pp-registration.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-prettyprint.c gdb/testsuite: more testing of pretty printer 'array' display_hint 2021-03-26 17:43:14 +00:00
py-prettyprint.exp gdb/testsuite: more testing of pretty printer 'array' display_hint 2021-03-26 17:43:14 +00:00
py-prettyprint.py gdb/testsuite: more testing of pretty printer 'array' display_hint 2021-03-26 17:43:14 +00:00
py-progspace.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-progspace.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-prompt.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-prompt.exp gdb/testsuite: make test names unique in gdb.python/py-prompt.exp 2021-03-12 12:18:33 +00:00
py-rbreak-func2.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-rbreak.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-rbreak.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-btrace-threads.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-btrace-threads.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-btrace.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-btrace.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-full.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-full.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-recurse-unwind.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-recurse-unwind.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-recurse-unwind.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-rvalue-ref-value-cc.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-rvalue-ref-value-cc.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-section-script.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-section-script.exp gdb: Remove arm-symbianelf support 2021-02-11 07:23:42 +10:30
py-section-script.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-shared-sl.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-shared.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-shared.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-strfns.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-strfns.exp gdb/testsuite: make test names unique in gdb.python/py-strfns.exp 2021-03-12 12:18:33 +00:00
py-symbol-2.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-symbol.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-symbol.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-symtab.exp gdb/testsuite: make test names unique in gdb.python/py-symtab.exp 2021-03-12 12:18:33 +00:00
py-sync-interp.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-sync-interp.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-template.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-template.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-thrhandle.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-thrhandle.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-type.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-type.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-typeprint.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-typeprint.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-typeprint.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-inline.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-inline.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-inline.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-maint.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-maint.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind-maint.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-unwind.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-value-cc.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-value-cc.exp gdb/testsuite: remove duplicate test from gdb.python/py-value-cc.exp 2021-03-12 12:18:34 +00:00
py-value.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-value.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-xmethods.cc Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-xmethods.exp Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-xmethods.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
python-1.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
python.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
python.exp gdb/python: reformat an error string 2021-02-08 11:03:54 +00:00
source1 Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
source2.py Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
tui-window-disabled.c gdb: return true in TuiWindow.is_valid only if TUI is enabled 2021-02-08 11:56:16 +00:00
tui-window-disabled.exp gdb: return true in TuiWindow.is_valid only if TUI is enabled 2021-02-08 11:56:16 +00:00
tui-window-disabled.py gdb: return true in TuiWindow.is_valid only if TUI is enabled 2021-02-08 11:56:16 +00:00
tui-window.exp gdb/python: don't allow the user to delete window title attributes 2021-02-08 11:55:05 +00:00
tui-window.py gdb/python: don't allow the user to delete window title attributes 2021-02-08 11:55:05 +00:00