Change tui_show_symtab_source to be a method
[external/binutils.git] / gdb / elfread.c
1 /* Read ELF (Executable and Linking Format) object files for GDB.
2
3    Copyright (C) 1991-2019 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 "stabsread.h"
32 #include "complaints.h"
33 #include "demangle.h"
34 #include "psympriv.h"
35 #include "filenames.h"
36 #include "probe.h"
37 #include "arch-utils.h"
38 #include "gdbtypes.h"
39 #include "value.h"
40 #include "infcall.h"
41 #include "gdbthread.h"
42 #include "inferior.h"
43 #include "regcache.h"
44 #include "bcache.h"
45 #include "gdb_bfd.h"
46 #include "build-id.h"
47 #include "location.h"
48 #include "auxv.h"
49 #include "mdebugread.h"
50
51 /* Forward declarations.  */
52 extern const struct sym_fns elf_sym_fns_gdb_index;
53 extern const struct sym_fns elf_sym_fns_debug_names;
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 /* Type for per-BFD data.  */
67
68 typedef std::vector<std::unique_ptr<probe>> elfread_data;
69
70 /* Per-BFD data for probe info.  */
71
72 static const struct bfd_key<elfread_data> probe_key;
73
74 /* Minimal symbols located at the GOT entries for .plt - that is the real
75    pointer where the given entry will jump to.  It gets updated by the real
76    function address during lazy ld.so resolving in the inferior.  These
77    minimal symbols are indexed for <tab>-completion.  */
78
79 #define SYMBOL_GOT_PLT_SUFFIX "@got.plt"
80
81 /* Locate the segments in ABFD.  */
82
83 static struct symfile_segment_data *
84 elf_symfile_segments (bfd *abfd)
85 {
86   Elf_Internal_Phdr *phdrs, **segments;
87   long phdrs_size;
88   int num_phdrs, num_segments, num_sections, i;
89   asection *sect;
90   struct symfile_segment_data *data;
91
92   phdrs_size = bfd_get_elf_phdr_upper_bound (abfd);
93   if (phdrs_size == -1)
94     return NULL;
95
96   phdrs = (Elf_Internal_Phdr *) alloca (phdrs_size);
97   num_phdrs = bfd_get_elf_phdrs (abfd, phdrs);
98   if (num_phdrs == -1)
99     return NULL;
100
101   num_segments = 0;
102   segments = XALLOCAVEC (Elf_Internal_Phdr *, num_phdrs);
103   for (i = 0; i < num_phdrs; i++)
104     if (phdrs[i].p_type == PT_LOAD)
105       segments[num_segments++] = &phdrs[i];
106
107   if (num_segments == 0)
108     return NULL;
109
110   data = XCNEW (struct symfile_segment_data);
111   data->num_segments = num_segments;
112   data->segment_bases = XCNEWVEC (CORE_ADDR, num_segments);
113   data->segment_sizes = XCNEWVEC (CORE_ADDR, num_segments);
114
115   for (i = 0; i < num_segments; i++)
116     {
117       data->segment_bases[i] = segments[i]->p_vaddr;
118       data->segment_sizes[i] = segments[i]->p_memsz;
119     }
120
121   num_sections = bfd_count_sections (abfd);
122   data->segment_info = XCNEWVEC (int, num_sections);
123
124   for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
125     {
126       int j;
127
128       if ((bfd_get_section_flags (abfd, sect) & SEC_ALLOC) == 0)
129         continue;
130
131       Elf_Internal_Shdr *this_hdr = &elf_section_data (sect)->this_hdr;
132
133       for (j = 0; j < num_segments; j++)
134         if (ELF_SECTION_IN_SEGMENT (this_hdr, segments[j]))
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 (minimal_symbol_reader &reader,
195                        const char *name, int name_len, bool copy_name,
196                        CORE_ADDR address,
197                        enum minimal_symbol_type ms_type,
198                        asection *bfd_section, struct objfile *objfile)
199 {
200   struct gdbarch *gdbarch = get_objfile_arch (objfile);
201
202   if (ms_type == mst_text || ms_type == mst_file_text
203       || ms_type == mst_text_gnu_ifunc)
204     address = gdbarch_addr_bits_remove (gdbarch, address);
205
206   return reader.record_full (name, name_len, copy_name, address,
207                              ms_type,
208                              gdb_bfd_section_index (objfile->obfd,
209                                                     bfd_section));
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 (minimal_symbol_reader &reader,
230                  struct objfile *objfile, int type,
231                  long number_of_symbols, asymbol **symbol_table,
232                  bool copy_names)
233 {
234   struct gdbarch *gdbarch = get_objfile_arch (objfile);
235   asymbol *sym;
236   long i;
237   CORE_ADDR symaddr;
238   enum minimal_symbol_type ms_type;
239   /* Name of the last file symbol.  This is either a constant string or is
240      saved on the objfile's filename cache.  */
241   const char *filesymname = "";
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             (reader, 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 *) objfile->per_bfd->filename_cache.insert
341                (sym->name, strlen (sym->name) + 1));
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->flags & BSF_GNU_INDIRECT_FUNCTION)
427                     {
428                       ms_type = mst_data_gnu_ifunc;
429                     }
430                   else if (sym->section->flags & SEC_LOAD)
431                     {
432                       ms_type = mst_data;
433                     }
434                   else
435                     {
436                       ms_type = mst_bss;
437                     }
438                 }
439               else if (sym->flags & BSF_LOCAL)
440                 {
441                   if (sym->section->flags & SEC_LOAD)
442                     {
443                       ms_type = mst_file_data;
444                     }
445                   else
446                     {
447                       ms_type = mst_file_bss;
448                     }
449                 }
450               else
451                 {
452                   ms_type = mst_unknown;
453                 }
454             }
455           else
456             {
457               /* FIXME:  Solaris2 shared libraries include lots of
458                  odd "absolute" and "undefined" symbols, that play
459                  hob with actions like finding what function the PC
460                  is in.  Ignore them if they aren't text, data, or bss.  */
461               /* ms_type = mst_unknown; */
462               continue; /* Skip this symbol.  */
463             }
464           msym = record_minimal_symbol
465             (reader, sym->name, strlen (sym->name), copy_names, symaddr,
466              ms_type, sym->section, objfile);
467
468           if (msym)
469             {
470               /* NOTE: uweigand-20071112: A synthetic symbol does not have an
471                  ELF-private part.  */
472               if (type != ST_SYNTHETIC)
473                 {
474                   /* Pass symbol size field in via BFD.  FIXME!!!  */
475                   elf_symbol_type *elf_sym = (elf_symbol_type *) sym;
476                   SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size);
477                 }
478
479               msym->filename = filesymname;
480               if (elf_make_msymbol_special_p)
481                 gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
482             }
483
484           /* If we see a default versioned symbol, install it under
485              its version-less name.  */
486           if (msym != NULL)
487             {
488               const char *atsign = strchr (sym->name, '@');
489
490               if (atsign != NULL && atsign[1] == '@' && atsign > sym->name)
491                 {
492                   int len = atsign - sym->name;
493
494                   record_minimal_symbol (reader, sym->name, len, true, symaddr,
495                                          ms_type, sym->section, objfile);
496                 }
497             }
498
499           /* For @plt symbols, also record a trampoline to the
500              destination symbol.  The @plt symbol will be used in
501              disassembly, and the trampoline will be used when we are
502              trying to find the target.  */
503           if (msym && ms_type == mst_text && type == ST_SYNTHETIC)
504             {
505               int len = strlen (sym->name);
506
507               if (len > 4 && strcmp (sym->name + len - 4, "@plt") == 0)
508                 {
509                   struct minimal_symbol *mtramp;
510
511                   mtramp = record_minimal_symbol (reader, sym->name, len - 4,
512                                                   true, symaddr,
513                                                   mst_solib_trampoline,
514                                                   sym->section, objfile);
515                   if (mtramp)
516                     {
517                       SET_MSYMBOL_SIZE (mtramp, MSYMBOL_SIZE (msym));
518                       mtramp->created_by_gdb = 1;
519                       mtramp->filename = filesymname;
520                       if (elf_make_msymbol_special_p)
521                         gdbarch_elf_make_msymbol_special (gdbarch,
522                                                           sym, mtramp);
523                     }
524                 }
525             }
526         }
527     }
528 }
529
530 /* Build minimal symbols named `function@got.plt' (see SYMBOL_GOT_PLT_SUFFIX)
531    for later look ups of which function to call when user requests
532    a STT_GNU_IFUNC function.  As the STT_GNU_IFUNC type is found at the target
533    library defining `function' we cannot yet know while reading OBJFILE which
534    of the SYMBOL_GOT_PLT_SUFFIX entries will be needed and later
535    DYN_SYMBOL_TABLE is no longer easily available for OBJFILE.  */
536
537 static void
538 elf_rel_plt_read (minimal_symbol_reader &reader,
539                   struct objfile *objfile, asymbol **dyn_symbol_table)
540 {
541   bfd *obfd = objfile->obfd;
542   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
543   asection *relplt, *got_plt;
544   bfd_size_type reloc_count, reloc;
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   got_plt = bfd_get_section_by_name (obfd, ".got.plt");
553   if (got_plt == NULL)
554     {
555       /* For platforms where there is no separate .got.plt.  */
556       got_plt = bfd_get_section_by_name (obfd, ".got");
557       if (got_plt == NULL)
558         return;
559     }
560
561   /* Depending on system, we may find jump slots in a relocation
562      section for either .got.plt or .plt.  */
563   asection *plt = bfd_get_section_by_name (obfd, ".plt");
564   int plt_elf_idx = (plt != NULL) ? elf_section_data (plt)->this_idx : -1;
565
566   int got_plt_elf_idx = elf_section_data (got_plt)->this_idx;
567
568   /* This search algorithm is from _bfd_elf_canonicalize_dynamic_reloc.  */
569   for (relplt = obfd->sections; relplt != NULL; relplt = relplt->next)
570     {
571       const auto &this_hdr = elf_section_data (relplt)->this_hdr;
572
573       if (this_hdr.sh_type == SHT_REL || this_hdr.sh_type == SHT_RELA)
574         {
575           if (this_hdr.sh_info == plt_elf_idx
576               || this_hdr.sh_info == got_plt_elf_idx)
577             break;
578         }
579     }
580   if (relplt == NULL)
581     return;
582
583   if (! bed->s->slurp_reloc_table (obfd, relplt, dyn_symbol_table, TRUE))
584     return;
585
586   std::string string_buffer;
587
588   /* Does ADDRESS reside in SECTION of OBFD?  */
589   auto within_section = [obfd] (asection *section, CORE_ADDR address)
590     {
591       if (section == NULL)
592         return false;
593
594       return (bfd_get_section_vma (obfd, section) <= address
595               && (address < bfd_get_section_vma (obfd, section)
596                   + bfd_get_section_size (section)));
597     };
598
599   reloc_count = relplt->size / elf_section_data (relplt)->this_hdr.sh_entsize;
600   for (reloc = 0; reloc < reloc_count; reloc++)
601     {
602       const char *name;
603       struct minimal_symbol *msym;
604       CORE_ADDR address;
605       const char *got_suffix = SYMBOL_GOT_PLT_SUFFIX;
606       const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
607
608       name = bfd_asymbol_name (*relplt->relocation[reloc].sym_ptr_ptr);
609       address = relplt->relocation[reloc].address;
610
611       asection *msym_section;
612
613       /* Does the pointer reside in either the .got.plt or .plt
614          sections?  */
615       if (within_section (got_plt, address))
616         msym_section = got_plt;
617       else if (within_section (plt, address))
618         msym_section = plt;
619       else
620         continue;
621
622       /* We cannot check if NAME is a reference to
623          mst_text_gnu_ifunc/mst_data_gnu_ifunc as in OBJFILE the
624          symbol is undefined and the objfile having NAME defined may
625          not yet have been loaded.  */
626
627       string_buffer.assign (name);
628       string_buffer.append (got_suffix, got_suffix + got_suffix_len);
629
630       msym = record_minimal_symbol (reader, string_buffer.c_str (),
631                                     string_buffer.size (),
632                                     true, address, mst_slot_got_plt,
633                                     msym_section, objfile);
634       if (msym)
635         SET_MSYMBOL_SIZE (msym, ptr_size);
636     }
637 }
638
639 /* The data pointer is htab_t for gnu_ifunc_record_cache_unchecked.  */
640
641 static const struct objfile_key<htab, htab_deleter>
642   elf_objfile_gnu_ifunc_cache_data;
643
644 /* Map function names to CORE_ADDR in elf_objfile_gnu_ifunc_cache_data.  */
645
646 struct elf_gnu_ifunc_cache
647 {
648   /* This is always a function entry address, not a function descriptor.  */
649   CORE_ADDR addr;
650
651   char name[1];
652 };
653
654 /* htab_hash for elf_objfile_gnu_ifunc_cache_data.  */
655
656 static hashval_t
657 elf_gnu_ifunc_cache_hash (const void *a_voidp)
658 {
659   const struct elf_gnu_ifunc_cache *a
660     = (const struct elf_gnu_ifunc_cache *) a_voidp;
661
662   return htab_hash_string (a->name);
663 }
664
665 /* htab_eq for elf_objfile_gnu_ifunc_cache_data.  */
666
667 static int
668 elf_gnu_ifunc_cache_eq (const void *a_voidp, const void *b_voidp)
669 {
670   const struct elf_gnu_ifunc_cache *a
671     = (const struct elf_gnu_ifunc_cache *) a_voidp;
672   const struct elf_gnu_ifunc_cache *b
673     = (const struct elf_gnu_ifunc_cache *) b_voidp;
674
675   return strcmp (a->name, b->name) == 0;
676 }
677
678 /* Record the target function address of a STT_GNU_IFUNC function NAME is the
679    function entry address ADDR.  Return 1 if NAME and ADDR are considered as
680    valid and therefore they were successfully recorded, return 0 otherwise.
681
682    Function does not expect a duplicate entry.  Use
683    elf_gnu_ifunc_resolve_by_cache first to check if the entry for NAME already
684    exists.  */
685
686 static int
687 elf_gnu_ifunc_record_cache (const char *name, CORE_ADDR addr)
688 {
689   struct bound_minimal_symbol msym;
690   struct objfile *objfile;
691   htab_t htab;
692   struct elf_gnu_ifunc_cache entry_local, *entry_p;
693   void **slot;
694
695   msym = lookup_minimal_symbol_by_pc (addr);
696   if (msym.minsym == NULL)
697     return 0;
698   if (BMSYMBOL_VALUE_ADDRESS (msym) != addr)
699     return 0;
700   objfile = msym.objfile;
701
702   /* If .plt jumps back to .plt the symbol is still deferred for later
703      resolution and it has no use for GDB.  */
704   const char *target_name = MSYMBOL_LINKAGE_NAME (msym.minsym);
705   size_t len = strlen (target_name);
706
707   /* Note we check the symbol's name instead of checking whether the
708      symbol is in the .plt section because some systems have @plt
709      symbols in the .text section.  */
710   if (len > 4 && strcmp (target_name + len - 4, "@plt") == 0)
711     return 0;
712
713   htab = elf_objfile_gnu_ifunc_cache_data.get (objfile);
714   if (htab == NULL)
715     {
716       htab = htab_create_alloc (1, elf_gnu_ifunc_cache_hash,
717                                 elf_gnu_ifunc_cache_eq,
718                                 NULL, xcalloc, xfree);
719       elf_objfile_gnu_ifunc_cache_data.set (objfile, htab);
720     }
721
722   entry_local.addr = addr;
723   obstack_grow (&objfile->objfile_obstack, &entry_local,
724                 offsetof (struct elf_gnu_ifunc_cache, name));
725   obstack_grow_str0 (&objfile->objfile_obstack, name);
726   entry_p
727     = (struct elf_gnu_ifunc_cache *) obstack_finish (&objfile->objfile_obstack);
728
729   slot = htab_find_slot (htab, entry_p, INSERT);
730   if (*slot != NULL)
731     {
732       struct elf_gnu_ifunc_cache *entry_found_p
733         = (struct elf_gnu_ifunc_cache *) *slot;
734       struct gdbarch *gdbarch = get_objfile_arch (objfile);
735
736       if (entry_found_p->addr != addr)
737         {
738           /* This case indicates buggy inferior program, the resolved address
739              should never change.  */
740
741             warning (_("gnu-indirect-function \"%s\" has changed its resolved "
742                        "function_address from %s to %s"),
743                      name, paddress (gdbarch, entry_found_p->addr),
744                      paddress (gdbarch, addr));
745         }
746
747       /* New ENTRY_P is here leaked/duplicate in the OBJFILE obstack.  */
748     }
749   *slot = entry_p;
750
751   return 1;
752 }
753
754 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
755    function NAME.  If the address is found it is stored to *ADDR_P (if ADDR_P
756    is not NULL) and the function returns 1.  It returns 0 otherwise.
757
758    Only the elf_objfile_gnu_ifunc_cache_data hash table is searched by this
759    function.  */
760
761 static int
762 elf_gnu_ifunc_resolve_by_cache (const char *name, CORE_ADDR *addr_p)
763 {
764   for (objfile *objfile : current_program_space->objfiles ())
765     {
766       htab_t htab;
767       struct elf_gnu_ifunc_cache *entry_p;
768       void **slot;
769
770       htab = elf_objfile_gnu_ifunc_cache_data.get (objfile);
771       if (htab == NULL)
772         continue;
773
774       entry_p = ((struct elf_gnu_ifunc_cache *)
775                  alloca (sizeof (*entry_p) + strlen (name)));
776       strcpy (entry_p->name, name);
777
778       slot = htab_find_slot (htab, entry_p, NO_INSERT);
779       if (slot == NULL)
780         continue;
781       entry_p = (struct elf_gnu_ifunc_cache *) *slot;
782       gdb_assert (entry_p != NULL);
783
784       if (addr_p)
785         *addr_p = entry_p->addr;
786       return 1;
787     }
788
789   return 0;
790 }
791
792 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
793    function NAME.  If the address is found it is stored to *ADDR_P (if ADDR_P
794    is not NULL) and the function returns 1.  It returns 0 otherwise.
795
796    Only the SYMBOL_GOT_PLT_SUFFIX locations are searched by this function.
797    elf_gnu_ifunc_resolve_by_cache must have been already called for NAME to
798    prevent cache entries duplicates.  */
799
800 static int
801 elf_gnu_ifunc_resolve_by_got (const char *name, CORE_ADDR *addr_p)
802 {
803   char *name_got_plt;
804   const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
805
806   name_got_plt = (char *) alloca (strlen (name) + got_suffix_len + 1);
807   sprintf (name_got_plt, "%s" SYMBOL_GOT_PLT_SUFFIX, name);
808
809   for (objfile *objfile : current_program_space->objfiles ())
810     {
811       bfd *obfd = objfile->obfd;
812       struct gdbarch *gdbarch = get_objfile_arch (objfile);
813       struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
814       size_t ptr_size = TYPE_LENGTH (ptr_type);
815       CORE_ADDR pointer_address, addr;
816       asection *plt;
817       gdb_byte *buf = (gdb_byte *) alloca (ptr_size);
818       struct bound_minimal_symbol msym;
819
820       msym = lookup_minimal_symbol (name_got_plt, NULL, objfile);
821       if (msym.minsym == NULL)
822         continue;
823       if (MSYMBOL_TYPE (msym.minsym) != mst_slot_got_plt)
824         continue;
825       pointer_address = BMSYMBOL_VALUE_ADDRESS (msym);
826
827       plt = bfd_get_section_by_name (obfd, ".plt");
828       if (plt == NULL)
829         continue;
830
831       if (MSYMBOL_SIZE (msym.minsym) != ptr_size)
832         continue;
833       if (target_read_memory (pointer_address, buf, ptr_size) != 0)
834         continue;
835       addr = extract_typed_address (buf, ptr_type);
836       addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
837                                                  current_top_target ());
838       addr = gdbarch_addr_bits_remove (gdbarch, addr);
839
840       if (elf_gnu_ifunc_record_cache (name, addr))
841         {
842           if (addr_p != NULL)
843             *addr_p = addr;
844           return 1;
845         }
846     }
847
848   return 0;
849 }
850
851 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
852    function NAME.  If the address is found it is stored to *ADDR_P (if ADDR_P
853    is not NULL) and the function returns 1.  It returns 0 otherwise.
854
855    Both the elf_objfile_gnu_ifunc_cache_data hash table and
856    SYMBOL_GOT_PLT_SUFFIX locations are searched by this function.  */
857
858 static int
859 elf_gnu_ifunc_resolve_name (const char *name, CORE_ADDR *addr_p)
860 {
861   if (elf_gnu_ifunc_resolve_by_cache (name, addr_p))
862     return 1;
863
864   if (elf_gnu_ifunc_resolve_by_got (name, addr_p))
865     return 1;
866
867   return 0;
868 }
869
870 /* Call STT_GNU_IFUNC - a function returning addresss of a real function to
871    call.  PC is theSTT_GNU_IFUNC resolving function entry.  The value returned
872    is the entry point of the resolved STT_GNU_IFUNC target function to call.
873    */
874
875 static CORE_ADDR
876 elf_gnu_ifunc_resolve_addr (struct gdbarch *gdbarch, CORE_ADDR pc)
877 {
878   const char *name_at_pc;
879   CORE_ADDR start_at_pc, address;
880   struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
881   struct value *function, *address_val;
882   CORE_ADDR hwcap = 0;
883   struct value *hwcap_val;
884
885   /* Try first any non-intrusive methods without an inferior call.  */
886
887   if (find_pc_partial_function (pc, &name_at_pc, &start_at_pc, NULL)
888       && start_at_pc == pc)
889     {
890       if (elf_gnu_ifunc_resolve_name (name_at_pc, &address))
891         return address;
892     }
893   else
894     name_at_pc = NULL;
895
896   function = allocate_value (func_func_type);
897   VALUE_LVAL (function) = lval_memory;
898   set_value_address (function, pc);
899
900   /* STT_GNU_IFUNC resolver functions usually receive the HWCAP vector as
901      parameter.  FUNCTION is the function entry address.  ADDRESS may be a
902      function descriptor.  */
903
904   target_auxv_search (current_top_target (), AT_HWCAP, &hwcap);
905   hwcap_val = value_from_longest (builtin_type (gdbarch)
906                                   ->builtin_unsigned_long, hwcap);
907   address_val = call_function_by_hand (function, NULL, hwcap_val);
908   address = value_as_address (address_val);
909   address = gdbarch_convert_from_func_ptr_addr (gdbarch, address, current_top_target ());
910   address = gdbarch_addr_bits_remove (gdbarch, address);
911
912   if (name_at_pc)
913     elf_gnu_ifunc_record_cache (name_at_pc, address);
914
915   return address;
916 }
917
918 /* Handle inferior hit of bp_gnu_ifunc_resolver, see its definition.  */
919
920 static void
921 elf_gnu_ifunc_resolver_stop (struct breakpoint *b)
922 {
923   struct breakpoint *b_return;
924   struct frame_info *prev_frame = get_prev_frame (get_current_frame ());
925   struct frame_id prev_frame_id = get_stack_frame_id (prev_frame);
926   CORE_ADDR prev_pc = get_frame_pc (prev_frame);
927   int thread_id = inferior_thread ()->global_num;
928
929   gdb_assert (b->type == bp_gnu_ifunc_resolver);
930
931   for (b_return = b->related_breakpoint; b_return != b;
932        b_return = b_return->related_breakpoint)
933     {
934       gdb_assert (b_return->type == bp_gnu_ifunc_resolver_return);
935       gdb_assert (b_return->loc != NULL && b_return->loc->next == NULL);
936       gdb_assert (frame_id_p (b_return->frame_id));
937
938       if (b_return->thread == thread_id
939           && b_return->loc->requested_address == prev_pc
940           && frame_id_eq (b_return->frame_id, prev_frame_id))
941         break;
942     }
943
944   if (b_return == b)
945     {
946       /* No need to call find_pc_line for symbols resolving as this is only
947          a helper breakpointer never shown to the user.  */
948
949       symtab_and_line sal;
950       sal.pspace = current_inferior ()->pspace;
951       sal.pc = prev_pc;
952       sal.section = find_pc_overlay (sal.pc);
953       sal.explicit_pc = 1;
954       b_return
955         = set_momentary_breakpoint (get_frame_arch (prev_frame), sal,
956                                     prev_frame_id,
957                                     bp_gnu_ifunc_resolver_return).release ();
958
959       /* set_momentary_breakpoint invalidates PREV_FRAME.  */
960       prev_frame = NULL;
961
962       /* Add new b_return to the ring list b->related_breakpoint.  */
963       gdb_assert (b_return->related_breakpoint == b_return);
964       b_return->related_breakpoint = b->related_breakpoint;
965       b->related_breakpoint = b_return;
966     }
967 }
968
969 /* Handle inferior hit of bp_gnu_ifunc_resolver_return, see its definition.  */
970
971 static void
972 elf_gnu_ifunc_resolver_return_stop (struct breakpoint *b)
973 {
974   thread_info *thread = inferior_thread ();
975   struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
976   struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
977   struct type *value_type = TYPE_TARGET_TYPE (func_func_type);
978   struct regcache *regcache = get_thread_regcache (thread);
979   struct value *func_func;
980   struct value *value;
981   CORE_ADDR resolved_address, resolved_pc;
982
983   gdb_assert (b->type == bp_gnu_ifunc_resolver_return);
984
985   while (b->related_breakpoint != b)
986     {
987       struct breakpoint *b_next = b->related_breakpoint;
988
989       switch (b->type)
990         {
991         case bp_gnu_ifunc_resolver:
992           break;
993         case bp_gnu_ifunc_resolver_return:
994           delete_breakpoint (b);
995           break;
996         default:
997           internal_error (__FILE__, __LINE__,
998                           _("handle_inferior_event: Invalid "
999                             "gnu-indirect-function breakpoint type %d"),
1000                           (int) b->type);
1001         }
1002       b = b_next;
1003     }
1004   gdb_assert (b->type == bp_gnu_ifunc_resolver);
1005   gdb_assert (b->loc->next == NULL);
1006
1007   func_func = allocate_value (func_func_type);
1008   VALUE_LVAL (func_func) = lval_memory;
1009   set_value_address (func_func, b->loc->related_address);
1010
1011   value = allocate_value (value_type);
1012   gdbarch_return_value (gdbarch, func_func, value_type, regcache,
1013                         value_contents_raw (value), NULL);
1014   resolved_address = value_as_address (value);
1015   resolved_pc = gdbarch_convert_from_func_ptr_addr (gdbarch,
1016                                                     resolved_address,
1017                                                     current_top_target ());
1018   resolved_pc = gdbarch_addr_bits_remove (gdbarch, resolved_pc);
1019
1020   gdb_assert (current_program_space == b->pspace || b->pspace == NULL);
1021   elf_gnu_ifunc_record_cache (event_location_to_string (b->location.get ()),
1022                               resolved_pc);
1023
1024   b->type = bp_breakpoint;
1025   update_breakpoint_locations (b, current_program_space,
1026                                find_function_start_sal (resolved_pc, NULL, true),
1027                                {});
1028 }
1029
1030 /* A helper function for elf_symfile_read that reads the minimal
1031    symbols.  */
1032
1033 static void
1034 elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
1035                           const struct elfinfo *ei)
1036 {
1037   bfd *synth_abfd, *abfd = objfile->obfd;
1038   long symcount = 0, dynsymcount = 0, synthcount, storage_needed;
1039   asymbol **symbol_table = NULL, **dyn_symbol_table = NULL;
1040   asymbol *synthsyms;
1041
1042   if (symtab_create_debug)
1043     {
1044       fprintf_unfiltered (gdb_stdlog,
1045                           "Reading minimal symbols of objfile %s ...\n",
1046                           objfile_name (objfile));
1047     }
1048
1049   /* If we already have minsyms, then we can skip some work here.
1050      However, if there were stabs or mdebug sections, we go ahead and
1051      redo all the work anyway, because the psym readers for those
1052      kinds of debuginfo need extra information found here.  This can
1053      go away once all types of symbols are in the per-BFD object.  */
1054   if (objfile->per_bfd->minsyms_read
1055       && ei->stabsect == NULL
1056       && ei->mdebugsect == NULL)
1057     {
1058       if (symtab_create_debug)
1059         fprintf_unfiltered (gdb_stdlog,
1060                             "... minimal symbols previously read\n");
1061       return;
1062     }
1063
1064   minimal_symbol_reader reader (objfile);
1065
1066   /* Process the normal ELF symbol table first.  */
1067
1068   storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
1069   if (storage_needed < 0)
1070     error (_("Can't read symbols from %s: %s"),
1071            bfd_get_filename (objfile->obfd),
1072            bfd_errmsg (bfd_get_error ()));
1073
1074   if (storage_needed > 0)
1075     {
1076       /* Memory gets permanently referenced from ABFD after
1077          bfd_canonicalize_symtab so it must not get freed before ABFD gets.  */
1078
1079       symbol_table = (asymbol **) bfd_alloc (abfd, storage_needed);
1080       symcount = bfd_canonicalize_symtab (objfile->obfd, symbol_table);
1081
1082       if (symcount < 0)
1083         error (_("Can't read symbols from %s: %s"),
1084                bfd_get_filename (objfile->obfd),
1085                bfd_errmsg (bfd_get_error ()));
1086
1087       elf_symtab_read (reader, objfile, ST_REGULAR, symcount, symbol_table,
1088                        false);
1089     }
1090
1091   /* Add the dynamic symbols.  */
1092
1093   storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd);
1094
1095   if (storage_needed > 0)
1096     {
1097       /* Memory gets permanently referenced from ABFD after
1098          bfd_get_synthetic_symtab so it must not get freed before ABFD gets.
1099          It happens only in the case when elf_slurp_reloc_table sees
1100          asection->relocation NULL.  Determining which section is asection is
1101          done by _bfd_elf_get_synthetic_symtab which is all a bfd
1102          implementation detail, though.  */
1103
1104       dyn_symbol_table = (asymbol **) bfd_alloc (abfd, storage_needed);
1105       dynsymcount = bfd_canonicalize_dynamic_symtab (objfile->obfd,
1106                                                      dyn_symbol_table);
1107
1108       if (dynsymcount < 0)
1109         error (_("Can't read symbols from %s: %s"),
1110                bfd_get_filename (objfile->obfd),
1111                bfd_errmsg (bfd_get_error ()));
1112
1113       elf_symtab_read (reader, objfile, ST_DYNAMIC, dynsymcount,
1114                        dyn_symbol_table, false);
1115
1116       elf_rel_plt_read (reader, objfile, dyn_symbol_table);
1117     }
1118
1119   /* Contrary to binutils --strip-debug/--only-keep-debug the strip command from
1120      elfutils (eu-strip) moves even the .symtab section into the .debug file.
1121
1122      bfd_get_synthetic_symtab on ppc64 for each function descriptor ELF symbol
1123      'name' creates a new BSF_SYNTHETIC ELF symbol '.name' with its code
1124      address.  But with eu-strip files bfd_get_synthetic_symtab would fail to
1125      read the code address from .opd while it reads the .symtab section from
1126      a separate debug info file as the .opd section is SHT_NOBITS there.
1127
1128      With SYNTH_ABFD the .opd section will be read from the original
1129      backlinked binary where it is valid.  */
1130
1131   if (objfile->separate_debug_objfile_backlink)
1132     synth_abfd = objfile->separate_debug_objfile_backlink->obfd;
1133   else
1134     synth_abfd = abfd;
1135
1136   /* Add synthetic symbols - for instance, names for any PLT entries.  */
1137
1138   synthcount = bfd_get_synthetic_symtab (synth_abfd, symcount, symbol_table,
1139                                          dynsymcount, dyn_symbol_table,
1140                                          &synthsyms);
1141   if (synthcount > 0)
1142     {
1143       long i;
1144
1145       std::unique_ptr<asymbol *[]>
1146         synth_symbol_table (new asymbol *[synthcount]);
1147       for (i = 0; i < synthcount; i++)
1148         synth_symbol_table[i] = synthsyms + i;
1149       elf_symtab_read (reader, objfile, ST_SYNTHETIC, synthcount,
1150                        synth_symbol_table.get (), true);
1151
1152       xfree (synthsyms);
1153       synthsyms = NULL;
1154     }
1155
1156   /* Install any minimal symbols that have been collected as the current
1157      minimal symbols for this objfile.  The debug readers below this point
1158      should not generate new minimal symbols; if they do it's their
1159      responsibility to install them.  "mdebug" appears to be the only one
1160      which will do this.  */
1161
1162   reader.install ();
1163
1164   if (symtab_create_debug)
1165     fprintf_unfiltered (gdb_stdlog, "Done reading minimal symbols.\n");
1166 }
1167
1168 /* Scan and build partial symbols for a symbol file.
1169    We have been initialized by a call to elf_symfile_init, which
1170    currently does nothing.
1171
1172    This function only does the minimum work necessary for letting the
1173    user "name" things symbolically; it does not read the entire symtab.
1174    Instead, it reads the external and static symbols and puts them in partial
1175    symbol tables.  When more extensive information is requested of a
1176    file, the corresponding partial symbol table is mutated into a full
1177    fledged symbol table by going back and reading the symbols
1178    for real.
1179
1180    We look for sections with specific names, to tell us what debug
1181    format to look for:  FIXME!!!
1182
1183    elfstab_build_psymtabs() handles STABS symbols;
1184    mdebug_build_psymtabs() handles ECOFF debugging information.
1185
1186    Note that ELF files have a "minimal" symbol table, which looks a lot
1187    like a COFF symbol table, but has only the minimal information necessary
1188    for linking.  We process this also, and use the information to
1189    build gdb's minimal symbol table.  This gives us some minimal debugging
1190    capability even for files compiled without -g.  */
1191
1192 static void
1193 elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
1194 {
1195   bfd *abfd = objfile->obfd;
1196   struct elfinfo ei;
1197
1198   memset ((char *) &ei, 0, sizeof (ei));
1199   if (!(objfile->flags & OBJF_READNEVER))
1200     bfd_map_over_sections (abfd, elf_locate_sections, (void *) & ei);
1201
1202   elf_read_minimal_symbols (objfile, symfile_flags, &ei);
1203
1204   /* ELF debugging information is inserted into the psymtab in the
1205      order of least informative first - most informative last.  Since
1206      the psymtab table is searched `most recent insertion first' this
1207      increases the probability that more detailed debug information
1208      for a section is found.
1209
1210      For instance, an object file might contain both .mdebug (XCOFF)
1211      and .debug_info (DWARF2) sections then .mdebug is inserted first
1212      (searched last) and DWARF2 is inserted last (searched first).  If
1213      we don't do this then the XCOFF info is found first - for code in
1214      an included file XCOFF info is useless.  */
1215
1216   if (ei.mdebugsect)
1217     {
1218       const struct ecoff_debug_swap *swap;
1219
1220       /* .mdebug section, presumably holding ECOFF debugging
1221          information.  */
1222       swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1223       if (swap)
1224         elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
1225     }
1226   if (ei.stabsect)
1227     {
1228       asection *str_sect;
1229
1230       /* Stab sections have an associated string table that looks like
1231          a separate section.  */
1232       str_sect = bfd_get_section_by_name (abfd, ".stabstr");
1233
1234       /* FIXME should probably warn about a stab section without a stabstr.  */
1235       if (str_sect)
1236         elfstab_build_psymtabs (objfile,
1237                                 ei.stabsect,
1238                                 str_sect->filepos,
1239                                 bfd_section_size (abfd, str_sect));
1240     }
1241
1242   if (dwarf2_has_info (objfile, NULL))
1243     {
1244       dw_index_kind index_kind;
1245
1246       /* elf_sym_fns_gdb_index cannot handle simultaneous non-DWARF
1247          debug information present in OBJFILE.  If there is such debug
1248          info present never use an index.  */
1249       if (!objfile_has_partial_symbols (objfile)
1250           && dwarf2_initialize_objfile (objfile, &index_kind))
1251         {
1252           switch (index_kind)
1253             {
1254             case dw_index_kind::GDB_INDEX:
1255               objfile_set_sym_fns (objfile, &elf_sym_fns_gdb_index);
1256               break;
1257             case dw_index_kind::DEBUG_NAMES:
1258               objfile_set_sym_fns (objfile, &elf_sym_fns_debug_names);
1259               break;
1260             }
1261         }
1262       else
1263         {
1264           /* It is ok to do this even if the stabs reader made some
1265              partial symbols, because OBJF_PSYMTABS_READ has not been
1266              set, and so our lazy reader function will still be called
1267              when needed.  */
1268           objfile_set_sym_fns (objfile, &elf_sym_fns_lazy_psyms);
1269         }
1270     }
1271   /* If the file has its own symbol tables it has no separate debug
1272      info.  `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to
1273      SYMTABS/PSYMTABS.  `.gnu_debuglink' may no longer be present with
1274      `.note.gnu.build-id'.
1275
1276      .gnu_debugdata is !objfile_has_partial_symbols because it contains only
1277      .symtab, not .debug_* section.  But if we already added .gnu_debugdata as
1278      an objfile via find_separate_debug_file_in_section there was no separate
1279      debug info available.  Therefore do not attempt to search for another one,
1280      objfile->separate_debug_objfile->separate_debug_objfile GDB guarantees to
1281      be NULL and we would possibly violate it.  */
1282
1283   else if (!objfile_has_partial_symbols (objfile)
1284            && objfile->separate_debug_objfile == NULL
1285            && objfile->separate_debug_objfile_backlink == NULL)
1286     {
1287       std::string debugfile = find_separate_debug_file_by_buildid (objfile);
1288
1289       if (debugfile.empty ())
1290         debugfile = find_separate_debug_file_by_debuglink (objfile);
1291
1292       if (!debugfile.empty ())
1293         {
1294           gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (debugfile.c_str ()));
1295
1296           symbol_file_add_separate (debug_bfd.get (), debugfile.c_str (),
1297                                     symfile_flags, objfile);
1298         }
1299     }
1300 }
1301
1302 /* Callback to lazily read psymtabs.  */
1303
1304 static void
1305 read_psyms (struct objfile *objfile)
1306 {
1307   if (dwarf2_has_info (objfile, NULL))
1308     dwarf2_build_psymtabs (objfile);
1309 }
1310
1311 /* Initialize anything that needs initializing when a completely new symbol
1312    file is specified (not just adding some symbols from another file, e.g. a
1313    shared library).  */
1314
1315 static void
1316 elf_new_init (struct objfile *ignore)
1317 {
1318 }
1319
1320 /* Perform any local cleanups required when we are done with a particular
1321    objfile.  I.E, we are in the process of discarding all symbol information
1322    for an objfile, freeing up all memory held for it, and unlinking the
1323    objfile struct from the global list of known objfiles.  */
1324
1325 static void
1326 elf_symfile_finish (struct objfile *objfile)
1327 {
1328 }
1329
1330 /* ELF specific initialization routine for reading symbols.  */
1331
1332 static void
1333 elf_symfile_init (struct objfile *objfile)
1334 {
1335   /* ELF objects may be reordered, so set OBJF_REORDERED.  If we
1336      find this causes a significant slowdown in gdb then we could
1337      set it in the debug symbol readers only when necessary.  */
1338   objfile->flags |= OBJF_REORDERED;
1339 }
1340
1341 /* Implementation of `sym_get_probes', as documented in symfile.h.  */
1342
1343 static const elfread_data &
1344 elf_get_probes (struct objfile *objfile)
1345 {
1346   elfread_data *probes_per_bfd = probe_key.get (objfile->obfd);
1347
1348   if (probes_per_bfd == NULL)
1349     {
1350       probes_per_bfd = probe_key.emplace (objfile->obfd);
1351
1352       /* Here we try to gather information about all types of probes from the
1353          objfile.  */
1354       for (const static_probe_ops *ops : all_static_probe_ops)
1355         ops->get_probes (probes_per_bfd, objfile);
1356     }
1357
1358   return *probes_per_bfd;
1359 }
1360
1361 \f
1362
1363 /* Implementation `sym_probe_fns', as documented in symfile.h.  */
1364
1365 static const struct sym_probe_fns elf_probe_fns =
1366 {
1367   elf_get_probes,                   /* sym_get_probes */
1368 };
1369
1370 /* Register that we are able to handle ELF object file formats.  */
1371
1372 static const struct sym_fns elf_sym_fns =
1373 {
1374   elf_new_init,                 /* init anything gbl to entire symtab */
1375   elf_symfile_init,             /* read initial info, setup for sym_read() */
1376   elf_symfile_read,             /* read a symbol file into symtab */
1377   NULL,                         /* sym_read_psymbols */
1378   elf_symfile_finish,           /* finished with file, cleanup */
1379   default_symfile_offsets,      /* Translate ext. to int. relocation */
1380   elf_symfile_segments,         /* Get segment information from a file.  */
1381   NULL,
1382   default_symfile_relocate,     /* Relocate a debug section.  */
1383   &elf_probe_fns,               /* sym_probe_fns */
1384   &psym_functions
1385 };
1386
1387 /* The same as elf_sym_fns, but not registered and lazily reads
1388    psymbols.  */
1389
1390 const struct sym_fns elf_sym_fns_lazy_psyms =
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   read_psyms,                   /* 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 uses the
1406    DWARF-specific GNU index rather than psymtab.  */
1407 const struct sym_fns elf_sym_fns_gdb_index =
1408 {
1409   elf_new_init,                 /* init anything gbl to entire symab */
1410   elf_symfile_init,             /* read initial info, setup for sym_red() */
1411   elf_symfile_read,             /* read a symbol file into symtab */
1412   NULL,                         /* sym_read_psymbols */
1413   elf_symfile_finish,           /* finished with file, cleanup */
1414   default_symfile_offsets,      /* Translate ext. to int. relocatin */
1415   elf_symfile_segments,         /* Get segment information from a file.  */
1416   NULL,
1417   default_symfile_relocate,     /* Relocate a debug section.  */
1418   &elf_probe_fns,               /* sym_probe_fns */
1419   &dwarf2_gdb_index_functions
1420 };
1421
1422 /* The same as elf_sym_fns, but not registered and uses the
1423    DWARF-specific .debug_names index rather than psymtab.  */
1424 const struct sym_fns elf_sym_fns_debug_names =
1425 {
1426   elf_new_init,                 /* init anything gbl to entire symab */
1427   elf_symfile_init,             /* read initial info, setup for sym_red() */
1428   elf_symfile_read,             /* read a symbol file into symtab */
1429   NULL,                         /* sym_read_psymbols */
1430   elf_symfile_finish,           /* finished with file, cleanup */
1431   default_symfile_offsets,      /* Translate ext. to int. relocatin */
1432   elf_symfile_segments,         /* Get segment information from a file.  */
1433   NULL,
1434   default_symfile_relocate,     /* Relocate a debug section.  */
1435   &elf_probe_fns,               /* sym_probe_fns */
1436   &dwarf2_debug_names_functions
1437 };
1438
1439 /* STT_GNU_IFUNC resolver vector to be installed to gnu_ifunc_fns_p.  */
1440
1441 static const struct gnu_ifunc_fns elf_gnu_ifunc_fns =
1442 {
1443   elf_gnu_ifunc_resolve_addr,
1444   elf_gnu_ifunc_resolve_name,
1445   elf_gnu_ifunc_resolver_stop,
1446   elf_gnu_ifunc_resolver_return_stop
1447 };
1448
1449 void
1450 _initialize_elfread (void)
1451 {
1452   add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns);
1453
1454   gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;
1455 }