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