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