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