gdb: add target_ops::supports_displaced_step
[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;
8c95582d 582 stab->linetable->item[i].is_stmt = 1;
1825a88d
SD
583 }
584}
585
586/* Called by readers to close a gdb_symtab. Does not need to do
587 anything as of now. */
588
589static void
590jit_symtab_close_impl (struct gdb_symbol_callbacks *cb,
3a90f266 591 struct gdb_symtab *stab)
1825a88d
SD
592{
593 /* Right now nothing needs to be done here. We may need to do some
594 cleanup here in the future (again, without breaking the plugin
595 ABI). */
596}
597
598/* Transform STAB to a proper symtab, and add it it OBJFILE. */
599
600static void
601finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
602{
43f3e411 603 struct compunit_symtab *cust;
241fd515 604 size_t blockvector_size;
1825a88d 605 CORE_ADDR begin, end;
346d1dfe 606 struct blockvector *bv;
1825a88d 607
0394eed1
SM
608 int actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks;
609
610 /* Sort the blocks in the order they should appear in the blockvector. */
611 stab->blocks.sort([] (const gdb_block &a, const gdb_block &b)
612 {
613 if (a.begin != b.begin)
614 return a.begin < b.begin;
615
616 return a.end > b.end;
617 });
1825a88d 618
89867184
SM
619 cust = allocate_compunit_symtab (objfile, stab->file_name.c_str ());
620 allocate_symtab (cust, stab->file_name.c_str ());
43f3e411
DE
621 add_compunit_symtab_to_objfile (cust);
622
1825a88d 623 /* JIT compilers compile in memory. */
43f3e411 624 COMPUNIT_DIRNAME (cust) = NULL;
1825a88d
SD
625
626 /* Copy over the linetable entry if one was provided. */
627 if (stab->linetable)
628 {
241fd515
AM
629 size_t size = ((stab->linetable->nitems - 1)
630 * sizeof (struct linetable_entry)
631 + sizeof (struct linetable));
43f3e411 632 SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust))
224c3ddb 633 = (struct linetable *) obstack_alloc (&objfile->objfile_obstack, size);
89867184
SM
634 memcpy (SYMTAB_LINETABLE (COMPUNIT_FILETABS (cust)),
635 stab->linetable.get (), size);
1825a88d
SD
636 }
637
638 blockvector_size = (sizeof (struct blockvector)
3a90f266 639 + (actual_nblocks - 1) * sizeof (struct block *));
224c3ddb
SM
640 bv = (struct blockvector *) obstack_alloc (&objfile->objfile_obstack,
641 blockvector_size);
43f3e411 642 COMPUNIT_BLOCKVECTOR (cust) = bv;
1825a88d 643
0394eed1
SM
644 /* At the end of this function, (begin, end) will contain the PC range this
645 entire blockvector spans. */
346d1dfe 646 BLOCKVECTOR_MAP (bv) = NULL;
0394eed1
SM
647 begin = stab->blocks.front ().begin;
648 end = stab->blocks.front ().end;
346d1dfe 649 BLOCKVECTOR_NBLOCKS (bv) = actual_nblocks;
1825a88d
SD
650
651 /* First run over all the gdb_block objects, creating a real block
652 object for each. Simultaneously, keep setting the real_block
653 fields. */
0394eed1
SM
654 int block_idx = FIRST_LOCAL_BLOCK;
655 for (gdb_block &gdb_block_iter : stab->blocks)
1825a88d
SD
656 {
657 struct block *new_block = allocate_block (&objfile->objfile_obstack);
8c14c3a3 658 struct symbol *block_name = new (&objfile->objfile_obstack) symbol;
08feed99 659 struct type *block_type = arch_type (objfile->arch (),
2535757a 660 TYPE_CODE_VOID,
77b7c781 661 TARGET_CHAR_BIT,
2535757a 662 "void");
1825a88d 663
b026f593
KS
664 BLOCK_MULTIDICT (new_block)
665 = mdict_create_linear (&objfile->objfile_obstack, NULL);
1825a88d 666 /* The address range. */
0394eed1
SM
667 BLOCK_START (new_block) = (CORE_ADDR) gdb_block_iter.begin;
668 BLOCK_END (new_block) = (CORE_ADDR) gdb_block_iter.end;
1825a88d
SD
669
670 /* The name. */
1825a88d 671 SYMBOL_DOMAIN (block_name) = VAR_DOMAIN;
f1e6e072 672 SYMBOL_ACLASS_INDEX (block_name) = LOC_BLOCK;
08be3fe3 673 symbol_set_symtab (block_name, COMPUNIT_FILETABS (cust));
2535757a 674 SYMBOL_TYPE (block_name) = lookup_function_type (block_type);
1825a88d
SD
675 SYMBOL_BLOCK_VALUE (block_name) = new_block;
676
4d4eaa30
CB
677 block_name->m_name = obstack_strdup (&objfile->objfile_obstack,
678 gdb_block_iter.name.get ());
1825a88d
SD
679
680 BLOCK_FUNCTION (new_block) = block_name;
681
0394eed1 682 BLOCKVECTOR_BLOCK (bv, block_idx) = new_block;
1825a88d 683 if (begin > BLOCK_START (new_block))
3a90f266 684 begin = BLOCK_START (new_block);
1825a88d 685 if (end < BLOCK_END (new_block))
3a90f266 686 end = BLOCK_END (new_block);
1825a88d 687
0394eed1
SM
688 gdb_block_iter.real_block = new_block;
689
690 block_idx++;
1825a88d
SD
691 }
692
693 /* Now add the special blocks. */
0394eed1
SM
694 struct block *block_iter = NULL;
695 for (enum block_enum i : { GLOBAL_BLOCK, STATIC_BLOCK })
1825a88d 696 {
84a146c9
TT
697 struct block *new_block;
698
699 new_block = (i == GLOBAL_BLOCK
700 ? allocate_global_block (&objfile->objfile_obstack)
701 : allocate_block (&objfile->objfile_obstack));
b026f593
KS
702 BLOCK_MULTIDICT (new_block)
703 = mdict_create_linear (&objfile->objfile_obstack, NULL);
1825a88d
SD
704 BLOCK_SUPERBLOCK (new_block) = block_iter;
705 block_iter = new_block;
706
707 BLOCK_START (new_block) = (CORE_ADDR) begin;
708 BLOCK_END (new_block) = (CORE_ADDR) end;
709
346d1dfe 710 BLOCKVECTOR_BLOCK (bv, i) = new_block;
84a146c9
TT
711
712 if (i == GLOBAL_BLOCK)
43f3e411 713 set_block_compunit_symtab (new_block, cust);
1825a88d
SD
714 }
715
716 /* Fill up the superblock fields for the real blocks, using the
717 real_block fields populated earlier. */
0394eed1 718 for (gdb_block &gdb_block_iter : stab->blocks)
1825a88d 719 {
0394eed1 720 if (gdb_block_iter.parent != NULL)
db334a01
SD
721 {
722 /* If the plugin specifically mentioned a parent block, we
723 use that. */
0394eed1
SM
724 BLOCK_SUPERBLOCK (gdb_block_iter.real_block) =
725 gdb_block_iter.parent->real_block;
db334a01
SD
726 }
727 else
728 {
729 /* And if not, we set a default parent block. */
0394eed1 730 BLOCK_SUPERBLOCK (gdb_block_iter.real_block) =
346d1dfe 731 BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
db334a01 732 }
1825a88d 733 }
1825a88d
SD
734}
735
736/* Called when closing a gdb_objfile. Converts OBJ to a proper
737 objfile. */
738
739static void
740jit_object_close_impl (struct gdb_symbol_callbacks *cb,
3a90f266 741 struct gdb_object *obj)
1825a88d 742{
1825a88d
SD
743 struct objfile *objfile;
744 jit_dbg_reader_data *priv_data;
745
9a3c8263 746 priv_data = (jit_dbg_reader_data *) cb->priv_data;
1825a88d 747
bda13cdc
TT
748 objfile = objfile::make (nullptr, "<< JIT compiled code >>",
749 OBJF_NOT_FILENAME);
df6d5441 750 objfile->per_bfd->gdbarch = target_gdbarch ();
1825a88d 751
1b61f46d
SM
752 for (gdb_symtab &symtab : obj->symtabs)
753 finalize_symtab (&symtab, objfile);
754
1825a88d 755 add_objfile_entry (objfile, *priv_data);
1b61f46d
SM
756
757 delete obj;
1825a88d
SD
758}
759
744ab88c 760/* Try to read CODE_ENTRY using the loaded jit reader (if any).
b4264740
SD
761 ENTRY_ADDR is the address of the struct jit_code_entry in the
762 inferior address space. */
1825a88d
SD
763
764static int
744ab88c 765jit_reader_try_read_symtab (struct jit_code_entry *code_entry,
3a90f266 766 CORE_ADDR entry_addr)
1825a88d 767{
1825a88d 768 int status;
1825a88d
SD
769 jit_dbg_reader_data priv_data;
770 struct gdb_reader_funcs *funcs;
1825a88d
SD
771 struct gdb_symbol_callbacks callbacks =
772 {
773 jit_object_open_impl,
774 jit_symtab_open_impl,
775 jit_block_open_impl,
776 jit_symtab_close_impl,
777 jit_object_close_impl,
778
779 jit_symtab_line_mapping_add_impl,
780 jit_target_read_impl,
781
782 &priv_data
783 };
784
744ab88c 785 priv_data = entry_addr;
1825a88d
SD
786
787 if (!loaded_jit_reader)
788 return 0;
789
7190276c 790 gdb::byte_vector gdb_mem (code_entry->symfile_size);
1825a88d
SD
791
792 status = 1;
a70b8144 793 try
492d29ea 794 {
7190276c 795 if (target_read_memory (code_entry->symfile_addr, gdb_mem.data (),
492d29ea
PA
796 code_entry->symfile_size))
797 status = 0;
798 }
230d2906 799 catch (const gdb_exception &e)
492d29ea 800 {
1825a88d 801 status = 0;
492d29ea 802 }
1825a88d
SD
803
804 if (status)
805 {
806 funcs = loaded_jit_reader->functions;
7190276c
SM
807 if (funcs->read (funcs, &callbacks, gdb_mem.data (),
808 code_entry->symfile_size)
3a90f266
SM
809 != GDB_SUCCESS)
810 status = 0;
1825a88d
SD
811 }
812
1825a88d
SD
813 if (jit_debug && status == 0)
814 fprintf_unfiltered (gdb_stdlog,
3a90f266 815 "Could not read symtab using the loaded JIT reader.\n");
1825a88d
SD
816 return status;
817}
818
744ab88c 819/* Try to read CODE_ENTRY using BFD. ENTRY_ADDR is the address of the
b4264740 820 struct jit_code_entry in the inferior address space. */
1825a88d
SD
821
822static void
823jit_bfd_try_read_symtab (struct jit_code_entry *code_entry,
3a90f266
SM
824 CORE_ADDR entry_addr,
825 struct gdbarch *gdbarch)
4efc6507 826{
4efc6507
DE
827 struct bfd_section *sec;
828 struct objfile *objfile;
4efc6507 829 const struct bfd_arch_info *b;
4efc6507 830
a255712f
PP
831 if (jit_debug)
832 fprintf_unfiltered (gdb_stdlog,
38b49e22 833 "jit_bfd_try_read_symtab, symfile_addr = %s, "
a255712f
PP
834 "symfile_size = %s\n",
835 paddress (gdbarch, code_entry->symfile_addr),
836 pulongest (code_entry->symfile_size));
837
192b62ce
TT
838 gdb_bfd_ref_ptr nbfd (bfd_open_from_target_memory (code_entry->symfile_addr,
839 code_entry->symfile_size,
840 gnutarget));
4dfb2365
JK
841 if (nbfd == NULL)
842 {
843 puts_unfiltered (_("Error opening JITed symbol file, ignoring it.\n"));
844 return;
845 }
4efc6507
DE
846
847 /* Check the format. NOTE: This initializes important data that GDB uses!
848 We would segfault later without this line. */
192b62ce 849 if (!bfd_check_format (nbfd.get (), bfd_object))
4efc6507
DE
850 {
851 printf_unfiltered (_("\
852JITed symbol file is not an object file, ignoring it.\n"));
4efc6507
DE
853 return;
854 }
855
856 /* Check bfd arch. */
0756c555 857 b = gdbarch_bfd_arch_info (gdbarch);
192b62ce 858 if (b->compatible (b, bfd_get_arch_info (nbfd.get ())) != b)
4efc6507 859 warning (_("JITed object file architecture %s is not compatible "
3a90f266 860 "with target architecture %s."),
192b62ce
TT
861 bfd_get_arch_info (nbfd.get ())->printable_name,
862 b->printable_name);
4efc6507
DE
863
864 /* Read the section address information out of the symbol file. Since the
865 file is generated by the JIT at runtime, it should all of the absolute
866 addresses that we care about. */
37e136b1 867 section_addr_info sai;
4efc6507 868 for (sec = nbfd->sections; sec != NULL; sec = sec->next)
fd361982 869 if ((bfd_section_flags (sec) & (SEC_ALLOC|SEC_LOAD)) != 0)
4efc6507 870 {
3a90f266
SM
871 /* We assume that these virtual addresses are absolute, and do not
872 treat them as offsets. */
fd361982
AM
873 sai.emplace_back (bfd_section_vma (sec),
874 bfd_section_name (sec),
37e136b1 875 sec->index);
4efc6507
DE
876 }
877
8ac244b4 878 /* This call does not take ownership of SAI. */
192b62ce 879 objfile = symbol_file_add_from_bfd (nbfd.get (),
37e136b1
TT
880 bfd_get_filename (nbfd.get ()), 0,
881 &sai,
40135bb1 882 OBJF_SHARED | OBJF_NOT_FILENAME, NULL);
4efc6507 883
744ab88c 884 add_objfile_entry (objfile, entry_addr);
1825a88d
SD
885}
886
887/* This function registers code associated with a JIT code entry. It uses the
888 pointer and size pair in the entry to read the symbol file from the remote
889 and then calls symbol_file_add_from_local_memory to add it as though it were
890 a symbol file added by the user. */
891
892static void
893jit_register_code (struct gdbarch *gdbarch,
3a90f266 894 CORE_ADDR entry_addr, struct jit_code_entry *code_entry)
1825a88d 895{
974a734b 896 int success;
1825a88d
SD
897
898 if (jit_debug)
899 fprintf_unfiltered (gdb_stdlog,
3a90f266
SM
900 "jit_register_code, symfile_addr = %s, "
901 "symfile_size = %s\n",
902 paddress (gdbarch, code_entry->symfile_addr),
903 pulongest (code_entry->symfile_size));
1825a88d 904
744ab88c 905 success = jit_reader_try_read_symtab (code_entry, entry_addr);
1825a88d
SD
906
907 if (!success)
744ab88c 908 jit_bfd_try_read_symtab (code_entry, entry_addr, gdbarch);
4efc6507
DE
909}
910
4efc6507
DE
911/* Look up the objfile with this code entry address. */
912
913static struct objfile *
914jit_find_objf_with_entry_addr (CORE_ADDR entry_addr)
915{
2030c079 916 for (objfile *objf : current_program_space->objfiles ())
4efc6507 917 {
03bef283
TT
918 struct jit_objfile_data *objf_data;
919
9a3c8263
SM
920 objf_data
921 = (struct jit_objfile_data *) objfile_data (objf, jit_objfile_data);
03bef283 922 if (objf_data != NULL && objf_data->addr == entry_addr)
3a90f266 923 return objf;
4efc6507
DE
924 }
925 return NULL;
926}
927
f25c0135
TT
928/* This is called when a breakpoint is deleted. It updates the
929 inferior's cache, if needed. */
930
931static void
932jit_breakpoint_deleted (struct breakpoint *b)
933{
934 struct bp_location *iter;
935
936 if (b->type != bp_jit_event)
937 return;
938
939 for (iter = b->loc; iter != NULL; iter = iter->next)
8eacb197
TT
940 {
941 struct jit_program_space_data *ps_data;
942
cb60f420 943 ps_data = jit_program_space_key.get (iter->pspace);
8eacb197
TT
944 if (ps_data != NULL && ps_data->jit_breakpoint == iter->owner)
945 {
946 ps_data->cached_code_address = 0;
947 ps_data->jit_breakpoint = NULL;
948 }
949 }
f25c0135
TT
950}
951
03673fc7 952/* (Re-)Initialize the jit breakpoint if necessary.
9bb84c9f 953 Return 0 if the jit breakpoint has been successfully initialized. */
03673fc7
PP
954
955static int
956jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
8eacb197 957 struct jit_program_space_data *ps_data)
03673fc7 958{
7cbd4a93 959 struct bound_minimal_symbol reg_symbol;
3b7344d5 960 struct bound_minimal_symbol desc_symbol;
03bef283 961 struct jit_objfile_data *objf_data;
f25c0135 962 CORE_ADDR addr;
03bef283 963
8eacb197 964 if (ps_data->objfile == NULL)
f25c0135
TT
965 {
966 /* Lookup the registration symbol. If it is missing, then we
967 assume we are not attached to a JIT. */
64cc34d8 968 reg_symbol = lookup_bound_minimal_symbol (jit_break_name);
7cbd4a93 969 if (reg_symbol.minsym == NULL
77e371c0 970 || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0)
f25c0135 971 return 1;
03bef283 972
7cbd4a93
TT
973 desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL,
974 reg_symbol.objfile);
3b7344d5 975 if (desc_symbol.minsym == NULL
77e371c0 976 || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0)
f25c0135 977 return 1;
03bef283 978
7cbd4a93
TT
979 objf_data = get_jit_objfile_data (reg_symbol.objfile);
980 objf_data->register_code = reg_symbol.minsym;
3b7344d5 981 objf_data->descriptor = desc_symbol.minsym;
03bef283 982
7cbd4a93 983 ps_data->objfile = reg_symbol.objfile;
f25c0135
TT
984 }
985 else
8eacb197 986 objf_data = get_jit_objfile_data (ps_data->objfile);
03bef283 987
77e371c0 988 addr = MSYMBOL_VALUE_ADDRESS (ps_data->objfile, objf_data->register_code);
03bef283 989
03673fc7
PP
990 if (jit_debug)
991 fprintf_unfiltered (gdb_stdlog,
992 "jit_breakpoint_re_set_internal, "
993 "breakpoint_addr = %s\n",
f25c0135
TT
994 paddress (gdbarch, addr));
995
8eacb197 996 if (ps_data->cached_code_address == addr)
9bb84c9f 997 return 0;
f25c0135
TT
998
999 /* Delete the old breakpoint. */
8eacb197
TT
1000 if (ps_data->jit_breakpoint != NULL)
1001 delete_breakpoint (ps_data->jit_breakpoint);
03673fc7
PP
1002
1003 /* Put a breakpoint in the registration symbol. */
8eacb197
TT
1004 ps_data->cached_code_address = addr;
1005 ps_data->jit_breakpoint = create_jit_event_breakpoint (gdbarch, addr);
03673fc7
PP
1006
1007 return 0;
1008}
1009
3623dc3a
SD
1010/* The private data passed around in the frame unwind callback
1011 functions. */
1012
1013struct jit_unwind_private
1014{
1015 /* Cached register values. See jit_frame_sniffer to see how this
1016 works. */
c8ec2f33 1017 detached_regcache *regcache;
3623dc3a
SD
1018
1019 /* The frame being unwound. */
1020 struct frame_info *this_frame;
1021};
1022
1023/* Sets the value of a particular register in this frame. */
1024
1025static void
1026jit_unwind_reg_set_impl (struct gdb_unwind_callbacks *cb, int dwarf_regnum,
3a90f266 1027 struct gdb_reg_value *value)
3623dc3a
SD
1028{
1029 struct jit_unwind_private *priv;
1030 int gdb_reg;
1031
9a3c8263 1032 priv = (struct jit_unwind_private *) cb->priv_data;
3623dc3a
SD
1033
1034 gdb_reg = gdbarch_dwarf2_reg_to_regnum (get_frame_arch (priv->this_frame),
3a90f266 1035 dwarf_regnum);
3623dc3a
SD
1036 if (gdb_reg == -1)
1037 {
1038 if (jit_debug)
3a90f266
SM
1039 fprintf_unfiltered (gdb_stdlog,
1040 _("Could not recognize DWARF regnum %d"),
1041 dwarf_regnum);
20aa2c60 1042 value->free (value);
3623dc3a
SD
1043 return;
1044 }
1045
c8ec2f33 1046 priv->regcache->raw_supply (gdb_reg, value->value);
20aa2c60 1047 value->free (value);
3623dc3a
SD
1048}
1049
1050static void
1051reg_value_free_impl (struct gdb_reg_value *value)
1052{
1053 xfree (value);
1054}
1055
1056/* Get the value of register REGNUM in the previous frame. */
1057
1058static struct gdb_reg_value *
1059jit_unwind_reg_get_impl (struct gdb_unwind_callbacks *cb, int regnum)
1060{
1061 struct jit_unwind_private *priv;
1062 struct gdb_reg_value *value;
1063 int gdb_reg, size;
1064 struct gdbarch *frame_arch;
1065
9a3c8263 1066 priv = (struct jit_unwind_private *) cb->priv_data;
3623dc3a
SD
1067 frame_arch = get_frame_arch (priv->this_frame);
1068
1069 gdb_reg = gdbarch_dwarf2_reg_to_regnum (frame_arch, regnum);
1070 size = register_size (frame_arch, gdb_reg);
224c3ddb
SM
1071 value = ((struct gdb_reg_value *)
1072 xmalloc (sizeof (struct gdb_reg_value) + size - 1));
ca9d61b9
JB
1073 value->defined = deprecated_frame_register_read (priv->this_frame, gdb_reg,
1074 value->value);
3623dc3a
SD
1075 value->size = size;
1076 value->free = reg_value_free_impl;
1077 return value;
1078}
1079
1080/* gdb_reg_value has a free function, which must be called on each
1081 saved register value. */
1082
1083static void
1084jit_dealloc_cache (struct frame_info *this_frame, void *cache)
1085{
9a3c8263 1086 struct jit_unwind_private *priv_data = (struct jit_unwind_private *) cache;
3623dc3a 1087
20aa2c60 1088 gdb_assert (priv_data->regcache != NULL);
c0e383c6 1089 delete priv_data->regcache;
3623dc3a
SD
1090 xfree (priv_data);
1091}
1092
1093/* The frame sniffer for the pseudo unwinder.
1094
1095 While this is nominally a frame sniffer, in the case where the JIT
1096 reader actually recognizes the frame, it does a lot more work -- it
1097 unwinds the frame and saves the corresponding register values in
1098 the cache. jit_frame_prev_register simply returns the saved
1099 register values. */
1100
1101static int
1102jit_frame_sniffer (const struct frame_unwind *self,
3a90f266 1103 struct frame_info *this_frame, void **cache)
3623dc3a 1104{
3623dc3a 1105 struct jit_unwind_private *priv_data;
3623dc3a
SD
1106 struct gdb_unwind_callbacks callbacks;
1107 struct gdb_reader_funcs *funcs;
1108
3623dc3a
SD
1109 callbacks.reg_get = jit_unwind_reg_get_impl;
1110 callbacks.reg_set = jit_unwind_reg_set_impl;
1111 callbacks.target_read = jit_target_read_impl;
1112
1113 if (loaded_jit_reader == NULL)
1114 return 0;
1115
1116 funcs = loaded_jit_reader->functions;
1117
1118 gdb_assert (!*cache);
1119
41bf6aca 1120 *cache = XCNEW (struct jit_unwind_private);
9a3c8263 1121 priv_data = (struct jit_unwind_private *) *cache;
c8ec2f33
YQ
1122 /* Take a snapshot of current regcache. */
1123 priv_data->regcache = new detached_regcache (get_frame_arch (this_frame),
1124 true);
3623dc3a
SD
1125 priv_data->this_frame = this_frame;
1126
1127 callbacks.priv_data = priv_data;
1128
1129 /* Try to coax the provided unwinder to unwind the stack */
1130 if (funcs->unwind (funcs, &callbacks) == GDB_SUCCESS)
1131 {
1132 if (jit_debug)
3a90f266
SM
1133 fprintf_unfiltered (gdb_stdlog, _("Successfully unwound frame using "
1134 "JIT reader.\n"));
3623dc3a
SD
1135 return 1;
1136 }
1137 if (jit_debug)
1138 fprintf_unfiltered (gdb_stdlog, _("Could not unwind frame using "
3a90f266 1139 "JIT reader.\n"));
3623dc3a
SD
1140
1141 jit_dealloc_cache (this_frame, *cache);
1142 *cache = NULL;
1143
1144 return 0;
1145}
1146
1147
1148/* The frame_id function for the pseudo unwinder. Relays the call to
1149 the loaded plugin. */
1150
1151static void
1152jit_frame_this_id (struct frame_info *this_frame, void **cache,
3a90f266 1153 struct frame_id *this_id)
3623dc3a 1154{
fe978cb0 1155 struct jit_unwind_private priv;
3623dc3a
SD
1156 struct gdb_frame_id frame_id;
1157 struct gdb_reader_funcs *funcs;
1158 struct gdb_unwind_callbacks callbacks;
1159
20aa2c60 1160 priv.regcache = NULL;
fe978cb0 1161 priv.this_frame = this_frame;
3623dc3a
SD
1162
1163 /* We don't expect the frame_id function to set any registers, so we
1164 set reg_set to NULL. */
1165 callbacks.reg_get = jit_unwind_reg_get_impl;
1166 callbacks.reg_set = NULL;
1167 callbacks.target_read = jit_target_read_impl;
fe978cb0 1168 callbacks.priv_data = &priv;
3623dc3a
SD
1169
1170 gdb_assert (loaded_jit_reader);
1171 funcs = loaded_jit_reader->functions;
1172
1173 frame_id = funcs->get_frame_id (funcs, &callbacks);
1174 *this_id = frame_id_build (frame_id.stack_address, frame_id.code_address);
1175}
1176
1177/* Pseudo unwinder function. Reads the previously fetched value for
1178 the register from the cache. */
1179
1180static struct value *
1181jit_frame_prev_register (struct frame_info *this_frame, void **cache, int reg)
1182{
9a3c8263 1183 struct jit_unwind_private *priv = (struct jit_unwind_private *) *cache;
20aa2c60 1184 struct gdbarch *gdbarch;
3623dc3a
SD
1185
1186 if (priv == NULL)
1187 return frame_unwind_got_optimized (this_frame, reg);
1188
ac7936df 1189 gdbarch = priv->regcache->arch ();
3f5a868b
YQ
1190 gdb_byte *buf = (gdb_byte *) alloca (register_size (gdbarch, reg));
1191 enum register_status status = priv->regcache->cooked_read (reg, buf);
20aa2c60 1192
3f5a868b
YQ
1193 if (status == REG_VALID)
1194 return frame_unwind_got_bytes (this_frame, reg, buf);
3623dc3a 1195 else
3f5a868b 1196 return frame_unwind_got_optimized (this_frame, reg);
3623dc3a
SD
1197}
1198
1199/* Relay everything back to the unwinder registered by the JIT debug
1200 info reader.*/
1201
1202static const struct frame_unwind jit_frame_unwind =
1203{
1204 NORMAL_FRAME,
1205 default_frame_unwind_stop_reason,
1206 jit_frame_this_id,
1207 jit_frame_prev_register,
1208 NULL,
1209 jit_frame_sniffer,
1210 jit_dealloc_cache
1211};
1212
1213
1214/* This is the information that is stored at jit_gdbarch_data for each
1215 architecture. */
1216
1217struct jit_gdbarch_data_type
1218{
1219 /* Has the (pseudo) unwinder been prepended? */
1220 int unwinder_registered;
1221};
1222
1223/* Check GDBARCH and prepend the pseudo JIT unwinder if needed. */
1224
1225static void
1226jit_prepend_unwinder (struct gdbarch *gdbarch)
1227{
1228 struct jit_gdbarch_data_type *data;
1229
9a3c8263
SM
1230 data
1231 = (struct jit_gdbarch_data_type *) gdbarch_data (gdbarch, jit_gdbarch_data);
3623dc3a
SD
1232 if (!data->unwinder_registered)
1233 {
1234 frame_unwind_prepend_unwinder (gdbarch, &jit_frame_unwind);
1235 data->unwinder_registered = 1;
1236 }
1237}
1238
03673fc7 1239/* Register any already created translations. */
0756c555
DE
1240
1241static void
1242jit_inferior_init (struct gdbarch *gdbarch)
4efc6507 1243{
4efc6507
DE
1244 struct jit_descriptor descriptor;
1245 struct jit_code_entry cur_entry;
8eacb197 1246 struct jit_program_space_data *ps_data;
4efc6507 1247 CORE_ADDR cur_entry_addr;
4efc6507 1248
a255712f 1249 if (jit_debug)
03673fc7 1250 fprintf_unfiltered (gdb_stdlog, "jit_inferior_init\n");
a255712f 1251
3623dc3a
SD
1252 jit_prepend_unwinder (gdbarch);
1253
8eacb197
TT
1254 ps_data = get_jit_program_space_data ();
1255 if (jit_breakpoint_re_set_internal (gdbarch, ps_data) != 0)
4efc6507
DE
1256 return;
1257
1777feb0
MS
1258 /* Read the descriptor so we can check the version number and load
1259 any already JITed functions. */
8eacb197 1260 if (!jit_read_descriptor (gdbarch, &descriptor, ps_data))
03bef283 1261 return;
4efc6507
DE
1262
1263 /* Check that the version number agrees with that we support. */
1264 if (descriptor.version != 1)
03bef283
TT
1265 {
1266 printf_unfiltered (_("Unsupported JIT protocol version %ld "
1267 "in descriptor (expected 1)\n"),
1268 (long) descriptor.version);
1269 return;
1270 }
4efc6507 1271
1777feb0
MS
1272 /* If we've attached to a running program, we need to check the descriptor
1273 to register any functions that were already generated. */
4efc6507
DE
1274 for (cur_entry_addr = descriptor.first_entry;
1275 cur_entry_addr != 0;
1276 cur_entry_addr = cur_entry.next_entry)
1277 {
0756c555 1278 jit_read_code_entry (gdbarch, cur_entry_addr, &cur_entry);
4efc6507
DE
1279
1280 /* This hook may be called many times during setup, so make sure we don't
3a90f266 1281 add the same symbol file twice. */
4efc6507 1282 if (jit_find_objf_with_entry_addr (cur_entry_addr) != NULL)
3a90f266 1283 continue;
4efc6507 1284
0756c555 1285 jit_register_code (gdbarch, cur_entry_addr, &cur_entry);
4efc6507
DE
1286 }
1287}
1288
9bb84c9f
YY
1289/* inferior_created observer. */
1290
1291static void
1292jit_inferior_created (struct target_ops *ops, int from_tty)
1293{
1294 jit_inferior_created_hook ();
1295}
1296
0756c555
DE
1297/* Exported routine to call when an inferior has been created. */
1298
1299void
1300jit_inferior_created_hook (void)
1301{
f5656ead 1302 jit_inferior_init (target_gdbarch ());
0756c555
DE
1303}
1304
1305/* Exported routine to call to re-set the jit breakpoints,
1306 e.g. when a program is rerun. */
1307
1308void
1309jit_breakpoint_re_set (void)
1310{
f5656ead 1311 jit_breakpoint_re_set_internal (target_gdbarch (),
8eacb197 1312 get_jit_program_space_data ());
03673fc7
PP
1313}
1314
1777feb0
MS
1315/* This function cleans up any code entries left over when the
1316 inferior exits. We get left over code when the inferior exits
1317 without unregistering its code, for example when it crashes. */
4efc6507
DE
1318
1319static void
a79b8f6e 1320jit_inferior_exit_hook (struct inferior *inf)
4efc6507 1321{
7e955d83 1322 for (objfile *objf : current_program_space->objfiles_safe ())
03bef283 1323 {
9a3c8263
SM
1324 struct jit_objfile_data *objf_data
1325 = (struct jit_objfile_data *) objfile_data (objf, jit_objfile_data);
4efc6507 1326
03bef283 1327 if (objf_data != NULL && objf_data->addr != 0)
268e4f09 1328 objf->unlink ();
03bef283 1329 }
03673fc7
PP
1330}
1331
4efc6507 1332void
0756c555 1333jit_event_handler (struct gdbarch *gdbarch)
4efc6507
DE
1334{
1335 struct jit_descriptor descriptor;
1336 struct jit_code_entry code_entry;
1337 CORE_ADDR entry_addr;
1338 struct objfile *objf;
1339
1340 /* Read the descriptor from remote memory. */
8eacb197
TT
1341 if (!jit_read_descriptor (gdbarch, &descriptor,
1342 get_jit_program_space_data ()))
03bef283 1343 return;
4efc6507
DE
1344 entry_addr = descriptor.relevant_entry;
1345
1777feb0 1346 /* Do the corresponding action. */
4efc6507
DE
1347 switch (descriptor.action_flag)
1348 {
1349 case JIT_NOACTION:
1350 break;
1351 case JIT_REGISTER:
0756c555
DE
1352 jit_read_code_entry (gdbarch, entry_addr, &code_entry);
1353 jit_register_code (gdbarch, entry_addr, &code_entry);
4efc6507
DE
1354 break;
1355 case JIT_UNREGISTER:
1356 objf = jit_find_objf_with_entry_addr (entry_addr);
1357 if (objf == NULL)
1777feb0
MS
1358 printf_unfiltered (_("Unable to find JITed code "
1359 "entry at address: %s\n"),
dfdbc9b4 1360 paddress (gdbarch, entry_addr));
4efc6507 1361 else
3a90f266 1362 objf->unlink ();
4efc6507
DE
1363
1364 break;
1365 default:
1366 error (_("Unknown action_flag value in JIT descriptor!"));
1367 break;
1368 }
1369}
1370
8eacb197 1371/* Called to free the data allocated to the jit_program_space_data slot. */
1825a88d
SD
1372
1373static void
1374free_objfile_data (struct objfile *objfile, void *data)
1375{
9a3c8263 1376 struct jit_objfile_data *objf_data = (struct jit_objfile_data *) data;
03bef283
TT
1377
1378 if (objf_data->register_code != NULL)
1379 {
8eacb197 1380 struct jit_program_space_data *ps_data;
03bef283 1381
cb60f420 1382 ps_data = jit_program_space_key.get (objfile->pspace);
8eacb197 1383 if (ps_data != NULL && ps_data->objfile == objfile)
4a556533
PA
1384 {
1385 ps_data->objfile = NULL;
2cd8cc0b
TT
1386 if (ps_data->jit_breakpoint != NULL)
1387 delete_breakpoint (ps_data->jit_breakpoint);
4a556533
PA
1388 ps_data->cached_code_address = 0;
1389 }
03bef283
TT
1390 }
1391
1825a88d
SD
1392 xfree (data);
1393}
1394
3623dc3a
SD
1395/* Initialize the jit_gdbarch_data slot with an instance of struct
1396 jit_gdbarch_data_type */
1397
1398static void *
1399jit_gdbarch_data_init (struct obstack *obstack)
1400{
8d749320
SM
1401 struct jit_gdbarch_data_type *data =
1402 XOBNEW (obstack, struct jit_gdbarch_data_type);
3623dc3a 1403
3623dc3a 1404 data->unwinder_registered = 0;
8d749320 1405
3623dc3a
SD
1406 return data;
1407}
1408
6c265988 1409void _initialize_jit ();
4efc6507 1410void
6c265988 1411_initialize_jit ()
4efc6507 1412{
b8e0a31c 1413 jit_reader_dir = relocate_gdb_directory (JIT_READER_DIR,
3a90f266 1414 JIT_READER_DIR_RELOCATABLE);
ccce17b0
YQ
1415 add_setshow_zuinteger_cmd ("jit", class_maintenance, &jit_debug,
1416 _("Set JIT debugging."),
1417 _("Show JIT debugging."),
1418 _("When non-zero, JIT debugging is enabled."),
1419 NULL,
1420 show_jit_debug,
1421 &setdebuglist, &showdebuglist);
a255712f 1422
76727919
TT
1423 gdb::observers::inferior_created.attach (jit_inferior_created);
1424 gdb::observers::inferior_exit.attach (jit_inferior_exit_hook);
1425 gdb::observers::breakpoint_deleted.attach (jit_breakpoint_deleted);
f25c0135 1426
1825a88d
SD
1427 jit_objfile_data =
1428 register_objfile_data_with_cleanup (NULL, free_objfile_data);
3623dc3a 1429 jit_gdbarch_data = gdbarch_data_register_pre_init (jit_gdbarch_data_init);
784c47ee
SD
1430 if (is_dl_available ())
1431 {
6571a381
TT
1432 struct cmd_list_element *c;
1433
1434 c = add_com ("jit-reader-load", no_class, jit_reader_load_command, _("\
784c47ee
SD
1435Load FILE as debug info reader and unwinder for JIT compiled code.\n\
1436Usage: jit-reader-load FILE\n\
1437Try to load file FILE as a debug info reader (and unwinder) for\n\
1438JIT compiled code. The file is loaded from " JIT_READER_DIR ",\n\
1439relocated relative to the GDB executable if required."));
6571a381
TT
1440 set_cmd_completer (c, filename_completer);
1441
1442 c = add_com ("jit-reader-unload", no_class,
1443 jit_reader_unload_command, _("\
784c47ee 1444Unload the currently loaded JIT debug info reader.\n\
6571a381 1445Usage: jit-reader-unload\n\n\
784c47ee 1446Do \"help jit-reader-load\" for info on loading debug info readers."));
6571a381 1447 set_cmd_completer (c, noop_completer);
784c47ee 1448 }
4efc6507 1449}
This page took 1.049329 seconds and 4 git commands to generate.