Introduce dwarf2/public.h
[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->loc; iter != nullptr; iter = iter->next)
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 if (the_objfile->skip_jit_symbol_lookup)
811 continue;
812
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)
819 {
820 /* No need to repeat the lookup the next time. */
821 the_objfile->skip_jit_symbol_lookup = true;
822 continue;
823 }
824
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)
829 {
830 /* No need to repeat the lookup the next time. */
831 the_objfile->skip_jit_symbol_lookup = true;
832 continue;
833 }
834
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;
839
840 CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (the_objfile,
841 objf_data->register_code);
842
843 jit_debug_printf ("breakpoint_addr = %s", paddress (gdbarch, addr));
844
845 /* Check if we need to re-create the breakpoint. */
846 if (objf_data->cached_code_address == addr)
847 continue;
848
849 /* Delete the old breakpoint. */
850 if (objf_data->jit_breakpoint != nullptr)
851 delete_breakpoint (objf_data->jit_breakpoint);
852
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);
856 }
857 }
858
859 /* The private data passed around in the frame unwind callback
860 functions. */
861
862 struct jit_unwind_private
863 {
864 /* Cached register values. See jit_frame_sniffer to see how this
865 works. */
866 detached_regcache *regcache;
867
868 /* The frame being unwound. */
869 struct frame_info *this_frame;
870 };
871
872 /* Sets the value of a particular register in this frame. */
873
874 static void
875 jit_unwind_reg_set_impl (struct gdb_unwind_callbacks *cb, int dwarf_regnum,
876 struct gdb_reg_value *value)
877 {
878 struct jit_unwind_private *priv;
879 int gdb_reg;
880
881 priv = (struct jit_unwind_private *) cb->priv_data;
882
883 gdb_reg = gdbarch_dwarf2_reg_to_regnum (get_frame_arch (priv->this_frame),
884 dwarf_regnum);
885 if (gdb_reg == -1)
886 {
887 jit_debug_printf ("Could not recognize DWARF regnum %d", dwarf_regnum);
888 value->free (value);
889 return;
890 }
891
892 priv->regcache->raw_supply (gdb_reg, value->value);
893 value->free (value);
894 }
895
896 static void
897 reg_value_free_impl (struct gdb_reg_value *value)
898 {
899 xfree (value);
900 }
901
902 /* Get the value of register REGNUM in the previous frame. */
903
904 static struct gdb_reg_value *
905 jit_unwind_reg_get_impl (struct gdb_unwind_callbacks *cb, int regnum)
906 {
907 struct jit_unwind_private *priv;
908 struct gdb_reg_value *value;
909 int gdb_reg, size;
910 struct gdbarch *frame_arch;
911
912 priv = (struct jit_unwind_private *) cb->priv_data;
913 frame_arch = get_frame_arch (priv->this_frame);
914
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,
920 value->value);
921 value->size = size;
922 value->free = reg_value_free_impl;
923 return value;
924 }
925
926 /* gdb_reg_value has a free function, which must be called on each
927 saved register value. */
928
929 static void
930 jit_dealloc_cache (struct frame_info *this_frame, void *cache)
931 {
932 struct jit_unwind_private *priv_data = (struct jit_unwind_private *) cache;
933
934 gdb_assert (priv_data->regcache != NULL);
935 delete priv_data->regcache;
936 xfree (priv_data);
937 }
938
939 /* The frame sniffer for the pseudo unwinder.
940
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
945 register values. */
946
947 static int
948 jit_frame_sniffer (const struct frame_unwind *self,
949 struct frame_info *this_frame, void **cache)
950 {
951 struct jit_unwind_private *priv_data;
952 struct gdb_unwind_callbacks callbacks;
953 struct gdb_reader_funcs *funcs;
954
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;
958
959 if (loaded_jit_reader == NULL)
960 return 0;
961
962 funcs = loaded_jit_reader->functions;
963
964 gdb_assert (!*cache);
965
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),
970 true);
971 priv_data->this_frame = this_frame;
972
973 callbacks.priv_data = priv_data;
974
975 /* Try to coax the provided unwinder to unwind the stack */
976 if (funcs->unwind (funcs, &callbacks) == GDB_SUCCESS)
977 {
978 jit_debug_printf ("Successfully unwound frame using JIT reader.");
979 return 1;
980 }
981
982 jit_debug_printf ("Could not unwind frame using JIT reader.");
983
984 jit_dealloc_cache (this_frame, *cache);
985 *cache = NULL;
986
987 return 0;
988 }
989
990
991 /* The frame_id function for the pseudo unwinder. Relays the call to
992 the loaded plugin. */
993
994 static void
995 jit_frame_this_id (struct frame_info *this_frame, void **cache,
996 struct frame_id *this_id)
997 {
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;
1002
1003 priv.regcache = NULL;
1004 priv.this_frame = this_frame;
1005
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;
1012
1013 gdb_assert (loaded_jit_reader);
1014 funcs = loaded_jit_reader->functions;
1015
1016 frame_id = funcs->get_frame_id (funcs, &callbacks);
1017 *this_id = frame_id_build (frame_id.stack_address, frame_id.code_address);
1018 }
1019
1020 /* Pseudo unwinder function. Reads the previously fetched value for
1021 the register from the cache. */
1022
1023 static struct value *
1024 jit_frame_prev_register (struct frame_info *this_frame, void **cache, int reg)
1025 {
1026 struct jit_unwind_private *priv = (struct jit_unwind_private *) *cache;
1027 struct gdbarch *gdbarch;
1028
1029 if (priv == NULL)
1030 return frame_unwind_got_optimized (this_frame, reg);
1031
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);
1035
1036 if (status == REG_VALID)
1037 return frame_unwind_got_bytes (this_frame, reg, buf);
1038 else
1039 return frame_unwind_got_optimized (this_frame, reg);
1040 }
1041
1042 /* Relay everything back to the unwinder registered by the JIT debug
1043 info reader.*/
1044
1045 static const struct frame_unwind jit_frame_unwind =
1046 {
1047 NORMAL_FRAME,
1048 default_frame_unwind_stop_reason,
1049 jit_frame_this_id,
1050 jit_frame_prev_register,
1051 NULL,
1052 jit_frame_sniffer,
1053 jit_dealloc_cache
1054 };
1055
1056
1057 /* This is the information that is stored at jit_gdbarch_data for each
1058 architecture. */
1059
1060 struct jit_gdbarch_data_type
1061 {
1062 /* Has the (pseudo) unwinder been prepended? */
1063 int unwinder_registered;
1064 };
1065
1066 /* Check GDBARCH and prepend the pseudo JIT unwinder if needed. */
1067
1068 static void
1069 jit_prepend_unwinder (struct gdbarch *gdbarch)
1070 {
1071 struct jit_gdbarch_data_type *data;
1072
1073 data
1074 = (struct jit_gdbarch_data_type *) gdbarch_data (gdbarch, jit_gdbarch_data);
1075 if (!data->unwinder_registered)
1076 {
1077 frame_unwind_prepend_unwinder (gdbarch, &jit_frame_unwind);
1078 data->unwinder_registered = 1;
1079 }
1080 }
1081
1082 /* Register any already created translations. */
1083
1084 static void
1085 jit_inferior_init (inferior *inf)
1086 {
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;
1092
1093 jit_debug_printf ("called");
1094
1095 jit_prepend_unwinder (gdbarch);
1096
1097 jit_breakpoint_re_set_internal (gdbarch, pspace);
1098
1099 for (objfile *jiter : pspace->objfiles ())
1100 {
1101 if (jiter->jiter_data == nullptr)
1102 continue;
1103
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))
1107 continue;
1108
1109 /* Check that the version number agrees with that we support. */
1110 if (descriptor.version != 1)
1111 {
1112 printf_unfiltered (_("Unsupported JIT protocol version %ld "
1113 "in descriptor (expected 1)\n"),
1114 (long) descriptor.version);
1115 continue;
1116 }
1117
1118 /* If we've attached to a running program, we need to check the
1119 descriptor to register any functions that were already
1120 generated. */
1121 for (cur_entry_addr = descriptor.first_entry;
1122 cur_entry_addr != 0;
1123 cur_entry_addr = cur_entry.next_entry)
1124 {
1125 jit_read_code_entry (gdbarch, cur_entry_addr, &cur_entry);
1126
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)
1130 continue;
1131
1132 jit_register_code (gdbarch, cur_entry_addr, &cur_entry);
1133 }
1134 }
1135 }
1136
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. */
1141
1142 static void
1143 jit_inferior_created_hook (inferior *inf)
1144 {
1145 jit_inferior_init (inf);
1146 }
1147
1148 /* Exported routine to call to re-set the jit breakpoints,
1149 e.g. when a program is rerun. */
1150
1151 void
1152 jit_breakpoint_re_set (void)
1153 {
1154 jit_breakpoint_re_set_internal (target_gdbarch (), current_program_space);
1155 }
1156
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. */
1160
1161 static void
1162 jit_inferior_exit_hook (struct inferior *inf)
1163 {
1164 for (objfile *objf : current_program_space->objfiles_safe ())
1165 {
1166 if (objf->jited_data != nullptr && objf->jited_data->addr != 0)
1167 objf->unlink ();
1168 }
1169 }
1170
1171 void
1172 jit_event_handler (gdbarch *gdbarch, objfile *jiter)
1173 {
1174 struct jit_descriptor descriptor;
1175
1176 /* If we get a JIT breakpoint event for this objfile, it is necessarily a
1177 JITer. */
1178 gdb_assert (jiter->jiter_data != nullptr);
1179
1180 /* Read the descriptor from remote memory. */
1181 if (!jit_read_descriptor (gdbarch, &descriptor, jiter))
1182 return;
1183 CORE_ADDR entry_addr = descriptor.relevant_entry;
1184
1185 /* Do the corresponding action. */
1186 switch (descriptor.action_flag)
1187 {
1188 case JIT_NOACTION:
1189 break;
1190
1191 case JIT_REGISTER:
1192 {
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);
1196 break;
1197 }
1198
1199 case JIT_UNREGISTER:
1200 {
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));
1206 else
1207 jited->unlink ();
1208
1209 break;
1210 }
1211
1212 default:
1213 error (_("Unknown action_flag value in JIT descriptor!"));
1214 break;
1215 }
1216 }
1217
1218 /* Initialize the jit_gdbarch_data slot with an instance of struct
1219 jit_gdbarch_data_type */
1220
1221 static void *
1222 jit_gdbarch_data_init (struct obstack *obstack)
1223 {
1224 struct jit_gdbarch_data_type *data =
1225 XOBNEW (obstack, struct jit_gdbarch_data_type);
1226
1227 data->unwinder_registered = 0;
1228
1229 return data;
1230 }
1231
1232 void _initialize_jit ();
1233 void
1234 _initialize_jit ()
1235 {
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."),
1242 NULL,
1243 show_jit_debug,
1244 &setdebuglist, &showdebuglist);
1245
1246 gdb::observers::inferior_created.attach (jit_inferior_created_hook);
1247 gdb::observers::inferior_execd.attach (jit_inferior_created_hook);
1248 gdb::observers::inferior_exit.attach (jit_inferior_exit_hook);
1249 gdb::observers::breakpoint_deleted.attach (jit_breakpoint_deleted);
1250
1251 jit_gdbarch_data = gdbarch_data_register_pre_init (jit_gdbarch_data_init);
1252 if (is_dl_available ())
1253 {
1254 struct cmd_list_element *c;
1255
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);
1263
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);
1270 }
1271 }
This page took 0.056539 seconds and 4 git commands to generate.