gdb: get jiter objfile from a bound minsym
authorMihails Strasuns <mihails.strasuns@intel.com>
Wed, 14 Oct 2020 08:44:36 +0000 (10:44 +0200)
committerMihails Strasuns <mihails.strasuns@intel.com>
Mon, 19 Oct 2020 14:52:34 +0000 (16:52 +0200)
commit61c26be85f0e09a208fa46ee839c74081c7d8124
tree0c322cce6849ea19ed3ba531aa35debcec2995ed
parent0f03783c8e9f14d02749081815949493bb28d4e3
gdb: get jiter objfile from a bound minsym

This fixes a regression introduced by the following commit:

fe053b9e853 gdb/jit: pass the jiter objfile as an argument to jit_event_handler

In the refactoring `handle_jit_event` function was changed to pass a matching
objfile pointer to the `jit_event_handler` explicitly, rather using internal
storage:

```
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -5448,8 +5448,9 @@ handle_jit_event (void)

   frame = get_current_frame ();
   gdbarch = get_frame_arch (frame);
+  objfile *jiter = symbol_objfile (get_frame_function (frame));

-  jit_event_handler (gdbarch);
+  jit_event_handler (gdbarch, jiter);
```

This was needed to add support for multiple jiters.  However it has also
introduced a regression, because `get_frame_function (frame)` here may
return `nullptr`, resulting in a crash.

A more resilient way would be to use an approach mirroring
`jit_breakpoint_re_set` - to find a minimal symbol matching the
breakpoint location and use its object file.  We know that this
breakpoint event comes from a breakpoint set by `jit_breakpoint_re_set`,
thus using the reverse approach should be reliable enough.

gdb/Changelog:
2020-10-14  Mihails Strasuns  <mihails.strasuns@intel.com>

* breakpoint.c (handle_jit_event): Add an argument, change how
`jit_event_handler` is called.
gdb/ChangeLog
gdb/breakpoint.c