1 /* Handle JIT code generation in the inferior for GDB, the GNU Debugger.
3 Copyright (C) 2009-2021 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 #include "jit-reader.h"
25 #include "breakpoint.h"
27 #include "dictionary.h"
28 #include "filenames.h"
29 #include "frame-unwind.h"
33 #include "observable.h"
39 #include "gdbsupport/gdb-dlfcn.h"
42 #include "readline/tilde.h"
43 #include "completer.h"
44 #include <forward_list>
46 static std::string jit_reader_dir
;
48 static const char jit_break_name
[] = "__jit_debug_register_code";
50 static const char jit_descriptor_name
[] = "__jit_debug_descriptor";
52 static void jit_inferior_created_hook (inferior
*inf
);
53 static void jit_inferior_exit_hook (struct inferior
*inf
);
55 /* An unwinder is registered for every gdbarch. This key is used to
56 remember if the unwinder has been registered for a particular
59 static struct gdbarch_data
*jit_gdbarch_data
;
61 /* True if we want to see trace of jit level stuff. */
63 static bool jit_debug
= false;
65 /* Print a "jit" debug statement. */
67 #define jit_debug_printf(fmt, ...) \
68 debug_prefixed_printf_cond (jit_debug, "jit", fmt, ##__VA_ARGS__)
71 show_jit_debug (struct ui_file
*file
, int from_tty
,
72 struct cmd_list_element
*c
, const char *value
)
74 fprintf_filtered (file
, _("JIT debugging is %s.\n"), value
);
79 jit_reader (struct gdb_reader_funcs
*f
, gdb_dlhandle_up
&&h
)
80 : functions (f
), handle (std::move (h
))
86 functions
->destroy (functions
);
89 DISABLE_COPY_AND_ASSIGN (jit_reader
);
91 struct gdb_reader_funcs
*functions
;
92 gdb_dlhandle_up handle
;
95 /* One reader that has been loaded successfully, and can potentially be used to
98 static struct jit_reader
*loaded_jit_reader
= NULL
;
100 typedef struct gdb_reader_funcs
* (reader_init_fn_type
) (void);
101 static const char reader_init_fn_sym
[] = "gdb_init_reader";
103 /* Try to load FILE_NAME as a JIT debug info reader. */
105 static struct jit_reader
*
106 jit_reader_load (const char *file_name
)
108 reader_init_fn_type
*init_fn
;
109 struct gdb_reader_funcs
*funcs
= NULL
;
111 jit_debug_printf ("Opening shared object %s", file_name
);
113 gdb_dlhandle_up so
= gdb_dlopen (file_name
);
115 init_fn
= (reader_init_fn_type
*) gdb_dlsym (so
, reader_init_fn_sym
);
117 error (_("Could not locate initialization function: %s."),
120 if (gdb_dlsym (so
, "plugin_is_GPL_compatible") == NULL
)
121 error (_("Reader not GPL compatible."));
124 if (funcs
->reader_version
!= GDB_READER_INTERFACE_VERSION
)
125 error (_("Reader version does not match GDB version."));
127 return new jit_reader (funcs
, std::move (so
));
130 /* Provides the jit-reader-load command. */
133 jit_reader_load_command (const char *args
, int from_tty
)
136 error (_("No reader name provided."));
137 gdb::unique_xmalloc_ptr
<char> file (tilde_expand (args
));
139 if (loaded_jit_reader
!= NULL
)
140 error (_("JIT reader already loaded. Run jit-reader-unload first."));
142 if (!IS_ABSOLUTE_PATH (file
.get ()))
143 file
.reset (xstrprintf ("%s%s%s", jit_reader_dir
.c_str (), SLASH_STRING
,
146 loaded_jit_reader
= jit_reader_load (file
.get ());
147 reinit_frame_cache ();
148 jit_inferior_created_hook (current_inferior ());
151 /* Provides the jit-reader-unload command. */
154 jit_reader_unload_command (const char *args
, int from_tty
)
156 if (!loaded_jit_reader
)
157 error (_("No JIT reader loaded."));
159 reinit_frame_cache ();
160 jit_inferior_exit_hook (current_inferior ());
162 delete loaded_jit_reader
;
163 loaded_jit_reader
= NULL
;
166 /* Destructor for jiter_objfile_data. */
168 jiter_objfile_data::~jiter_objfile_data ()
170 if (this->jit_breakpoint
!= nullptr)
171 delete_breakpoint (this->jit_breakpoint
);
174 /* Fetch the jiter_objfile_data associated with OBJF. If no data exists
175 yet, make a new structure and attach it. */
177 static jiter_objfile_data
*
178 get_jiter_objfile_data (objfile
*objf
)
180 if (objf
->jiter_data
== nullptr)
181 objf
->jiter_data
.reset (new jiter_objfile_data ());
183 return objf
->jiter_data
.get ();
186 /* Remember OBJFILE has been created for struct jit_code_entry located
187 at inferior address ENTRY. */
190 add_objfile_entry (struct objfile
*objfile
, CORE_ADDR entry
)
192 gdb_assert (objfile
->jited_data
== nullptr);
194 objfile
->jited_data
.reset (new jited_objfile_data (entry
));
197 /* Helper function for reading the global JIT descriptor from remote
198 memory. Returns true if all went well, false otherwise. */
201 jit_read_descriptor (gdbarch
*gdbarch
,
202 jit_descriptor
*descriptor
,
206 struct type
*ptr_type
;
210 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
212 gdb_assert (jiter
!= nullptr);
213 jiter_objfile_data
*objf_data
= jiter
->jiter_data
.get ();
214 gdb_assert (objf_data
!= nullptr);
216 CORE_ADDR addr
= MSYMBOL_VALUE_ADDRESS (jiter
, objf_data
->descriptor
);
218 jit_debug_printf ("descriptor_addr = %s", paddress (gdbarch
, addr
));
220 /* Figure out how big the descriptor is on the remote and how to read it. */
221 ptr_type
= builtin_type (gdbarch
)->builtin_data_ptr
;
222 ptr_size
= TYPE_LENGTH (ptr_type
);
223 desc_size
= 8 + 2 * ptr_size
; /* Two 32-bit ints and two pointers. */
224 desc_buf
= (gdb_byte
*) alloca (desc_size
);
226 /* Read the descriptor. */
227 err
= target_read_memory (addr
, desc_buf
, desc_size
);
230 printf_unfiltered (_("Unable to read JIT descriptor from "
235 /* Fix the endianness to match the host. */
236 descriptor
->version
= extract_unsigned_integer (&desc_buf
[0], 4, byte_order
);
237 descriptor
->action_flag
=
238 extract_unsigned_integer (&desc_buf
[4], 4, byte_order
);
239 descriptor
->relevant_entry
= extract_typed_address (&desc_buf
[8], ptr_type
);
240 descriptor
->first_entry
=
241 extract_typed_address (&desc_buf
[8 + ptr_size
], ptr_type
);
246 /* Helper function for reading a JITed code entry from remote memory. */
249 jit_read_code_entry (struct gdbarch
*gdbarch
,
250 CORE_ADDR code_addr
, struct jit_code_entry
*code_entry
)
253 struct type
*ptr_type
;
258 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
260 /* Figure out how big the entry is on the remote and how to read it. */
261 ptr_type
= builtin_type (gdbarch
)->builtin_data_ptr
;
262 ptr_size
= TYPE_LENGTH (ptr_type
);
264 /* Figure out where the uint64_t value will be. */
265 align_bytes
= type_align (builtin_type (gdbarch
)->builtin_uint64
);
267 off
= (off
+ (align_bytes
- 1)) & ~(align_bytes
- 1);
269 entry_size
= off
+ 8; /* Three pointers and one 64-bit int. */
270 entry_buf
= (gdb_byte
*) alloca (entry_size
);
272 /* Read the entry. */
273 err
= target_read_memory (code_addr
, entry_buf
, entry_size
);
275 error (_("Unable to read JIT code entry from remote memory!"));
277 /* Fix the endianness to match the host. */
278 ptr_type
= builtin_type (gdbarch
)->builtin_data_ptr
;
279 code_entry
->next_entry
= extract_typed_address (&entry_buf
[0], ptr_type
);
280 code_entry
->prev_entry
=
281 extract_typed_address (&entry_buf
[ptr_size
], ptr_type
);
282 code_entry
->symfile_addr
=
283 extract_typed_address (&entry_buf
[2 * ptr_size
], ptr_type
);
284 code_entry
->symfile_size
=
285 extract_unsigned_integer (&entry_buf
[off
], 8, byte_order
);
288 /* Proxy object for building a block. */
292 gdb_block (gdb_block
*parent
, CORE_ADDR begin
, CORE_ADDR end
,
297 name (name
!= nullptr ? xstrdup (name
) : nullptr)
300 /* The parent of this block. */
301 struct gdb_block
*parent
;
303 /* Points to the "real" block that is being built out of this
304 instance. This block will be added to a blockvector, which will
305 then be added to a symtab. */
306 struct block
*real_block
= nullptr;
308 /* The first and last code address corresponding to this block. */
309 CORE_ADDR begin
, end
;
311 /* The name of this block (if any). If this is non-NULL, the
312 FUNCTION symbol symbol is set to this value. */
313 gdb::unique_xmalloc_ptr
<char> name
;
316 /* Proxy object for building a symtab. */
320 explicit gdb_symtab (const char *file_name
)
321 : file_name (file_name
!= nullptr ? file_name
: "")
324 /* The list of blocks in this symtab. These will eventually be
325 converted to real blocks.
327 This is specifically a linked list, instead of, for example, a vector,
328 because the pointers are returned to the user's debug info reader. So
329 it's important that the objects don't change location during their
330 lifetime (which would happen with a vector of objects getting resized). */
331 std::forward_list
<gdb_block
> blocks
;
333 /* The number of blocks inserted. */
336 /* A mapping between line numbers to PC. */
337 gdb::unique_xmalloc_ptr
<struct linetable
> linetable
;
339 /* The source file for this symtab. */
340 std::string file_name
;
343 /* Proxy object for building an object. */
347 /* Symtabs of this object.
349 This is specifically a linked list, instead of, for example, a vector,
350 because the pointers are returned to the user's debug info reader. So
351 it's important that the objects don't change location during their
352 lifetime (which would happen with a vector of objects getting resized). */
353 std::forward_list
<gdb_symtab
> symtabs
;
356 /* The type of the `private' data passed around by the callback
359 typedef CORE_ADDR jit_dbg_reader_data
;
361 /* The reader calls into this function to read data off the targets
364 static enum gdb_status
365 jit_target_read_impl (GDB_CORE_ADDR target_mem
, void *gdb_buf
, int len
)
367 int result
= target_read_memory ((CORE_ADDR
) target_mem
,
368 (gdb_byte
*) gdb_buf
, len
);
375 /* The reader calls into this function to create a new gdb_object
376 which it can then pass around to the other callbacks. Right now,
377 all that is required is allocating the memory. */
379 static struct gdb_object
*
380 jit_object_open_impl (struct gdb_symbol_callbacks
*cb
)
382 /* CB is not required right now, but sometime in the future we might
383 need a handle to it, and we'd like to do that without breaking
385 return new gdb_object
;
388 /* Readers call into this function to open a new gdb_symtab, which,
389 again, is passed around to other callbacks. */
391 static struct gdb_symtab
*
392 jit_symtab_open_impl (struct gdb_symbol_callbacks
*cb
,
393 struct gdb_object
*object
,
394 const char *file_name
)
396 /* CB stays unused. See comment in jit_object_open_impl. */
398 object
->symtabs
.emplace_front (file_name
);
399 return &object
->symtabs
.front ();
402 /* Called by readers to open a new gdb_block. This function also
403 inserts the new gdb_block in the correct place in the corresponding
406 static struct gdb_block
*
407 jit_block_open_impl (struct gdb_symbol_callbacks
*cb
,
408 struct gdb_symtab
*symtab
, struct gdb_block
*parent
,
409 GDB_CORE_ADDR begin
, GDB_CORE_ADDR end
, const char *name
)
411 /* Place the block at the beginning of the list, it will be sorted when the
412 symtab is finalized. */
413 symtab
->blocks
.emplace_front (parent
, begin
, end
, name
);
416 return &symtab
->blocks
.front ();
419 /* Readers call this to add a line mapping (from PC to line number) to
423 jit_symtab_line_mapping_add_impl (struct gdb_symbol_callbacks
*cb
,
424 struct gdb_symtab
*stab
, int nlines
,
425 struct gdb_line_mapping
*map
)
433 alloc_len
= sizeof (struct linetable
)
434 + (nlines
- 1) * sizeof (struct linetable_entry
);
435 stab
->linetable
.reset (XNEWVAR (struct linetable
, alloc_len
));
436 stab
->linetable
->nitems
= nlines
;
437 for (i
= 0; i
< nlines
; i
++)
439 stab
->linetable
->item
[i
].pc
= (CORE_ADDR
) map
[i
].pc
;
440 stab
->linetable
->item
[i
].line
= map
[i
].line
;
441 stab
->linetable
->item
[i
].is_stmt
= 1;
445 /* Called by readers to close a gdb_symtab. Does not need to do
446 anything as of now. */
449 jit_symtab_close_impl (struct gdb_symbol_callbacks
*cb
,
450 struct gdb_symtab
*stab
)
452 /* Right now nothing needs to be done here. We may need to do some
453 cleanup here in the future (again, without breaking the plugin
457 /* Transform STAB to a proper symtab, and add it it OBJFILE. */
460 finalize_symtab (struct gdb_symtab
*stab
, struct objfile
*objfile
)
462 struct compunit_symtab
*cust
;
463 size_t blockvector_size
;
464 CORE_ADDR begin
, end
;
465 struct blockvector
*bv
;
467 int actual_nblocks
= FIRST_LOCAL_BLOCK
+ stab
->nblocks
;
469 /* Sort the blocks in the order they should appear in the blockvector. */
470 stab
->blocks
.sort([] (const gdb_block
&a
, const gdb_block
&b
)
472 if (a
.begin
!= b
.begin
)
473 return a
.begin
< b
.begin
;
475 return a
.end
> b
.end
;
478 cust
= allocate_compunit_symtab (objfile
, stab
->file_name
.c_str ());
479 allocate_symtab (cust
, stab
->file_name
.c_str ());
480 add_compunit_symtab_to_objfile (cust
);
482 /* JIT compilers compile in memory. */
483 COMPUNIT_DIRNAME (cust
) = NULL
;
485 /* Copy over the linetable entry if one was provided. */
488 size_t size
= ((stab
->linetable
->nitems
- 1)
489 * sizeof (struct linetable_entry
)
490 + sizeof (struct linetable
));
491 SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust
))
492 = (struct linetable
*) obstack_alloc (&objfile
->objfile_obstack
, size
);
493 memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust
)),
494 stab
->linetable
.get (), size
);
497 blockvector_size
= (sizeof (struct blockvector
)
498 + (actual_nblocks
- 1) * sizeof (struct block
*));
499 bv
= (struct blockvector
*) obstack_alloc (&objfile
->objfile_obstack
,
501 COMPUNIT_BLOCKVECTOR (cust
) = bv
;
503 /* At the end of this function, (begin, end) will contain the PC range this
504 entire blockvector spans. */
505 BLOCKVECTOR_MAP (bv
) = NULL
;
506 begin
= stab
->blocks
.front ().begin
;
507 end
= stab
->blocks
.front ().end
;
508 BLOCKVECTOR_NBLOCKS (bv
) = actual_nblocks
;
510 /* First run over all the gdb_block objects, creating a real block
511 object for each. Simultaneously, keep setting the real_block
513 int block_idx
= FIRST_LOCAL_BLOCK
;
514 for (gdb_block
&gdb_block_iter
: stab
->blocks
)
516 struct block
*new_block
= allocate_block (&objfile
->objfile_obstack
);
517 struct symbol
*block_name
= new (&objfile
->objfile_obstack
) symbol
;
518 struct type
*block_type
= arch_type (objfile
->arch (),
523 BLOCK_MULTIDICT (new_block
)
524 = mdict_create_linear (&objfile
->objfile_obstack
, NULL
);
525 /* The address range. */
526 BLOCK_START (new_block
) = (CORE_ADDR
) gdb_block_iter
.begin
;
527 BLOCK_END (new_block
) = (CORE_ADDR
) gdb_block_iter
.end
;
530 SYMBOL_DOMAIN (block_name
) = VAR_DOMAIN
;
531 SYMBOL_ACLASS_INDEX (block_name
) = LOC_BLOCK
;
532 symbol_set_symtab (block_name
, COMPUNIT_FILETABS (cust
));
533 SYMBOL_TYPE (block_name
) = lookup_function_type (block_type
);
534 SYMBOL_BLOCK_VALUE (block_name
) = new_block
;
536 block_name
->m_name
= obstack_strdup (&objfile
->objfile_obstack
,
537 gdb_block_iter
.name
.get ());
539 BLOCK_FUNCTION (new_block
) = block_name
;
541 BLOCKVECTOR_BLOCK (bv
, block_idx
) = new_block
;
542 if (begin
> BLOCK_START (new_block
))
543 begin
= BLOCK_START (new_block
);
544 if (end
< BLOCK_END (new_block
))
545 end
= BLOCK_END (new_block
);
547 gdb_block_iter
.real_block
= new_block
;
552 /* Now add the special blocks. */
553 struct block
*block_iter
= NULL
;
554 for (enum block_enum i
: { GLOBAL_BLOCK
, STATIC_BLOCK
})
556 struct block
*new_block
;
558 new_block
= (i
== GLOBAL_BLOCK
559 ? allocate_global_block (&objfile
->objfile_obstack
)
560 : allocate_block (&objfile
->objfile_obstack
));
561 BLOCK_MULTIDICT (new_block
)
562 = mdict_create_linear (&objfile
->objfile_obstack
, NULL
);
563 BLOCK_SUPERBLOCK (new_block
) = block_iter
;
564 block_iter
= new_block
;
566 BLOCK_START (new_block
) = (CORE_ADDR
) begin
;
567 BLOCK_END (new_block
) = (CORE_ADDR
) end
;
569 BLOCKVECTOR_BLOCK (bv
, i
) = new_block
;
571 if (i
== GLOBAL_BLOCK
)
572 set_block_compunit_symtab (new_block
, cust
);
575 /* Fill up the superblock fields for the real blocks, using the
576 real_block fields populated earlier. */
577 for (gdb_block
&gdb_block_iter
: stab
->blocks
)
579 if (gdb_block_iter
.parent
!= NULL
)
581 /* If the plugin specifically mentioned a parent block, we
583 BLOCK_SUPERBLOCK (gdb_block_iter
.real_block
) =
584 gdb_block_iter
.parent
->real_block
;
588 /* And if not, we set a default parent block. */
589 BLOCK_SUPERBLOCK (gdb_block_iter
.real_block
) =
590 BLOCKVECTOR_BLOCK (bv
, STATIC_BLOCK
);
595 /* Called when closing a gdb_objfile. Converts OBJ to a proper
599 jit_object_close_impl (struct gdb_symbol_callbacks
*cb
,
600 struct gdb_object
*obj
)
602 struct objfile
*objfile
;
603 jit_dbg_reader_data
*priv_data
;
605 priv_data
= (jit_dbg_reader_data
*) cb
->priv_data
;
607 objfile
= objfile::make (nullptr, "<< JIT compiled code >>",
609 objfile
->per_bfd
->gdbarch
= target_gdbarch ();
611 for (gdb_symtab
&symtab
: obj
->symtabs
)
612 finalize_symtab (&symtab
, objfile
);
614 add_objfile_entry (objfile
, *priv_data
);
619 /* Try to read CODE_ENTRY using the loaded jit reader (if any).
620 ENTRY_ADDR is the address of the struct jit_code_entry in the
621 inferior address space. */
624 jit_reader_try_read_symtab (struct jit_code_entry
*code_entry
,
625 CORE_ADDR entry_addr
)
628 jit_dbg_reader_data priv_data
;
629 struct gdb_reader_funcs
*funcs
;
630 struct gdb_symbol_callbacks callbacks
=
632 jit_object_open_impl
,
633 jit_symtab_open_impl
,
635 jit_symtab_close_impl
,
636 jit_object_close_impl
,
638 jit_symtab_line_mapping_add_impl
,
639 jit_target_read_impl
,
644 priv_data
= entry_addr
;
646 if (!loaded_jit_reader
)
649 gdb::byte_vector
gdb_mem (code_entry
->symfile_size
);
654 if (target_read_memory (code_entry
->symfile_addr
, gdb_mem
.data (),
655 code_entry
->symfile_size
))
658 catch (const gdb_exception
&e
)
665 funcs
= loaded_jit_reader
->functions
;
666 if (funcs
->read (funcs
, &callbacks
, gdb_mem
.data (),
667 code_entry
->symfile_size
)
673 jit_debug_printf ("Could not read symtab using the loaded JIT reader.");
678 /* Try to read CODE_ENTRY using BFD. ENTRY_ADDR is the address of the
679 struct jit_code_entry in the inferior address space. */
682 jit_bfd_try_read_symtab (struct jit_code_entry
*code_entry
,
683 CORE_ADDR entry_addr
,
684 struct gdbarch
*gdbarch
)
686 struct bfd_section
*sec
;
687 struct objfile
*objfile
;
688 const struct bfd_arch_info
*b
;
690 jit_debug_printf ("symfile_addr = %s, symfile_size = %s",
691 paddress (gdbarch
, code_entry
->symfile_addr
),
692 pulongest (code_entry
->symfile_size
));
694 gdb_bfd_ref_ptr
nbfd (gdb_bfd_open_from_target_memory
695 (code_entry
->symfile_addr
, code_entry
->symfile_size
, gnutarget
));
698 puts_unfiltered (_("Error opening JITed symbol file, ignoring it.\n"));
702 /* Check the format. NOTE: This initializes important data that GDB uses!
703 We would segfault later without this line. */
704 if (!bfd_check_format (nbfd
.get (), bfd_object
))
706 printf_unfiltered (_("\
707 JITed symbol file is not an object file, ignoring it.\n"));
711 /* Check bfd arch. */
712 b
= gdbarch_bfd_arch_info (gdbarch
);
713 if (b
->compatible (b
, bfd_get_arch_info (nbfd
.get ())) != b
)
714 warning (_("JITed object file architecture %s is not compatible "
715 "with target architecture %s."),
716 bfd_get_arch_info (nbfd
.get ())->printable_name
,
719 /* Read the section address information out of the symbol file. Since the
720 file is generated by the JIT at runtime, it should all of the absolute
721 addresses that we care about. */
722 section_addr_info sai
;
723 for (sec
= nbfd
->sections
; sec
!= NULL
; sec
= sec
->next
)
724 if ((bfd_section_flags (sec
) & (SEC_ALLOC
|SEC_LOAD
)) != 0)
726 /* We assume that these virtual addresses are absolute, and do not
727 treat them as offsets. */
728 sai
.emplace_back (bfd_section_vma (sec
),
729 bfd_section_name (sec
),
733 /* This call does not take ownership of SAI. */
734 objfile
= symbol_file_add_from_bfd (nbfd
.get (),
735 bfd_get_filename (nbfd
.get ()), 0,
737 OBJF_SHARED
| OBJF_NOT_FILENAME
, NULL
);
739 add_objfile_entry (objfile
, entry_addr
);
742 /* This function registers code associated with a JIT code entry. It uses the
743 pointer and size pair in the entry to read the symbol file from the remote
744 and then calls symbol_file_add_from_local_memory to add it as though it were
745 a symbol file added by the user. */
748 jit_register_code (struct gdbarch
*gdbarch
,
749 CORE_ADDR entry_addr
, struct jit_code_entry
*code_entry
)
753 jit_debug_printf ("symfile_addr = %s, symfile_size = %s",
754 paddress (gdbarch
, code_entry
->symfile_addr
),
755 pulongest (code_entry
->symfile_size
));
757 success
= jit_reader_try_read_symtab (code_entry
, entry_addr
);
760 jit_bfd_try_read_symtab (code_entry
, entry_addr
, gdbarch
);
763 /* Look up the objfile with this code entry address. */
765 static struct objfile
*
766 jit_find_objf_with_entry_addr (CORE_ADDR entry_addr
)
768 for (objfile
*objf
: current_program_space
->objfiles ())
770 if (objf
->jited_data
!= nullptr && objf
->jited_data
->addr
== entry_addr
)
777 /* This is called when a breakpoint is deleted. It updates the
778 inferior's cache, if needed. */
781 jit_breakpoint_deleted (struct breakpoint
*b
)
783 if (b
->type
!= bp_jit_event
)
786 for (bp_location
*iter
= b
->loc
; iter
!= nullptr; iter
= iter
->next
)
788 for (objfile
*objf
: iter
->pspace
->objfiles ())
790 jiter_objfile_data
*jiter_data
= objf
->jiter_data
.get ();
792 if (jiter_data
!= nullptr
793 && jiter_data
->jit_breakpoint
== iter
->owner
)
795 jiter_data
->cached_code_address
= 0;
796 jiter_data
->jit_breakpoint
= nullptr;
802 /* (Re-)Initialize the jit breakpoints for JIT-producing objfiles in
806 jit_breakpoint_re_set_internal (struct gdbarch
*gdbarch
, program_space
*pspace
)
808 for (objfile
*the_objfile
: pspace
->objfiles ())
810 if (the_objfile
->skip_jit_symbol_lookup
)
813 /* Lookup the registration symbol. If it is missing, then we
814 assume we are not attached to a JIT. */
815 bound_minimal_symbol reg_symbol
816 = lookup_minimal_symbol (jit_break_name
, nullptr, the_objfile
);
817 if (reg_symbol
.minsym
== NULL
818 || BMSYMBOL_VALUE_ADDRESS (reg_symbol
) == 0)
820 /* No need to repeat the lookup the next time. */
821 the_objfile
->skip_jit_symbol_lookup
= true;
825 bound_minimal_symbol desc_symbol
826 = lookup_minimal_symbol (jit_descriptor_name
, NULL
, the_objfile
);
827 if (desc_symbol
.minsym
== NULL
828 || BMSYMBOL_VALUE_ADDRESS (desc_symbol
) == 0)
830 /* No need to repeat the lookup the next time. */
831 the_objfile
->skip_jit_symbol_lookup
= true;
835 jiter_objfile_data
*objf_data
836 = get_jiter_objfile_data (reg_symbol
.objfile
);
837 objf_data
->register_code
= reg_symbol
.minsym
;
838 objf_data
->descriptor
= desc_symbol
.minsym
;
840 CORE_ADDR addr
= MSYMBOL_VALUE_ADDRESS (the_objfile
,
841 objf_data
->register_code
);
843 jit_debug_printf ("breakpoint_addr = %s", paddress (gdbarch
, addr
));
845 /* Check if we need to re-create the breakpoint. */
846 if (objf_data
->cached_code_address
== addr
)
849 /* Delete the old breakpoint. */
850 if (objf_data
->jit_breakpoint
!= nullptr)
851 delete_breakpoint (objf_data
->jit_breakpoint
);
853 /* Put a breakpoint in the registration symbol. */
854 objf_data
->cached_code_address
= addr
;
855 objf_data
->jit_breakpoint
= create_jit_event_breakpoint (gdbarch
, addr
);
859 /* The private data passed around in the frame unwind callback
862 struct jit_unwind_private
864 /* Cached register values. See jit_frame_sniffer to see how this
866 detached_regcache
*regcache
;
868 /* The frame being unwound. */
869 struct frame_info
*this_frame
;
872 /* Sets the value of a particular register in this frame. */
875 jit_unwind_reg_set_impl (struct gdb_unwind_callbacks
*cb
, int dwarf_regnum
,
876 struct gdb_reg_value
*value
)
878 struct jit_unwind_private
*priv
;
881 priv
= (struct jit_unwind_private
*) cb
->priv_data
;
883 gdb_reg
= gdbarch_dwarf2_reg_to_regnum (get_frame_arch (priv
->this_frame
),
887 jit_debug_printf ("Could not recognize DWARF regnum %d", dwarf_regnum
);
892 priv
->regcache
->raw_supply (gdb_reg
, value
->value
);
897 reg_value_free_impl (struct gdb_reg_value
*value
)
902 /* Get the value of register REGNUM in the previous frame. */
904 static struct gdb_reg_value
*
905 jit_unwind_reg_get_impl (struct gdb_unwind_callbacks
*cb
, int regnum
)
907 struct jit_unwind_private
*priv
;
908 struct gdb_reg_value
*value
;
910 struct gdbarch
*frame_arch
;
912 priv
= (struct jit_unwind_private
*) cb
->priv_data
;
913 frame_arch
= get_frame_arch (priv
->this_frame
);
915 gdb_reg
= gdbarch_dwarf2_reg_to_regnum (frame_arch
, regnum
);
916 size
= register_size (frame_arch
, gdb_reg
);
917 value
= ((struct gdb_reg_value
*)
918 xmalloc (sizeof (struct gdb_reg_value
) + size
- 1));
919 value
->defined
= deprecated_frame_register_read (priv
->this_frame
, gdb_reg
,
922 value
->free
= reg_value_free_impl
;
926 /* gdb_reg_value has a free function, which must be called on each
927 saved register value. */
930 jit_dealloc_cache (struct frame_info
*this_frame
, void *cache
)
932 struct jit_unwind_private
*priv_data
= (struct jit_unwind_private
*) cache
;
934 gdb_assert (priv_data
->regcache
!= NULL
);
935 delete priv_data
->regcache
;
939 /* The frame sniffer for the pseudo unwinder.
941 While this is nominally a frame sniffer, in the case where the JIT
942 reader actually recognizes the frame, it does a lot more work -- it
943 unwinds the frame and saves the corresponding register values in
944 the cache. jit_frame_prev_register simply returns the saved
948 jit_frame_sniffer (const struct frame_unwind
*self
,
949 struct frame_info
*this_frame
, void **cache
)
951 struct jit_unwind_private
*priv_data
;
952 struct gdb_unwind_callbacks callbacks
;
953 struct gdb_reader_funcs
*funcs
;
955 callbacks
.reg_get
= jit_unwind_reg_get_impl
;
956 callbacks
.reg_set
= jit_unwind_reg_set_impl
;
957 callbacks
.target_read
= jit_target_read_impl
;
959 if (loaded_jit_reader
== NULL
)
962 funcs
= loaded_jit_reader
->functions
;
964 gdb_assert (!*cache
);
966 *cache
= XCNEW (struct jit_unwind_private
);
967 priv_data
= (struct jit_unwind_private
*) *cache
;
968 /* Take a snapshot of current regcache. */
969 priv_data
->regcache
= new detached_regcache (get_frame_arch (this_frame
),
971 priv_data
->this_frame
= this_frame
;
973 callbacks
.priv_data
= priv_data
;
975 /* Try to coax the provided unwinder to unwind the stack */
976 if (funcs
->unwind (funcs
, &callbacks
) == GDB_SUCCESS
)
978 jit_debug_printf ("Successfully unwound frame using JIT reader.");
982 jit_debug_printf ("Could not unwind frame using JIT reader.");
984 jit_dealloc_cache (this_frame
, *cache
);
991 /* The frame_id function for the pseudo unwinder. Relays the call to
992 the loaded plugin. */
995 jit_frame_this_id (struct frame_info
*this_frame
, void **cache
,
996 struct frame_id
*this_id
)
998 struct jit_unwind_private priv
;
999 struct gdb_frame_id frame_id
;
1000 struct gdb_reader_funcs
*funcs
;
1001 struct gdb_unwind_callbacks callbacks
;
1003 priv
.regcache
= NULL
;
1004 priv
.this_frame
= this_frame
;
1006 /* We don't expect the frame_id function to set any registers, so we
1007 set reg_set to NULL. */
1008 callbacks
.reg_get
= jit_unwind_reg_get_impl
;
1009 callbacks
.reg_set
= NULL
;
1010 callbacks
.target_read
= jit_target_read_impl
;
1011 callbacks
.priv_data
= &priv
;
1013 gdb_assert (loaded_jit_reader
);
1014 funcs
= loaded_jit_reader
->functions
;
1016 frame_id
= funcs
->get_frame_id (funcs
, &callbacks
);
1017 *this_id
= frame_id_build (frame_id
.stack_address
, frame_id
.code_address
);
1020 /* Pseudo unwinder function. Reads the previously fetched value for
1021 the register from the cache. */
1023 static struct value
*
1024 jit_frame_prev_register (struct frame_info
*this_frame
, void **cache
, int reg
)
1026 struct jit_unwind_private
*priv
= (struct jit_unwind_private
*) *cache
;
1027 struct gdbarch
*gdbarch
;
1030 return frame_unwind_got_optimized (this_frame
, reg
);
1032 gdbarch
= priv
->regcache
->arch ();
1033 gdb_byte
*buf
= (gdb_byte
*) alloca (register_size (gdbarch
, reg
));
1034 enum register_status status
= priv
->regcache
->cooked_read (reg
, buf
);
1036 if (status
== REG_VALID
)
1037 return frame_unwind_got_bytes (this_frame
, reg
, buf
);
1039 return frame_unwind_got_optimized (this_frame
, reg
);
1042 /* Relay everything back to the unwinder registered by the JIT debug
1045 static const struct frame_unwind jit_frame_unwind
=
1048 default_frame_unwind_stop_reason
,
1050 jit_frame_prev_register
,
1057 /* This is the information that is stored at jit_gdbarch_data for each
1060 struct jit_gdbarch_data_type
1062 /* Has the (pseudo) unwinder been prepended? */
1063 int unwinder_registered
;
1066 /* Check GDBARCH and prepend the pseudo JIT unwinder if needed. */
1069 jit_prepend_unwinder (struct gdbarch
*gdbarch
)
1071 struct jit_gdbarch_data_type
*data
;
1074 = (struct jit_gdbarch_data_type
*) gdbarch_data (gdbarch
, jit_gdbarch_data
);
1075 if (!data
->unwinder_registered
)
1077 frame_unwind_prepend_unwinder (gdbarch
, &jit_frame_unwind
);
1078 data
->unwinder_registered
= 1;
1082 /* Register any already created translations. */
1085 jit_inferior_init (inferior
*inf
)
1087 struct jit_descriptor descriptor
;
1088 struct jit_code_entry cur_entry
;
1089 CORE_ADDR cur_entry_addr
;
1090 struct gdbarch
*gdbarch
= inf
->gdbarch
;
1091 program_space
*pspace
= inf
->pspace
;
1093 jit_debug_printf ("called");
1095 jit_prepend_unwinder (gdbarch
);
1097 jit_breakpoint_re_set_internal (gdbarch
, pspace
);
1099 for (objfile
*jiter
: pspace
->objfiles ())
1101 if (jiter
->jiter_data
== nullptr)
1104 /* Read the descriptor so we can check the version number and load
1105 any already JITed functions. */
1106 if (!jit_read_descriptor (gdbarch
, &descriptor
, jiter
))
1109 /* Check that the version number agrees with that we support. */
1110 if (descriptor
.version
!= 1)
1112 printf_unfiltered (_("Unsupported JIT protocol version %ld "
1113 "in descriptor (expected 1)\n"),
1114 (long) descriptor
.version
);
1118 /* If we've attached to a running program, we need to check the
1119 descriptor to register any functions that were already
1121 for (cur_entry_addr
= descriptor
.first_entry
;
1122 cur_entry_addr
!= 0;
1123 cur_entry_addr
= cur_entry
.next_entry
)
1125 jit_read_code_entry (gdbarch
, cur_entry_addr
, &cur_entry
);
1127 /* This hook may be called many times during setup, so make sure
1128 we don't add the same symbol file twice. */
1129 if (jit_find_objf_with_entry_addr (cur_entry_addr
) != NULL
)
1132 jit_register_code (gdbarch
, cur_entry_addr
, &cur_entry
);
1137 /* Looks for the descriptor and registration symbols and breakpoints
1138 the registration function. If it finds both, it registers all the
1139 already JITed code. If it has already found the symbols, then it
1140 doesn't try again. */
1143 jit_inferior_created_hook (inferior
*inf
)
1145 jit_inferior_init (inf
);
1148 /* Exported routine to call to re-set the jit breakpoints,
1149 e.g. when a program is rerun. */
1152 jit_breakpoint_re_set (void)
1154 jit_breakpoint_re_set_internal (target_gdbarch (), current_program_space
);
1157 /* This function cleans up any code entries left over when the
1158 inferior exits. We get left over code when the inferior exits
1159 without unregistering its code, for example when it crashes. */
1162 jit_inferior_exit_hook (struct inferior
*inf
)
1164 for (objfile
*objf
: current_program_space
->objfiles_safe ())
1166 if (objf
->jited_data
!= nullptr && objf
->jited_data
->addr
!= 0)
1172 jit_event_handler (gdbarch
*gdbarch
, objfile
*jiter
)
1174 struct jit_descriptor descriptor
;
1176 /* If we get a JIT breakpoint event for this objfile, it is necessarily a
1178 gdb_assert (jiter
->jiter_data
!= nullptr);
1180 /* Read the descriptor from remote memory. */
1181 if (!jit_read_descriptor (gdbarch
, &descriptor
, jiter
))
1183 CORE_ADDR entry_addr
= descriptor
.relevant_entry
;
1185 /* Do the corresponding action. */
1186 switch (descriptor
.action_flag
)
1193 jit_code_entry code_entry
;
1194 jit_read_code_entry (gdbarch
, entry_addr
, &code_entry
);
1195 jit_register_code (gdbarch
, entry_addr
, &code_entry
);
1199 case JIT_UNREGISTER
:
1201 objfile
*jited
= jit_find_objf_with_entry_addr (entry_addr
);
1202 if (jited
== nullptr)
1203 printf_unfiltered (_("Unable to find JITed code "
1204 "entry at address: %s\n"),
1205 paddress (gdbarch
, entry_addr
));
1213 error (_("Unknown action_flag value in JIT descriptor!"));
1218 /* Initialize the jit_gdbarch_data slot with an instance of struct
1219 jit_gdbarch_data_type */
1222 jit_gdbarch_data_init (struct obstack
*obstack
)
1224 struct jit_gdbarch_data_type
*data
=
1225 XOBNEW (obstack
, struct jit_gdbarch_data_type
);
1227 data
->unwinder_registered
= 0;
1232 void _initialize_jit ();
1236 jit_reader_dir
= relocate_gdb_directory (JIT_READER_DIR
,
1237 JIT_READER_DIR_RELOCATABLE
);
1238 add_setshow_boolean_cmd ("jit", class_maintenance
, &jit_debug
,
1239 _("Set JIT debugging."),
1240 _("Show JIT debugging."),
1241 _("When set, JIT debugging is enabled."),
1244 &setdebuglist
, &showdebuglist
);
1246 gdb::observers::inferior_created
.attach (jit_inferior_created_hook
, "jit");
1247 gdb::observers::inferior_execd
.attach (jit_inferior_created_hook
, "jit");
1248 gdb::observers::inferior_exit
.attach (jit_inferior_exit_hook
, "jit");
1249 gdb::observers::breakpoint_deleted
.attach (jit_breakpoint_deleted
, "jit");
1251 jit_gdbarch_data
= gdbarch_data_register_pre_init (jit_gdbarch_data_init
);
1252 if (is_dl_available ())
1254 struct cmd_list_element
*c
;
1256 c
= add_com ("jit-reader-load", no_class
, jit_reader_load_command
, _("\
1257 Load FILE as debug info reader and unwinder for JIT compiled code.\n\
1258 Usage: jit-reader-load FILE\n\
1259 Try to load file FILE as a debug info reader (and unwinder) for\n\
1260 JIT compiled code. The file is loaded from " JIT_READER_DIR
",\n\
1261 relocated relative to the GDB executable if required."));
1262 set_cmd_completer (c
, filename_completer
);
1264 c
= add_com ("jit-reader-unload", no_class
,
1265 jit_reader_unload_command
, _("\
1266 Unload the currently loaded JIT debug info reader.\n\
1267 Usage: jit-reader-unload\n\n\
1268 Do \"help jit-reader-load\" for info on loading debug info readers."));
1269 set_cmd_completer (c
, noop_completer
);