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