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