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