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