diff options
-rw-r--r-- | gdb/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/jit.c | 41 | ||||
-rw-r--r-- | gdb/jit.h | 8 |
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. @@ -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; } @@ -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 |