psymtab.c (add_psymbol_to_bcache): Remove "val" arg.
[external/binutils.git] / gdb / elfread.c
1 /* Read ELF (Executable and Linking Format) object files for GDB.
2
3    Copyright (C) 1991-2015 Free Software Foundation, Inc.
4
5    Written by Fred Fish at Cygnus Support.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "bfd.h"
24 #include "elf-bfd.h"
25 #include "elf/common.h"
26 #include "elf/internal.h"
27 #include "elf/mips.h"
28 #include "symtab.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "buildsym.h"
32 #include "stabsread.h"
33 #include "gdb-stabs.h"
34 #include "complaints.h"
35 #include "demangle.h"
36 #include "psympriv.h"
37 #include "filenames.h"
38 #include "probe.h"
39 #include "arch-utils.h"
40 #include "gdbtypes.h"
41 #include "value.h"
42 #include "infcall.h"
43 #include "gdbthread.h"
44 #include "regcache.h"
45 #include "bcache.h"
46 #include "gdb_bfd.h"
47 #include "build-id.h"
48 #include "location.h"
49
50 extern void _initialize_elfread (void);
51
52 /* Forward declarations.  */
53 extern const struct sym_fns elf_sym_fns_gdb_index;
54 extern const struct sym_fns elf_sym_fns_lazy_psyms;
55
56 /* The struct elfinfo is available only during ELF symbol table and
57    psymtab reading.  It is destroyed at the completion of psymtab-reading.
58    It's local to elf_symfile_read.  */
59
60 struct elfinfo
61   {
62     asection *stabsect;         /* Section pointer for .stab section */
63     asection *mdebugsect;       /* Section pointer for .mdebug section */
64   };
65
66 /* Per-BFD data for probe info.  */
67
68 static const struct bfd_data *probe_key = NULL;
69
70 /* Minimal symbols located at the GOT entries for .plt - that is the real
71    pointer where the given entry will jump to.  It gets updated by the real
72    function address during lazy ld.so resolving in the inferior.  These
73    minimal symbols are indexed for <tab>-completion.  */
74
75 #define SYMBOL_GOT_PLT_SUFFIX "@got.plt"
76
77 /* Locate the segments in ABFD.  */
78
79 static struct symfile_segment_data *
80 elf_symfile_segments (bfd *abfd)
81 {
82   Elf_Internal_Phdr *phdrs, **segments;
83   long phdrs_size;
84   int num_phdrs, num_segments, num_sections, i;
85   asection *sect;
86   struct symfile_segment_data *data;
87
88   phdrs_size = bfd_get_elf_phdr_upper_bound (abfd);
89   if (phdrs_size == -1)
90     return NULL;
91
92   phdrs = alloca (phdrs_size);
93   num_phdrs = bfd_get_elf_phdrs (abfd, phdrs);
94   if (num_phdrs == -1)
95     return NULL;
96
97   num_segments = 0;
98   segments = alloca (sizeof (Elf_Internal_Phdr *) * num_phdrs);
99   for (i = 0; i < num_phdrs; i++)
100     if (phdrs[i].p_type == PT_LOAD)
101       segments[num_segments++] = &phdrs[i];
102
103   if (num_segments == 0)
104     return NULL;
105
106   data = XCNEW (struct symfile_segment_data);
107   data->num_segments = num_segments;
108   data->segment_bases = XCNEWVEC (CORE_ADDR, num_segments);
109   data->segment_sizes = XCNEWVEC (CORE_ADDR, num_segments);
110
111   for (i = 0; i < num_segments; i++)
112     {
113       data->segment_bases[i] = segments[i]->p_vaddr;
114       data->segment_sizes[i] = segments[i]->p_memsz;
115     }
116
117   num_sections = bfd_count_sections (abfd);
118   data->segment_info = XCNEWVEC (int, num_sections);
119
120   for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
121     {
122       int j;
123       CORE_ADDR vma;
124
125       if ((bfd_get_section_flags (abfd, sect) & SEC_ALLOC) == 0)
126         continue;
127
128       vma = bfd_get_section_vma (abfd, sect);
129
130       for (j = 0; j < num_segments; j++)
131         if (segments[j]->p_memsz > 0
132             && vma >= segments[j]->p_vaddr
133             && (vma - segments[j]->p_vaddr) < segments[j]->p_memsz)
134           {
135             data->segment_info[i] = j + 1;
136             break;
137           }
138
139       /* We should have found a segment for every non-empty section.
140          If we haven't, we will not relocate this section by any
141          offsets we apply to the segments.  As an exception, do not
142          warn about SHT_NOBITS sections; in normal ELF execution
143          environments, SHT_NOBITS means zero-initialized and belongs
144          in a segment, but in no-OS environments some tools (e.g. ARM
145          RealView) use SHT_NOBITS for uninitialized data.  Since it is
146          uninitialized, it doesn't need a program header.  Such
147          binaries are not relocatable.  */
148       if (bfd_get_section_size (sect) > 0 && j == num_segments
149           && (bfd_get_section_flags (abfd, sect) & SEC_LOAD) != 0)
150         warning (_("Loadable section \"%s\" outside of ELF segments"),
151                  bfd_section_name (abfd, sect));
152     }
153
154   return data;
155 }
156
157 /* We are called once per section from elf_symfile_read.  We
158    need to examine each section we are passed, check to see
159    if it is something we are interested in processing, and
160    if so, stash away some access information for the section.
161
162    For now we recognize the dwarf debug information sections and
163    line number sections from matching their section names.  The
164    ELF definition is no real help here since it has no direct
165    knowledge of DWARF (by design, so any debugging format can be
166    used).
167
168    We also recognize the ".stab" sections used by the Sun compilers
169    released with Solaris 2.
170
171    FIXME: The section names should not be hardwired strings (what
172    should they be?  I don't think most object file formats have enough
173    section flags to specify what kind of debug section it is.
174    -kingdon).  */
175
176 static void
177 elf_locate_sections (bfd *ignore_abfd, asection *sectp, void *eip)
178 {
179   struct elfinfo *ei;
180
181   ei = (struct elfinfo *) eip;
182   if (strcmp (sectp->name, ".stab") == 0)
183     {
184       ei->stabsect = sectp;
185     }
186   else if (strcmp (sectp->name, ".mdebug") == 0)
187     {
188       ei->mdebugsect = sectp;
189     }
190 }
191
192 static struct minimal_symbol *
193 record_minimal_symbol (const char *name, int name_len, int copy_name,
194                        CORE_ADDR address,
195                        enum minimal_symbol_type ms_type,
196                        asection *bfd_section, struct objfile *objfile)
197 {
198   struct gdbarch *gdbarch = get_objfile_arch (objfile);
199
200   if (ms_type == mst_text || ms_type == mst_file_text
201       || ms_type == mst_text_gnu_ifunc)
202     address = gdbarch_addr_bits_remove (gdbarch, address);
203
204   return prim_record_minimal_symbol_full (name, name_len, copy_name, address,
205                                           ms_type,
206                                           gdb_bfd_section_index (objfile->obfd,
207                                                                  bfd_section),
208                                           objfile);
209 }
210
211 /* Read the symbol table of an ELF file.
212
213    Given an objfile, a symbol table, and a flag indicating whether the
214    symbol table contains regular, dynamic, or synthetic symbols, add all
215    the global function and data symbols to the minimal symbol table.
216
217    In stabs-in-ELF, as implemented by Sun, there are some local symbols
218    defined in the ELF symbol table, which can be used to locate
219    the beginnings of sections from each ".o" file that was linked to
220    form the executable objfile.  We gather any such info and record it
221    in data structures hung off the objfile's private data.  */
222
223 #define ST_REGULAR 0
224 #define ST_DYNAMIC 1
225 #define ST_SYNTHETIC 2
226
227 static void
228 elf_symtab_read (struct objfile *objfile, int type,
229                  long number_of_symbols, asymbol **symbol_table,
230                  int copy_names)
231 {
232   struct gdbarch *gdbarch = get_objfile_arch (objfile);
233   asymbol *sym;
234   long i;
235   CORE_ADDR symaddr;
236   CORE_ADDR offset;
237   enum minimal_symbol_type ms_type;
238   /* Name of the last file symbol.  This is either a constant string or is
239      saved on the objfile's filename cache.  */
240   const char *filesymname = "";
241   struct dbx_symfile_info *dbx = DBX_SYMFILE_INFO (objfile);
242   int stripped = (bfd_get_symcount (objfile->obfd) == 0);
243   int elf_make_msymbol_special_p
244     = gdbarch_elf_make_msymbol_special_p (gdbarch);
245
246   for (i = 0; i < number_of_symbols; i++)
247     {
248       sym = symbol_table[i];
249       if (sym->name == NULL || *sym->name == '\0')
250         {
251           /* Skip names that don't exist (shouldn't happen), or names
252              that are null strings (may happen).  */
253           continue;
254         }
255
256       /* Skip "special" symbols, e.g. ARM mapping symbols.  These are
257          symbols which do not correspond to objects in the symbol table,
258          but have some other target-specific meaning.  */
259       if (bfd_is_target_special_symbol (objfile->obfd, sym))
260         {
261           if (gdbarch_record_special_symbol_p (gdbarch))
262             gdbarch_record_special_symbol (gdbarch, objfile, sym);
263           continue;
264         }
265
266       offset = ANOFFSET (objfile->section_offsets,
267                          gdb_bfd_section_index (objfile->obfd, sym->section));
268       if (type == ST_DYNAMIC
269           && sym->section == bfd_und_section_ptr
270           && (sym->flags & BSF_FUNCTION))
271         {
272           struct minimal_symbol *msym;
273           bfd *abfd = objfile->obfd;
274           asection *sect;
275
276           /* Symbol is a reference to a function defined in
277              a shared library.
278              If its value is non zero then it is usually the address
279              of the corresponding entry in the procedure linkage table,
280              plus the desired section offset.
281              If its value is zero then the dynamic linker has to resolve
282              the symbol.  We are unable to find any meaningful address
283              for this symbol in the executable file, so we skip it.  */
284           symaddr = sym->value;
285           if (symaddr == 0)
286             continue;
287
288           /* sym->section is the undefined section.  However, we want to
289              record the section where the PLT stub resides with the
290              minimal symbol.  Search the section table for the one that
291              covers the stub's address.  */
292           for (sect = abfd->sections; sect != NULL; sect = sect->next)
293             {
294               if ((bfd_get_section_flags (abfd, sect) & SEC_ALLOC) == 0)
295                 continue;
296
297               if (symaddr >= bfd_get_section_vma (abfd, sect)
298                   && symaddr < bfd_get_section_vma (abfd, sect)
299                                + bfd_get_section_size (sect))
300                 break;
301             }
302           if (!sect)
303             continue;
304
305           /* On ia64-hpux, we have discovered that the system linker
306              adds undefined symbols with nonzero addresses that cannot
307              be right (their address points inside the code of another
308              function in the .text section).  This creates problems
309              when trying to determine which symbol corresponds to
310              a given address.
311
312              We try to detect those buggy symbols by checking which
313              section we think they correspond to.  Normally, PLT symbols
314              are stored inside their own section, and the typical name
315              for that section is ".plt".  So, if there is a ".plt"
316              section, and yet the section name of our symbol does not
317              start with ".plt", we ignore that symbol.  */
318           if (!startswith (sect->name, ".plt")
319               && bfd_get_section_by_name (abfd, ".plt") != NULL)
320             continue;
321
322           msym = record_minimal_symbol
323             (sym->name, strlen (sym->name), copy_names,
324              symaddr, mst_solib_trampoline, sect, objfile);
325           if (msym != NULL)
326             {
327               msym->filename = filesymname;
328               if (elf_make_msymbol_special_p)
329                 gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
330             }
331           continue;
332         }
333
334       /* If it is a nonstripped executable, do not enter dynamic
335          symbols, as the dynamic symbol table is usually a subset
336          of the main symbol table.  */
337       if (type == ST_DYNAMIC && !stripped)
338         continue;
339       if (sym->flags & BSF_FILE)
340         {
341           filesymname = bcache (sym->name, strlen (sym->name) + 1,
342                                 objfile->per_bfd->filename_cache);
343         }
344       else if (sym->flags & BSF_SECTION_SYM)
345         continue;
346       else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK
347                              | BSF_GNU_UNIQUE))
348         {
349           struct minimal_symbol *msym;
350
351           /* Select global/local/weak symbols.  Note that bfd puts abs
352              symbols in their own section, so all symbols we are
353              interested in will have a section.  */
354           /* Bfd symbols are section relative.  */
355           symaddr = sym->value + sym->section->vma;
356           /* For non-absolute symbols, use the type of the section
357              they are relative to, to intuit text/data.  Bfd provides
358              no way of figuring this out for absolute symbols.  */
359           if (sym->section == bfd_abs_section_ptr)
360             {
361               /* This is a hack to get the minimal symbol type
362                  right for Irix 5, which has absolute addresses
363                  with special section indices for dynamic symbols.
364
365                  NOTE: uweigand-20071112: Synthetic symbols do not
366                  have an ELF-private part, so do not touch those.  */
367               unsigned int shndx = type == ST_SYNTHETIC ? 0 :
368                 ((elf_symbol_type *) sym)->internal_elf_sym.st_shndx;
369
370               switch (shndx)
371                 {
372                 case SHN_MIPS_TEXT:
373                   ms_type = mst_text;
374                   break;
375                 case SHN_MIPS_DATA:
376                   ms_type = mst_data;
377                   break;
378                 case SHN_MIPS_ACOMMON:
379                   ms_type = mst_bss;
380                   break;
381                 default:
382                   ms_type = mst_abs;
383                 }
384
385               /* If it is an Irix dynamic symbol, skip section name
386                  symbols, relocate all others by section offset.  */
387               if (ms_type != mst_abs)
388                 {
389                   if (sym->name[0] == '.')
390                     continue;
391                 }
392             }
393           else if (sym->section->flags & SEC_CODE)
394             {
395               if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
396                 {
397                   if (sym->flags & BSF_GNU_INDIRECT_FUNCTION)
398                     ms_type = mst_text_gnu_ifunc;
399                   else
400                     ms_type = mst_text;
401                 }
402               /* The BSF_SYNTHETIC check is there to omit ppc64 function
403                  descriptors mistaken for static functions starting with 'L'.
404                  */
405               else if ((sym->name[0] == '.' && sym->name[1] == 'L'
406                         && (sym->flags & BSF_SYNTHETIC) == 0)
407                        || ((sym->flags & BSF_LOCAL)
408                            && sym->name[0] == '$'
409                            && sym->name[1] == 'L'))
410                 /* Looks like a compiler-generated label.  Skip
411                    it.  The assembler should be skipping these (to
412                    keep executables small), but apparently with
413                    gcc on the (deleted) delta m88k SVR4, it loses.
414                    So to have us check too should be harmless (but
415                    I encourage people to fix this in the assembler
416                    instead of adding checks here).  */
417                 continue;
418               else
419                 {
420                   ms_type = mst_file_text;
421                 }
422             }
423           else if (sym->section->flags & SEC_ALLOC)
424             {
425               if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
426                 {
427                   if (sym->section->flags & SEC_LOAD)
428                     {
429                       ms_type = mst_data;
430                     }
431                   else
432                     {
433                       ms_type = mst_bss;
434                     }
435                 }
436               else if (sym->flags & BSF_LOCAL)
437                 {
438                   if (sym->section->flags & SEC_LOAD)
439                     {
440                       ms_type = mst_file_data;
441                     }
442                   else
443                     {
444                       ms_type = mst_file_bss;
445                     }
446                 }
447               else
448                 {
449                   ms_type = mst_unknown;
450                 }
451             }
452           else
453             {
454               /* FIXME:  Solaris2 shared libraries include lots of
455                  odd "absolute" and "undefined" symbols, that play
456                  hob with actions like finding what function the PC
457                  is in.  Ignore them if they aren't text, data, or bss.  */
458               /* ms_type = mst_unknown; */
459               continue; /* Skip this symbol.  */
460             }
461           msym = record_minimal_symbol
462             (sym->name, strlen (sym->name), copy_names, symaddr,
463              ms_type, sym->section, objfile);
464
465           if (msym)
466             {
467               /* NOTE: uweigand-20071112: A synthetic symbol does not have an
468                  ELF-private part.  */
469               if (type != ST_SYNTHETIC)
470                 {
471                   /* Pass symbol size field in via BFD.  FIXME!!!  */
472                   elf_symbol_type *elf_sym = (elf_symbol_type *) sym;
473                   SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size);
474                 }
475
476               msym->filename = filesymname;
477               if (elf_make_msymbol_special_p)
478                 gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
479             }
480
481           /* If we see a default versioned symbol, install it under
482              its version-less name.  */
483           if (msym != NULL)
484             {
485               const char *atsign = strchr (sym->name, '@');
486
487               if (atsign != NULL && atsign[1] == '@' && atsign > sym->name)
488                 {
489                   int len = atsign - sym->name;
490
491                   record_minimal_symbol (sym->name, len, 1, symaddr,
492                                          ms_type, sym->section, objfile);
493                 }
494             }
495
496           /* For @plt symbols, also record a trampoline to the
497              destination symbol.  The @plt symbol will be used in
498              disassembly, and the trampoline will be used when we are
499              trying to find the target.  */
500           if (msym && ms_type == mst_text && type == ST_SYNTHETIC)
501             {
502               int len = strlen (sym->name);
503
504               if (len > 4 && strcmp (sym->name + len - 4, "@plt") == 0)
505                 {
506                   struct minimal_symbol *mtramp;
507
508                   mtramp = record_minimal_symbol (sym->name, len - 4, 1,
509                                                   symaddr,
510                                                   mst_solib_trampoline,
511                                                   sym->section, objfile);
512                   if (mtramp)
513                     {
514                       SET_MSYMBOL_SIZE (mtramp, MSYMBOL_SIZE (msym));
515                       mtramp->created_by_gdb = 1;
516                       mtramp->filename = filesymname;
517                       if (elf_make_msymbol_special_p)
518                         gdbarch_elf_make_msymbol_special (gdbarch,
519                                                           sym, mtramp);
520                     }
521                 }
522             }
523         }
524     }
525 }
526
527 /* Build minimal symbols named `function@got.plt' (see SYMBOL_GOT_PLT_SUFFIX)
528    for later look ups of which function to call when user requests
529    a STT_GNU_IFUNC function.  As the STT_GNU_IFUNC type is found at the target
530    library defining `function' we cannot yet know while reading OBJFILE which
531    of the SYMBOL_GOT_PLT_SUFFIX entries will be needed and later
532    DYN_SYMBOL_TABLE is no longer easily available for OBJFILE.  */
533
534 static void
535 elf_rel_plt_read (struct objfile *objfile, asymbol **dyn_symbol_table)
536 {
537   bfd *obfd = objfile->obfd;
538   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
539   asection *plt, *relplt, *got_plt;
540   int plt_elf_idx;
541   bfd_size_type reloc_count, reloc;
542   char *string_buffer = NULL;
543   size_t string_buffer_size = 0;
544   struct cleanup *back_to;
545   struct gdbarch *gdbarch = get_objfile_arch (objfile);
546   struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
547   size_t ptr_size = TYPE_LENGTH (ptr_type);
548
549   if (objfile->separate_debug_objfile_backlink)
550     return;
551
552   plt = bfd_get_section_by_name (obfd, ".plt");
553   if (plt == NULL)
554     return;
555   plt_elf_idx = elf_section_data (plt)->this_idx;
556
557   got_plt = bfd_get_section_by_name (obfd, ".got.plt");
558   if (got_plt == NULL)
559     {
560       /* For platforms where there is no separate .got.plt.  */
561       got_plt = bfd_get_section_by_name (obfd, ".got");
562       if (got_plt == NULL)
563         return;
564     }
565
566   /* This search algorithm is from _bfd_elf_canonicalize_dynamic_reloc.  */
567   for (relplt = obfd->sections; relplt != NULL; relplt = relplt->next)
568     if (elf_section_data (relplt)->this_hdr.sh_info == plt_elf_idx
569         && (elf_section_data (relplt)->this_hdr.sh_type == SHT_REL
570             || elf_section_data (relplt)->this_hdr.sh_type == SHT_RELA))
571       break;
572   if (relplt == NULL)
573     return;
574
575   if (! bed->s->slurp_reloc_table (obfd, relplt, dyn_symbol_table, TRUE))
576     return;
577
578   back_to = make_cleanup (free_current_contents, &string_buffer);
579
580   reloc_count = relplt->size / elf_section_data (relplt)->this_hdr.sh_entsize;
581   for (reloc = 0; reloc < reloc_count; reloc++)
582     {
583       const char *name;
584       struct minimal_symbol *msym;
585       CORE_ADDR address;
586       const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
587       size_t name_len;
588
589       name = bfd_asymbol_name (*relplt->relocation[reloc].sym_ptr_ptr);
590       name_len = strlen (name);
591       address = relplt->relocation[reloc].address;
592
593       /* Does the pointer reside in the .got.plt section?  */
594       if (!(bfd_get_section_vma (obfd, got_plt) <= address
595             && address < bfd_get_section_vma (obfd, got_plt)
596                          + bfd_get_section_size (got_plt)))
597         continue;
598
599       /* We cannot check if NAME is a reference to mst_text_gnu_ifunc as in
600          OBJFILE the symbol is undefined and the objfile having NAME defined
601          may not yet have been loaded.  */
602
603       if (string_buffer_size < name_len + got_suffix_len + 1)
604         {
605           string_buffer_size = 2 * (name_len + got_suffix_len);
606           string_buffer = xrealloc (string_buffer, string_buffer_size);
607         }
608       memcpy (string_buffer, name, name_len);
609       memcpy (&string_buffer[name_len], SYMBOL_GOT_PLT_SUFFIX,
610               got_suffix_len + 1);
611
612       msym = record_minimal_symbol (string_buffer, name_len + got_suffix_len,
613                                     1, address, mst_slot_got_plt, got_plt,
614                                     objfile);
615       if (msym)
616         SET_MSYMBOL_SIZE (msym, ptr_size);
617     }
618
619   do_cleanups (back_to);
620 }
621
622 /* The data pointer is htab_t for gnu_ifunc_record_cache_unchecked.  */
623
624 static const struct objfile_data *elf_objfile_gnu_ifunc_cache_data;
625
626 /* Map function names to CORE_ADDR in elf_objfile_gnu_ifunc_cache_data.  */
627
628 struct elf_gnu_ifunc_cache
629 {
630   /* This is always a function entry address, not a function descriptor.  */
631   CORE_ADDR addr;
632
633   char name[1];
634 };
635
636 /* htab_hash for elf_objfile_gnu_ifunc_cache_data.  */
637
638 static hashval_t
639 elf_gnu_ifunc_cache_hash (const void *a_voidp)
640 {
641   const struct elf_gnu_ifunc_cache *a = a_voidp;
642
643   return htab_hash_string (a->name);
644 }
645
646 /* htab_eq for elf_objfile_gnu_ifunc_cache_data.  */
647
648 static int
649 elf_gnu_ifunc_cache_eq (const void *a_voidp, const void *b_voidp)
650 {
651   const struct elf_gnu_ifunc_cache *a = a_voidp;
652   const struct elf_gnu_ifunc_cache *b = b_voidp;
653
654   return strcmp (a->name, b->name) == 0;
655 }
656
657 /* Record the target function address of a STT_GNU_IFUNC function NAME is the
658    function entry address ADDR.  Return 1 if NAME and ADDR are considered as
659    valid and therefore they were successfully recorded, return 0 otherwise.
660
661    Function does not expect a duplicate entry.  Use
662    elf_gnu_ifunc_resolve_by_cache first to check if the entry for NAME already
663    exists.  */
664
665 static int
666 elf_gnu_ifunc_record_cache (const char *name, CORE_ADDR addr)
667 {
668   struct bound_minimal_symbol msym;
669   asection *sect;
670   struct objfile *objfile;
671   htab_t htab;
672   struct elf_gnu_ifunc_cache entry_local, *entry_p;
673   void **slot;
674
675   msym = lookup_minimal_symbol_by_pc (addr);
676   if (msym.minsym == NULL)
677     return 0;
678   if (BMSYMBOL_VALUE_ADDRESS (msym) != addr)
679     return 0;
680   /* minimal symbols have always SYMBOL_OBJ_SECTION non-NULL.  */
681   sect = MSYMBOL_OBJ_SECTION (msym.objfile, msym.minsym)->the_bfd_section;
682   objfile = msym.objfile;
683
684   /* If .plt jumps back to .plt the symbol is still deferred for later
685      resolution and it has no use for GDB.  Besides ".text" this symbol can
686      reside also in ".opd" for ppc64 function descriptor.  */
687   if (strcmp (bfd_get_section_name (objfile->obfd, sect), ".plt") == 0)
688     return 0;
689
690   htab = objfile_data (objfile, elf_objfile_gnu_ifunc_cache_data);
691   if (htab == NULL)
692     {
693       htab = htab_create_alloc_ex (1, elf_gnu_ifunc_cache_hash,
694                                    elf_gnu_ifunc_cache_eq,
695                                    NULL, &objfile->objfile_obstack,
696                                    hashtab_obstack_allocate,
697                                    dummy_obstack_deallocate);
698       set_objfile_data (objfile, elf_objfile_gnu_ifunc_cache_data, htab);
699     }
700
701   entry_local.addr = addr;
702   obstack_grow (&objfile->objfile_obstack, &entry_local,
703                 offsetof (struct elf_gnu_ifunc_cache, name));
704   obstack_grow_str0 (&objfile->objfile_obstack, name);
705   entry_p = obstack_finish (&objfile->objfile_obstack);
706
707   slot = htab_find_slot (htab, entry_p, INSERT);
708   if (*slot != NULL)
709     {
710       struct elf_gnu_ifunc_cache *entry_found_p = *slot;
711       struct gdbarch *gdbarch = get_objfile_arch (objfile);
712
713       if (entry_found_p->addr != addr)
714         {
715           /* This case indicates buggy inferior program, the resolved address
716              should never change.  */
717
718             warning (_("gnu-indirect-function \"%s\" has changed its resolved "
719                        "function_address from %s to %s"),
720                      name, paddress (gdbarch, entry_found_p->addr),
721                      paddress (gdbarch, addr));
722         }
723
724       /* New ENTRY_P is here leaked/duplicate in the OBJFILE obstack.  */
725     }
726   *slot = entry_p;
727
728   return 1;
729 }
730
731 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
732    function NAME.  If the address is found it is stored to *ADDR_P (if ADDR_P
733    is not NULL) and the function returns 1.  It returns 0 otherwise.
734
735    Only the elf_objfile_gnu_ifunc_cache_data hash table is searched by this
736    function.  */
737
738 static int
739 elf_gnu_ifunc_resolve_by_cache (const char *name, CORE_ADDR *addr_p)
740 {
741   struct objfile *objfile;
742
743   ALL_PSPACE_OBJFILES (current_program_space, objfile)
744     {
745       htab_t htab;
746       struct elf_gnu_ifunc_cache *entry_p;
747       void **slot;
748
749       htab = objfile_data (objfile, elf_objfile_gnu_ifunc_cache_data);
750       if (htab == NULL)
751         continue;
752
753       entry_p = alloca (sizeof (*entry_p) + strlen (name));
754       strcpy (entry_p->name, name);
755
756       slot = htab_find_slot (htab, entry_p, NO_INSERT);
757       if (slot == NULL)
758         continue;
759       entry_p = *slot;
760       gdb_assert (entry_p != NULL);
761
762       if (addr_p)
763         *addr_p = entry_p->addr;
764       return 1;
765     }
766
767   return 0;
768 }
769
770 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
771    function NAME.  If the address is found it is stored to *ADDR_P (if ADDR_P
772    is not NULL) and the function returns 1.  It returns 0 otherwise.
773
774    Only the SYMBOL_GOT_PLT_SUFFIX locations are searched by this function.
775    elf_gnu_ifunc_resolve_by_cache must have been already called for NAME to
776    prevent cache entries duplicates.  */
777
778 static int
779 elf_gnu_ifunc_resolve_by_got (const char *name, CORE_ADDR *addr_p)
780 {
781   char *name_got_plt;
782   struct objfile *objfile;
783   const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
784
785   name_got_plt = alloca (strlen (name) + got_suffix_len + 1);
786   sprintf (name_got_plt, "%s" SYMBOL_GOT_PLT_SUFFIX, name);
787
788   ALL_PSPACE_OBJFILES (current_program_space, objfile)
789     {
790       bfd *obfd = objfile->obfd;
791       struct gdbarch *gdbarch = get_objfile_arch (objfile);
792       struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
793       size_t ptr_size = TYPE_LENGTH (ptr_type);
794       CORE_ADDR pointer_address, addr;
795       asection *plt;
796       gdb_byte *buf = alloca (ptr_size);
797       struct bound_minimal_symbol msym;
798
799       msym = lookup_minimal_symbol (name_got_plt, NULL, objfile);
800       if (msym.minsym == NULL)
801         continue;
802       if (MSYMBOL_TYPE (msym.minsym) != mst_slot_got_plt)
803         continue;
804       pointer_address = BMSYMBOL_VALUE_ADDRESS (msym);
805
806       plt = bfd_get_section_by_name (obfd, ".plt");
807       if (plt == NULL)
808         continue;
809
810       if (MSYMBOL_SIZE (msym.minsym) != ptr_size)
811         continue;
812       if (target_read_memory (pointer_address, buf, ptr_size) != 0)
813         continue;
814       addr = extract_typed_address (buf, ptr_type);
815       addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
816                                                  &current_target);
817       addr = gdbarch_addr_bits_remove (gdbarch, addr);
818
819       if (addr_p)
820         *addr_p = addr;
821       if (elf_gnu_ifunc_record_cache (name, addr))
822         return 1;
823     }
824
825   return 0;
826 }
827
828 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
829    function NAME.  If the address is found it is stored to *ADDR_P (if ADDR_P
830    is not NULL) and the function returns 1.  It returns 0 otherwise.
831
832    Both the elf_objfile_gnu_ifunc_cache_data hash table and
833    SYMBOL_GOT_PLT_SUFFIX locations are searched by this function.  */
834
835 static int
836 elf_gnu_ifunc_resolve_name (const char *name, CORE_ADDR *addr_p)
837 {
838   if (elf_gnu_ifunc_resolve_by_cache (name, addr_p))
839     return 1;
840
841   if (elf_gnu_ifunc_resolve_by_got (name, addr_p))
842     return 1;
843
844   return 0;
845 }
846
847 /* Call STT_GNU_IFUNC - a function returning addresss of a real function to
848    call.  PC is theSTT_GNU_IFUNC resolving function entry.  The value returned
849    is the entry point of the resolved STT_GNU_IFUNC target function to call.
850    */
851
852 static CORE_ADDR
853 elf_gnu_ifunc_resolve_addr (struct gdbarch *gdbarch, CORE_ADDR pc)
854 {
855   const char *name_at_pc;
856   CORE_ADDR start_at_pc, address;
857   struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
858   struct value *function, *address_val;
859
860   /* Try first any non-intrusive methods without an inferior call.  */
861
862   if (find_pc_partial_function (pc, &name_at_pc, &start_at_pc, NULL)
863       && start_at_pc == pc)
864     {
865       if (elf_gnu_ifunc_resolve_name (name_at_pc, &address))
866         return address;
867     }
868   else
869     name_at_pc = NULL;
870
871   function = allocate_value (func_func_type);
872   set_value_address (function, pc);
873
874   /* STT_GNU_IFUNC resolver functions have no parameters.  FUNCTION is the
875      function entry address.  ADDRESS may be a function descriptor.  */
876
877   address_val = call_function_by_hand (function, 0, NULL);
878   address = value_as_address (address_val);
879   address = gdbarch_convert_from_func_ptr_addr (gdbarch, address,
880                                                 &current_target);
881   address = gdbarch_addr_bits_remove (gdbarch, address);
882
883   if (name_at_pc)
884     elf_gnu_ifunc_record_cache (name_at_pc, address);
885
886   return address;
887 }
888
889 /* Handle inferior hit of bp_gnu_ifunc_resolver, see its definition.  */
890
891 static void
892 elf_gnu_ifunc_resolver_stop (struct breakpoint *b)
893 {
894   struct breakpoint *b_return;
895   struct frame_info *prev_frame = get_prev_frame (get_current_frame ());
896   struct frame_id prev_frame_id = get_stack_frame_id (prev_frame);
897   CORE_ADDR prev_pc = get_frame_pc (prev_frame);
898   int thread_id = pid_to_thread_id (inferior_ptid);
899
900   gdb_assert (b->type == bp_gnu_ifunc_resolver);
901
902   for (b_return = b->related_breakpoint; b_return != b;
903        b_return = b_return->related_breakpoint)
904     {
905       gdb_assert (b_return->type == bp_gnu_ifunc_resolver_return);
906       gdb_assert (b_return->loc != NULL && b_return->loc->next == NULL);
907       gdb_assert (frame_id_p (b_return->frame_id));
908
909       if (b_return->thread == thread_id
910           && b_return->loc->requested_address == prev_pc
911           && frame_id_eq (b_return->frame_id, prev_frame_id))
912         break;
913     }
914
915   if (b_return == b)
916     {
917       struct symtab_and_line sal;
918
919       /* No need to call find_pc_line for symbols resolving as this is only
920          a helper breakpointer never shown to the user.  */
921
922       init_sal (&sal);
923       sal.pspace = current_inferior ()->pspace;
924       sal.pc = prev_pc;
925       sal.section = find_pc_overlay (sal.pc);
926       sal.explicit_pc = 1;
927       b_return = set_momentary_breakpoint (get_frame_arch (prev_frame), sal,
928                                            prev_frame_id,
929                                            bp_gnu_ifunc_resolver_return);
930
931       /* set_momentary_breakpoint invalidates PREV_FRAME.  */
932       prev_frame = NULL;
933
934       /* Add new b_return to the ring list b->related_breakpoint.  */
935       gdb_assert (b_return->related_breakpoint == b_return);
936       b_return->related_breakpoint = b->related_breakpoint;
937       b->related_breakpoint = b_return;
938     }
939 }
940
941 /* Handle inferior hit of bp_gnu_ifunc_resolver_return, see its definition.  */
942
943 static void
944 elf_gnu_ifunc_resolver_return_stop (struct breakpoint *b)
945 {
946   struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
947   struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
948   struct type *value_type = TYPE_TARGET_TYPE (func_func_type);
949   struct regcache *regcache = get_thread_regcache (inferior_ptid);
950   struct value *func_func;
951   struct value *value;
952   CORE_ADDR resolved_address, resolved_pc;
953   struct symtab_and_line sal;
954   struct symtabs_and_lines sals, sals_end;
955
956   gdb_assert (b->type == bp_gnu_ifunc_resolver_return);
957
958   while (b->related_breakpoint != b)
959     {
960       struct breakpoint *b_next = b->related_breakpoint;
961
962       switch (b->type)
963         {
964         case bp_gnu_ifunc_resolver:
965           break;
966         case bp_gnu_ifunc_resolver_return:
967           delete_breakpoint (b);
968           break;
969         default:
970           internal_error (__FILE__, __LINE__,
971                           _("handle_inferior_event: Invalid "
972                             "gnu-indirect-function breakpoint type %d"),
973                           (int) b->type);
974         }
975       b = b_next;
976     }
977   gdb_assert (b->type == bp_gnu_ifunc_resolver);
978   gdb_assert (b->loc->next == NULL);
979
980   func_func = allocate_value (func_func_type);
981   set_value_address (func_func, b->loc->related_address);
982
983   value = allocate_value (value_type);
984   gdbarch_return_value (gdbarch, func_func, value_type, regcache,
985                         value_contents_raw (value), NULL);
986   resolved_address = value_as_address (value);
987   resolved_pc = gdbarch_convert_from_func_ptr_addr (gdbarch,
988                                                     resolved_address,
989                                                     &current_target);
990   resolved_pc = gdbarch_addr_bits_remove (gdbarch, resolved_pc);
991
992   gdb_assert (current_program_space == b->pspace || b->pspace == NULL);
993   elf_gnu_ifunc_record_cache (event_location_to_string (b->location),
994                               resolved_pc);
995
996   sal = find_pc_line (resolved_pc, 0);
997   sals.nelts = 1;
998   sals.sals = &sal;
999   sals_end.nelts = 0;
1000
1001   b->type = bp_breakpoint;
1002   update_breakpoint_locations (b, sals, sals_end);
1003 }
1004
1005 /* A helper function for elf_symfile_read that reads the minimal
1006    symbols.  */
1007
1008 static void
1009 elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
1010                           const struct elfinfo *ei)
1011 {
1012   bfd *synth_abfd, *abfd = objfile->obfd;
1013   struct cleanup *back_to;
1014   long symcount = 0, dynsymcount = 0, synthcount, storage_needed;
1015   asymbol **symbol_table = NULL, **dyn_symbol_table = NULL;
1016   asymbol *synthsyms;
1017   struct dbx_symfile_info *dbx;
1018
1019   if (symtab_create_debug)
1020     {
1021       fprintf_unfiltered (gdb_stdlog,
1022                           "Reading minimal symbols of objfile %s ...\n",
1023                           objfile_name (objfile));
1024     }
1025
1026   /* If we already have minsyms, then we can skip some work here.
1027      However, if there were stabs or mdebug sections, we go ahead and
1028      redo all the work anyway, because the psym readers for those
1029      kinds of debuginfo need extra information found here.  This can
1030      go away once all types of symbols are in the per-BFD object.  */
1031   if (objfile->per_bfd->minsyms_read
1032       && ei->stabsect == NULL
1033       && ei->mdebugsect == NULL)
1034     {
1035       if (symtab_create_debug)
1036         fprintf_unfiltered (gdb_stdlog,
1037                             "... minimal symbols previously read\n");
1038       return;
1039     }
1040
1041   init_minimal_symbol_collection ();
1042   back_to = make_cleanup_discard_minimal_symbols ();
1043
1044   /* Allocate struct to keep track of the symfile.  */
1045   dbx = XCNEW (struct dbx_symfile_info);
1046   set_objfile_data (objfile, dbx_objfile_data_key, dbx);
1047
1048   /* Process the normal ELF symbol table first.  */
1049
1050   storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
1051   if (storage_needed < 0)
1052     error (_("Can't read symbols from %s: %s"),
1053            bfd_get_filename (objfile->obfd),
1054            bfd_errmsg (bfd_get_error ()));
1055
1056   if (storage_needed > 0)
1057     {
1058       /* Memory gets permanently referenced from ABFD after
1059          bfd_canonicalize_symtab so it must not get freed before ABFD gets.  */
1060
1061       symbol_table = bfd_alloc (abfd, storage_needed);
1062       symcount = bfd_canonicalize_symtab (objfile->obfd, symbol_table);
1063
1064       if (symcount < 0)
1065         error (_("Can't read symbols from %s: %s"),
1066                bfd_get_filename (objfile->obfd),
1067                bfd_errmsg (bfd_get_error ()));
1068
1069       elf_symtab_read (objfile, ST_REGULAR, symcount, symbol_table, 0);
1070     }
1071
1072   /* Add the dynamic symbols.  */
1073
1074   storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd);
1075
1076   if (storage_needed > 0)
1077     {
1078       /* Memory gets permanently referenced from ABFD after
1079          bfd_get_synthetic_symtab so it must not get freed before ABFD gets.
1080          It happens only in the case when elf_slurp_reloc_table sees
1081          asection->relocation NULL.  Determining which section is asection is
1082          done by _bfd_elf_get_synthetic_symtab which is all a bfd
1083          implementation detail, though.  */
1084
1085       dyn_symbol_table = bfd_alloc (abfd, storage_needed);
1086       dynsymcount = bfd_canonicalize_dynamic_symtab (objfile->obfd,
1087                                                      dyn_symbol_table);
1088
1089       if (dynsymcount < 0)
1090         error (_("Can't read symbols from %s: %s"),
1091                bfd_get_filename (objfile->obfd),
1092                bfd_errmsg (bfd_get_error ()));
1093
1094       elf_symtab_read (objfile, ST_DYNAMIC, dynsymcount, dyn_symbol_table, 0);
1095
1096       elf_rel_plt_read (objfile, dyn_symbol_table);
1097     }
1098
1099   /* Contrary to binutils --strip-debug/--only-keep-debug the strip command from
1100      elfutils (eu-strip) moves even the .symtab section into the .debug file.
1101
1102      bfd_get_synthetic_symtab on ppc64 for each function descriptor ELF symbol
1103      'name' creates a new BSF_SYNTHETIC ELF symbol '.name' with its code
1104      address.  But with eu-strip files bfd_get_synthetic_symtab would fail to
1105      read the code address from .opd while it reads the .symtab section from
1106      a separate debug info file as the .opd section is SHT_NOBITS there.
1107
1108      With SYNTH_ABFD the .opd section will be read from the original
1109      backlinked binary where it is valid.  */
1110
1111   if (objfile->separate_debug_objfile_backlink)
1112     synth_abfd = objfile->separate_debug_objfile_backlink->obfd;
1113   else
1114     synth_abfd = abfd;
1115
1116   /* Add synthetic symbols - for instance, names for any PLT entries.  */
1117
1118   synthcount = bfd_get_synthetic_symtab (synth_abfd, symcount, symbol_table,
1119                                          dynsymcount, dyn_symbol_table,
1120                                          &synthsyms);
1121   if (synthcount > 0)
1122     {
1123       asymbol **synth_symbol_table;
1124       long i;
1125
1126       make_cleanup (xfree, synthsyms);
1127       synth_symbol_table = xmalloc (sizeof (asymbol *) * synthcount);
1128       for (i = 0; i < synthcount; i++)
1129         synth_symbol_table[i] = synthsyms + i;
1130       make_cleanup (xfree, synth_symbol_table);
1131       elf_symtab_read (objfile, ST_SYNTHETIC, synthcount,
1132                        synth_symbol_table, 1);
1133     }
1134
1135   /* Install any minimal symbols that have been collected as the current
1136      minimal symbols for this objfile.  The debug readers below this point
1137      should not generate new minimal symbols; if they do it's their
1138      responsibility to install them.  "mdebug" appears to be the only one
1139      which will do this.  */
1140
1141   install_minimal_symbols (objfile);
1142   do_cleanups (back_to);
1143
1144   if (symtab_create_debug)
1145     fprintf_unfiltered (gdb_stdlog, "Done reading minimal symbols.\n");
1146 }
1147
1148 /* Scan and build partial symbols for a symbol file.
1149    We have been initialized by a call to elf_symfile_init, which
1150    currently does nothing.
1151
1152    This function only does the minimum work necessary for letting the
1153    user "name" things symbolically; it does not read the entire symtab.
1154    Instead, it reads the external and static symbols and puts them in partial
1155    symbol tables.  When more extensive information is requested of a
1156    file, the corresponding partial symbol table is mutated into a full
1157    fledged symbol table by going back and reading the symbols
1158    for real.
1159
1160    We look for sections with specific names, to tell us what debug
1161    format to look for:  FIXME!!!
1162
1163    elfstab_build_psymtabs() handles STABS symbols;
1164    mdebug_build_psymtabs() handles ECOFF debugging information.
1165
1166    Note that ELF files have a "minimal" symbol table, which looks a lot
1167    like a COFF symbol table, but has only the minimal information necessary
1168    for linking.  We process this also, and use the information to
1169    build gdb's minimal symbol table.  This gives us some minimal debugging
1170    capability even for files compiled without -g.  */
1171
1172 static void
1173 elf_symfile_read (struct objfile *objfile, int symfile_flags)
1174 {
1175   bfd *abfd = objfile->obfd;
1176   struct elfinfo ei;
1177
1178   memset ((char *) &ei, 0, sizeof (ei));
1179   bfd_map_over_sections (abfd, elf_locate_sections, (void *) & ei);
1180
1181   elf_read_minimal_symbols (objfile, symfile_flags, &ei);
1182
1183   /* ELF debugging information is inserted into the psymtab in the
1184      order of least informative first - most informative last.  Since
1185      the psymtab table is searched `most recent insertion first' this
1186      increases the probability that more detailed debug information
1187      for a section is found.
1188
1189      For instance, an object file might contain both .mdebug (XCOFF)
1190      and .debug_info (DWARF2) sections then .mdebug is inserted first
1191      (searched last) and DWARF2 is inserted last (searched first).  If
1192      we don't do this then the XCOFF info is found first - for code in
1193      an included file XCOFF info is useless.  */
1194
1195   if (ei.mdebugsect)
1196     {
1197       const struct ecoff_debug_swap *swap;
1198
1199       /* .mdebug section, presumably holding ECOFF debugging
1200          information.  */
1201       swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1202       if (swap)
1203         elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
1204     }
1205   if (ei.stabsect)
1206     {
1207       asection *str_sect;
1208
1209       /* Stab sections have an associated string table that looks like
1210          a separate section.  */
1211       str_sect = bfd_get_section_by_name (abfd, ".stabstr");
1212
1213       /* FIXME should probably warn about a stab section without a stabstr.  */
1214       if (str_sect)
1215         elfstab_build_psymtabs (objfile,
1216                                 ei.stabsect,
1217                                 str_sect->filepos,
1218                                 bfd_section_size (abfd, str_sect));
1219     }
1220
1221   if (dwarf2_has_info (objfile, NULL))
1222     {
1223       /* elf_sym_fns_gdb_index cannot handle simultaneous non-DWARF debug
1224          information present in OBJFILE.  If there is such debug info present
1225          never use .gdb_index.  */
1226
1227       if (!objfile_has_partial_symbols (objfile)
1228           && dwarf2_initialize_objfile (objfile))
1229         objfile_set_sym_fns (objfile, &elf_sym_fns_gdb_index);
1230       else
1231         {
1232           /* It is ok to do this even if the stabs reader made some
1233              partial symbols, because OBJF_PSYMTABS_READ has not been
1234              set, and so our lazy reader function will still be called
1235              when needed.  */
1236           objfile_set_sym_fns (objfile, &elf_sym_fns_lazy_psyms);
1237         }
1238     }
1239   /* If the file has its own symbol tables it has no separate debug
1240      info.  `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to
1241      SYMTABS/PSYMTABS.  `.gnu_debuglink' may no longer be present with
1242      `.note.gnu.build-id'.
1243
1244      .gnu_debugdata is !objfile_has_partial_symbols because it contains only
1245      .symtab, not .debug_* section.  But if we already added .gnu_debugdata as
1246      an objfile via find_separate_debug_file_in_section there was no separate
1247      debug info available.  Therefore do not attempt to search for another one,
1248      objfile->separate_debug_objfile->separate_debug_objfile GDB guarantees to
1249      be NULL and we would possibly violate it.  */
1250
1251   else if (!objfile_has_partial_symbols (objfile)
1252            && objfile->separate_debug_objfile == NULL
1253            && objfile->separate_debug_objfile_backlink == NULL)
1254     {
1255       char *debugfile;
1256
1257       debugfile = find_separate_debug_file_by_buildid (objfile);
1258
1259       if (debugfile == NULL)
1260         debugfile = find_separate_debug_file_by_debuglink (objfile);
1261
1262       if (debugfile)
1263         {
1264           struct cleanup *cleanup = make_cleanup (xfree, debugfile);
1265           bfd *abfd = symfile_bfd_open (debugfile);
1266
1267           make_cleanup_bfd_unref (abfd);
1268           symbol_file_add_separate (abfd, debugfile, symfile_flags, objfile);
1269           do_cleanups (cleanup);
1270         }
1271     }
1272 }
1273
1274 /* Callback to lazily read psymtabs.  */
1275
1276 static void
1277 read_psyms (struct objfile *objfile)
1278 {
1279   if (dwarf2_has_info (objfile, NULL))
1280     dwarf2_build_psymtabs (objfile);
1281 }
1282
1283 /* Initialize anything that needs initializing when a completely new symbol
1284    file is specified (not just adding some symbols from another file, e.g. a
1285    shared library).
1286
1287    We reinitialize buildsym, since we may be reading stabs from an ELF
1288    file.  */
1289
1290 static void
1291 elf_new_init (struct objfile *ignore)
1292 {
1293   stabsread_new_init ();
1294   buildsym_new_init ();
1295 }
1296
1297 /* Perform any local cleanups required when we are done with a particular
1298    objfile.  I.E, we are in the process of discarding all symbol information
1299    for an objfile, freeing up all memory held for it, and unlinking the
1300    objfile struct from the global list of known objfiles.  */
1301
1302 static void
1303 elf_symfile_finish (struct objfile *objfile)
1304 {
1305   dwarf2_free_objfile (objfile);
1306 }
1307
1308 /* ELF specific initialization routine for reading symbols.  */
1309
1310 static void
1311 elf_symfile_init (struct objfile *objfile)
1312 {
1313   /* ELF objects may be reordered, so set OBJF_REORDERED.  If we
1314      find this causes a significant slowdown in gdb then we could
1315      set it in the debug symbol readers only when necessary.  */
1316   objfile->flags |= OBJF_REORDERED;
1317 }
1318
1319 /* Implementation of `sym_get_probes', as documented in symfile.h.  */
1320
1321 static VEC (probe_p) *
1322 elf_get_probes (struct objfile *objfile)
1323 {
1324   VEC (probe_p) *probes_per_bfd;
1325
1326   /* Have we parsed this objfile's probes already?  */
1327   probes_per_bfd = bfd_data (objfile->obfd, probe_key);
1328
1329   if (!probes_per_bfd)
1330     {
1331       int ix;
1332       const struct probe_ops *probe_ops;
1333
1334       /* Here we try to gather information about all types of probes from the
1335          objfile.  */
1336       for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, probe_ops);
1337            ix++)
1338         probe_ops->get_probes (&probes_per_bfd, objfile);
1339
1340       if (probes_per_bfd == NULL)
1341         {
1342           VEC_reserve (probe_p, probes_per_bfd, 1);
1343           gdb_assert (probes_per_bfd != NULL);
1344         }
1345
1346       set_bfd_data (objfile->obfd, probe_key, probes_per_bfd);
1347     }
1348
1349   return probes_per_bfd;
1350 }
1351
1352 /* Helper function used to free the space allocated for storing SystemTap
1353    probe information.  */
1354
1355 static void
1356 probe_key_free (bfd *abfd, void *d)
1357 {
1358   int ix;
1359   VEC (probe_p) *probes = d;
1360   struct probe *probe;
1361
1362   for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
1363     probe->pops->destroy (probe);
1364
1365   VEC_free (probe_p, probes);
1366 }
1367
1368 \f
1369
1370 /* Implementation `sym_probe_fns', as documented in symfile.h.  */
1371
1372 static const struct sym_probe_fns elf_probe_fns =
1373 {
1374   elf_get_probes,                   /* sym_get_probes */
1375 };
1376
1377 /* Register that we are able to handle ELF object file formats.  */
1378
1379 static const struct sym_fns elf_sym_fns =
1380 {
1381   elf_new_init,                 /* init anything gbl to entire symtab */
1382   elf_symfile_init,             /* read initial info, setup for sym_read() */
1383   elf_symfile_read,             /* read a symbol file into symtab */
1384   NULL,                         /* sym_read_psymbols */
1385   elf_symfile_finish,           /* finished with file, cleanup */
1386   default_symfile_offsets,      /* Translate ext. to int. relocation */
1387   elf_symfile_segments,         /* Get segment information from a file.  */
1388   NULL,
1389   default_symfile_relocate,     /* Relocate a debug section.  */
1390   &elf_probe_fns,               /* sym_probe_fns */
1391   &psym_functions
1392 };
1393
1394 /* The same as elf_sym_fns, but not registered and lazily reads
1395    psymbols.  */
1396
1397 const struct sym_fns elf_sym_fns_lazy_psyms =
1398 {
1399   elf_new_init,                 /* init anything gbl to entire symtab */
1400   elf_symfile_init,             /* read initial info, setup for sym_read() */
1401   elf_symfile_read,             /* read a symbol file into symtab */
1402   read_psyms,                   /* sym_read_psymbols */
1403   elf_symfile_finish,           /* finished with file, cleanup */
1404   default_symfile_offsets,      /* Translate ext. to int. relocation */
1405   elf_symfile_segments,         /* Get segment information from a file.  */
1406   NULL,
1407   default_symfile_relocate,     /* Relocate a debug section.  */
1408   &elf_probe_fns,               /* sym_probe_fns */
1409   &psym_functions
1410 };
1411
1412 /* The same as elf_sym_fns, but not registered and uses the
1413    DWARF-specific GNU index rather than psymtab.  */
1414 const struct sym_fns elf_sym_fns_gdb_index =
1415 {
1416   elf_new_init,                 /* init anything gbl to entire symab */
1417   elf_symfile_init,             /* read initial info, setup for sym_red() */
1418   elf_symfile_read,             /* read a symbol file into symtab */
1419   NULL,                         /* sym_read_psymbols */
1420   elf_symfile_finish,           /* finished with file, cleanup */
1421   default_symfile_offsets,      /* Translate ext. to int. relocatin */
1422   elf_symfile_segments,         /* Get segment information from a file.  */
1423   NULL,
1424   default_symfile_relocate,     /* Relocate a debug section.  */
1425   &elf_probe_fns,               /* sym_probe_fns */
1426   &dwarf2_gdb_index_functions
1427 };
1428
1429 /* STT_GNU_IFUNC resolver vector to be installed to gnu_ifunc_fns_p.  */
1430
1431 static const struct gnu_ifunc_fns elf_gnu_ifunc_fns =
1432 {
1433   elf_gnu_ifunc_resolve_addr,
1434   elf_gnu_ifunc_resolve_name,
1435   elf_gnu_ifunc_resolver_stop,
1436   elf_gnu_ifunc_resolver_return_stop
1437 };
1438
1439 void
1440 _initialize_elfread (void)
1441 {
1442   probe_key = register_bfd_data_with_cleanup (NULL, probe_key_free);
1443   add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns);
1444
1445   elf_objfile_gnu_ifunc_cache_data = register_objfile_data ();
1446   gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;
1447 }