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