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