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