GDB (xrefs)
/tmp/gdb-8.1/gdb/elfread.c
Go to the documentation of this file.
1 /* Read ELF (Executable and Linking Format) object files for GDB.
2 
3  Copyright (C) 1991-2018 Free Software Foundation, Inc.
4 
5  Written by Fred Fish at Cygnus Support.
6 
7  This file is part of GDB.
8 
9  This program is free software; you can redistribute it and/or modify
10  it under the terms of the GNU General Public License as published by
11  the Free Software Foundation; either version 3 of the License, or
12  (at your option) any later version.
13 
14  This program is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  GNU General Public License for more details.
18 
19  You should have received a copy of the GNU General Public License
20  along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 
22 #include "defs.h"
23 #include "bfd.h"
24 #include "elf-bfd.h"
25 #include "elf/common.h"
26 #include "elf/internal.h"
27 #include "elf/mips.h"
28 #include "symtab.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "buildsym.h"
32 #include "stabsread.h"
33 #include "gdb-stabs.h"
34 #include "complaints.h"
35 #include "demangle.h"
36 #include "psympriv.h"
37 #include "filenames.h"
38 #include "probe.h"
39 #include "arch-utils.h"
40 #include "gdbtypes.h"
41 #include "value.h"
42 #include "infcall.h"
43 #include "gdbthread.h"
44 #include "regcache.h"
45 #include "bcache.h"
46 #include "gdb_bfd.h"
47 #include "build-id.h"
48 #include "location.h"
49 #include "auxv.h"
50 
51 /* Forward declarations. */
52 extern const struct sym_fns elf_sym_fns_gdb_index;
53 extern const struct sym_fns elf_sym_fns_debug_names;
54 extern const struct sym_fns elf_sym_fns_lazy_psyms;
55 
56 /* The struct elfinfo is available only during ELF symbol table and
57  psymtab reading. It is destroyed at the completion of psymtab-reading.
58  It's local to elf_symfile_read. */
59 
60 struct elfinfo
61  {
62  asection *stabsect; /* Section pointer for .stab section */
63  asection *mdebugsect; /* Section pointer for .mdebug section */
64  };
65 
66 /* 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 *
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;
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 *
194  const char *name, int name_len, bool copy_name,
195  CORE_ADDR address,
196  enum minimal_symbol_type ms_type,
197  asection *bfd_section, struct objfile *objfile)
198 {
200 
201  if (ms_type == mst_text || ms_type == mst_file_text
202  || ms_type == mst_text_gnu_ifunc)
203  address = gdbarch_addr_bits_remove (gdbarch, address);
204 
205  return reader.record_full (name, name_len, copy_name, address,
206  ms_type,
208  bfd_section));
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
229  struct objfile *objfile, int type,
230  long number_of_symbols, asymbol **symbol_table,
231  bool copy_names)
232 {
234  asymbol *sym;
235  long i;
236  CORE_ADDR symaddr;
237  enum minimal_symbol_type ms_type;
238  /* Name of the last file symbol. This is either a constant string or is
239  saved on the objfile's filename cache. */
240  const char *filesymname = "";
241  int stripped = (bfd_get_symcount (objfile->obfd) == 0);
242  int elf_make_msymbol_special_p
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  {
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  (reader, 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)
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,
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  (reader, 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)
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 (reader, sym->name, len, true, 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 (reader, sym->name, len - 4,
507  true, symaddr,
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)
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
534  struct objfile *objfile, asymbol **dyn_symbol_table)
535 {
536  bfd *obfd = objfile->obfd;
537  const struct elf_backend_data *bed = get_elf_backend_data (obfd);
538  asection *plt, *relplt, *got_plt;
539  int plt_elf_idx;
540  bfd_size_type reloc_count, reloc;
542  struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
543  size_t ptr_size = TYPE_LENGTH (ptr_type);
544 
546  return;
547 
548  plt = bfd_get_section_by_name (obfd, ".plt");
549  if (plt == NULL)
550  return;
551  plt_elf_idx = elf_section_data (plt)->this_idx;
552 
553  got_plt = bfd_get_section_by_name (obfd, ".got.plt");
554  if (got_plt == NULL)
555  {
556  /* For platforms where there is no separate .got.plt. */
557  got_plt = bfd_get_section_by_name (obfd, ".got");
558  if (got_plt == NULL)
559  return;
560  }
561 
562  /* This search algorithm is from _bfd_elf_canonicalize_dynamic_reloc. */
563  for (relplt = obfd->sections; relplt != NULL; relplt = relplt->next)
564  if (elf_section_data (relplt)->this_hdr.sh_info == plt_elf_idx
565  && (elf_section_data (relplt)->this_hdr.sh_type == SHT_REL
566  || elf_section_data (relplt)->this_hdr.sh_type == SHT_RELA))
567  break;
568  if (relplt == NULL)
569  return;
570 
571  if (! bed->s->slurp_reloc_table (obfd, relplt, dyn_symbol_table, TRUE))
572  return;
573 
574  std::string string_buffer;
575 
576  reloc_count = relplt->size / elf_section_data (relplt)->this_hdr.sh_entsize;
577  for (reloc = 0; reloc < reloc_count; reloc++)
578  {
579  const char *name;
580  struct minimal_symbol *msym;
581  CORE_ADDR address;
582  const char *got_suffix = SYMBOL_GOT_PLT_SUFFIX;
583  const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
584 
585  name = bfd_asymbol_name (*relplt->relocation[reloc].sym_ptr_ptr);
586  address = relplt->relocation[reloc].address;
587 
588  /* Does the pointer reside in the .got.plt section? */
589  if (!(bfd_get_section_vma (obfd, got_plt) <= address
590  && address < bfd_get_section_vma (obfd, got_plt)
591  + bfd_get_section_size (got_plt)))
592  continue;
593 
594  /* We cannot check if NAME is a reference to mst_text_gnu_ifunc as in
595  OBJFILE the symbol is undefined and the objfile having NAME defined
596  may not yet have been loaded. */
597 
598  string_buffer.assign (name);
599  string_buffer.append (got_suffix, got_suffix + got_suffix_len);
600 
601  msym = record_minimal_symbol (reader, string_buffer.c_str (),
602  string_buffer.size (),
603  true, address, mst_slot_got_plt, got_plt,
604  objfile);
605  if (msym)
606  SET_MSYMBOL_SIZE (msym, ptr_size);
607  }
608 }
609 
610 /* The data pointer is htab_t for gnu_ifunc_record_cache_unchecked. */
611 
612 static const struct objfile_data *elf_objfile_gnu_ifunc_cache_data;
613 
614 /* Map function names to CORE_ADDR in elf_objfile_gnu_ifunc_cache_data. */
615 
617 {
618  /* This is always a function entry address, not a function descriptor. */
620 
621  char name[1];
622 };
623 
624 /* htab_hash for elf_objfile_gnu_ifunc_cache_data. */
625 
626 static hashval_t
627 elf_gnu_ifunc_cache_hash (const void *a_voidp)
628 {
629  const struct elf_gnu_ifunc_cache *a
630  = (const struct elf_gnu_ifunc_cache *) a_voidp;
631 
632  return htab_hash_string (a->name);
633 }
634 
635 /* htab_eq for elf_objfile_gnu_ifunc_cache_data. */
636 
637 static int
638 elf_gnu_ifunc_cache_eq (const void *a_voidp, const void *b_voidp)
639 {
640  const struct elf_gnu_ifunc_cache *a
641  = (const struct elf_gnu_ifunc_cache *) a_voidp;
642  const struct elf_gnu_ifunc_cache *b
643  = (const struct elf_gnu_ifunc_cache *) b_voidp;
644 
645  return strcmp (a->name, b->name) == 0;
646 }
647 
648 /* Record the target function address of a STT_GNU_IFUNC function NAME is the
649  function entry address ADDR. Return 1 if NAME and ADDR are considered as
650  valid and therefore they were successfully recorded, return 0 otherwise.
651 
652  Function does not expect a duplicate entry. Use
653  elf_gnu_ifunc_resolve_by_cache first to check if the entry for NAME already
654  exists. */
655 
656 static int
658 {
659  struct bound_minimal_symbol msym;
660  asection *sect;
661  struct objfile *objfile;
662  htab_t htab;
663  struct elf_gnu_ifunc_cache entry_local, *entry_p;
664  void **slot;
665 
667  if (msym.minsym == NULL)
668  return 0;
669  if (BMSYMBOL_VALUE_ADDRESS (msym) != addr)
670  return 0;
671  /* minimal symbols have always SYMBOL_OBJ_SECTION non-NULL. */
672  sect = MSYMBOL_OBJ_SECTION (msym.objfile, msym.minsym)->the_bfd_section;
673  objfile = msym.objfile;
674 
675  /* If .plt jumps back to .plt the symbol is still deferred for later
676  resolution and it has no use for GDB. Besides ".text" this symbol can
677  reside also in ".opd" for ppc64 function descriptor. */
678  if (strcmp (bfd_get_section_name (objfile->obfd, sect), ".plt") == 0)
679  return 0;
680 
681  htab = (htab_t) objfile_data (objfile, elf_objfile_gnu_ifunc_cache_data);
682  if (htab == NULL)
683  {
684  htab = htab_create_alloc_ex (1, elf_gnu_ifunc_cache_hash,
686  NULL, &objfile->objfile_obstack,
689  set_objfile_data (objfile, elf_objfile_gnu_ifunc_cache_data, htab);
690  }
691 
692  entry_local.addr = addr;
693  obstack_grow (&objfile->objfile_obstack, &entry_local,
694  offsetof (struct elf_gnu_ifunc_cache, name));
696  entry_p
697  = (struct elf_gnu_ifunc_cache *) obstack_finish (&objfile->objfile_obstack);
698 
699  slot = htab_find_slot (htab, entry_p, INSERT);
700  if (*slot != NULL)
701  {
702  struct elf_gnu_ifunc_cache *entry_found_p
703  = (struct elf_gnu_ifunc_cache *) *slot;
705 
706  if (entry_found_p->addr != addr)
707  {
708  /* This case indicates buggy inferior program, the resolved address
709  should never change. */
710 
711  warning (_("gnu-indirect-function \"%s\" has changed its resolved "
712  "function_address from %s to %s"),
713  name, paddress (gdbarch, entry_found_p->addr),
714  paddress (gdbarch, addr));
715  }
716 
717  /* New ENTRY_P is here leaked/duplicate in the OBJFILE obstack. */
718  }
719  *slot = entry_p;
720 
721  return 1;
722 }
723 
724 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
725  function NAME. If the address is found it is stored to *ADDR_P (if ADDR_P
726  is not NULL) and the function returns 1. It returns 0 otherwise.
727 
728  Only the elf_objfile_gnu_ifunc_cache_data hash table is searched by this
729  function. */
730 
731 static int
733 {
734  struct objfile *objfile;
735 
737  {
738  htab_t htab;
739  struct elf_gnu_ifunc_cache *entry_p;
740  void **slot;
741 
742  htab = (htab_t) objfile_data (objfile, elf_objfile_gnu_ifunc_cache_data);
743  if (htab == NULL)
744  continue;
745 
746  entry_p = ((struct elf_gnu_ifunc_cache *)
747  alloca (sizeof (*entry_p) + strlen (name)));
748  strcpy (entry_p->name, name);
749 
750  slot = htab_find_slot (htab, entry_p, NO_INSERT);
751  if (slot == NULL)
752  continue;
753  entry_p = (struct elf_gnu_ifunc_cache *) *slot;
754  gdb_assert (entry_p != NULL);
755 
756  if (addr_p)
757  *addr_p = entry_p->addr;
758  return 1;
759  }
760 
761  return 0;
762 }
763 
764 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
765  function NAME. If the address is found it is stored to *ADDR_P (if ADDR_P
766  is not NULL) and the function returns 1. It returns 0 otherwise.
767 
768  Only the SYMBOL_GOT_PLT_SUFFIX locations are searched by this function.
769  elf_gnu_ifunc_resolve_by_cache must have been already called for NAME to
770  prevent cache entries duplicates. */
771 
772 static int
774 {
775  char *name_got_plt;
776  struct objfile *objfile;
777  const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
778 
779  name_got_plt = (char *) alloca (strlen (name) + got_suffix_len + 1);
780  sprintf (name_got_plt, "%s" SYMBOL_GOT_PLT_SUFFIX, name);
781 
783  {
784  bfd *obfd = objfile->obfd;
786  struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
787  size_t ptr_size = TYPE_LENGTH (ptr_type);
788  CORE_ADDR pointer_address, addr;
789  asection *plt;
790  gdb_byte *buf = (gdb_byte *) alloca (ptr_size);
791  struct bound_minimal_symbol msym;
792 
793  msym = lookup_minimal_symbol (name_got_plt, NULL, objfile);
794  if (msym.minsym == NULL)
795  continue;
796  if (MSYMBOL_TYPE (msym.minsym) != mst_slot_got_plt)
797  continue;
798  pointer_address = BMSYMBOL_VALUE_ADDRESS (msym);
799 
800  plt = bfd_get_section_by_name (obfd, ".plt");
801  if (plt == NULL)
802  continue;
803 
804  if (MSYMBOL_SIZE (msym.minsym) != ptr_size)
805  continue;
806  if (target_read_memory (pointer_address, buf, ptr_size) != 0)
807  continue;
808  addr = extract_typed_address (buf, ptr_type);
810  &current_target);
811  addr = gdbarch_addr_bits_remove (gdbarch, addr);
812 
813  if (addr_p)
814  *addr_p = addr;
815  if (elf_gnu_ifunc_record_cache (name, addr))
816  return 1;
817  }
818 
819  return 0;
820 }
821 
822 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
823  function NAME. If the address is found it is stored to *ADDR_P (if ADDR_P
824  is not NULL) and the function returns 1. It returns 0 otherwise.
825 
826  Both the elf_objfile_gnu_ifunc_cache_data hash table and
827  SYMBOL_GOT_PLT_SUFFIX locations are searched by this function. */
828 
829 static int
831 {
832  if (elf_gnu_ifunc_resolve_by_cache (name, addr_p))
833  return 1;
834 
835  if (elf_gnu_ifunc_resolve_by_got (name, addr_p))
836  return 1;
837 
838  return 0;
839 }
840 
841 /* Call STT_GNU_IFUNC - a function returning addresss of a real function to
842  call. PC is theSTT_GNU_IFUNC resolving function entry. The value returned
843  is the entry point of the resolved STT_GNU_IFUNC target function to call.
844  */
845 
846 static CORE_ADDR
848 {
849  const char *name_at_pc;
850  CORE_ADDR start_at_pc, address;
851  struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
852  struct value *function, *address_val;
853  CORE_ADDR hwcap = 0;
854  struct value *hwcap_val;
855 
856  /* Try first any non-intrusive methods without an inferior call. */
857 
858  if (find_pc_partial_function (pc, &name_at_pc, &start_at_pc, NULL)
859  && start_at_pc == pc)
860  {
861  if (elf_gnu_ifunc_resolve_name (name_at_pc, &address))
862  return address;
863  }
864  else
865  name_at_pc = NULL;
866 
867  function = allocate_value (func_func_type);
868  VALUE_LVAL (function) = lval_memory;
869  set_value_address (function, pc);
870 
871  /* STT_GNU_IFUNC resolver functions usually receive the HWCAP vector as
872  parameter. FUNCTION is the function entry address. ADDRESS may be a
873  function descriptor. */
874 
875  target_auxv_search (&current_target, AT_HWCAP, &hwcap);
877  ->builtin_unsigned_long, hwcap);
878  address_val = call_function_by_hand (function, NULL, 1, &hwcap_val);
879  address = value_as_address (address_val);
881  &current_target);
883 
884  if (name_at_pc)
885  elf_gnu_ifunc_record_cache (name_at_pc, address);
886 
887  return address;
888 }
889 
890 /* Handle inferior hit of bp_gnu_ifunc_resolver, see its definition. */
891 
892 static void
894 {
895  struct breakpoint *b_return;
896  struct frame_info *prev_frame = get_prev_frame (get_current_frame ());
897  struct frame_id prev_frame_id = get_stack_frame_id (prev_frame);
898  CORE_ADDR prev_pc = get_frame_pc (prev_frame);
899  int thread_id = ptid_to_global_thread_id (inferior_ptid);
900 
902 
903  for (b_return = b->related_breakpoint; b_return != b;
904  b_return = b_return->related_breakpoint)
905  {
907  gdb_assert (b_return->loc != NULL && b_return->loc->next == NULL);
908  gdb_assert (frame_id_p (b_return->frame_id));
909 
910  if (b_return->thread == thread_id
911  && b_return->loc->requested_address == prev_pc
912  && frame_id_eq (b_return->frame_id, prev_frame_id))
913  break;
914  }
915 
916  if (b_return == b)
917  {
918  /* No need to call find_pc_line for symbols resolving as this is only
919  a helper breakpointer never shown to the user. */
920 
921  symtab_and_line sal;
922  sal.pspace = current_inferior ()->pspace;
923  sal.pc = prev_pc;
924  sal.section = find_pc_overlay (sal.pc);
925  sal.explicit_pc = 1;
926  b_return
927  = set_momentary_breakpoint (get_frame_arch (prev_frame), sal,
928  prev_frame_id,
929  bp_gnu_ifunc_resolver_return).release ();
930 
931  /* set_momentary_breakpoint invalidates PREV_FRAME. */
932  prev_frame = NULL;
933 
934  /* Add new b_return to the ring list b->related_breakpoint. */
935  gdb_assert (b_return->related_breakpoint == b_return);
936  b_return->related_breakpoint = b->related_breakpoint;
937  b->related_breakpoint = b_return;
938  }
939 }
940 
941 /* Handle inferior hit of bp_gnu_ifunc_resolver_return, see its definition. */
942 
943 static void
945 {
947  struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
948  struct type *value_type = TYPE_TARGET_TYPE (func_func_type);
950  struct value *func_func;
951  struct value *value;
952  CORE_ADDR resolved_address, resolved_pc;
953 
955 
956  while (b->related_breakpoint != b)
957  {
958  struct breakpoint *b_next = b->related_breakpoint;
959 
960  switch (b->type)
961  {
963  break;
965  delete_breakpoint (b);
966  break;
967  default:
968  internal_error (__FILE__, __LINE__,
969  _("handle_inferior_event: Invalid "
970  "gnu-indirect-function breakpoint type %d"),
971  (int) b->type);
972  }
973  b = b_next;
974  }
976  gdb_assert (b->loc->next == NULL);
977 
978  func_func = allocate_value (func_func_type);
979  VALUE_LVAL (func_func) = lval_memory;
980  set_value_address (func_func, b->loc->related_address);
981 
984  value_contents_raw (value), NULL);
985  resolved_address = value_as_address (value);
987  resolved_address,
988  &current_target);
989  resolved_pc = gdbarch_addr_bits_remove (gdbarch, resolved_pc);
990 
991  gdb_assert (current_program_space == b->pspace || b->pspace == NULL);
993  resolved_pc);
994 
995  b->type = bp_breakpoint;
997  find_pc_line (resolved_pc, 0), {});
998 }
999 
1000 /* A helper function for elf_symfile_read that reads the minimal
1001  symbols. */
1002 
1003 static void
1004 elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
1005  const struct elfinfo *ei)
1006 {
1007  bfd *synth_abfd, *abfd = objfile->obfd;
1008  long symcount = 0, dynsymcount = 0, synthcount, storage_needed;
1009  asymbol **symbol_table = NULL, **dyn_symbol_table = NULL;
1010  asymbol *synthsyms;
1011  struct dbx_symfile_info *dbx;
1012 
1013  if (symtab_create_debug)
1014  {
1016  "Reading minimal symbols of objfile %s ...\n",
1017  objfile_name (objfile));
1018  }
1019 
1020  /* If we already have minsyms, then we can skip some work here.
1021  However, if there were stabs or mdebug sections, we go ahead and
1022  redo all the work anyway, because the psym readers for those
1023  kinds of debuginfo need extra information found here. This can
1024  go away once all types of symbols are in the per-BFD object. */
1026  && ei->stabsect == NULL
1027  && ei->mdebugsect == NULL)
1028  {
1029  if (symtab_create_debug)
1031  "... minimal symbols previously read\n");
1032  return;
1033  }
1034 
1035  minimal_symbol_reader reader (objfile);
1036 
1037  /* Allocate struct to keep track of the symfile. */
1038  dbx = XCNEW (struct dbx_symfile_info);
1039  set_objfile_data (objfile, dbx_objfile_data_key, dbx);
1040 
1041  /* Process the normal ELF symbol table first. */
1042 
1043  storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
1044  if (storage_needed < 0)
1045  error (_("Can't read symbols from %s: %s"),
1046  bfd_get_filename (objfile->obfd),
1047  bfd_errmsg (bfd_get_error ()));
1048 
1049  if (storage_needed > 0)
1050  {
1051  /* Memory gets permanently referenced from ABFD after
1052  bfd_canonicalize_symtab so it must not get freed before ABFD gets. */
1053 
1054  symbol_table = (asymbol **) bfd_alloc (abfd, storage_needed);
1055  symcount = bfd_canonicalize_symtab (objfile->obfd, symbol_table);
1056 
1057  if (symcount < 0)
1058  error (_("Can't read symbols from %s: %s"),
1059  bfd_get_filename (objfile->obfd),
1060  bfd_errmsg (bfd_get_error ()));
1061 
1062  elf_symtab_read (reader, objfile, ST_REGULAR, symcount, symbol_table,
1063  false);
1064  }
1065 
1066  /* Add the dynamic symbols. */
1067 
1068  storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd);
1069 
1070  if (storage_needed > 0)
1071  {
1072  /* Memory gets permanently referenced from ABFD after
1073  bfd_get_synthetic_symtab so it must not get freed before ABFD gets.
1074  It happens only in the case when elf_slurp_reloc_table sees
1075  asection->relocation NULL. Determining which section is asection is
1076  done by _bfd_elf_get_synthetic_symtab which is all a bfd
1077  implementation detail, though. */
1078 
1079  dyn_symbol_table = (asymbol **) bfd_alloc (abfd, storage_needed);
1080  dynsymcount = bfd_canonicalize_dynamic_symtab (objfile->obfd,
1081  dyn_symbol_table);
1082 
1083  if (dynsymcount < 0)
1084  error (_("Can't read symbols from %s: %s"),
1085  bfd_get_filename (objfile->obfd),
1086  bfd_errmsg (bfd_get_error ()));
1087 
1088  elf_symtab_read (reader, objfile, ST_DYNAMIC, dynsymcount,
1089  dyn_symbol_table, false);
1090 
1091  elf_rel_plt_read (reader, objfile, dyn_symbol_table);
1092  }
1093 
1094  /* Contrary to binutils --strip-debug/--only-keep-debug the strip command from
1095  elfutils (eu-strip) moves even the .symtab section into the .debug file.
1096 
1097  bfd_get_synthetic_symtab on ppc64 for each function descriptor ELF symbol
1098  'name' creates a new BSF_SYNTHETIC ELF symbol '.name' with its code
1099  address. But with eu-strip files bfd_get_synthetic_symtab would fail to
1100  read the code address from .opd while it reads the .symtab section from
1101  a separate debug info file as the .opd section is SHT_NOBITS there.
1102 
1103  With SYNTH_ABFD the .opd section will be read from the original
1104  backlinked binary where it is valid. */
1105 
1108  else
1109  synth_abfd = abfd;
1110 
1111  /* Add synthetic symbols - for instance, names for any PLT entries. */
1112 
1113  synthcount = bfd_get_synthetic_symtab (synth_abfd, symcount, symbol_table,
1114  dynsymcount, dyn_symbol_table,
1115  &synthsyms);
1116  if (synthcount > 0)
1117  {
1118  long i;
1119 
1120  std::unique_ptr<asymbol *[]>
1121  synth_symbol_table (new asymbol *[synthcount]);
1122  for (i = 0; i < synthcount; i++)
1123  synth_symbol_table[i] = synthsyms + i;
1124  elf_symtab_read (reader, objfile, ST_SYNTHETIC, synthcount,
1125  synth_symbol_table.get (), true);
1126 
1127  xfree (synthsyms);
1128  synthsyms = NULL;
1129  }
1130 
1131  /* Install any minimal symbols that have been collected as the current
1132  minimal symbols for this objfile. The debug readers below this point
1133  should not generate new minimal symbols; if they do it's their
1134  responsibility to install them. "mdebug" appears to be the only one
1135  which will do this. */
1136 
1137  reader.install ();
1138 
1139  if (symtab_create_debug)
1140  fprintf_unfiltered (gdb_stdlog, "Done reading minimal symbols.\n");
1141 }
1142 
1143 /* Scan and build partial symbols for a symbol file.
1144  We have been initialized by a call to elf_symfile_init, which
1145  currently does nothing.
1146 
1147  This function only does the minimum work necessary for letting the
1148  user "name" things symbolically; it does not read the entire symtab.
1149  Instead, it reads the external and static symbols and puts them in partial
1150  symbol tables. When more extensive information is requested of a
1151  file, the corresponding partial symbol table is mutated into a full
1152  fledged symbol table by going back and reading the symbols
1153  for real.
1154 
1155  We look for sections with specific names, to tell us what debug
1156  format to look for: FIXME!!!
1157 
1158  elfstab_build_psymtabs() handles STABS symbols;
1159  mdebug_build_psymtabs() handles ECOFF debugging information.
1160 
1161  Note that ELF files have a "minimal" symbol table, which looks a lot
1162  like a COFF symbol table, but has only the minimal information necessary
1163  for linking. We process this also, and use the information to
1164  build gdb's minimal symbol table. This gives us some minimal debugging
1165  capability even for files compiled without -g. */
1166 
1167 static void
1168 elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
1169 {
1170  bfd *abfd = objfile->obfd;
1171  struct elfinfo ei;
1172 
1173  memset ((char *) &ei, 0, sizeof (ei));
1174  if (!(objfile->flags & OBJF_READNEVER))
1175  bfd_map_over_sections (abfd, elf_locate_sections, (void *) & ei);
1176 
1177  elf_read_minimal_symbols (objfile, symfile_flags, &ei);
1178 
1179  /* ELF debugging information is inserted into the psymtab in the
1180  order of least informative first - most informative last. Since
1181  the psymtab table is searched `most recent insertion first' this
1182  increases the probability that more detailed debug information
1183  for a section is found.
1184 
1185  For instance, an object file might contain both .mdebug (XCOFF)
1186  and .debug_info (DWARF2) sections then .mdebug is inserted first
1187  (searched last) and DWARF2 is inserted last (searched first). If
1188  we don't do this then the XCOFF info is found first - for code in
1189  an included file XCOFF info is useless. */
1190 
1191  if (ei.mdebugsect)
1192  {
1193  const struct ecoff_debug_swap *swap;
1194 
1195  /* .mdebug section, presumably holding ECOFF debugging
1196  information. */
1197  swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1198  if (swap)
1199  elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
1200  }
1201  if (ei.stabsect)
1202  {
1203  asection *str_sect;
1204 
1205  /* Stab sections have an associated string table that looks like
1206  a separate section. */
1207  str_sect = bfd_get_section_by_name (abfd, ".stabstr");
1208 
1209  /* FIXME should probably warn about a stab section without a stabstr. */
1210  if (str_sect)
1212  ei.stabsect,
1213  str_sect->filepos,
1214  bfd_section_size (abfd, str_sect));
1215  }
1216 
1217  if (dwarf2_has_info (objfile, NULL))
1218  {
1219  dw_index_kind index_kind;
1220 
1221  /* elf_sym_fns_gdb_index cannot handle simultaneous non-DWARF
1222  debug information present in OBJFILE. If there is such debug
1223  info present never use an index. */
1225  && dwarf2_initialize_objfile (objfile, &index_kind))
1226  {
1227  switch (index_kind)
1228  {
1231  break;
1234  break;
1235  }
1236  }
1237  else
1238  {
1239  /* It is ok to do this even if the stabs reader made some
1240  partial symbols, because OBJF_PSYMTABS_READ has not been
1241  set, and so our lazy reader function will still be called
1242  when needed. */
1244  }
1245  }
1246  /* If the file has its own symbol tables it has no separate debug
1247  info. `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to
1248  SYMTABS/PSYMTABS. `.gnu_debuglink' may no longer be present with
1249  `.note.gnu.build-id'.
1250 
1251  .gnu_debugdata is !objfile_has_partial_symbols because it contains only
1252  .symtab, not .debug_* section. But if we already added .gnu_debugdata as
1253  an objfile via find_separate_debug_file_in_section there was no separate
1254  debug info available. Therefore do not attempt to search for another one,
1255  objfile->separate_debug_objfile->separate_debug_objfile GDB guarantees to
1256  be NULL and we would possibly violate it. */
1257 
1259  && objfile->separate_debug_objfile == NULL
1261  {
1264 
1265  if (debugfile == NULL)
1266  debugfile.reset (find_separate_debug_file_by_debuglink (objfile));
1267 
1268  if (debugfile != NULL)
1269  {
1270  gdb_bfd_ref_ptr abfd (symfile_bfd_open (debugfile.get ()));
1271 
1272  symbol_file_add_separate (abfd.get (), debugfile.get (),
1273  symfile_flags, objfile);
1274  }
1275  }
1276 }
1277 
1278 /* Callback to lazily read psymtabs. */
1279 
1280 static void
1282 {
1283  if (dwarf2_has_info (objfile, NULL))
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
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
1308 {
1310 }
1311 
1312 /* ELF specific initialization routine for reading symbols. */
1313 
1314 static void
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. */
1321 }
1322 
1323 /* Implementation of `sym_get_probes', as documented in symfile.h. */
1324 
1325 static const std::vector<probe *> &
1327 {
1328  std::vector<probe *> *probes_per_bfd;
1329 
1330  /* Have we parsed this objfile's probes already? */
1331  probes_per_bfd = (std::vector<probe *> *) bfd_data (objfile->obfd, probe_key);
1332 
1333  if (probes_per_bfd == NULL)
1334  {
1335  probes_per_bfd = new std::vector<probe *>;
1336 
1337  /* Here we try to gather information about all types of probes from the
1338  objfile. */
1339  for (const static_probe_ops *ops : all_static_probe_ops)
1340  ops->get_probes (probes_per_bfd, objfile);
1341 
1342  set_bfd_data (objfile->obfd, probe_key, probes_per_bfd);
1343  }
1344 
1345  return *probes_per_bfd;
1346 }
1347 
1348 /* Helper function used to free the space allocated for storing SystemTap
1349  probe information. */
1350 
1351 static void
1352 probe_key_free (bfd *abfd, void *d)
1353 {
1354  std::vector<probe *> *probes = (std::vector<probe *> *) d;
1355 
1356  for (probe *p : *probes)
1357  delete p;
1358 
1359  delete probes;
1360 }
1361 
1362 
1363 
1364 /* Implementation `sym_probe_fns', as documented in symfile.h. */
1365 
1366 static const struct sym_probe_fns elf_probe_fns =
1367 {
1368  elf_get_probes, /* sym_get_probes */
1369 };
1370 
1371 /* Register that we are able to handle ELF object file formats. */
1372 
1373 static const struct sym_fns elf_sym_fns =
1374 {
1375  elf_new_init, /* init anything gbl to entire symtab */
1376  elf_symfile_init, /* read initial info, setup for sym_read() */
1377  elf_symfile_read, /* read a symbol file into symtab */
1378  NULL, /* sym_read_psymbols */
1379  elf_symfile_finish, /* finished with file, cleanup */
1380  default_symfile_offsets, /* Translate ext. to int. relocation */
1381  elf_symfile_segments, /* Get segment information from a file. */
1382  NULL,
1383  default_symfile_relocate, /* Relocate a debug section. */
1384  &elf_probe_fns, /* sym_probe_fns */
1386 };
1387 
1388 /* The same as elf_sym_fns, but not registered and lazily reads
1389  psymbols. */
1390 
1392 {
1393  elf_new_init, /* init anything gbl to entire symtab */
1394  elf_symfile_init, /* read initial info, setup for sym_read() */
1395  elf_symfile_read, /* read a symbol file into symtab */
1396  read_psyms, /* sym_read_psymbols */
1397  elf_symfile_finish, /* finished with file, cleanup */
1398  default_symfile_offsets, /* Translate ext. to int. relocation */
1399  elf_symfile_segments, /* Get segment information from a file. */
1400  NULL,
1401  default_symfile_relocate, /* Relocate a debug section. */
1402  &elf_probe_fns, /* sym_probe_fns */
1404 };
1405 
1406 /* The same as elf_sym_fns, but not registered and uses the
1407  DWARF-specific GNU index rather than psymtab. */
1409 {
1410  elf_new_init, /* init anything gbl to entire symab */
1411  elf_symfile_init, /* read initial info, setup for sym_red() */
1412  elf_symfile_read, /* read a symbol file into symtab */
1413  NULL, /* sym_read_psymbols */
1414  elf_symfile_finish, /* finished with file, cleanup */
1415  default_symfile_offsets, /* Translate ext. to int. relocatin */
1416  elf_symfile_segments, /* Get segment information from a file. */
1417  NULL,
1418  default_symfile_relocate, /* Relocate a debug section. */
1419  &elf_probe_fns, /* sym_probe_fns */
1421 };
1422 
1423 /* The same as elf_sym_fns, but not registered and uses the
1424  DWARF-specific .debug_names index rather than psymtab. */
1426 {
1427  elf_new_init, /* init anything gbl to entire symab */
1428  elf_symfile_init, /* read initial info, setup for sym_red() */
1429  elf_symfile_read, /* read a symbol file into symtab */
1430  NULL, /* sym_read_psymbols */
1431  elf_symfile_finish, /* finished with file, cleanup */
1432  default_symfile_offsets, /* Translate ext. to int. relocatin */
1433  elf_symfile_segments, /* Get segment information from a file. */
1434  NULL,
1435  default_symfile_relocate, /* Relocate a debug section. */
1436  &elf_probe_fns, /* sym_probe_fns */
1438 };
1439 
1440 /* STT_GNU_IFUNC resolver vector to be installed to gnu_ifunc_fns_p. */
1441 
1442 static const struct gnu_ifunc_fns elf_gnu_ifunc_fns =
1443 {
1448 };
1449 
1450 void
1452 {
1453  probe_key = register_bfd_data_with_cleanup (NULL, probe_key_free);
1454  add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns);
1455 
1456  elf_objfile_gnu_ifunc_cache_data = register_objfile_data ();
1458 }
int frame_id_p(struct frame_id l)
Definition: frame.c:646
objfile_flags flags
Definition: objfiles.h:311
const char * string
Definition: signals.c:50
Definition: probe.h:112
bp_location * loc
Definition: breakpoint.h:702
bool dwarf2_initialize_objfile(struct objfile *objfile, dw_index_kind *index_kind)
Definition: dwarf2read.c:6467
void stabsread_new_init(void)
Definition: stabsread.c:4769
CORE_ADDR extract_typed_address(const gdb_byte *buf, struct type *type)
Definition: findvar.c:154
int dwarf2_has_info(struct objfile *objfile, const struct dwarf2_debug_sections *names)
Definition: dwarf2read.c:2424
void objfile_set_sym_fns(struct objfile *objfile, const struct sym_fns *sf)
#define ST_DYNAMIC
Definition: elfread.c:224
bfd * obfd
Definition: objfiles.h:342
static const struct sym_fns elf_sym_fns
Definition: elfread.c:1373
CORE_ADDR get_frame_pc(struct frame_info *frame)
Definition: frame.c:2376
struct frame_info * get_current_frame(void)
Definition: frame.c:1563
static struct symfile_segment_data * elf_symfile_segments(bfd *abfd)
Definition: elfread.c:80
bfd_vma CORE_ADDR
Definition: common-types.h:41
char * find_separate_debug_file_by_buildid(struct objfile *objfile)
Definition: build-id.c:146
struct regcache * get_thread_regcache(ptid_t ptid)
Definition: regcache.c:434
int gdb_bfd_section_index(bfd *abfd, asection *section)
Definition: gdb_bfd.c:888
void xfree(void *)
struct objfile * separate_debug_objfile_backlink
Definition: objfiles.h:441
void dummy_obstack_deallocate(void *object, void *data)
Definition: utils.c:3031
program_space * pspace
Definition: breakpoint.h:727
struct frame_info * get_prev_frame(struct frame_info *this_frame)
Definition: frame.c:2254
#define BMSYMBOL_VALUE_ADDRESS(symbol)
Definition: symtab.h:691
void warning(const char *fmt,...)
Definition: errors.c:26
CORE_ADDR * segment_bases
Definition: symfile.h:85
static const struct bfd_data * probe_key
Definition: elfread.c:68
#define ST_SYNTHETIC
Definition: elfread.c:225
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
Definition: gdbtypes.c:5217
static int elf_gnu_ifunc_record_cache(const char *name, CORE_ADDR addr)
Definition: elfread.c:657
struct frame_id get_stack_frame_id(struct frame_info *next_frame)
Definition: frame.c:549
static const struct sym_probe_fns elf_probe_fns
Definition: elfread.c:1366
void * memset(T *s, int c, size_t n)=delete
void internal_error(const char *file, int line, const char *fmt,...)
Definition: errors.c:50
void add_symtab_fns(enum bfd_flavour flavour, const struct sym_fns *sf)
Definition: symfile.c:1790
struct type * builtin_func_func
Definition: gdbtypes.h:1570
const struct gnu_ifunc_fns * gnu_ifunc_fns_p
Definition: minsyms.c:1003
CORE_ADDR requested_address
Definition: breakpoint.h:448
CORE_ADDR addr
Definition: elfread.c:619
static void probe_key_free(bfd *abfd, void *d)
Definition: elfread.c:1352
static int elf_gnu_ifunc_resolve_by_cache(const char *name, CORE_ADDR *addr_p)
Definition: elfread.c:732
#define SYMBOL_GOT_PLT_SUFFIX
Definition: elfread.c:75
gdb_bfd_ref_ptr symfile_bfd_open(const char *name)
Definition: symfile.c:1719
void dwarf2_build_psymtabs(struct objfile *objfile)
Definition: dwarf2read.c:6519
struct obj_section * section
Definition: symtab.h:1753
#define _(String)
Definition: gdb_locale.h:35
static const struct gnu_ifunc_fns elf_gnu_ifunc_fns
Definition: elfread.c:1442
breakpoint * related_breakpoint
Definition: breakpoint.h:759
#define VALUE_LVAL(val)
Definition: value.h:414
struct objfile_per_bfd_storage * per_bfd
Definition: objfiles.h:347
struct value * allocate_value(struct type *type)
Definition: value.c:1036
dw_index_kind
Definition: symfile.h:607
void gdbarch_elf_make_msymbol_special(struct gdbarch *gdbarch, asymbol *sym, struct minimal_symbol *msym)
Definition: gdbarch.c:3381
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
Definition: utils.c:2745
static int elf_gnu_ifunc_cache_eq(const void *a_voidp, const void *b_voidp)
Definition: elfread.c:638
struct minimal_symbol * record_full(const char *name, int name_len, bool copy_name, CORE_ADDR address, enum minimal_symbol_type ms_type, int section)
Definition: minsyms.c:1116
struct obj_section * find_pc_overlay(CORE_ADDR pc)
Definition: symfile.c:3173
void set_value_address(struct value *value, CORE_ADDR addr)
Definition: value.c:1553
struct program_space * pspace
Definition: inferior.h:349
#define MSYMBOL_OBJ_SECTION(objfile, symbol)
Definition: symtab.h:700
#define XCNEWVEC(T, N)
Definition: poison.h:157
int frame_id_eq(struct frame_id l, struct frame_id r)
Definition: frame.c:674
int objfile_has_partial_symbols(struct objfile *objfile)
Definition: objfiles.c:979
const char *const name
Definition: aarch64-tdep.c:76
static void elf_read_minimal_symbols(struct objfile *objfile, int symfile_flags, const struct elfinfo *ei)
Definition: elfread.c:1004
unsigned int created_by_gdb
Definition: symtab.h:648
bfd_byte * default_symfile_relocate(struct objfile *objfile, asection *sectp, bfd_byte *buf)
Definition: symfile.c:3625
int gdbarch_record_special_symbol_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:4240
static void read_psyms(struct objfile *objfile)
Definition: elfread.c:1281
bptype type
Definition: breakpoint.h:693
std::unique_ptr< T, xfree_deleter< T > > unique_xmalloc_ptr
void dwarf2_free_objfile(struct objfile *objfile)
Definition: dwarf2read.c:25113
struct target_ops current_target
CORE_ADDR gdbarch_addr_bits_remove(struct gdbarch *gdbarch, CORE_ADDR addr)
Definition: gdbarch.c:3208
struct symtab_and_line find_pc_line(CORE_ADDR pc, int notcurrent)
Definition: symtab.c:3288
static void elf_symfile_finish(struct objfile *objfile)
Definition: elfread.c:1307
objfile(bfd *, const char *, objfile_flags)
Definition: objfiles.c:373
static void elf_locate_sections(bfd *ignore_abfd, asection *sectp, void *eip)
Definition: elfread.c:177
static void elf_gnu_ifunc_resolver_stop(struct breakpoint *b)
Definition: elfread.c:893
const char * filename
Definition: symtab.h:640
CORE_ADDR gdbarch_convert_from_func_ptr_addr(struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ)
Definition: gdbarch.c:3191
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
Definition: utils.c:2018
static void elf_rel_plt_read(minimal_symbol_reader &reader, struct objfile *objfile, asymbol **dyn_symbol_table)
Definition: elfread.c:533
int target_auxv_search(struct target_ops *ops, CORE_ADDR match, CORE_ADDR *valp)
Definition: auxv.c:375
#define MSYMBOL_SIZE(msymbol)
Definition: symtab.h:672
static int elf_gnu_ifunc_resolve_name(const char *name, CORE_ADDR *addr_p)
Definition: elfread.c:830
void buildsym_new_init(void)
Definition: buildsym.c:1779
static void elf_gnu_ifunc_resolver_return_stop(struct breakpoint *b)
Definition: elfread.c:944
struct gdbarch * get_objfile_arch(const struct objfile *objfile)
Definition: objfiles.c:445
int ptid_to_global_thread_id(ptid_t ptid)
Definition: thread.c:605
void update_breakpoint_locations(struct breakpoint *b, struct program_space *filter_pspace, gdb::array_view< const symtab_and_line > sals, gdb::array_view< const symtab_and_line > sals_end)
Definition: breakpoint.c:13646
static void elf_symfile_init(struct objfile *objfile)
Definition: elfread.c:1315
Definition: gdbtypes.h:749
int find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr)
Definition: blockframe.c:320
const struct sym_fns elf_sym_fns_debug_names
Definition: elfread.c:1425
bp_location * next
Definition: breakpoint.h:324
struct objfile * separate_debug_objfile
Definition: objfiles.h:436
static const struct objfile_data * elf_objfile_gnu_ifunc_cache_data
Definition: elfread.c:612
enum return_value_convention gdbarch_return_value(struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
Definition: gdbarch.c:2728
char * find_separate_debug_file_by_debuglink(struct objfile *objfile)
Definition: symfile.c:1551
void _initialize_elfread(void)
Definition: elfread.c:1451
const struct sym_fns elf_sym_fns_lazy_psyms
Definition: elfread.c:1391
struct value * value_from_longest(struct type *type, LONGEST num)
Definition: value.c:3534
static int startswith(const char *string, const char *pattern)
Definition: common-utils.h:107
#define SET_MSYMBOL_SIZE(msymbol, sz)
Definition: symtab.h:673
const char * event_location_to_string(struct event_location *location)
Definition: location.c:397
void elfmdebug_build_psymtabs(struct objfile *objfile, const struct ecoff_debug_swap *swap, asection *sec)
Definition: mdebugread.c:4868
const char * objfile_name(const struct objfile *objfile)
Definition: objfiles.c:1557
const struct quick_symbol_functions dwarf2_debug_names_functions
Definition: dwarf2read.c:6444
#define gdb_assert(expr)
Definition: gdb_assert.h:32
Definition: value.c:169
void gdbarch_record_special_symbol(struct gdbarch *gdbarch, struct objfile *objfile, asymbol *sym)
Definition: gdbarch.c:4247
void * hashtab_obstack_allocate(void *data, size_t size, size_t count)
Definition: utils.c:3016
std::vector< const static_probe_ops * > all_static_probe_ops
Definition: probe.c:882
bfd_byte gdb_byte
Definition: common-types.h:38
static struct minimal_symbol * record_minimal_symbol(minimal_symbol_reader &reader, const char *name, int name_len, bool copy_name, CORE_ADDR address, enum minimal_symbol_type ms_type, asection *bfd_section, struct objfile *objfile)
Definition: elfread.c:193
const struct sym_fns elf_sym_fns_gdb_index
Definition: elfread.c:1408
#define MSYMBOL_TYPE(msymbol)
Definition: symtab.h:680
static CORE_ADDR elf_gnu_ifunc_resolve_addr(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: elfread.c:847
breakpoint_up set_momentary_breakpoint(struct gdbarch *gdbarch, struct symtab_and_line sal, struct frame_id frame_id, enum bptype type)
Definition: breakpoint.c:8545
#define TYPE_TARGET_TYPE(thistype)
Definition: gdbtypes.h:1226
static void elf_symfile_read(struct objfile *objfile, symfile_add_flags symfile_flags)
Definition: elfread.c:1168
struct bound_minimal_symbol lookup_minimal_symbol_by_pc(CORE_ADDR pc)
Definition: minsyms.c:928
#define XCNEW(T)
Definition: poison.h:121
event_location_up location
Definition: breakpoint.h:730
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
Definition: target.c:1370
ptid_t inferior_ptid
Definition: infcmd.c:94
struct type * builtin_data_ptr
Definition: gdbtypes.h:1554
struct minimal_symbol * minsym
Definition: minsyms.h:34
const struct quick_symbol_functions psym_functions
Definition: psymtab.c:1541
struct program_space * pspace
Definition: symtab.h:1749
const struct quick_symbol_functions dwarf2_gdb_index_functions
Definition: dwarf2read.c:5615
CORE_ADDR related_address
Definition: breakpoint.h:453
Definition: bcache.c:57
int gdbarch_elf_make_msymbol_special_p(struct gdbarch *gdbarch)
Definition: gdbarch.c:3374
CORE_ADDR pc
Definition: symtab.h:1759
static const std::vector< probe * > & elf_get_probes(struct objfile *objfile)
Definition: elfread.c:1326
void default_symfile_offsets(struct objfile *objfile, const struct section_addr_info *addrs)
Definition: symfile.c:695
T * get() const
Definition: gdb_ref_ptr.h:130
#define ST_REGULAR
Definition: elfread.c:223
asection * mdebugsect
Definition: elfread.c:63
struct inferior * current_inferior(void)
Definition: inferior.c:58
static int elf_gnu_ifunc_resolve_by_got(const char *name, CORE_ADDR *addr_p)
Definition: elfread.c:773
struct program_space * current_program_space
Definition: progspace.c:35
unsigned int symtab_create_debug
Definition: symtab.c:215
static int ignore(struct target_ops *ops, struct gdbarch *gdbarch, struct bp_target_info *bp_tgt)
Definition: corelow.c:879
struct value * call_function_by_hand(struct value *function, type *default_return_type, int nargs, struct value **args)
Definition: infcall.c:690
#define gdb_stdlog
Definition: utils.h:349
#define obstack_grow_str0(OBSTACK, STRING)
Definition: gdb_obstack.h:48
struct type * value_type(const struct value *value)
Definition: value.c:1095
void elfstab_build_psymtabs(struct objfile *objfile, asection *stabsect, file_ptr stabstroffset, unsigned int stabstrsize)
Definition: dbxread.c:3152
const struct objfile_data * dbx_objfile_data_key
Definition: dbxread.c:64
static void elf_new_init(struct objfile *ignore)
Definition: elfread.c:1295
CORE_ADDR value_as_address(struct value *val)
Definition: value.c:2762
gdb_byte * value_contents_raw(struct value *value)
Definition: value.c:1158
#define TYPE_LENGTH(thistype)
Definition: gdbtypes.h:1235
static void elf_symtab_read(minimal_symbol_reader &reader, struct objfile *objfile, int type, long number_of_symbols, asymbol **symbol_table, bool copy_names)
Definition: elfread.c:228
struct objfile * objfile
Definition: minsyms.h:39
CORE_ADDR address
Definition: value.c:208
static hashval_t elf_gnu_ifunc_cache_hash(const void *a_voidp)
Definition: elfread.c:627
minimal_symbol_type
Definition: symtab.h:579
struct bound_minimal_symbol lookup_minimal_symbol(const char *name, const char *sfile, struct objfile *objf)
Definition: minsyms.c:311
CORE_ADDR * segment_sizes
Definition: symfile.h:89
asection * stabsect
Definition: elfread.c:62
#define ALL_PSPACE_OBJFILES(ss, obj)
Definition: objfiles.h:579
void delete_breakpoint(struct breakpoint *bpt)
Definition: breakpoint.c:13226
void error(const char *fmt,...)
Definition: errors.c:38
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
Definition: frame.c:2691
bool explicit_pc
Definition: symtab.h:1761
char * copy_name(struct stoken token)
Definition: parse.c:761
struct frame_id frame_id
Definition: breakpoint.h:722
void symbol_file_add_separate(bfd *bfd, const char *name, symfile_add_flags symfile_flags, struct objfile *objfile)
Definition: symfile.c:1230