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