diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2020-07-22 15:56:06 +0200 |
---|---|---|
committer | Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> | 2020-07-22 15:56:06 +0200 |
commit | 238b5c9f0881b2e27d2eb111ad9c7fe874859acf (patch) | |
tree | 4a6c48835685490c23f61d568798cf575ed39acc /gdb/jit.h | |
parent | fe053b9e85378b4df1397684266b2cddcce8123b (diff) | |
download | gdb-238b5c9f0881b2e27d2eb111ad9c7fe874859acf.zip gdb-238b5c9f0881b2e27d2eb111ad9c7fe874859acf.tar.gz gdb-238b5c9f0881b2e27d2eb111ad9c7fe874859acf.tar.bz2 |
gdb/jit: link to jit_objfile_data directly from the objfile struct
Remove the use of objfile_data to associate a jit_objfile_data with an
objfile. Instead, directly link to a jit_objfile_data from an objfile
struct. The goal is to eliminate unnecessary abstraction.
The free_objfile_data function naturally becomes the destructor of
jit_objfile_data. However, free_objfile_data accesses the objfile to
which the data is attached, which the destructor of jit_objfile_data
doesn't have access to. To work around this, add a backlink to the
owning objfile in jit_objfile_data. This is however temporary, it goes
away in a subsequent patch.
gdb/ChangeLog:
2020-07-22 Simon Marchi <simon.marchi@polymtl.ca>
* jit.h: Forward-declare `struct minimal_symbol`.
(struct jit_objfile_data): Migrate to here from jit.c; also add a
constructor, destructor, and an objfile* field.
* jit.c (jit_objfile_data): Remove.
(struct jit_objfile_data): Migrate from here to jit.h.
(jit_objfile_data::~jit_objfile_data): New destructor
implementation with code moved from free_objfile_data.
(free_objfile_data): Delete.
(get_jit_objfile_data): Update to use the jit_data field of objfile.
(jit_find_objf_with_entry_addr): Ditto.
(jit_inferior_exit_hook): Ditto.
(_initialize_jit): Remove the call to
register_objfile_data_with_cleanup.
* objfiles.h (struct objfile) <jit_data>: New field.
Diffstat (limited to 'gdb/jit.h')
-rw-r--r-- | gdb/jit.h | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -21,6 +21,7 @@ #define JIT_H struct objfile; +struct minimal_symbol; /* When the JIT breakpoint fires, the inferior wants us to take one of these actions. These values are used by the inferior, so the @@ -66,6 +67,34 @@ struct jit_descriptor CORE_ADDR first_entry; }; +/* Per-objfile structure recording the addresses in the program space. + This object serves two purposes: for ordinary objfiles, it may + cache some symbols related to the JIT interface; and for + JIT-created objfiles, it holds some information about the + jit_code_entry. */ + +struct jit_objfile_data +{ + jit_objfile_data (struct objfile *objfile) + : objfile (objfile) + {} + + ~jit_objfile_data (); + + /* Back-link to the objfile. */ + struct objfile *objfile; + + /* Symbol for __jit_debug_register_code. */ + minimal_symbol *register_code = nullptr; + + /* Symbol for __jit_debug_descriptor. */ + minimal_symbol *descriptor = nullptr; + + /* Address of struct jit_code_entry in this objfile. This is only + non-zero for objfiles that represent code created by the JIT. */ + CORE_ADDR addr = 0; +}; + /* Looks for the descriptor and registration symbols and breakpoints the registration function. If it finds both, it registers all the already JITed code. If it has already found the symbols, then it |