+2020-07-22 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ * jit.h: Forward-declare `struct objfile`.
+ (jit_event_handler): Add a second parameter, the JITer objfile.
+ * jit.c (jit_read_descriptor): Change the signature to take the
+ JITer objfile as an argument instead of the jit_program_space_data.
+ (jit_inferior_init): Update the call to jit_read_descriptor.
+ (jit_event_handler): Use the new JITer objfile argument when calling
+ jit_read_descriptor.
+ * breakpoint.c (handle_jit_event): Update the call to
+ jit_event_handler to pass the JITer objfile.
+
2020-07-21 John Baldwin <jhb@FreeBSD.org>
* gdbarch.c: Regenerate.
memory. Returns true if all went well, false otherwise. */
static bool
-jit_read_descriptor (struct gdbarch *gdbarch,
- struct jit_descriptor *descriptor,
- struct jit_program_space_data *ps_data)
+jit_read_descriptor (gdbarch *gdbarch,
+ jit_descriptor *descriptor,
+ objfile *jiter)
{
int err;
struct type *ptr_type;
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
struct jit_objfile_data *objf_data;
- if (ps_data->objfile == NULL)
- return false;
- objf_data = get_jit_objfile_data (ps_data->objfile);
+ gdb_assert (jiter != nullptr);
+ objf_data = get_jit_objfile_data (jiter);
+
if (objf_data->descriptor == NULL)
return false;
if (jit_debug)
fprintf_unfiltered (gdb_stdlog,
"jit_read_descriptor, descriptor_addr = %s\n",
- paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (ps_data->objfile,
+ paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (jiter,
objf_data->descriptor)));
/* Figure out how big the descriptor is on the remote and how to read it. */
desc_buf = (gdb_byte *) alloca (desc_size);
/* Read the descriptor. */
- err = target_read_memory (MSYMBOL_VALUE_ADDRESS (ps_data->objfile,
+ err = target_read_memory (MSYMBOL_VALUE_ADDRESS (jiter,
objf_data->descriptor),
desc_buf, desc_size);
if (err)
if (!jit_breakpoint_re_set_internal (gdbarch, ps_data))
return;
+ /* There must be a JITer registered, otherwise we would exit early
+ above. */
+ objfile *jiter = ps_data->objfile;
+
/* Read the descriptor so we can check the version number and load
any already JITed functions. */
- if (!jit_read_descriptor (gdbarch, &descriptor, ps_data))
+ if (!jit_read_descriptor (gdbarch, &descriptor, jiter))
return;
/* Check that the version number agrees with that we support. */
}
void
-jit_event_handler (struct gdbarch *gdbarch)
+jit_event_handler (gdbarch *gdbarch, objfile *jiter)
{
struct jit_descriptor descriptor;
struct jit_code_entry code_entry;
struct objfile *objf;
/* Read the descriptor from remote memory. */
- if (!jit_read_descriptor (gdbarch, &descriptor,
- get_jit_program_space_data ()))
+ if (!jit_read_descriptor (gdbarch, &descriptor, jiter))
return;
entry_addr = descriptor.relevant_entry;
#ifndef JIT_H
#define JIT_H
+struct objfile;
+
/* When the JIT breakpoint fires, the inferior wants us to take one of
these actions. These values are used by the inferior, so the
values of these enums cannot be changed. */
extern void jit_breakpoint_re_set (void);
/* This function is called by handle_inferior_event when it decides
- that the JIT event breakpoint has fired. */
+ that the JIT event breakpoint has fired. JITER is the objfile
+ whose JIT event breakpoint has been hit. */
-extern void jit_event_handler (struct gdbarch *gdbarch);
+extern void jit_event_handler (gdbarch *gdbarch, objfile *jiter);
#endif /* JIT_H */