aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/jit.c41
-rw-r--r--gdb/jit.h8
3 files changed, 34 insertions, 24 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 5d1a843..3a3866a 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
2020-07-22 Simon Marchi <simon.marchi@polymtl.ca>
+ * jit.h (struct jiter_objfile_data) <cached_code_address,
+ jit_breakpoint>: Move to here from ...
+ * jit.c (jit_program_space_data): ... here.
+ (jiter_objfile_data::~jiter_objfile_data): Update.
+ (jit_breakpoint_deleted): Update.
+ (jit_breakpoint_re_set_internal): Update.
+
+2020-07-22 Simon Marchi <simon.marchi@polymtl.ca>
+
* jit.c (jiter_objfile_data::~jiter_objfile_data): Remove some
checks.
(jit_read_descriptor): Remove NULL check.
diff --git a/gdb/jit.c b/gdb/jit.c
index 9ac282a..562c763 100644
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -248,17 +248,6 @@ struct jit_program_space_data
symbols. */
struct objfile *objfile = nullptr;
-
- /* If this program space has __jit_debug_register_code, this is the
- cached address from the minimal symbol. This is used to detect
- relocations requiring the breakpoint to be re-created. */
-
- CORE_ADDR cached_code_address = 0;
-
- /* This is the JIT event breakpoint, or NULL if it has not been
- set. */
-
- struct breakpoint *jit_breakpoint = nullptr;
};
static program_space_key<jit_program_space_data> jit_program_space_key;
@@ -273,11 +262,9 @@ jiter_objfile_data::~jiter_objfile_data ()
gdb_assert (ps_data != nullptr);
gdb_assert (ps_data->objfile == this->objfile);
- ps_data->objfile = NULL;
- if (ps_data->jit_breakpoint != NULL)
- delete_breakpoint (ps_data->jit_breakpoint);
-
- ps_data->cached_code_address = 0;
+ ps_data->objfile = nullptr;
+ if (this->jit_breakpoint != nullptr)
+ delete_breakpoint (this->jit_breakpoint);
}
/* Fetch the jiter_objfile_data associated with OBJF. If no data exists
@@ -924,10 +911,16 @@ jit_breakpoint_deleted (struct breakpoint *b)
struct jit_program_space_data *ps_data;
ps_data = jit_program_space_key.get (iter->pspace);
- if (ps_data != NULL && ps_data->jit_breakpoint == iter->owner)
+ if (ps_data != nullptr && ps_data->objfile != nullptr)
{
- ps_data->cached_code_address = 0;
- ps_data->jit_breakpoint = NULL;
+ objfile *objf = ps_data->objfile;
+ jiter_objfile_data *jiter_data = objf->jiter_data.get ();
+
+ if (jiter_data->jit_breakpoint == iter->owner)
+ {
+ jiter_data->cached_code_address = 0;
+ jiter_data->jit_breakpoint = nullptr;
+ }
}
}
}
@@ -976,16 +969,16 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
"breakpoint_addr = %s\n",
paddress (gdbarch, addr));
- if (ps_data->cached_code_address == addr)
+ if (objf_data->cached_code_address == addr)
return true;
/* Delete the old breakpoint. */
- if (ps_data->jit_breakpoint != NULL)
- delete_breakpoint (ps_data->jit_breakpoint);
+ if (objf_data->jit_breakpoint != nullptr)
+ delete_breakpoint (objf_data->jit_breakpoint);
/* Put a breakpoint in the registration symbol. */
- ps_data->cached_code_address = addr;
- ps_data->jit_breakpoint = create_jit_event_breakpoint (gdbarch, addr);
+ objf_data->cached_code_address = addr;
+ objf_data->jit_breakpoint = create_jit_event_breakpoint (gdbarch, addr);
return true;
}
diff --git a/gdb/jit.h b/gdb/jit.h
index fcef78d..b78c35d 100644
--- a/gdb/jit.h
+++ b/gdb/jit.h
@@ -86,6 +86,14 @@ struct jiter_objfile_data
/* Symbol for __jit_debug_descriptor. */
minimal_symbol *descriptor = nullptr;
+
+ /* This is the relocated address of the __jit_debug_register_code function
+ provided by this objfile. This is used to detect relocations changes
+ requiring the breakpoint to be re-created. */
+ CORE_ADDR cached_code_address = 0;
+
+ /* This is the JIT event breakpoint, or nullptr if it has been deleted. */
+ breakpoint *jit_breakpoint = nullptr;
};
/* An objfile that is the product of JIT compilation and was registered