85b644dde06915ca35a79ceabf9d9505e20cf18d
[binutils-gdb.git] / gdb / jit.c
1 /* Handle JIT code generation in the inferior for GDB, the GNU Debugger.
2
3 Copyright (C) 2009-2020 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 *const jit_break_name = "__jit_debug_register_code";
49
50 static const char *const jit_descriptor_name = "__jit_debug_descriptor";
51
52 static void jit_inferior_init (struct gdbarch *gdbarch);
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 /* Non-zero if we want to see trace of jit level stuff. */
62
63 static unsigned int jit_debug = 0;
64
65 static void
66 show_jit_debug (struct ui_file *file, int from_tty,
67 struct cmd_list_element *c, const char *value)
68 {
69 fprintf_filtered (file, _("JIT debugging is %s.\n"), value);
70 }
71
72 struct target_buffer
73 {
74 CORE_ADDR base;
75 ULONGEST size;
76 };
77
78 /* Opening the file is a no-op. */
79
80 static void *
81 mem_bfd_iovec_open (struct bfd *abfd, void *open_closure)
82 {
83 return open_closure;
84 }
85
86 /* Closing the file is just freeing the base/size pair on our side. */
87
88 static int
89 mem_bfd_iovec_close (struct bfd *abfd, void *stream)
90 {
91 xfree (stream);
92
93 /* Zero means success. */
94 return 0;
95 }
96
97 /* For reading the file, we just need to pass through to target_read_memory and
98 fix up the arguments and return values. */
99
100 static file_ptr
101 mem_bfd_iovec_pread (struct bfd *abfd, void *stream, void *buf,
102 file_ptr nbytes, file_ptr offset)
103 {
104 int err;
105 struct target_buffer *buffer = (struct target_buffer *) stream;
106
107 /* If this read will read all of the file, limit it to just the rest. */
108 if (offset + nbytes > buffer->size)
109 nbytes = buffer->size - offset;
110
111 /* If there are no more bytes left, we've reached EOF. */
112 if (nbytes == 0)
113 return 0;
114
115 err = target_read_memory (buffer->base + offset, (gdb_byte *) buf, nbytes);
116 if (err)
117 return -1;
118
119 return nbytes;
120 }
121
122 /* For statting the file, we only support the st_size attribute. */
123
124 static int
125 mem_bfd_iovec_stat (struct bfd *abfd, void *stream, struct stat *sb)
126 {
127 struct target_buffer *buffer = (struct target_buffer*) stream;
128
129 memset (sb, 0, sizeof (struct stat));
130 sb->st_size = buffer->size;
131 return 0;
132 }
133
134 /* Open a BFD from the target's memory. */
135
136 static gdb_bfd_ref_ptr
137 bfd_open_from_target_memory (CORE_ADDR addr, ULONGEST size,
138 const char *target)
139 {
140 struct target_buffer *buffer = XNEW (struct target_buffer);
141
142 buffer->base = addr;
143 buffer->size = size;
144 return gdb_bfd_openr_iovec ("<in-memory>", target,
145 mem_bfd_iovec_open,
146 buffer,
147 mem_bfd_iovec_pread,
148 mem_bfd_iovec_close,
149 mem_bfd_iovec_stat);
150 }
151
152 struct jit_reader
153 {
154 jit_reader (struct gdb_reader_funcs *f, gdb_dlhandle_up &&h)
155 : functions (f), handle (std::move (h))
156 {
157 }
158
159 ~jit_reader ()
160 {
161 functions->destroy (functions);
162 }
163
164 DISABLE_COPY_AND_ASSIGN (jit_reader);
165
166 struct gdb_reader_funcs *functions;
167 gdb_dlhandle_up handle;
168 };
169
170 /* One reader that has been loaded successfully, and can potentially be used to
171 parse debug info. */
172
173 static struct jit_reader *loaded_jit_reader = NULL;
174
175 typedef struct gdb_reader_funcs * (reader_init_fn_type) (void);
176 static const char *reader_init_fn_sym = "gdb_init_reader";
177
178 /* Try to load FILE_NAME as a JIT debug info reader. */
179
180 static struct jit_reader *
181 jit_reader_load (const char *file_name)
182 {
183 reader_init_fn_type *init_fn;
184 struct gdb_reader_funcs *funcs = NULL;
185
186 if (jit_debug)
187 fprintf_unfiltered (gdb_stdlog, _("Opening shared object %s.\n"),
188 file_name);
189 gdb_dlhandle_up so = gdb_dlopen (file_name);
190
191 init_fn = (reader_init_fn_type *) gdb_dlsym (so, reader_init_fn_sym);
192 if (!init_fn)
193 error (_("Could not locate initialization function: %s."),
194 reader_init_fn_sym);
195
196 if (gdb_dlsym (so, "plugin_is_GPL_compatible") == NULL)
197 error (_("Reader not GPL compatible."));
198
199 funcs = init_fn ();
200 if (funcs->reader_version != GDB_READER_INTERFACE_VERSION)
201 error (_("Reader version does not match GDB version."));
202
203 return new jit_reader (funcs, std::move (so));
204 }
205
206 /* Provides the jit-reader-load command. */
207
208 static void
209 jit_reader_load_command (const char *args, int from_tty)
210 {
211 if (args == NULL)
212 error (_("No reader name provided."));
213 gdb::unique_xmalloc_ptr<char> file (tilde_expand (args));
214
215 if (loaded_jit_reader != NULL)
216 error (_("JIT reader already loaded. Run jit-reader-unload first."));
217
218 if (!IS_ABSOLUTE_PATH (file.get ()))
219 file.reset (xstrprintf ("%s%s%s", jit_reader_dir.c_str (), SLASH_STRING,
220 file.get ()));
221
222 loaded_jit_reader = jit_reader_load (file.get ());
223 reinit_frame_cache ();
224 jit_inferior_created_hook ();
225 }
226
227 /* Provides the jit-reader-unload command. */
228
229 static void
230 jit_reader_unload_command (const char *args, int from_tty)
231 {
232 if (!loaded_jit_reader)
233 error (_("No JIT reader loaded."));
234
235 reinit_frame_cache ();
236 jit_inferior_exit_hook (current_inferior ());
237
238 delete loaded_jit_reader;
239 loaded_jit_reader = NULL;
240 }
241
242 /* Destructor for jiter_objfile_data. */
243
244 jiter_objfile_data::~jiter_objfile_data ()
245 {
246 if (this->jit_breakpoint != nullptr)
247 delete_breakpoint (this->jit_breakpoint);
248 }
249
250 /* Fetch the jiter_objfile_data associated with OBJF. If no data exists
251 yet, make a new structure and attach it. */
252
253 static jiter_objfile_data *
254 get_jiter_objfile_data (objfile *objf)
255 {
256 if (objf->jiter_data == nullptr)
257 objf->jiter_data.reset (new jiter_objfile_data ());
258
259 return objf->jiter_data.get ();
260 }
261
262 /* Remember OBJFILE has been created for struct jit_code_entry located
263 at inferior address ENTRY. */
264
265 static void
266 add_objfile_entry (struct objfile *objfile, CORE_ADDR entry)
267 {
268 gdb_assert (objfile->jited_data == nullptr);
269
270 objfile->jited_data.reset (new jited_objfile_data (entry));
271 }
272
273 /* Helper function for reading the global JIT descriptor from remote
274 memory. Returns true if all went well, false otherwise. */
275
276 static bool
277 jit_read_descriptor (gdbarch *gdbarch,
278 jit_descriptor *descriptor,
279 objfile *jiter)
280 {
281 int err;
282 struct type *ptr_type;
283 int ptr_size;
284 int desc_size;
285 gdb_byte *desc_buf;
286 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
287
288 gdb_assert (jiter != nullptr);
289 jiter_objfile_data *objf_data = jiter->jiter_data.get ();
290 gdb_assert (objf_data != nullptr);
291
292 if (jit_debug)
293 fprintf_unfiltered (gdb_stdlog,
294 "jit_read_descriptor, descriptor_addr = %s\n",
295 paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (jiter,
296 objf_data->descriptor)));
297
298 /* Figure out how big the descriptor is on the remote and how to read it. */
299 ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
300 ptr_size = TYPE_LENGTH (ptr_type);
301 desc_size = 8 + 2 * ptr_size; /* Two 32-bit ints and two pointers. */
302 desc_buf = (gdb_byte *) alloca (desc_size);
303
304 /* Read the descriptor. */
305 err = target_read_memory (MSYMBOL_VALUE_ADDRESS (jiter,
306 objf_data->descriptor),
307 desc_buf, desc_size);
308 if (err)
309 {
310 printf_unfiltered (_("Unable to read JIT descriptor from "
311 "remote memory\n"));
312 return false;
313 }
314
315 /* Fix the endianness to match the host. */
316 descriptor->version = extract_unsigned_integer (&desc_buf[0], 4, byte_order);
317 descriptor->action_flag =
318 extract_unsigned_integer (&desc_buf[4], 4, byte_order);
319 descriptor->relevant_entry = extract_typed_address (&desc_buf[8], ptr_type);
320 descriptor->first_entry =
321 extract_typed_address (&desc_buf[8 + ptr_size], ptr_type);
322
323 return true;
324 }
325
326 /* Helper function for reading a JITed code entry from remote memory. */
327
328 static void
329 jit_read_code_entry (struct gdbarch *gdbarch,
330 CORE_ADDR code_addr, struct jit_code_entry *code_entry)
331 {
332 int err, off;
333 struct type *ptr_type;
334 int ptr_size;
335 int entry_size;
336 int align_bytes;
337 gdb_byte *entry_buf;
338 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
339
340 /* Figure out how big the entry is on the remote and how to read it. */
341 ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
342 ptr_size = TYPE_LENGTH (ptr_type);
343
344 /* Figure out where the uint64_t value will be. */
345 align_bytes = type_align (builtin_type (gdbarch)->builtin_uint64);
346 off = 3 * ptr_size;
347 off = (off + (align_bytes - 1)) & ~(align_bytes - 1);
348
349 entry_size = off + 8; /* Three pointers and one 64-bit int. */
350 entry_buf = (gdb_byte *) alloca (entry_size);
351
352 /* Read the entry. */
353 err = target_read_memory (code_addr, entry_buf, entry_size);
354 if (err)
355 error (_("Unable to read JIT code entry from remote memory!"));
356
357 /* Fix the endianness to match the host. */
358 ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
359 code_entry->next_entry = extract_typed_address (&entry_buf[0], ptr_type);
360 code_entry->prev_entry =
361 extract_typed_address (&entry_buf[ptr_size], ptr_type);
362 code_entry->symfile_addr =
363 extract_typed_address (&entry_buf[2 * ptr_size], ptr_type);
364 code_entry->symfile_size =
365 extract_unsigned_integer (&entry_buf[off], 8, byte_order);
366 }
367
368 /* Proxy object for building a block. */
369
370 struct gdb_block
371 {
372 gdb_block (gdb_block *parent, CORE_ADDR begin, CORE_ADDR end,
373 const char *name)
374 : parent (parent),
375 begin (begin),
376 end (end),
377 name (name != nullptr ? xstrdup (name) : nullptr)
378 {}
379
380 /* The parent of this block. */
381 struct gdb_block *parent;
382
383 /* Points to the "real" block that is being built out of this
384 instance. This block will be added to a blockvector, which will
385 then be added to a symtab. */
386 struct block *real_block = nullptr;
387
388 /* The first and last code address corresponding to this block. */
389 CORE_ADDR begin, end;
390
391 /* The name of this block (if any). If this is non-NULL, the
392 FUNCTION symbol symbol is set to this value. */
393 gdb::unique_xmalloc_ptr<char> name;
394 };
395
396 /* Proxy object for building a symtab. */
397
398 struct gdb_symtab
399 {
400 explicit gdb_symtab (const char *file_name)
401 : file_name (file_name != nullptr ? file_name : "")
402 {}
403
404 /* The list of blocks in this symtab. These will eventually be
405 converted to real blocks.
406
407 This is specifically a linked list, instead of, for example, a vector,
408 because the pointers are returned to the user's debug info reader. So
409 it's important that the objects don't change location during their
410 lifetime (which would happen with a vector of objects getting resized). */
411 std::forward_list<gdb_block> blocks;
412
413 /* The number of blocks inserted. */
414 int nblocks = 0;
415
416 /* A mapping between line numbers to PC. */
417 gdb::unique_xmalloc_ptr<struct linetable> linetable;
418
419 /* The source file for this symtab. */
420 std::string file_name;
421 };
422
423 /* Proxy object for building an object. */
424
425 struct gdb_object
426 {
427 /* Symtabs of this object.
428
429 This is specifically a linked list, instead of, for example, a vector,
430 because the pointers are returned to the user's debug info reader. So
431 it's important that the objects don't change location during their
432 lifetime (which would happen with a vector of objects getting resized). */
433 std::forward_list<gdb_symtab> symtabs;
434 };
435
436 /* The type of the `private' data passed around by the callback
437 functions. */
438
439 typedef CORE_ADDR jit_dbg_reader_data;
440
441 /* The reader calls into this function to read data off the targets
442 address space. */
443
444 static enum gdb_status
445 jit_target_read_impl (GDB_CORE_ADDR target_mem, void *gdb_buf, int len)
446 {
447 int result = target_read_memory ((CORE_ADDR) target_mem,
448 (gdb_byte *) gdb_buf, len);
449 if (result == 0)
450 return GDB_SUCCESS;
451 else
452 return GDB_FAIL;
453 }
454
455 /* The reader calls into this function to create a new gdb_object
456 which it can then pass around to the other callbacks. Right now,
457 all that is required is allocating the memory. */
458
459 static struct gdb_object *
460 jit_object_open_impl (struct gdb_symbol_callbacks *cb)
461 {
462 /* CB is not required right now, but sometime in the future we might
463 need a handle to it, and we'd like to do that without breaking
464 the ABI. */
465 return new gdb_object;
466 }
467
468 /* Readers call into this function to open a new gdb_symtab, which,
469 again, is passed around to other callbacks. */
470
471 static struct gdb_symtab *
472 jit_symtab_open_impl (struct gdb_symbol_callbacks *cb,
473 struct gdb_object *object,
474 const char *file_name)
475 {
476 /* CB stays unused. See comment in jit_object_open_impl. */
477
478 object->symtabs.emplace_front (file_name);
479 return &object->symtabs.front ();
480 }
481
482 /* Called by readers to open a new gdb_block. This function also
483 inserts the new gdb_block in the correct place in the corresponding
484 gdb_symtab. */
485
486 static struct gdb_block *
487 jit_block_open_impl (struct gdb_symbol_callbacks *cb,
488 struct gdb_symtab *symtab, struct gdb_block *parent,
489 GDB_CORE_ADDR begin, GDB_CORE_ADDR end, const char *name)
490 {
491 /* Place the block at the beginning of the list, it will be sorted when the
492 symtab is finalized. */
493 symtab->blocks.emplace_front (parent, begin, end, name);
494 symtab->nblocks++;
495
496 return &symtab->blocks.front ();
497 }
498
499 /* Readers call this to add a line mapping (from PC to line number) to
500 a gdb_symtab. */
501
502 static void
503 jit_symtab_line_mapping_add_impl (struct gdb_symbol_callbacks *cb,
504 struct gdb_symtab *stab, int nlines,
505 struct gdb_line_mapping *map)
506 {
507 int i;
508 int alloc_len;
509
510 if (nlines < 1)
511 return;
512
513 alloc_len = sizeof (struct linetable)
514 + (nlines - 1) * sizeof (struct linetable_entry);
515 stab->linetable.reset (XNEWVAR (struct linetable, alloc_len));
516 stab->linetable->nitems = nlines;
517 for (i = 0; i < nlines; i++)
518 {
519 stab->linetable->item[i].pc = (CORE_ADDR) map[i].pc;
520 stab->linetable->item[i].line = map[i].line;
521 stab->linetable->item[i].is_stmt = 1;
522 }
523 }
524
525 /* Called by readers to close a gdb_symtab. Does not need to do
526 anything as of now. */
527
528 static void
529 jit_symtab_close_impl (struct gdb_symbol_callbacks *cb,
530 struct gdb_symtab *stab)
531 {
532 /* Right now nothing needs to be done here. We may need to do some
533 cleanup here in the future (again, without breaking the plugin
534 ABI). */
535 }
536
537 /* Transform STAB to a proper symtab, and add it it OBJFILE. */
538
539 static void
540 finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
541 {
542 struct compunit_symtab *cust;
543 size_t blockvector_size;
544 CORE_ADDR begin, end;
545 struct blockvector *bv;
546
547 int actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks;
548
549 /* Sort the blocks in the order they should appear in the blockvector. */
550 stab->blocks.sort([] (const gdb_block &a, const gdb_block &b)
551 {
552 if (a.begin != b.begin)
553 return a.begin < b.begin;
554
555 return a.end > b.end;
556 });
557
558 cust = allocate_compunit_symtab (objfile, stab->file_name.c_str ());
559 allocate_symtab (cust, stab->file_name.c_str ());
560 add_compunit_symtab_to_objfile (cust);
561
562 /* JIT compilers compile in memory. */
563 COMPUNIT_DIRNAME (cust) = NULL;
564
565 /* Copy over the linetable entry if one was provided. */
566 if (stab->linetable)
567 {
568 size_t size = ((stab->linetable->nitems - 1)
569 * sizeof (struct linetable_entry)
570 + sizeof (struct linetable));
571 SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust))
572 = (struct linetable *) obstack_alloc (&objfile->objfile_obstack, size);
573 memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)),
574 stab->linetable.get (), size);
575 }
576
577 blockvector_size = (sizeof (struct blockvector)
578 + (actual_nblocks - 1) * sizeof (struct block *));
579 bv = (struct blockvector *) obstack_alloc (&objfile->objfile_obstack,
580 blockvector_size);
581 COMPUNIT_BLOCKVECTOR (cust) = bv;
582
583 /* At the end of this function, (begin, end) will contain the PC range this
584 entire blockvector spans. */
585 BLOCKVECTOR_MAP (bv) = NULL;
586 begin = stab->blocks.front ().begin;
587 end = stab->blocks.front ().end;
588 BLOCKVECTOR_NBLOCKS (bv) = actual_nblocks;
589
590 /* First run over all the gdb_block objects, creating a real block
591 object for each. Simultaneously, keep setting the real_block
592 fields. */
593 int block_idx = FIRST_LOCAL_BLOCK;
594 for (gdb_block &gdb_block_iter : stab->blocks)
595 {
596 struct block *new_block = allocate_block (&objfile->objfile_obstack);
597 struct symbol *block_name = new (&objfile->objfile_obstack) symbol;
598 struct type *block_type = arch_type (objfile->arch (),
599 TYPE_CODE_VOID,
600 TARGET_CHAR_BIT,
601 "void");
602
603 BLOCK_MULTIDICT (new_block)
604 = mdict_create_linear (&objfile->objfile_obstack, NULL);
605 /* The address range. */
606 BLOCK_START (new_block) = (CORE_ADDR) gdb_block_iter.begin;
607 BLOCK_END (new_block) = (CORE_ADDR) gdb_block_iter.end;
608
609 /* The name. */
610 SYMBOL_DOMAIN (block_name) = VAR_DOMAIN;
611 SYMBOL_ACLASS_INDEX (block_name) = LOC_BLOCK;
612 symbol_set_symtab (block_name, COMPUNIT_FILETABS (cust));
613 SYMBOL_TYPE (block_name) = lookup_function_type (block_type);
614 SYMBOL_BLOCK_VALUE (block_name) = new_block;
615
616 block_name->m_name = obstack_strdup (&objfile->objfile_obstack,
617 gdb_block_iter.name.get ());
618
619 BLOCK_FUNCTION (new_block) = block_name;
620
621 BLOCKVECTOR_BLOCK (bv, block_idx) = new_block;
622 if (begin > BLOCK_START (new_block))
623 begin = BLOCK_START (new_block);
624 if (end < BLOCK_END (new_block))
625 end = BLOCK_END (new_block);
626
627 gdb_block_iter.real_block = new_block;
628
629 block_idx++;
630 }
631
632 /* Now add the special blocks. */
633 struct block *block_iter = NULL;
634 for (enum block_enum i : { GLOBAL_BLOCK, STATIC_BLOCK })
635 {
636 struct block *new_block;
637
638 new_block = (i == GLOBAL_BLOCK
639 ? allocate_global_block (&objfile->objfile_obstack)
640 : allocate_block (&objfile->objfile_obstack));
641 BLOCK_MULTIDICT (new_block)
642 = mdict_create_linear (&objfile->objfile_obstack, NULL);
643 BLOCK_SUPERBLOCK (new_block) = block_iter;
644 block_iter = new_block;
645
646 BLOCK_START (new_block) = (CORE_ADDR) begin;
647 BLOCK_END (new_block) = (CORE_ADDR) end;
648
649 BLOCKVECTOR_BLOCK (bv, i) = new_block;
650
651 if (i == GLOBAL_BLOCK)
652 set_block_compunit_symtab (new_block, cust);
653 }
654
655 /* Fill up the superblock fields for the real blocks, using the
656 real_block fields populated earlier. */
657 for (gdb_block &gdb_block_iter : stab->blocks)
658 {
659 if (gdb_block_iter.parent != NULL)
660 {
661 /* If the plugin specifically mentioned a parent block, we
662 use that. */
663 BLOCK_SUPERBLOCK (gdb_block_iter.real_block) =
664 gdb_block_iter.parent->real_block;
665 }
666 else
667 {
668 /* And if not, we set a default parent block. */
669 BLOCK_SUPERBLOCK (gdb_block_iter.real_block) =
670 BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
671 }
672 }
673 }
674
675 /* Called when closing a gdb_objfile. Converts OBJ to a proper
676 objfile. */
677
678 static void
679 jit_object_close_impl (struct gdb_symbol_callbacks *cb,
680 struct gdb_object *obj)
681 {
682 struct objfile *objfile;
683 jit_dbg_reader_data *priv_data;
684
685 priv_data = (jit_dbg_reader_data *) cb->priv_data;
686
687 objfile = objfile::make (nullptr, "<< JIT compiled code >>",
688 OBJF_NOT_FILENAME);
689 objfile->per_bfd->gdbarch = target_gdbarch ();
690
691 for (gdb_symtab &symtab : obj->symtabs)
692 finalize_symtab (&symtab, objfile);
693
694 add_objfile_entry (objfile, *priv_data);
695
696 delete obj;
697 }
698
699 /* Try to read CODE_ENTRY using the loaded jit reader (if any).
700 ENTRY_ADDR is the address of the struct jit_code_entry in the
701 inferior address space. */
702
703 static int
704 jit_reader_try_read_symtab (struct jit_code_entry *code_entry,
705 CORE_ADDR entry_addr)
706 {
707 int status;
708 jit_dbg_reader_data priv_data;
709 struct gdb_reader_funcs *funcs;
710 struct gdb_symbol_callbacks callbacks =
711 {
712 jit_object_open_impl,
713 jit_symtab_open_impl,
714 jit_block_open_impl,
715 jit_symtab_close_impl,
716 jit_object_close_impl,
717
718 jit_symtab_line_mapping_add_impl,
719 jit_target_read_impl,
720
721 &priv_data
722 };
723
724 priv_data = entry_addr;
725
726 if (!loaded_jit_reader)
727 return 0;
728
729 gdb::byte_vector gdb_mem (code_entry->symfile_size);
730
731 status = 1;
732 try
733 {
734 if (target_read_memory (code_entry->symfile_addr, gdb_mem.data (),
735 code_entry->symfile_size))
736 status = 0;
737 }
738 catch (const gdb_exception &e)
739 {
740 status = 0;
741 }
742
743 if (status)
744 {
745 funcs = loaded_jit_reader->functions;
746 if (funcs->read (funcs, &callbacks, gdb_mem.data (),
747 code_entry->symfile_size)
748 != GDB_SUCCESS)
749 status = 0;
750 }
751
752 if (jit_debug && status == 0)
753 fprintf_unfiltered (gdb_stdlog,
754 "Could not read symtab using the loaded JIT reader.\n");
755 return status;
756 }
757
758 /* Try to read CODE_ENTRY using BFD. ENTRY_ADDR is the address of the
759 struct jit_code_entry in the inferior address space. */
760
761 static void
762 jit_bfd_try_read_symtab (struct jit_code_entry *code_entry,
763 CORE_ADDR entry_addr,
764 struct gdbarch *gdbarch)
765 {
766 struct bfd_section *sec;
767 struct objfile *objfile;
768 const struct bfd_arch_info *b;
769
770 if (jit_debug)
771 fprintf_unfiltered (gdb_stdlog,
772 "jit_bfd_try_read_symtab, symfile_addr = %s, "
773 "symfile_size = %s\n",
774 paddress (gdbarch, code_entry->symfile_addr),
775 pulongest (code_entry->symfile_size));
776
777 gdb_bfd_ref_ptr nbfd (bfd_open_from_target_memory (code_entry->symfile_addr,
778 code_entry->symfile_size,
779 gnutarget));
780 if (nbfd == NULL)
781 {
782 puts_unfiltered (_("Error opening JITed symbol file, ignoring it.\n"));
783 return;
784 }
785
786 /* Check the format. NOTE: This initializes important data that GDB uses!
787 We would segfault later without this line. */
788 if (!bfd_check_format (nbfd.get (), bfd_object))
789 {
790 printf_unfiltered (_("\
791 JITed symbol file is not an object file, ignoring it.\n"));
792 return;
793 }
794
795 /* Check bfd arch. */
796 b = gdbarch_bfd_arch_info (gdbarch);
797 if (b->compatible (b, bfd_get_arch_info (nbfd.get ())) != b)
798 warning (_("JITed object file architecture %s is not compatible "
799 "with target architecture %s."),
800 bfd_get_arch_info (nbfd.get ())->printable_name,
801 b->printable_name);
802
803 /* Read the section address information out of the symbol file. Since the
804 file is generated by the JIT at runtime, it should all of the absolute
805 addresses that we care about. */
806 section_addr_info sai;
807 for (sec = nbfd->sections; sec != NULL; sec = sec->next)
808 if ((bfd_section_flags (sec) & (SEC_ALLOC|SEC_LOAD)) != 0)
809 {
810 /* We assume that these virtual addresses are absolute, and do not
811 treat them as offsets. */
812 sai.emplace_back (bfd_section_vma (sec),
813 bfd_section_name (sec),
814 sec->index);
815 }
816
817 /* This call does not take ownership of SAI. */
818 objfile = symbol_file_add_from_bfd (nbfd.get (),
819 bfd_get_filename (nbfd.get ()), 0,
820 &sai,
821 OBJF_SHARED | OBJF_NOT_FILENAME, NULL);
822
823 add_objfile_entry (objfile, entry_addr);
824 }
825
826 /* This function registers code associated with a JIT code entry. It uses the
827 pointer and size pair in the entry to read the symbol file from the remote
828 and then calls symbol_file_add_from_local_memory to add it as though it were
829 a symbol file added by the user. */
830
831 static void
832 jit_register_code (struct gdbarch *gdbarch,
833 CORE_ADDR entry_addr, struct jit_code_entry *code_entry)
834 {
835 int success;
836
837 if (jit_debug)
838 fprintf_unfiltered (gdb_stdlog,
839 "jit_register_code, symfile_addr = %s, "
840 "symfile_size = %s\n",
841 paddress (gdbarch, code_entry->symfile_addr),
842 pulongest (code_entry->symfile_size));
843
844 success = jit_reader_try_read_symtab (code_entry, entry_addr);
845
846 if (!success)
847 jit_bfd_try_read_symtab (code_entry, entry_addr, gdbarch);
848 }
849
850 /* Look up the objfile with this code entry address. */
851
852 static struct objfile *
853 jit_find_objf_with_entry_addr (CORE_ADDR entry_addr)
854 {
855 for (objfile *objf : current_program_space->objfiles ())
856 {
857 if (objf->jited_data != nullptr && objf->jited_data->addr == entry_addr)
858 return objf;
859 }
860
861 return NULL;
862 }
863
864 /* This is called when a breakpoint is deleted. It updates the
865 inferior's cache, if needed. */
866
867 static void
868 jit_breakpoint_deleted (struct breakpoint *b)
869 {
870 struct bp_location *iter;
871
872 if (b->type != bp_jit_event)
873 return;
874
875 for (iter = b->loc; iter != NULL; iter = iter->next)
876 {
877 for (objfile *objf : iter->pspace->objfiles ())
878 {
879 jiter_objfile_data *jiter_data = objf->jiter_data.get ();
880
881 if (jiter_data != nullptr
882 && jiter_data->jit_breakpoint == iter->owner)
883 {
884 jiter_data->cached_code_address = 0;
885 jiter_data->jit_breakpoint = nullptr;
886 }
887 }
888 }
889 }
890
891 /* (Re-)Initialize the jit breakpoints for JIT-producing objfiles in
892 PSPACE. */
893
894 static void
895 jit_breakpoint_re_set_internal (struct gdbarch *gdbarch, program_space *pspace)
896 {
897 jiter_objfile_data *objf_data;
898
899 for (objfile *the_objfile : pspace->objfiles ())
900 {
901 /* Lookup the registration symbol. If it is missing, then we
902 assume we are not attached to a JIT. */
903 bound_minimal_symbol reg_symbol
904 = lookup_minimal_symbol (jit_break_name, nullptr, the_objfile);
905 if (reg_symbol.minsym == NULL
906 || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0)
907 continue;
908
909 bound_minimal_symbol desc_symbol
910 = lookup_minimal_symbol (jit_descriptor_name, NULL, the_objfile);
911 if (desc_symbol.minsym == NULL
912 || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0)
913 continue;
914
915 objf_data = get_jiter_objfile_data (reg_symbol.objfile);
916 objf_data->register_code = reg_symbol.minsym;
917 objf_data->descriptor = desc_symbol.minsym;
918
919 CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (the_objfile,
920 objf_data->register_code);
921
922 if (jit_debug)
923 fprintf_unfiltered (gdb_stdlog,
924 "jit_breakpoint_re_set_internal, "
925 "breakpoint_addr = %s\n",
926 paddress (gdbarch, addr));
927
928 /* Check if we need to re-create the breakpoint. */
929 if (objf_data->cached_code_address == addr)
930 continue;
931
932 /* Delete the old breakpoint. */
933 if (objf_data->jit_breakpoint != nullptr)
934 delete_breakpoint (objf_data->jit_breakpoint);
935
936 /* Put a breakpoint in the registration symbol. */
937 objf_data->cached_code_address = addr;
938 objf_data->jit_breakpoint = create_jit_event_breakpoint (gdbarch, addr);
939 }
940 }
941
942 /* The private data passed around in the frame unwind callback
943 functions. */
944
945 struct jit_unwind_private
946 {
947 /* Cached register values. See jit_frame_sniffer to see how this
948 works. */
949 detached_regcache *regcache;
950
951 /* The frame being unwound. */
952 struct frame_info *this_frame;
953 };
954
955 /* Sets the value of a particular register in this frame. */
956
957 static void
958 jit_unwind_reg_set_impl (struct gdb_unwind_callbacks *cb, int dwarf_regnum,
959 struct gdb_reg_value *value)
960 {
961 struct jit_unwind_private *priv;
962 int gdb_reg;
963
964 priv = (struct jit_unwind_private *) cb->priv_data;
965
966 gdb_reg = gdbarch_dwarf2_reg_to_regnum (get_frame_arch (priv->this_frame),
967 dwarf_regnum);
968 if (gdb_reg == -1)
969 {
970 if (jit_debug)
971 fprintf_unfiltered (gdb_stdlog,
972 _("Could not recognize DWARF regnum %d"),
973 dwarf_regnum);
974 value->free (value);
975 return;
976 }
977
978 priv->regcache->raw_supply (gdb_reg, value->value);
979 value->free (value);
980 }
981
982 static void
983 reg_value_free_impl (struct gdb_reg_value *value)
984 {
985 xfree (value);
986 }
987
988 /* Get the value of register REGNUM in the previous frame. */
989
990 static struct gdb_reg_value *
991 jit_unwind_reg_get_impl (struct gdb_unwind_callbacks *cb, int regnum)
992 {
993 struct jit_unwind_private *priv;
994 struct gdb_reg_value *value;
995 int gdb_reg, size;
996 struct gdbarch *frame_arch;
997
998 priv = (struct jit_unwind_private *) cb->priv_data;
999 frame_arch = get_frame_arch (priv->this_frame);
1000
1001 gdb_reg = gdbarch_dwarf2_reg_to_regnum (frame_arch, regnum);
1002 size = register_size (frame_arch, gdb_reg);
1003 value = ((struct gdb_reg_value *)
1004 xmalloc (sizeof (struct gdb_reg_value) + size - 1));
1005 value->defined = deprecated_frame_register_read (priv->this_frame, gdb_reg,
1006 value->value);
1007 value->size = size;
1008 value->free = reg_value_free_impl;
1009 return value;
1010 }
1011
1012 /* gdb_reg_value has a free function, which must be called on each
1013 saved register value. */
1014
1015 static void
1016 jit_dealloc_cache (struct frame_info *this_frame, void *cache)
1017 {
1018 struct jit_unwind_private *priv_data = (struct jit_unwind_private *) cache;
1019
1020 gdb_assert (priv_data->regcache != NULL);
1021 delete priv_data->regcache;
1022 xfree (priv_data);
1023 }
1024
1025 /* The frame sniffer for the pseudo unwinder.
1026
1027 While this is nominally a frame sniffer, in the case where the JIT
1028 reader actually recognizes the frame, it does a lot more work -- it
1029 unwinds the frame and saves the corresponding register values in
1030 the cache. jit_frame_prev_register simply returns the saved
1031 register values. */
1032
1033 static int
1034 jit_frame_sniffer (const struct frame_unwind *self,
1035 struct frame_info *this_frame, void **cache)
1036 {
1037 struct jit_unwind_private *priv_data;
1038 struct gdb_unwind_callbacks callbacks;
1039 struct gdb_reader_funcs *funcs;
1040
1041 callbacks.reg_get = jit_unwind_reg_get_impl;
1042 callbacks.reg_set = jit_unwind_reg_set_impl;
1043 callbacks.target_read = jit_target_read_impl;
1044
1045 if (loaded_jit_reader == NULL)
1046 return 0;
1047
1048 funcs = loaded_jit_reader->functions;
1049
1050 gdb_assert (!*cache);
1051
1052 *cache = XCNEW (struct jit_unwind_private);
1053 priv_data = (struct jit_unwind_private *) *cache;
1054 /* Take a snapshot of current regcache. */
1055 priv_data->regcache = new detached_regcache (get_frame_arch (this_frame),
1056 true);
1057 priv_data->this_frame = this_frame;
1058
1059 callbacks.priv_data = priv_data;
1060
1061 /* Try to coax the provided unwinder to unwind the stack */
1062 if (funcs->unwind (funcs, &callbacks) == GDB_SUCCESS)
1063 {
1064 if (jit_debug)
1065 fprintf_unfiltered (gdb_stdlog, _("Successfully unwound frame using "
1066 "JIT reader.\n"));
1067 return 1;
1068 }
1069 if (jit_debug)
1070 fprintf_unfiltered (gdb_stdlog, _("Could not unwind frame using "
1071 "JIT reader.\n"));
1072
1073 jit_dealloc_cache (this_frame, *cache);
1074 *cache = NULL;
1075
1076 return 0;
1077 }
1078
1079
1080 /* The frame_id function for the pseudo unwinder. Relays the call to
1081 the loaded plugin. */
1082
1083 static void
1084 jit_frame_this_id (struct frame_info *this_frame, void **cache,
1085 struct frame_id *this_id)
1086 {
1087 struct jit_unwind_private priv;
1088 struct gdb_frame_id frame_id;
1089 struct gdb_reader_funcs *funcs;
1090 struct gdb_unwind_callbacks callbacks;
1091
1092 priv.regcache = NULL;
1093 priv.this_frame = this_frame;
1094
1095 /* We don't expect the frame_id function to set any registers, so we
1096 set reg_set to NULL. */
1097 callbacks.reg_get = jit_unwind_reg_get_impl;
1098 callbacks.reg_set = NULL;
1099 callbacks.target_read = jit_target_read_impl;
1100 callbacks.priv_data = &priv;
1101
1102 gdb_assert (loaded_jit_reader);
1103 funcs = loaded_jit_reader->functions;
1104
1105 frame_id = funcs->get_frame_id (funcs, &callbacks);
1106 *this_id = frame_id_build (frame_id.stack_address, frame_id.code_address);
1107 }
1108
1109 /* Pseudo unwinder function. Reads the previously fetched value for
1110 the register from the cache. */
1111
1112 static struct value *
1113 jit_frame_prev_register (struct frame_info *this_frame, void **cache, int reg)
1114 {
1115 struct jit_unwind_private *priv = (struct jit_unwind_private *) *cache;
1116 struct gdbarch *gdbarch;
1117
1118 if (priv == NULL)
1119 return frame_unwind_got_optimized (this_frame, reg);
1120
1121 gdbarch = priv->regcache->arch ();
1122 gdb_byte *buf = (gdb_byte *) alloca (register_size (gdbarch, reg));
1123 enum register_status status = priv->regcache->cooked_read (reg, buf);
1124
1125 if (status == REG_VALID)
1126 return frame_unwind_got_bytes (this_frame, reg, buf);
1127 else
1128 return frame_unwind_got_optimized (this_frame, reg);
1129 }
1130
1131 /* Relay everything back to the unwinder registered by the JIT debug
1132 info reader.*/
1133
1134 static const struct frame_unwind jit_frame_unwind =
1135 {
1136 NORMAL_FRAME,
1137 default_frame_unwind_stop_reason,
1138 jit_frame_this_id,
1139 jit_frame_prev_register,
1140 NULL,
1141 jit_frame_sniffer,
1142 jit_dealloc_cache
1143 };
1144
1145
1146 /* This is the information that is stored at jit_gdbarch_data for each
1147 architecture. */
1148
1149 struct jit_gdbarch_data_type
1150 {
1151 /* Has the (pseudo) unwinder been prepended? */
1152 int unwinder_registered;
1153 };
1154
1155 /* Check GDBARCH and prepend the pseudo JIT unwinder if needed. */
1156
1157 static void
1158 jit_prepend_unwinder (struct gdbarch *gdbarch)
1159 {
1160 struct jit_gdbarch_data_type *data;
1161
1162 data
1163 = (struct jit_gdbarch_data_type *) gdbarch_data (gdbarch, jit_gdbarch_data);
1164 if (!data->unwinder_registered)
1165 {
1166 frame_unwind_prepend_unwinder (gdbarch, &jit_frame_unwind);
1167 data->unwinder_registered = 1;
1168 }
1169 }
1170
1171 /* Register any already created translations. */
1172
1173 static void
1174 jit_inferior_init (struct gdbarch *gdbarch)
1175 {
1176 struct jit_descriptor descriptor;
1177 struct jit_code_entry cur_entry;
1178 CORE_ADDR cur_entry_addr;
1179
1180 if (jit_debug)
1181 fprintf_unfiltered (gdb_stdlog, "jit_inferior_init\n");
1182
1183 jit_prepend_unwinder (gdbarch);
1184
1185 jit_breakpoint_re_set_internal (gdbarch, current_program_space);
1186
1187 for (objfile *jiter : current_program_space->objfiles ())
1188 {
1189 if (jiter->jiter_data == nullptr)
1190 continue;
1191
1192 /* Read the descriptor so we can check the version number and load
1193 any already JITed functions. */
1194 if (!jit_read_descriptor (gdbarch, &descriptor, jiter))
1195 continue;
1196
1197 /* Check that the version number agrees with that we support. */
1198 if (descriptor.version != 1)
1199 {
1200 printf_unfiltered (_("Unsupported JIT protocol version %ld "
1201 "in descriptor (expected 1)\n"),
1202 (long) descriptor.version);
1203 continue;
1204 }
1205
1206 /* If we've attached to a running program, we need to check the
1207 descriptor to register any functions that were already
1208 generated. */
1209 for (cur_entry_addr = descriptor.first_entry;
1210 cur_entry_addr != 0;
1211 cur_entry_addr = cur_entry.next_entry)
1212 {
1213 jit_read_code_entry (gdbarch, cur_entry_addr, &cur_entry);
1214
1215 /* This hook may be called many times during setup, so make sure
1216 we don't add the same symbol file twice. */
1217 if (jit_find_objf_with_entry_addr (cur_entry_addr) != NULL)
1218 continue;
1219
1220 jit_register_code (gdbarch, cur_entry_addr, &cur_entry);
1221 }
1222 }
1223 }
1224
1225 /* inferior_created observer. */
1226
1227 static void
1228 jit_inferior_created (struct target_ops *ops, int from_tty)
1229 {
1230 jit_inferior_created_hook ();
1231 }
1232
1233 /* Exported routine to call when an inferior has been created. */
1234
1235 void
1236 jit_inferior_created_hook (void)
1237 {
1238 jit_inferior_init (target_gdbarch ());
1239 }
1240
1241 /* Exported routine to call to re-set the jit breakpoints,
1242 e.g. when a program is rerun. */
1243
1244 void
1245 jit_breakpoint_re_set (void)
1246 {
1247 jit_breakpoint_re_set_internal (target_gdbarch (), current_program_space);
1248 }
1249
1250 /* This function cleans up any code entries left over when the
1251 inferior exits. We get left over code when the inferior exits
1252 without unregistering its code, for example when it crashes. */
1253
1254 static void
1255 jit_inferior_exit_hook (struct inferior *inf)
1256 {
1257 for (objfile *objf : current_program_space->objfiles_safe ())
1258 {
1259 if (objf->jited_data != nullptr && objf->jited_data->addr != 0)
1260 objf->unlink ();
1261 }
1262 }
1263
1264 void
1265 jit_event_handler (gdbarch *gdbarch, objfile *jiter)
1266 {
1267 struct jit_descriptor descriptor;
1268 struct jit_code_entry code_entry;
1269 CORE_ADDR entry_addr;
1270 struct objfile *objf;
1271
1272 /* If we get a JIT breakpoint event for this objfile, it is necessarily a
1273 JITer. */
1274 gdb_assert (jiter->jiter_data != nullptr);
1275
1276 /* Read the descriptor from remote memory. */
1277 if (!jit_read_descriptor (gdbarch, &descriptor, jiter))
1278 return;
1279 entry_addr = descriptor.relevant_entry;
1280
1281 /* Do the corresponding action. */
1282 switch (descriptor.action_flag)
1283 {
1284 case JIT_NOACTION:
1285 break;
1286 case JIT_REGISTER:
1287 jit_read_code_entry (gdbarch, entry_addr, &code_entry);
1288 jit_register_code (gdbarch, entry_addr, &code_entry);
1289 break;
1290 case JIT_UNREGISTER:
1291 objf = jit_find_objf_with_entry_addr (entry_addr);
1292 if (objf == NULL)
1293 printf_unfiltered (_("Unable to find JITed code "
1294 "entry at address: %s\n"),
1295 paddress (gdbarch, entry_addr));
1296 else
1297 objf->unlink ();
1298
1299 break;
1300 default:
1301 error (_("Unknown action_flag value in JIT descriptor!"));
1302 break;
1303 }
1304 }
1305
1306 /* Initialize the jit_gdbarch_data slot with an instance of struct
1307 jit_gdbarch_data_type */
1308
1309 static void *
1310 jit_gdbarch_data_init (struct obstack *obstack)
1311 {
1312 struct jit_gdbarch_data_type *data =
1313 XOBNEW (obstack, struct jit_gdbarch_data_type);
1314
1315 data->unwinder_registered = 0;
1316
1317 return data;
1318 }
1319
1320 void _initialize_jit ();
1321 void
1322 _initialize_jit ()
1323 {
1324 jit_reader_dir = relocate_gdb_directory (JIT_READER_DIR,
1325 JIT_READER_DIR_RELOCATABLE);
1326 add_setshow_zuinteger_cmd ("jit", class_maintenance, &jit_debug,
1327 _("Set JIT debugging."),
1328 _("Show JIT debugging."),
1329 _("When non-zero, JIT debugging is enabled."),
1330 NULL,
1331 show_jit_debug,
1332 &setdebuglist, &showdebuglist);
1333
1334 gdb::observers::inferior_created.attach (jit_inferior_created);
1335 gdb::observers::inferior_exit.attach (jit_inferior_exit_hook);
1336 gdb::observers::breakpoint_deleted.attach (jit_breakpoint_deleted);
1337
1338 jit_gdbarch_data = gdbarch_data_register_pre_init (jit_gdbarch_data_init);
1339 if (is_dl_available ())
1340 {
1341 struct cmd_list_element *c;
1342
1343 c = add_com ("jit-reader-load", no_class, jit_reader_load_command, _("\
1344 Load FILE as debug info reader and unwinder for JIT compiled code.\n\
1345 Usage: jit-reader-load FILE\n\
1346 Try to load file FILE as a debug info reader (and unwinder) for\n\
1347 JIT compiled code. The file is loaded from " JIT_READER_DIR ",\n\
1348 relocated relative to the GDB executable if required."));
1349 set_cmd_completer (c, filename_completer);
1350
1351 c = add_com ("jit-reader-unload", no_class,
1352 jit_reader_unload_command, _("\
1353 Unload the currently loaded JIT debug info reader.\n\
1354 Usage: jit-reader-unload\n\n\
1355 Do \"help jit-reader-load\" for info on loading debug info readers."));
1356 set_cmd_completer (c, noop_completer);
1357 }
1358 }