Automatic date update in version.in
[deliverable/binutils-gdb.git] / gdb / jit.c
1 /* Handle JIT code generation in the inferior for GDB, the GNU Debugger.
2
3 Copyright (C) 2009-2021 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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.
11
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.
16
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/>. */
19
20 #include "defs.h"
21
22 #include "jit.h"
23 #include "jit-reader.h"
24 #include "block.h"
25 #include "breakpoint.h"
26 #include "command.h"
27 #include "dictionary.h"
28 #include "filenames.h"
29 #include "frame-unwind.h"
30 #include "gdbcmd.h"
31 #include "gdbcore.h"
32 #include "inferior.h"
33 #include "observable.h"
34 #include "objfiles.h"
35 #include "regcache.h"
36 #include "symfile.h"
37 #include "symtab.h"
38 #include "target.h"
39 #include "gdbsupport/gdb-dlfcn.h"
40 #include <sys/stat.h>
41 #include "gdb_bfd.h"
42 #include "readline/tilde.h"
43 #include "completer.h"
44 #include <forward_list>
45
46 static std::string jit_reader_dir;
47
48 static const char jit_break_name[] = "__jit_debug_register_code";
49
50 static const char jit_descriptor_name[] = "__jit_debug_descriptor";
51
52 static void jit_inferior_created_hook (inferior *inf);
53 static void jit_inferior_exit_hook (struct inferior *inf);
54
55 /* An unwinder is registered for every gdbarch. This key is used to
56 remember if the unwinder has been registered for a particular
57 gdbarch. */
58
59 static struct gdbarch_data *jit_gdbarch_data;
60
61 /* True if we want to see trace of jit level stuff. */
62
63 static bool jit_debug = false;
64
65 /* Print a "jit" debug statement. */
66
67 #define jit_debug_printf(fmt, ...) \
68 debug_prefixed_printf_cond (jit_debug, "jit", fmt, ##__VA_ARGS__)
69
70 static void
71 show_jit_debug (struct ui_file *file, int from_tty,
72 struct cmd_list_element *c, const char *value)
73 {
74 fprintf_filtered (file, _("JIT debugging is %s.\n"), value);
75 }
76
77 struct jit_reader
78 {
79 jit_reader (struct gdb_reader_funcs *f, gdb_dlhandle_up &&h)
80 : functions (f), handle (std::move (h))
81 {
82 }
83
84 ~jit_reader ()
85 {
86 functions->destroy (functions);
87 }
88
89 DISABLE_COPY_AND_ASSIGN (jit_reader);
90
91 struct gdb_reader_funcs *functions;
92 gdb_dlhandle_up handle;
93 };
94
95 /* One reader that has been loaded successfully, and can potentially be used to
96 parse debug info. */
97
98 static struct jit_reader *loaded_jit_reader = NULL;
99
100 typedef struct gdb_reader_funcs * (reader_init_fn_type) (void);
101 static const char reader_init_fn_sym[] = "gdb_init_reader";
102
103 /* Try to load FILE_NAME as a JIT debug info reader. */
104
105 static struct jit_reader *
106 jit_reader_load (const char *file_name)
107 {
108 reader_init_fn_type *init_fn;
109 struct gdb_reader_funcs *funcs = NULL;
110
111 jit_debug_printf ("Opening shared object %s", file_name);
112
113 gdb_dlhandle_up so = gdb_dlopen (file_name);
114
115 init_fn = (reader_init_fn_type *) gdb_dlsym (so, reader_init_fn_sym);
116 if (!init_fn)
117 error (_("Could not locate initialization function: %s."),
118 reader_init_fn_sym);
119
120 if (gdb_dlsym (so, "plugin_is_GPL_compatible") == NULL)
121 error (_("Reader not GPL compatible."));
122
123 funcs = init_fn ();
124 if (funcs->reader_version != GDB_READER_INTERFACE_VERSION)
125 error (_("Reader version does not match GDB version."));
126
127 return new jit_reader (funcs, std::move (so));
128 }
129
130 /* Provides the jit-reader-load command. */
131
132 static void
133 jit_reader_load_command (const char *args, int from_tty)
134 {
135 if (args == NULL)
136 error (_("No reader name provided."));
137 gdb::unique_xmalloc_ptr<char> file (tilde_expand (args));
138
139 if (loaded_jit_reader != NULL)
140 error (_("JIT reader already loaded. Run jit-reader-unload first."));
141
142 if (!IS_ABSOLUTE_PATH (file.get ()))
143 file.reset (xstrprintf ("%s%s%s", jit_reader_dir.c_str (), SLASH_STRING,
144 file.get ()));
145
146 loaded_jit_reader = jit_reader_load (file.get ());
147 reinit_frame_cache ();
148 jit_inferior_created_hook (current_inferior ());
149 }
150
151 /* Provides the jit-reader-unload command. */
152
153 static void
154 jit_reader_unload_command (const char *args, int from_tty)
155 {
156 if (!loaded_jit_reader)
157 error (_("No JIT reader loaded."));
158
159 reinit_frame_cache ();
160 jit_inferior_exit_hook (current_inferior ());
161
162 delete loaded_jit_reader;
163 loaded_jit_reader = NULL;
164 }
165
166 /* Destructor for jiter_objfile_data. */
167
168 jiter_objfile_data::~jiter_objfile_data ()
169 {
170 if (this->jit_breakpoint != nullptr)
171 delete_breakpoint (this->jit_breakpoint);
172 }
173
174 /* Fetch the jiter_objfile_data associated with OBJF. If no data exists
175 yet, make a new structure and attach it. */
176
177 static jiter_objfile_data *
178 get_jiter_objfile_data (objfile *objf)
179 {
180 if (objf->jiter_data == nullptr)
181 objf->jiter_data.reset (new jiter_objfile_data ());
182
183 return objf->jiter_data.get ();
184 }
185
186 /* Remember OBJFILE has been created for struct jit_code_entry located
187 at inferior address ENTRY. */
188
189 static void
190 add_objfile_entry (struct objfile *objfile, CORE_ADDR entry)
191 {
192 gdb_assert (objfile->jited_data == nullptr);
193
194 objfile->jited_data.reset (new jited_objfile_data (entry));
195 }
196
197 /* Helper function for reading the global JIT descriptor from remote
198 memory. Returns true if all went well, false otherwise. */
199
200 static bool
201 jit_read_descriptor (gdbarch *gdbarch,
202 jit_descriptor *descriptor,
203 objfile *jiter)
204 {
205 int err;
206 struct type *ptr_type;
207 int ptr_size;
208 int desc_size;
209 gdb_byte *desc_buf;
210 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
211
212 gdb_assert (jiter != nullptr);
213 jiter_objfile_data *objf_data = jiter->jiter_data.get ();
214 gdb_assert (objf_data != nullptr);
215
216 CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (jiter, objf_data->descriptor);
217
218 jit_debug_printf ("descriptor_addr = %s", paddress (gdbarch, addr));
219
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);
225
226 /* Read the descriptor. */
227 err = target_read_memory (addr, desc_buf, desc_size);
228 if (err)
229 {
230 printf_unfiltered (_("Unable to read JIT descriptor from "
231 "remote memory\n"));
232 return false;
233 }
234
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);
242
243 return true;
244 }
245
246 /* Helper function for reading a JITed code entry from remote memory. */
247
248 static void
249 jit_read_code_entry (struct gdbarch *gdbarch,
250 CORE_ADDR code_addr, struct jit_code_entry *code_entry)
251 {
252 int err, off;
253 struct type *ptr_type;
254 int ptr_size;
255 int entry_size;
256 int align_bytes;
257 gdb_byte *entry_buf;
258 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
259
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);
263
264 /* Figure out where the uint64_t value will be. */
265 align_bytes = type_align (builtin_type (gdbarch)->builtin_uint64);
266 off = 3 * ptr_size;
267 off = (off + (align_bytes - 1)) & ~(align_bytes - 1);
268
269 entry_size = off + 8; /* Three pointers and one 64-bit int. */
270 entry_buf = (gdb_byte *) alloca (entry_size);
271
272 /* Read the entry. */
273 err = target_read_memory (code_addr, entry_buf, entry_size);
274 if (err)
275 error (_("Unable to read JIT code entry from remote memory!"));
276
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);
286 }
287
288 /* Proxy object for building a block. */
289
290 struct gdb_block
291 {
292 gdb_block (gdb_block *parent, CORE_ADDR begin, CORE_ADDR end,
293 const char *name)
294 : parent (parent),
295 begin (begin),
296 end (end),
297 name (name != nullptr ? xstrdup (name) : nullptr)
298 {}
299
300 /* The parent of this block. */
301 struct gdb_block *parent;
302
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;
307
308 /* The first and last code address corresponding to this block. */
309 CORE_ADDR begin, end;
310
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;
314 };
315
316 /* Proxy object for building a symtab. */
317
318 struct gdb_symtab
319 {
320 explicit gdb_symtab (const char *file_name)
321 : file_name (file_name != nullptr ? file_name : "")
322 {}
323
324 /* The list of blocks in this symtab. These will eventually be
325 converted to real blocks.
326
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;
332
333 /* The number of blocks inserted. */
334 int nblocks = 0;
335
336 /* A mapping between line numbers to PC. */
337 gdb::unique_xmalloc_ptr<struct linetable> linetable;
338
339 /* The source file for this symtab. */
340 std::string file_name;
341 };
342
343 /* Proxy object for building an object. */
344
345 struct gdb_object
346 {
347 /* Symtabs of this object.
348
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;
354 };
355
356 /* The type of the `private' data passed around by the callback
357 functions. */
358
359 typedef CORE_ADDR jit_dbg_reader_data;
360
361 /* The reader calls into this function to read data off the targets
362 address space. */
363
364 static enum gdb_status
365 jit_target_read_impl (GDB_CORE_ADDR target_mem, void *gdb_buf, int len)
366 {
367 int result = target_read_memory ((CORE_ADDR) target_mem,
368 (gdb_byte *) gdb_buf, len);
369 if (result == 0)
370 return GDB_SUCCESS;
371 else
372 return GDB_FAIL;
373 }
374
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. */
378
379 static struct gdb_object *
380 jit_object_open_impl (struct gdb_symbol_callbacks *cb)
381 {
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
384 the ABI. */
385 return new gdb_object;
386 }
387
388 /* Readers call into this function to open a new gdb_symtab, which,
389 again, is passed around to other callbacks. */
390
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)
395 {
396 /* CB stays unused. See comment in jit_object_open_impl. */
397
398 object->symtabs.emplace_front (file_name);
399 return &object->symtabs.front ();
400 }
401
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
404 gdb_symtab. */
405
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)
410 {
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);
414 symtab->nblocks++;
415
416 return &symtab->blocks.front ();
417 }
418
419 /* Readers call this to add a line mapping (from PC to line number) to
420 a gdb_symtab. */
421
422 static void
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)
426 {
427 int i;
428 int alloc_len;
429
430 if (nlines < 1)
431 return;
432
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++)
438 {
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;
442 }
443 }
444
445 /* Called by readers to close a gdb_symtab. Does not need to do
446 anything as of now. */
447
448 static void
449 jit_symtab_close_impl (struct gdb_symbol_callbacks *cb,
450 struct gdb_symtab *stab)
451 {
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
454 ABI). */
455 }
456
457 /* Transform STAB to a proper symtab, and add it it OBJFILE. */
458
459 static void
460 finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
461 {
462 struct compunit_symtab *cust;
463 size_t blockvector_size;
464 CORE_ADDR begin, end;
465 struct blockvector *bv;
466
467 int actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks;
468
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)
471 {
472 if (a.begin != b.begin)
473 return a.begin < b.begin;
474
475 return a.end > b.end;
476 });
477
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);
481
482 /* JIT compilers compile in memory. */
483 COMPUNIT_DIRNAME (cust) = NULL;
484
485 /* Copy over the linetable entry if one was provided. */
486 if (stab->linetable)
487 {
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);
495 }
496
497 blockvector_size = (sizeof (struct blockvector)
498 + (actual_nblocks - 1) * sizeof (struct block *));
499 bv = (struct blockvector *) obstack_alloc (&objfile->objfile_obstack,
500 blockvector_size);
501 COMPUNIT_BLOCKVECTOR (cust) = bv;
502
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;
509
510 /* First run over all the gdb_block objects, creating a real block
511 object for each. Simultaneously, keep setting the real_block
512 fields. */
513 int block_idx = FIRST_LOCAL_BLOCK;
514 for (gdb_block &gdb_block_iter : stab->blocks)
515 {
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 (),
519 TYPE_CODE_VOID,
520 TARGET_CHAR_BIT,
521 "void");
522
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;
528
529 /* The name. */
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;
535
536 block_name->m_name = obstack_strdup (&objfile->objfile_obstack,
537 gdb_block_iter.name.get ());
538
539 BLOCK_FUNCTION (new_block) = block_name;
540
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);
546
547 gdb_block_iter.real_block = new_block;
548
549 block_idx++;
550 }
551
552 /* Now add the special blocks. */
553 struct block *block_iter = NULL;
554 for (enum block_enum i : { GLOBAL_BLOCK, STATIC_BLOCK })
555 {
556 struct block *new_block;
557
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;
565
566 BLOCK_START (new_block) = (CORE_ADDR) begin;
567 BLOCK_END (new_block) = (CORE_ADDR) end;
568
569 BLOCKVECTOR_BLOCK (bv, i) = new_block;
570
571 if (i == GLOBAL_BLOCK)
572 set_block_compunit_symtab (new_block, cust);
573 }
574
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)
578 {
579 if (gdb_block_iter.parent != NULL)
580 {
581 /* If the plugin specifically mentioned a parent block, we
582 use that. */
583 BLOCK_SUPERBLOCK (gdb_block_iter.real_block) =
584 gdb_block_iter.parent->real_block;
585 }
586 else
587 {
588 /* And if not, we set a default parent block. */
589 BLOCK_SUPERBLOCK (gdb_block_iter.real_block) =
590 BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
591 }
592 }
593 }
594
595 /* Called when closing a gdb_objfile. Converts OBJ to a proper
596 objfile. */
597
598 static void
599 jit_object_close_impl (struct gdb_symbol_callbacks *cb,
600 struct gdb_object *obj)
601 {
602 struct objfile *objfile;
603 jit_dbg_reader_data *priv_data;
604
605 priv_data = (jit_dbg_reader_data *) cb->priv_data;
606
607 objfile = objfile::make (nullptr, "<< JIT compiled code >>",
608 OBJF_NOT_FILENAME);
609 objfile->per_bfd->gdbarch = target_gdbarch ();
610
611 for (gdb_symtab &symtab : obj->symtabs)
612 finalize_symtab (&symtab, objfile);
613
614 add_objfile_entry (objfile, *priv_data);
615
616 delete obj;
617 }
618
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. */
622
623 static int
624 jit_reader_try_read_symtab (struct jit_code_entry *code_entry,
625 CORE_ADDR entry_addr)
626 {
627 int status;
628 jit_dbg_reader_data priv_data;
629 struct gdb_reader_funcs *funcs;
630 struct gdb_symbol_callbacks callbacks =
631 {
632 jit_object_open_impl,
633 jit_symtab_open_impl,
634 jit_block_open_impl,
635 jit_symtab_close_impl,
636 jit_object_close_impl,
637
638 jit_symtab_line_mapping_add_impl,
639 jit_target_read_impl,
640
641 &priv_data
642 };
643
644 priv_data = entry_addr;
645
646 if (!loaded_jit_reader)
647 return 0;
648
649 gdb::byte_vector gdb_mem (code_entry->symfile_size);
650
651 status = 1;
652 try
653 {
654 if (target_read_memory (code_entry->symfile_addr, gdb_mem.data (),
655 code_entry->symfile_size))
656 status = 0;
657 }
658 catch (const gdb_exception &e)
659 {
660 status = 0;
661 }
662
663 if (status)
664 {
665 funcs = loaded_jit_reader->functions;
666 if (funcs->read (funcs, &callbacks, gdb_mem.data (),
667 code_entry->symfile_size)
668 != GDB_SUCCESS)
669 status = 0;
670 }
671
672 if (status == 0)
673 jit_debug_printf ("Could not read symtab using the loaded JIT reader.");
674
675 return status;
676 }
677
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. */
680
681 static void
682 jit_bfd_try_read_symtab (struct jit_code_entry *code_entry,
683 CORE_ADDR entry_addr,
684 struct gdbarch *gdbarch)
685 {
686 struct bfd_section *sec;
687 struct objfile *objfile;
688 const struct bfd_arch_info *b;
689
690 jit_debug_printf ("symfile_addr = %s, symfile_size = %s",
691 paddress (gdbarch, code_entry->symfile_addr),
692 pulongest (code_entry->symfile_size));
693
694 gdb_bfd_ref_ptr nbfd (gdb_bfd_open_from_target_memory
695 (code_entry->symfile_addr, code_entry->symfile_size, gnutarget));
696 if (nbfd == NULL)
697 {
698 puts_unfiltered (_("Error opening JITed symbol file, ignoring it.\n"));
699 return;
700 }
701
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))
705 {
706 printf_unfiltered (_("\
707 JITed symbol file is not an object file, ignoring it.\n"));
708 return;
709 }
710
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,
717 b->printable_name);
718
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)
725 {
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),
730 sec->index);
731 }
732
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,
736 &sai,
737 OBJF_SHARED | OBJF_NOT_FILENAME, NULL);
738
739 add_objfile_entry (objfile, entry_addr);
740 }
741
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. */
746
747 static void
748 jit_register_code (struct gdbarch *gdbarch,
749 CORE_ADDR entry_addr, struct jit_code_entry *code_entry)
750 {
751 int success;
752
753 jit_debug_printf ("symfile_addr = %s, symfile_size = %s",
754 paddress (gdbarch, code_entry->symfile_addr),
755 pulongest (code_entry->symfile_size));
756
757 success = jit_reader_try_read_symtab (code_entry, entry_addr);
758
759 if (!success)
760 jit_bfd_try_read_symtab (code_entry, entry_addr, gdbarch);
761 }
762
763 /* Look up the objfile with this code entry address. */
764
765 static struct objfile *
766 jit_find_objf_with_entry_addr (CORE_ADDR entry_addr)
767 {
768 for (objfile *objf : current_program_space->objfiles ())
769 {
770 if (objf->jited_data != nullptr && objf->jited_data->addr == entry_addr)
771 return objf;
772 }
773
774 return NULL;
775 }
776
777 /* This is called when a breakpoint is deleted. It updates the
778 inferior's cache, if needed. */
779
780 static void
781 jit_breakpoint_deleted (struct breakpoint *b)
782 {
783 if (b->type != bp_jit_event)
784 return;
785
786 for (bp_location *iter : b->locations ())
787 {
788 for (objfile *objf : iter->pspace->objfiles ())
789 {
790 jiter_objfile_data *jiter_data = objf->jiter_data.get ();
791
792 if (jiter_data != nullptr
793 && jiter_data->jit_breakpoint == iter->owner)
794 {
795 jiter_data->cached_code_address = 0;
796 jiter_data->jit_breakpoint = nullptr;
797 }
798 }
799 }
800 }
801
802 /* (Re-)Initialize the jit breakpoints for JIT-producing objfiles in
803 PSPACE. */
804
805 static void
806 jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, program_space *pspace)
807 {
808 for (objfile *the_objfile : pspace->objfiles ())
809 {
810 /* Skip separate debug objects. */
811 if (the_objfile->separate_debug_objfile_backlink != nullptr)
812 continue;
813
814 if (the_objfile->skip_jit_symbol_lookup)
815 continue;
816
817 /* Lookup the registration symbol. If it is missing, then we
818 assume we are not attached to a JIT. */
819 bound_minimal_symbol reg_symbol
820 = lookup_minimal_symbol (jit_break_name, nullptr, the_objfile);
821 if (reg_symbol.minsym == NULL
822 || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0)
823 {
824 /* No need to repeat the lookup the next time. */
825 the_objfile->skip_jit_symbol_lookup = true;
826 continue;
827 }
828
829 bound_minimal_symbol desc_symbol
830 = lookup_minimal_symbol (jit_descriptor_name, NULL, the_objfile);
831 if (desc_symbol.minsym == NULL
832 || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0)
833 {
834 /* No need to repeat the lookup the next time. */
835 the_objfile->skip_jit_symbol_lookup = true;
836 continue;
837 }
838
839 jiter_objfile_data *objf_data
840 = get_jiter_objfile_data (the_objfile);
841 objf_data->register_code = reg_symbol.minsym;
842 objf_data->descriptor = desc_symbol.minsym;
843
844 CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (the_objfile,
845 objf_data->register_code);
846
847 jit_debug_printf ("breakpoint_addr = %s", paddress (gdbarch, addr));
848
849 /* Check if we need to re-create the breakpoint. */
850 if (objf_data->cached_code_address == addr)
851 continue;
852
853 /* Delete the old breakpoint. */
854 if (objf_data->jit_breakpoint != nullptr)
855 delete_breakpoint (objf_data->jit_breakpoint);
856
857 /* Put a breakpoint in the registration symbol. */
858 objf_data->cached_code_address = addr;
859 objf_data->jit_breakpoint = create_jit_event_breakpoint (gdbarch, addr);
860 }
861 }
862
863 /* The private data passed around in the frame unwind callback
864 functions. */
865
866 struct jit_unwind_private
867 {
868 /* Cached register values. See jit_frame_sniffer to see how this
869 works. */
870 detached_regcache *regcache;
871
872 /* The frame being unwound. */
873 struct frame_info *this_frame;
874 };
875
876 /* Sets the value of a particular register in this frame. */
877
878 static void
879 jit_unwind_reg_set_impl (struct gdb_unwind_callbacks *cb, int dwarf_regnum,
880 struct gdb_reg_value *value)
881 {
882 struct jit_unwind_private *priv;
883 int gdb_reg;
884
885 priv = (struct jit_unwind_private *) cb->priv_data;
886
887 gdb_reg = gdbarch_dwarf2_reg_to_regnum (get_frame_arch (priv->this_frame),
888 dwarf_regnum);
889 if (gdb_reg == -1)
890 {
891 jit_debug_printf ("Could not recognize DWARF regnum %d", dwarf_regnum);
892 value->free (value);
893 return;
894 }
895
896 priv->regcache->raw_supply (gdb_reg, value->value);
897 value->free (value);
898 }
899
900 static void
901 reg_value_free_impl (struct gdb_reg_value *value)
902 {
903 xfree (value);
904 }
905
906 /* Get the value of register REGNUM in the previous frame. */
907
908 static struct gdb_reg_value *
909 jit_unwind_reg_get_impl (struct gdb_unwind_callbacks *cb, int regnum)
910 {
911 struct jit_unwind_private *priv;
912 struct gdb_reg_value *value;
913 int gdb_reg, size;
914 struct gdbarch *frame_arch;
915
916 priv = (struct jit_unwind_private *) cb->priv_data;
917 frame_arch = get_frame_arch (priv->this_frame);
918
919 gdb_reg = gdbarch_dwarf2_reg_to_regnum (frame_arch, regnum);
920 size = register_size (frame_arch, gdb_reg);
921 value = ((struct gdb_reg_value *)
922 xmalloc (sizeof (struct gdb_reg_value) + size - 1));
923 value->defined = deprecated_frame_register_read (priv->this_frame, gdb_reg,
924 value->value);
925 value->size = size;
926 value->free = reg_value_free_impl;
927 return value;
928 }
929
930 /* gdb_reg_value has a free function, which must be called on each
931 saved register value. */
932
933 static void
934 jit_dealloc_cache (struct frame_info *this_frame, void *cache)
935 {
936 struct jit_unwind_private *priv_data = (struct jit_unwind_private *) cache;
937
938 gdb_assert (priv_data->regcache != NULL);
939 delete priv_data->regcache;
940 xfree (priv_data);
941 }
942
943 /* The frame sniffer for the pseudo unwinder.
944
945 While this is nominally a frame sniffer, in the case where the JIT
946 reader actually recognizes the frame, it does a lot more work -- it
947 unwinds the frame and saves the corresponding register values in
948 the cache. jit_frame_prev_register simply returns the saved
949 register values. */
950
951 static int
952 jit_frame_sniffer (const struct frame_unwind *self,
953 struct frame_info *this_frame, void **cache)
954 {
955 struct jit_unwind_private *priv_data;
956 struct gdb_unwind_callbacks callbacks;
957 struct gdb_reader_funcs *funcs;
958
959 callbacks.reg_get = jit_unwind_reg_get_impl;
960 callbacks.reg_set = jit_unwind_reg_set_impl;
961 callbacks.target_read = jit_target_read_impl;
962
963 if (loaded_jit_reader == NULL)
964 return 0;
965
966 funcs = loaded_jit_reader->functions;
967
968 gdb_assert (!*cache);
969
970 *cache = XCNEW (struct jit_unwind_private);
971 priv_data = (struct jit_unwind_private *) *cache;
972 /* Take a snapshot of current regcache. */
973 priv_data->regcache = new detached_regcache (get_frame_arch (this_frame),
974 true);
975 priv_data->this_frame = this_frame;
976
977 callbacks.priv_data = priv_data;
978
979 /* Try to coax the provided unwinder to unwind the stack */
980 if (funcs->unwind (funcs, &callbacks) == GDB_SUCCESS)
981 {
982 jit_debug_printf ("Successfully unwound frame using JIT reader.");
983 return 1;
984 }
985
986 jit_debug_printf ("Could not unwind frame using JIT reader.");
987
988 jit_dealloc_cache (this_frame, *cache);
989 *cache = NULL;
990
991 return 0;
992 }
993
994
995 /* The frame_id function for the pseudo unwinder. Relays the call to
996 the loaded plugin. */
997
998 static void
999 jit_frame_this_id (struct frame_info *this_frame, void **cache,
1000 struct frame_id *this_id)
1001 {
1002 struct jit_unwind_private priv;
1003 struct gdb_frame_id frame_id;
1004 struct gdb_reader_funcs *funcs;
1005 struct gdb_unwind_callbacks callbacks;
1006
1007 priv.regcache = NULL;
1008 priv.this_frame = this_frame;
1009
1010 /* We don't expect the frame_id function to set any registers, so we
1011 set reg_set to NULL. */
1012 callbacks.reg_get = jit_unwind_reg_get_impl;
1013 callbacks.reg_set = NULL;
1014 callbacks.target_read = jit_target_read_impl;
1015 callbacks.priv_data = &priv;
1016
1017 gdb_assert (loaded_jit_reader);
1018 funcs = loaded_jit_reader->functions;
1019
1020 frame_id = funcs->get_frame_id (funcs, &callbacks);
1021 *this_id = frame_id_build (frame_id.stack_address, frame_id.code_address);
1022 }
1023
1024 /* Pseudo unwinder function. Reads the previously fetched value for
1025 the register from the cache. */
1026
1027 static struct value *
1028 jit_frame_prev_register (struct frame_info *this_frame, void **cache, int reg)
1029 {
1030 struct jit_unwind_private *priv = (struct jit_unwind_private *) *cache;
1031 struct gdbarch *gdbarch;
1032
1033 if (priv == NULL)
1034 return frame_unwind_got_optimized (this_frame, reg);
1035
1036 gdbarch = priv->regcache->arch ();
1037 gdb_byte *buf = (gdb_byte *) alloca (register_size (gdbarch, reg));
1038 enum register_status status = priv->regcache->cooked_read (reg, buf);
1039
1040 if (status == REG_VALID)
1041 return frame_unwind_got_bytes (this_frame, reg, buf);
1042 else
1043 return frame_unwind_got_optimized (this_frame, reg);
1044 }
1045
1046 /* Relay everything back to the unwinder registered by the JIT debug
1047 info reader.*/
1048
1049 static const struct frame_unwind jit_frame_unwind =
1050 {
1051 "jit",
1052 NORMAL_FRAME,
1053 default_frame_unwind_stop_reason,
1054 jit_frame_this_id,
1055 jit_frame_prev_register,
1056 NULL,
1057 jit_frame_sniffer,
1058 jit_dealloc_cache
1059 };
1060
1061
1062 /* This is the information that is stored at jit_gdbarch_data for each
1063 architecture. */
1064
1065 struct jit_gdbarch_data_type
1066 {
1067 /* Has the (pseudo) unwinder been prepended? */
1068 int unwinder_registered;
1069 };
1070
1071 /* Check GDBARCH and prepend the pseudo JIT unwinder if needed. */
1072
1073 static void
1074 jit_prepend_unwinder (struct gdbarch *gdbarch)
1075 {
1076 struct jit_gdbarch_data_type *data;
1077
1078 data
1079 = (struct jit_gdbarch_data_type *) gdbarch_data (gdbarch, jit_gdbarch_data);
1080 if (!data->unwinder_registered)
1081 {
1082 frame_unwind_prepend_unwinder (gdbarch, &jit_frame_unwind);
1083 data->unwinder_registered = 1;
1084 }
1085 }
1086
1087 /* Register any already created translations. */
1088
1089 static void
1090 jit_inferior_init (inferior *inf)
1091 {
1092 struct jit_descriptor descriptor;
1093 struct jit_code_entry cur_entry;
1094 CORE_ADDR cur_entry_addr;
1095 struct gdbarch *gdbarch = inf->gdbarch;
1096 program_space *pspace = inf->pspace;
1097
1098 jit_debug_printf ("called");
1099
1100 jit_prepend_unwinder (gdbarch);
1101
1102 jit_breakpoint_re_set_internal (gdbarch, pspace);
1103
1104 for (objfile *jiter : pspace->objfiles ())
1105 {
1106 if (jiter->jiter_data == nullptr)
1107 continue;
1108
1109 /* Read the descriptor so we can check the version number and load
1110 any already JITed functions. */
1111 if (!jit_read_descriptor (gdbarch, &descriptor, jiter))
1112 continue;
1113
1114 /* Check that the version number agrees with that we support. */
1115 if (descriptor.version != 1)
1116 {
1117 printf_unfiltered (_("Unsupported JIT protocol version %ld "
1118 "in descriptor (expected 1)\n"),
1119 (long) descriptor.version);
1120 continue;
1121 }
1122
1123 /* If we've attached to a running program, we need to check the
1124 descriptor to register any functions that were already
1125 generated. */
1126 for (cur_entry_addr = descriptor.first_entry;
1127 cur_entry_addr != 0;
1128 cur_entry_addr = cur_entry.next_entry)
1129 {
1130 jit_read_code_entry (gdbarch, cur_entry_addr, &cur_entry);
1131
1132 /* This hook may be called many times during setup, so make sure
1133 we don't add the same symbol file twice. */
1134 if (jit_find_objf_with_entry_addr (cur_entry_addr) != NULL)
1135 continue;
1136
1137 jit_register_code (gdbarch, cur_entry_addr, &cur_entry);
1138 }
1139 }
1140 }
1141
1142 /* Looks for the descriptor and registration symbols and breakpoints
1143 the registration function. If it finds both, it registers all the
1144 already JITed code. If it has already found the symbols, then it
1145 doesn't try again. */
1146
1147 static void
1148 jit_inferior_created_hook (inferior *inf)
1149 {
1150 jit_inferior_init (inf);
1151 }
1152
1153 /* Exported routine to call to re-set the jit breakpoints,
1154 e.g. when a program is rerun. */
1155
1156 void
1157 jit_breakpoint_re_set (void)
1158 {
1159 jit_breakpoint_re_set_internal (target_gdbarch (), current_program_space);
1160 }
1161
1162 /* This function cleans up any code entries left over when the
1163 inferior exits. We get left over code when the inferior exits
1164 without unregistering its code, for example when it crashes. */
1165
1166 static void
1167 jit_inferior_exit_hook (struct inferior *inf)
1168 {
1169 for (objfile *objf : current_program_space->objfiles_safe ())
1170 {
1171 if (objf->jited_data != nullptr && objf->jited_data->addr != 0)
1172 objf->unlink ();
1173 }
1174 }
1175
1176 void
1177 jit_event_handler (gdbarch *gdbarch, objfile *jiter)
1178 {
1179 struct jit_descriptor descriptor;
1180
1181 /* If we get a JIT breakpoint event for this objfile, it is necessarily a
1182 JITer. */
1183 gdb_assert (jiter->jiter_data != nullptr);
1184
1185 /* Read the descriptor from remote memory. */
1186 if (!jit_read_descriptor (gdbarch, &descriptor, jiter))
1187 return;
1188 CORE_ADDR entry_addr = descriptor.relevant_entry;
1189
1190 /* Do the corresponding action. */
1191 switch (descriptor.action_flag)
1192 {
1193 case JIT_NOACTION:
1194 break;
1195
1196 case JIT_REGISTER:
1197 {
1198 jit_code_entry code_entry;
1199 jit_read_code_entry (gdbarch, entry_addr, &code_entry);
1200 jit_register_code (gdbarch, entry_addr, &code_entry);
1201 break;
1202 }
1203
1204 case JIT_UNREGISTER:
1205 {
1206 objfile *jited = jit_find_objf_with_entry_addr (entry_addr);
1207 if (jited == nullptr)
1208 printf_unfiltered (_("Unable to find JITed code "
1209 "entry at address: %s\n"),
1210 paddress (gdbarch, entry_addr));
1211 else
1212 jited->unlink ();
1213
1214 break;
1215 }
1216
1217 default:
1218 error (_("Unknown action_flag value in JIT descriptor!"));
1219 break;
1220 }
1221 }
1222
1223 /* Initialize the jit_gdbarch_data slot with an instance of struct
1224 jit_gdbarch_data_type */
1225
1226 static void *
1227 jit_gdbarch_data_init (struct obstack *obstack)
1228 {
1229 struct jit_gdbarch_data_type *data =
1230 XOBNEW (obstack, struct jit_gdbarch_data_type);
1231
1232 data->unwinder_registered = 0;
1233
1234 return data;
1235 }
1236
1237 void _initialize_jit ();
1238 void
1239 _initialize_jit ()
1240 {
1241 jit_reader_dir = relocate_gdb_directory (JIT_READER_DIR,
1242 JIT_READER_DIR_RELOCATABLE);
1243 add_setshow_boolean_cmd ("jit", class_maintenance, &jit_debug,
1244 _("Set JIT debugging."),
1245 _("Show JIT debugging."),
1246 _("When set, JIT debugging is enabled."),
1247 NULL,
1248 show_jit_debug,
1249 &setdebuglist, &showdebuglist);
1250
1251 gdb::observers::inferior_created.attach (jit_inferior_created_hook, "jit");
1252 gdb::observers::inferior_execd.attach (jit_inferior_created_hook, "jit");
1253 gdb::observers::inferior_exit.attach (jit_inferior_exit_hook, "jit");
1254 gdb::observers::breakpoint_deleted.attach (jit_breakpoint_deleted, "jit");
1255
1256 jit_gdbarch_data = gdbarch_data_register_pre_init (jit_gdbarch_data_init);
1257 if (is_dl_available ())
1258 {
1259 struct cmd_list_element *c;
1260
1261 c = add_com ("jit-reader-load", no_class, jit_reader_load_command, _("\
1262 Load FILE as debug info reader and unwinder for JIT compiled code.\n\
1263 Usage: jit-reader-load FILE\n\
1264 Try to load file FILE as a debug info reader (and unwinder) for\n\
1265 JIT compiled code. The file is loaded from " JIT_READER_DIR ",\n\
1266 relocated relative to the GDB executable if required."));
1267 set_cmd_completer (c, filename_completer);
1268
1269 c = add_com ("jit-reader-unload", no_class,
1270 jit_reader_unload_command, _("\
1271 Unload the currently loaded JIT debug info reader.\n\
1272 Usage: jit-reader-unload\n\n\
1273 Do \"help jit-reader-load\" for info on loading debug info readers."));
1274 set_cmd_completer (c, noop_completer);
1275 }
1276 }
This page took 0.063539 seconds and 4 git commands to generate.