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