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