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