From 77208eb7e24a2bad8771f3958d9cd2e06144c654 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Wed, 22 Jul 2020 15:56:07 +0200 Subject: [PATCH] gdb/jit: move cached_code_address and jit_breakpoint to jiter_objfile_data This is in preparation for allowing more than one JITer objfile per program space. Once we do that, each JITer objfile will have its own JIT breakpoint (on the __jit_debug_register_code function it provides). The cached_code_address field is just the runtime / relocated address of that symbol. Since they are going to become JITer-objfile-specific and not program-space-specific, move these fields from jit_program_space_data to jiter_objfile_data. gdb/ChangeLog: 2020-07-22 Simon Marchi * jit.h (struct jiter_objfile_data) : 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. --- gdb/ChangeLog | 9 +++++++++ gdb/jit.c | 41 +++++++++++++++++------------------------ gdb/jit.h | 8 ++++++++ 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5d1a843d2b3..3a3866a44f7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2020-07-22 Simon Marchi + + * jit.h (struct jiter_objfile_data) : 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 * jit.c (jiter_objfile_data::~jiter_objfile_data): Remove some diff --git a/gdb/jit.c b/gdb/jit.c index 9ac282ae534..562c76330cb 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_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 fcef78d4991..b78c35d5184 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 -- 2.30.2