Update copyright year in gdbarch.sh doc/gdb.texinfo and doc/refcard.tex
[binutils-gdb.git] / gdb / elfread.c
blob618e4cd566cad41d36647fd95365bc6922c6ea46
1 /* Read ELF (Executable and Linking Format) object files for GDB.
3 Copyright (C) 1991-2020 Free Software Foundation, Inc.
5 Written by Fred Fish at Cygnus Support.
7 This file is part of GDB.
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.
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.
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/>. */
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"
53 /* Forward declarations. */
54 extern const struct sym_fns elf_sym_fns_gdb_index;
55 extern const struct sym_fns elf_sym_fns_debug_names;
56 extern const struct sym_fns elf_sym_fns_lazy_psyms;
58 /* The struct elfinfo is available only during ELF symbol table and
59 psymtab reading. It is destroyed at the completion of psymtab-reading.
60 It's local to elf_symfile_read. */
62 struct elfinfo
64 asection *stabsect; /* Section pointer for .stab section */
65 asection *mdebugsect; /* Section pointer for .mdebug section */
66 asection *ctfsect; /* Section pointer for .ctf section */
69 /* Type for per-BFD data. */
71 typedef std::vector<std::unique_ptr<probe>> elfread_data;
73 /* Per-BFD data for probe info. */
75 static const struct bfd_key<elfread_data> probe_key;
77 /* Minimal symbols located at the GOT entries for .plt - that is the real
78 pointer where the given entry will jump to. It gets updated by the real
79 function address during lazy ld.so resolving in the inferior. These
80 minimal symbols are indexed for <tab>-completion. */
82 #define SYMBOL_GOT_PLT_SUFFIX "@got.plt"
84 /* Locate the segments in ABFD. */
86 static struct symfile_segment_data *
87 elf_symfile_segments (bfd *abfd)
89 Elf_Internal_Phdr *phdrs, **segments;
90 long phdrs_size;
91 int num_phdrs, num_segments, num_sections, i;
92 asection *sect;
93 struct symfile_segment_data *data;
95 phdrs_size = bfd_get_elf_phdr_upper_bound (abfd);
96 if (phdrs_size == -1)
97 return NULL;
99 phdrs = (Elf_Internal_Phdr *) alloca (phdrs_size);
100 num_phdrs = bfd_get_elf_phdrs (abfd, phdrs);
101 if (num_phdrs == -1)
102 return NULL;
104 num_segments = 0;
105 segments = XALLOCAVEC (Elf_Internal_Phdr *, num_phdrs);
106 for (i = 0; i < num_phdrs; i++)
107 if (phdrs[i].p_type == PT_LOAD)
108 segments[num_segments++] = &phdrs[i];
110 if (num_segments == 0)
111 return NULL;
113 data = XCNEW (struct symfile_segment_data);
114 data->num_segments = num_segments;
115 data->segment_bases = XCNEWVEC (CORE_ADDR, num_segments);
116 data->segment_sizes = XCNEWVEC (CORE_ADDR, num_segments);
118 for (i = 0; i < num_segments; i++)
120 data->segment_bases[i] = segments[i]->p_vaddr;
121 data->segment_sizes[i] = segments[i]->p_memsz;
124 num_sections = bfd_count_sections (abfd);
125 data->segment_info = XCNEWVEC (int, num_sections);
127 for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
129 int j;
131 if ((bfd_section_flags (sect) & SEC_ALLOC) == 0)
132 continue;
134 Elf_Internal_Shdr *this_hdr = &elf_section_data (sect)->this_hdr;
136 for (j = 0; j < num_segments; j++)
137 if (ELF_SECTION_IN_SEGMENT (this_hdr, segments[j]))
139 data->segment_info[i] = j + 1;
140 break;
143 /* We should have found a segment for every non-empty section.
144 If we haven't, we will not relocate this section by any
145 offsets we apply to the segments. As an exception, do not
146 warn about SHT_NOBITS sections; in normal ELF execution
147 environments, SHT_NOBITS means zero-initialized and belongs
148 in a segment, but in no-OS environments some tools (e.g. ARM
149 RealView) use SHT_NOBITS for uninitialized data. Since it is
150 uninitialized, it doesn't need a program header. Such
151 binaries are not relocatable. */
152 if (bfd_section_size (sect) > 0 && j == num_segments
153 && (bfd_section_flags (sect) & SEC_LOAD) != 0)
154 warning (_("Loadable section \"%s\" outside of ELF segments"),
155 bfd_section_name (sect));
158 return data;
161 /* We are called once per section from elf_symfile_read. We
162 need to examine each section we are passed, check to see
163 if it is something we are interested in processing, and
164 if so, stash away some access information for the section.
166 For now we recognize the dwarf debug information sections and
167 line number sections from matching their section names. The
168 ELF definition is no real help here since it has no direct
169 knowledge of DWARF (by design, so any debugging format can be
170 used).
172 We also recognize the ".stab" sections used by the Sun compilers
173 released with Solaris 2.
175 FIXME: The section names should not be hardwired strings (what
176 should they be? I don't think most object file formats have enough
177 section flags to specify what kind of debug section it is.
178 -kingdon). */
180 static void
181 elf_locate_sections (bfd *ignore_abfd, asection *sectp, void *eip)
183 struct elfinfo *ei;
185 ei = (struct elfinfo *) eip;
186 if (strcmp (sectp->name, ".stab") == 0)
188 ei->stabsect = sectp;
190 else if (strcmp (sectp->name, ".mdebug") == 0)
192 ei->mdebugsect = sectp;
194 else if (strcmp (sectp->name, ".ctf") == 0)
196 ei->ctfsect = sectp;
200 static struct minimal_symbol *
201 record_minimal_symbol (minimal_symbol_reader &reader,
202 gdb::string_view name, bool copy_name,
203 CORE_ADDR address,
204 enum minimal_symbol_type ms_type,
205 asection *bfd_section, struct objfile *objfile)
207 struct gdbarch *gdbarch = get_objfile_arch (objfile);
209 if (ms_type == mst_text || ms_type == mst_file_text
210 || ms_type == mst_text_gnu_ifunc)
211 address = gdbarch_addr_bits_remove (gdbarch, address);
213 struct minimal_symbol *result
214 = reader.record_full (name, copy_name, address,
215 ms_type,
216 gdb_bfd_section_index (objfile->obfd,
217 bfd_section));
218 if ((objfile->flags & OBJF_MAINLINE) == 0
219 && (ms_type == mst_data || ms_type == mst_bss))
220 result->maybe_copied = 1;
222 return result;
225 /* Read the symbol table of an ELF file.
227 Given an objfile, a symbol table, and a flag indicating whether the
228 symbol table contains regular, dynamic, or synthetic symbols, add all
229 the global function and data symbols to the minimal symbol table.
231 In stabs-in-ELF, as implemented by Sun, there are some local symbols
232 defined in the ELF symbol table, which can be used to locate
233 the beginnings of sections from each ".o" file that was linked to
234 form the executable objfile. We gather any such info and record it
235 in data structures hung off the objfile's private data. */
237 #define ST_REGULAR 0
238 #define ST_DYNAMIC 1
239 #define ST_SYNTHETIC 2
241 static void
242 elf_symtab_read (minimal_symbol_reader &reader,
243 struct objfile *objfile, int type,
244 long number_of_symbols, asymbol **symbol_table,
245 bool copy_names)
247 struct gdbarch *gdbarch = get_objfile_arch (objfile);
248 asymbol *sym;
249 long i;
250 CORE_ADDR symaddr;
251 enum minimal_symbol_type ms_type;
252 /* Name of the last file symbol. This is either a constant string or is
253 saved on the objfile's filename cache. */
254 const char *filesymname = "";
255 int stripped = (bfd_get_symcount (objfile->obfd) == 0);
256 int elf_make_msymbol_special_p
257 = gdbarch_elf_make_msymbol_special_p (gdbarch);
259 for (i = 0; i < number_of_symbols; i++)
261 sym = symbol_table[i];
262 if (sym->name == NULL || *sym->name == '\0')
264 /* Skip names that don't exist (shouldn't happen), or names
265 that are null strings (may happen). */
266 continue;
269 /* Skip "special" symbols, e.g. ARM mapping symbols. These are
270 symbols which do not correspond to objects in the symbol table,
271 but have some other target-specific meaning. */
272 if (bfd_is_target_special_symbol (objfile->obfd, sym))
274 if (gdbarch_record_special_symbol_p (gdbarch))
275 gdbarch_record_special_symbol (gdbarch, objfile, sym);
276 continue;
279 if (type == ST_DYNAMIC
280 && sym->section == bfd_und_section_ptr
281 && (sym->flags & BSF_FUNCTION))
283 struct minimal_symbol *msym;
284 bfd *abfd = objfile->obfd;
285 asection *sect;
287 /* Symbol is a reference to a function defined in
288 a shared library.
289 If its value is non zero then it is usually the address
290 of the corresponding entry in the procedure linkage table,
291 plus the desired section offset.
292 If its value is zero then the dynamic linker has to resolve
293 the symbol. We are unable to find any meaningful address
294 for this symbol in the executable file, so we skip it. */
295 symaddr = sym->value;
296 if (symaddr == 0)
297 continue;
299 /* sym->section is the undefined section. However, we want to
300 record the section where the PLT stub resides with the
301 minimal symbol. Search the section table for the one that
302 covers the stub's address. */
303 for (sect = abfd->sections; sect != NULL; sect = sect->next)
305 if ((bfd_section_flags (sect) & SEC_ALLOC) == 0)
306 continue;
308 if (symaddr >= bfd_section_vma (sect)
309 && symaddr < bfd_section_vma (sect)
310 + bfd_section_size (sect))
311 break;
313 if (!sect)
314 continue;
316 /* On ia64-hpux, we have discovered that the system linker
317 adds undefined symbols with nonzero addresses that cannot
318 be right (their address points inside the code of another
319 function in the .text section). This creates problems
320 when trying to determine which symbol corresponds to
321 a given address.
323 We try to detect those buggy symbols by checking which
324 section we think they correspond to. Normally, PLT symbols
325 are stored inside their own section, and the typical name
326 for that section is ".plt". So, if there is a ".plt"
327 section, and yet the section name of our symbol does not
328 start with ".plt", we ignore that symbol. */
329 if (!startswith (sect->name, ".plt")
330 && bfd_get_section_by_name (abfd, ".plt") != NULL)
331 continue;
333 msym = record_minimal_symbol
334 (reader, sym->name, copy_names,
335 symaddr, mst_solib_trampoline, sect, objfile);
336 if (msym != NULL)
338 msym->filename = filesymname;
339 if (elf_make_msymbol_special_p)
340 gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
342 continue;
345 /* If it is a nonstripped executable, do not enter dynamic
346 symbols, as the dynamic symbol table is usually a subset
347 of the main symbol table. */
348 if (type == ST_DYNAMIC && !stripped)
349 continue;
350 if (sym->flags & BSF_FILE)
352 filesymname
353 = ((const char *) objfile->per_bfd->filename_cache.insert
354 (sym->name, strlen (sym->name) + 1));
356 else if (sym->flags & BSF_SECTION_SYM)
357 continue;
358 else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK
359 | BSF_GNU_UNIQUE))
361 struct minimal_symbol *msym;
363 /* Select global/local/weak symbols. Note that bfd puts abs
364 symbols in their own section, so all symbols we are
365 interested in will have a section. */
366 /* Bfd symbols are section relative. */
367 symaddr = sym->value + sym->section->vma;
368 /* For non-absolute symbols, use the type of the section
369 they are relative to, to intuit text/data. Bfd provides
370 no way of figuring this out for absolute symbols. */
371 if (sym->section == bfd_abs_section_ptr)
373 /* This is a hack to get the minimal symbol type
374 right for Irix 5, which has absolute addresses
375 with special section indices for dynamic symbols.
377 NOTE: uweigand-20071112: Synthetic symbols do not
378 have an ELF-private part, so do not touch those. */
379 unsigned int shndx = type == ST_SYNTHETIC ? 0 :
380 ((elf_symbol_type *) sym)->internal_elf_sym.st_shndx;
382 switch (shndx)
384 case SHN_MIPS_TEXT:
385 ms_type = mst_text;
386 break;
387 case SHN_MIPS_DATA:
388 ms_type = mst_data;
389 break;
390 case SHN_MIPS_ACOMMON:
391 ms_type = mst_bss;
392 break;
393 default:
394 ms_type = mst_abs;
397 /* If it is an Irix dynamic symbol, skip section name
398 symbols, relocate all others by section offset. */
399 if (ms_type != mst_abs)
401 if (sym->name[0] == '.')
402 continue;
405 else if (sym->section->flags & SEC_CODE)
407 if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
409 if (sym->flags & BSF_GNU_INDIRECT_FUNCTION)
410 ms_type = mst_text_gnu_ifunc;
411 else
412 ms_type = mst_text;
414 /* The BSF_SYNTHETIC check is there to omit ppc64 function
415 descriptors mistaken for static functions starting with 'L'.
417 else if ((sym->name[0] == '.' && sym->name[1] == 'L'
418 && (sym->flags & BSF_SYNTHETIC) == 0)
419 || ((sym->flags & BSF_LOCAL)
420 && sym->name[0] == '$'
421 && sym->name[1] == 'L'))
422 /* Looks like a compiler-generated label. Skip
423 it. The assembler should be skipping these (to
424 keep executables small), but apparently with
425 gcc on the (deleted) delta m88k SVR4, it loses.
426 So to have us check too should be harmless (but
427 I encourage people to fix this in the assembler
428 instead of adding checks here). */
429 continue;
430 else
432 ms_type = mst_file_text;
435 else if (sym->section->flags & SEC_ALLOC)
437 if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
439 if (sym->flags & BSF_GNU_INDIRECT_FUNCTION)
441 ms_type = mst_data_gnu_ifunc;
443 else if (sym->section->flags & SEC_LOAD)
445 ms_type = mst_data;
447 else
449 ms_type = mst_bss;
452 else if (sym->flags & BSF_LOCAL)
454 if (sym->section->flags & SEC_LOAD)
456 ms_type = mst_file_data;
458 else
460 ms_type = mst_file_bss;
463 else
465 ms_type = mst_unknown;
468 else
470 /* FIXME: Solaris2 shared libraries include lots of
471 odd "absolute" and "undefined" symbols, that play
472 hob with actions like finding what function the PC
473 is in. Ignore them if they aren't text, data, or bss. */
474 /* ms_type = mst_unknown; */
475 continue; /* Skip this symbol. */
477 msym = record_minimal_symbol
478 (reader, sym->name, copy_names, symaddr,
479 ms_type, sym->section, objfile);
481 if (msym)
483 /* NOTE: uweigand-20071112: A synthetic symbol does not have an
484 ELF-private part. */
485 if (type != ST_SYNTHETIC)
487 /* Pass symbol size field in via BFD. FIXME!!! */
488 elf_symbol_type *elf_sym = (elf_symbol_type *) sym;
489 SET_MSYMBOL_SIZE (msym, elf_sym->internal_elf_sym.st_size);
492 msym->filename = filesymname;
493 if (elf_make_msymbol_special_p)
494 gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
497 /* If we see a default versioned symbol, install it under
498 its version-less name. */
499 if (msym != NULL)
501 const char *atsign = strchr (sym->name, '@');
503 if (atsign != NULL && atsign[1] == '@' && atsign > sym->name)
505 int len = atsign - sym->name;
507 record_minimal_symbol (reader,
508 gdb::string_view (sym->name, len),
509 true, symaddr, ms_type, sym->section,
510 objfile);
514 /* For @plt symbols, also record a trampoline to the
515 destination symbol. The @plt symbol will be used in
516 disassembly, and the trampoline will be used when we are
517 trying to find the target. */
518 if (msym && ms_type == mst_text && type == ST_SYNTHETIC)
520 int len = strlen (sym->name);
522 if (len > 4 && strcmp (sym->name + len - 4, "@plt") == 0)
524 struct minimal_symbol *mtramp;
526 mtramp = record_minimal_symbol
527 (reader, gdb::string_view (sym->name, len - 4), true,
528 symaddr, mst_solib_trampoline, sym->section, objfile);
529 if (mtramp)
531 SET_MSYMBOL_SIZE (mtramp, MSYMBOL_SIZE (msym));
532 mtramp->created_by_gdb = 1;
533 mtramp->filename = filesymname;
534 if (elf_make_msymbol_special_p)
535 gdbarch_elf_make_msymbol_special (gdbarch,
536 sym, mtramp);
544 /* Build minimal symbols named `function@got.plt' (see SYMBOL_GOT_PLT_SUFFIX)
545 for later look ups of which function to call when user requests
546 a STT_GNU_IFUNC function. As the STT_GNU_IFUNC type is found at the target
547 library defining `function' we cannot yet know while reading OBJFILE which
548 of the SYMBOL_GOT_PLT_SUFFIX entries will be needed and later
549 DYN_SYMBOL_TABLE is no longer easily available for OBJFILE. */
551 static void
552 elf_rel_plt_read (minimal_symbol_reader &reader,
553 struct objfile *objfile, asymbol **dyn_symbol_table)
555 bfd *obfd = objfile->obfd;
556 const struct elf_backend_data *bed = get_elf_backend_data (obfd);
557 asection *relplt, *got_plt;
558 bfd_size_type reloc_count, reloc;
559 struct gdbarch *gdbarch = get_objfile_arch (objfile);
560 struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
561 size_t ptr_size = TYPE_LENGTH (ptr_type);
563 if (objfile->separate_debug_objfile_backlink)
564 return;
566 got_plt = bfd_get_section_by_name (obfd, ".got.plt");
567 if (got_plt == NULL)
569 /* For platforms where there is no separate .got.plt. */
570 got_plt = bfd_get_section_by_name (obfd, ".got");
571 if (got_plt == NULL)
572 return;
575 /* Depending on system, we may find jump slots in a relocation
576 section for either .got.plt or .plt. */
577 asection *plt = bfd_get_section_by_name (obfd, ".plt");
578 int plt_elf_idx = (plt != NULL) ? elf_section_data (plt)->this_idx : -1;
580 int got_plt_elf_idx = elf_section_data (got_plt)->this_idx;
582 /* This search algorithm is from _bfd_elf_canonicalize_dynamic_reloc. */
583 for (relplt = obfd->sections; relplt != NULL; relplt = relplt->next)
585 const auto &this_hdr = elf_section_data (relplt)->this_hdr;
587 if (this_hdr.sh_type == SHT_REL || this_hdr.sh_type == SHT_RELA)
589 if (this_hdr.sh_info == plt_elf_idx
590 || this_hdr.sh_info == got_plt_elf_idx)
591 break;
594 if (relplt == NULL)
595 return;
597 if (! bed->s->slurp_reloc_table (obfd, relplt, dyn_symbol_table, TRUE))
598 return;
600 std::string string_buffer;
602 /* Does ADDRESS reside in SECTION of OBFD? */
603 auto within_section = [obfd] (asection *section, CORE_ADDR address)
605 if (section == NULL)
606 return false;
608 return (bfd_section_vma (section) <= address
609 && (address < bfd_section_vma (section)
610 + bfd_section_size (section)));
613 reloc_count = relplt->size / elf_section_data (relplt)->this_hdr.sh_entsize;
614 for (reloc = 0; reloc < reloc_count; reloc++)
616 const char *name;
617 struct minimal_symbol *msym;
618 CORE_ADDR address;
619 const char *got_suffix = SYMBOL_GOT_PLT_SUFFIX;
620 const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
622 name = bfd_asymbol_name (*relplt->relocation[reloc].sym_ptr_ptr);
623 address = relplt->relocation[reloc].address;
625 asection *msym_section;
627 /* Does the pointer reside in either the .got.plt or .plt
628 sections? */
629 if (within_section (got_plt, address))
630 msym_section = got_plt;
631 else if (within_section (plt, address))
632 msym_section = plt;
633 else
634 continue;
636 /* We cannot check if NAME is a reference to
637 mst_text_gnu_ifunc/mst_data_gnu_ifunc as in OBJFILE the
638 symbol is undefined and the objfile having NAME defined may
639 not yet have been loaded. */
641 string_buffer.assign (name);
642 string_buffer.append (got_suffix, got_suffix + got_suffix_len);
644 msym = record_minimal_symbol (reader, string_buffer,
645 true, address, mst_slot_got_plt,
646 msym_section, objfile);
647 if (msym)
648 SET_MSYMBOL_SIZE (msym, ptr_size);
652 /* The data pointer is htab_t for gnu_ifunc_record_cache_unchecked. */
654 static const struct objfile_key<htab, htab_deleter>
655 elf_objfile_gnu_ifunc_cache_data;
657 /* Map function names to CORE_ADDR in elf_objfile_gnu_ifunc_cache_data. */
659 struct elf_gnu_ifunc_cache
661 /* This is always a function entry address, not a function descriptor. */
662 CORE_ADDR addr;
664 char name[1];
667 /* htab_hash for elf_objfile_gnu_ifunc_cache_data. */
669 static hashval_t
670 elf_gnu_ifunc_cache_hash (const void *a_voidp)
672 const struct elf_gnu_ifunc_cache *a
673 = (const struct elf_gnu_ifunc_cache *) a_voidp;
675 return htab_hash_string (a->name);
678 /* htab_eq for elf_objfile_gnu_ifunc_cache_data. */
680 static int
681 elf_gnu_ifunc_cache_eq (const void *a_voidp, const void *b_voidp)
683 const struct elf_gnu_ifunc_cache *a
684 = (const struct elf_gnu_ifunc_cache *) a_voidp;
685 const struct elf_gnu_ifunc_cache *b
686 = (const struct elf_gnu_ifunc_cache *) b_voidp;
688 return strcmp (a->name, b->name) == 0;
691 /* Record the target function address of a STT_GNU_IFUNC function NAME is the
692 function entry address ADDR. Return 1 if NAME and ADDR are considered as
693 valid and therefore they were successfully recorded, return 0 otherwise.
695 Function does not expect a duplicate entry. Use
696 elf_gnu_ifunc_resolve_by_cache first to check if the entry for NAME already
697 exists. */
699 static int
700 elf_gnu_ifunc_record_cache (const char *name, CORE_ADDR addr)
702 struct bound_minimal_symbol msym;
703 struct objfile *objfile;
704 htab_t htab;
705 struct elf_gnu_ifunc_cache entry_local, *entry_p;
706 void **slot;
708 msym = lookup_minimal_symbol_by_pc (addr);
709 if (msym.minsym == NULL)
710 return 0;
711 if (BMSYMBOL_VALUE_ADDRESS (msym) != addr)
712 return 0;
713 objfile = msym.objfile;
715 /* If .plt jumps back to .plt the symbol is still deferred for later
716 resolution and it has no use for GDB. */
717 const char *target_name = msym.minsym->linkage_name ();
718 size_t len = strlen (target_name);
720 /* Note we check the symbol's name instead of checking whether the
721 symbol is in the .plt section because some systems have @plt
722 symbols in the .text section. */
723 if (len > 4 && strcmp (target_name + len - 4, "@plt") == 0)
724 return 0;
726 htab = elf_objfile_gnu_ifunc_cache_data.get (objfile);
727 if (htab == NULL)
729 htab = htab_create_alloc (1, elf_gnu_ifunc_cache_hash,
730 elf_gnu_ifunc_cache_eq,
731 NULL, xcalloc, xfree);
732 elf_objfile_gnu_ifunc_cache_data.set (objfile, htab);
735 entry_local.addr = addr;
736 obstack_grow (&objfile->objfile_obstack, &entry_local,
737 offsetof (struct elf_gnu_ifunc_cache, name));
738 obstack_grow_str0 (&objfile->objfile_obstack, name);
739 entry_p
740 = (struct elf_gnu_ifunc_cache *) obstack_finish (&objfile->objfile_obstack);
742 slot = htab_find_slot (htab, entry_p, INSERT);
743 if (*slot != NULL)
745 struct elf_gnu_ifunc_cache *entry_found_p
746 = (struct elf_gnu_ifunc_cache *) *slot;
747 struct gdbarch *gdbarch = get_objfile_arch (objfile);
749 if (entry_found_p->addr != addr)
751 /* This case indicates buggy inferior program, the resolved address
752 should never change. */
754 warning (_("gnu-indirect-function \"%s\" has changed its resolved "
755 "function_address from %s to %s"),
756 name, paddress (gdbarch, entry_found_p->addr),
757 paddress (gdbarch, addr));
760 /* New ENTRY_P is here leaked/duplicate in the OBJFILE obstack. */
762 *slot = entry_p;
764 return 1;
767 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
768 function NAME. If the address is found it is stored to *ADDR_P (if ADDR_P
769 is not NULL) and the function returns 1. It returns 0 otherwise.
771 Only the elf_objfile_gnu_ifunc_cache_data hash table is searched by this
772 function. */
774 static int
775 elf_gnu_ifunc_resolve_by_cache (const char *name, CORE_ADDR *addr_p)
777 for (objfile *objfile : current_program_space->objfiles ())
779 htab_t htab;
780 struct elf_gnu_ifunc_cache *entry_p;
781 void **slot;
783 htab = elf_objfile_gnu_ifunc_cache_data.get (objfile);
784 if (htab == NULL)
785 continue;
787 entry_p = ((struct elf_gnu_ifunc_cache *)
788 alloca (sizeof (*entry_p) + strlen (name)));
789 strcpy (entry_p->name, name);
791 slot = htab_find_slot (htab, entry_p, NO_INSERT);
792 if (slot == NULL)
793 continue;
794 entry_p = (struct elf_gnu_ifunc_cache *) *slot;
795 gdb_assert (entry_p != NULL);
797 if (addr_p)
798 *addr_p = entry_p->addr;
799 return 1;
802 return 0;
805 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
806 function NAME. If the address is found it is stored to *ADDR_P (if ADDR_P
807 is not NULL) and the function returns 1. It returns 0 otherwise.
809 Only the SYMBOL_GOT_PLT_SUFFIX locations are searched by this function.
810 elf_gnu_ifunc_resolve_by_cache must have been already called for NAME to
811 prevent cache entries duplicates. */
813 static int
814 elf_gnu_ifunc_resolve_by_got (const char *name, CORE_ADDR *addr_p)
816 char *name_got_plt;
817 const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
819 name_got_plt = (char *) alloca (strlen (name) + got_suffix_len + 1);
820 sprintf (name_got_plt, "%s" SYMBOL_GOT_PLT_SUFFIX, name);
822 for (objfile *objfile : current_program_space->objfiles ())
824 bfd *obfd = objfile->obfd;
825 struct gdbarch *gdbarch = get_objfile_arch (objfile);
826 struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
827 size_t ptr_size = TYPE_LENGTH (ptr_type);
828 CORE_ADDR pointer_address, addr;
829 asection *plt;
830 gdb_byte *buf = (gdb_byte *) alloca (ptr_size);
831 struct bound_minimal_symbol msym;
833 msym = lookup_minimal_symbol (name_got_plt, NULL, objfile);
834 if (msym.minsym == NULL)
835 continue;
836 if (MSYMBOL_TYPE (msym.minsym) != mst_slot_got_plt)
837 continue;
838 pointer_address = BMSYMBOL_VALUE_ADDRESS (msym);
840 plt = bfd_get_section_by_name (obfd, ".plt");
841 if (plt == NULL)
842 continue;
844 if (MSYMBOL_SIZE (msym.minsym) != ptr_size)
845 continue;
846 if (target_read_memory (pointer_address, buf, ptr_size) != 0)
847 continue;
848 addr = extract_typed_address (buf, ptr_type);
849 addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
850 current_top_target ());
851 addr = gdbarch_addr_bits_remove (gdbarch, addr);
853 if (elf_gnu_ifunc_record_cache (name, addr))
855 if (addr_p != NULL)
856 *addr_p = addr;
857 return 1;
861 return 0;
864 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
865 function NAME. If the address is found it is stored to *ADDR_P (if ADDR_P
866 is not NULL) and the function returns true. It returns false otherwise.
868 Both the elf_objfile_gnu_ifunc_cache_data hash table and
869 SYMBOL_GOT_PLT_SUFFIX locations are searched by this function. */
871 static bool
872 elf_gnu_ifunc_resolve_name (const char *name, CORE_ADDR *addr_p)
874 if (elf_gnu_ifunc_resolve_by_cache (name, addr_p))
875 return true;
877 if (elf_gnu_ifunc_resolve_by_got (name, addr_p))
878 return true;
880 return false;
883 /* Call STT_GNU_IFUNC - a function returning addresss of a real function to
884 call. PC is theSTT_GNU_IFUNC resolving function entry. The value returned
885 is the entry point of the resolved STT_GNU_IFUNC target function to call.
888 static CORE_ADDR
889 elf_gnu_ifunc_resolve_addr (struct gdbarch *gdbarch, CORE_ADDR pc)
891 const char *name_at_pc;
892 CORE_ADDR start_at_pc, address;
893 struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
894 struct value *function, *address_val;
895 CORE_ADDR hwcap = 0;
896 struct value *hwcap_val;
898 /* Try first any non-intrusive methods without an inferior call. */
900 if (find_pc_partial_function (pc, &name_at_pc, &start_at_pc, NULL)
901 && start_at_pc == pc)
903 if (elf_gnu_ifunc_resolve_name (name_at_pc, &address))
904 return address;
906 else
907 name_at_pc = NULL;
909 function = allocate_value (func_func_type);
910 VALUE_LVAL (function) = lval_memory;
911 set_value_address (function, pc);
913 /* STT_GNU_IFUNC resolver functions usually receive the HWCAP vector as
914 parameter. FUNCTION is the function entry address. ADDRESS may be a
915 function descriptor. */
917 target_auxv_search (current_top_target (), AT_HWCAP, &hwcap);
918 hwcap_val = value_from_longest (builtin_type (gdbarch)
919 ->builtin_unsigned_long, hwcap);
920 address_val = call_function_by_hand (function, NULL, hwcap_val);
921 address = value_as_address (address_val);
922 address = gdbarch_convert_from_func_ptr_addr (gdbarch, address, current_top_target ());
923 address = gdbarch_addr_bits_remove (gdbarch, address);
925 if (name_at_pc)
926 elf_gnu_ifunc_record_cache (name_at_pc, address);
928 return address;
931 /* Handle inferior hit of bp_gnu_ifunc_resolver, see its definition. */
933 static void
934 elf_gnu_ifunc_resolver_stop (struct breakpoint *b)
936 struct breakpoint *b_return;
937 struct frame_info *prev_frame = get_prev_frame (get_current_frame ());
938 struct frame_id prev_frame_id = get_stack_frame_id (prev_frame);
939 CORE_ADDR prev_pc = get_frame_pc (prev_frame);
940 int thread_id = inferior_thread ()->global_num;
942 gdb_assert (b->type == bp_gnu_ifunc_resolver);
944 for (b_return = b->related_breakpoint; b_return != b;
945 b_return = b_return->related_breakpoint)
947 gdb_assert (b_return->type == bp_gnu_ifunc_resolver_return);
948 gdb_assert (b_return->loc != NULL && b_return->loc->next == NULL);
949 gdb_assert (frame_id_p (b_return->frame_id));
951 if (b_return->thread == thread_id
952 && b_return->loc->requested_address == prev_pc
953 && frame_id_eq (b_return->frame_id, prev_frame_id))
954 break;
957 if (b_return == b)
959 /* No need to call find_pc_line for symbols resolving as this is only
960 a helper breakpointer never shown to the user. */
962 symtab_and_line sal;
963 sal.pspace = current_inferior ()->pspace;
964 sal.pc = prev_pc;
965 sal.section = find_pc_overlay (sal.pc);
966 sal.explicit_pc = 1;
967 b_return
968 = set_momentary_breakpoint (get_frame_arch (prev_frame), sal,
969 prev_frame_id,
970 bp_gnu_ifunc_resolver_return).release ();
972 /* set_momentary_breakpoint invalidates PREV_FRAME. */
973 prev_frame = NULL;
975 /* Add new b_return to the ring list b->related_breakpoint. */
976 gdb_assert (b_return->related_breakpoint == b_return);
977 b_return->related_breakpoint = b->related_breakpoint;
978 b->related_breakpoint = b_return;
982 /* Handle inferior hit of bp_gnu_ifunc_resolver_return, see its definition. */
984 static void
985 elf_gnu_ifunc_resolver_return_stop (struct breakpoint *b)
987 thread_info *thread = inferior_thread ();
988 struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
989 struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
990 struct type *value_type = TYPE_TARGET_TYPE (func_func_type);
991 struct regcache *regcache = get_thread_regcache (thread);
992 struct value *func_func;
993 struct value *value;
994 CORE_ADDR resolved_address, resolved_pc;
996 gdb_assert (b->type == bp_gnu_ifunc_resolver_return);
998 while (b->related_breakpoint != b)
1000 struct breakpoint *b_next = b->related_breakpoint;
1002 switch (b->type)
1004 case bp_gnu_ifunc_resolver:
1005 break;
1006 case bp_gnu_ifunc_resolver_return:
1007 delete_breakpoint (b);
1008 break;
1009 default:
1010 internal_error (__FILE__, __LINE__,
1011 _("handle_inferior_event: Invalid "
1012 "gnu-indirect-function breakpoint type %d"),
1013 (int) b->type);
1015 b = b_next;
1017 gdb_assert (b->type == bp_gnu_ifunc_resolver);
1018 gdb_assert (b->loc->next == NULL);
1020 func_func = allocate_value (func_func_type);
1021 VALUE_LVAL (func_func) = lval_memory;
1022 set_value_address (func_func, b->loc->related_address);
1024 value = allocate_value (value_type);
1025 gdbarch_return_value (gdbarch, func_func, value_type, regcache,
1026 value_contents_raw (value), NULL);
1027 resolved_address = value_as_address (value);
1028 resolved_pc = gdbarch_convert_from_func_ptr_addr (gdbarch,
1029 resolved_address,
1030 current_top_target ());
1031 resolved_pc = gdbarch_addr_bits_remove (gdbarch, resolved_pc);
1033 gdb_assert (current_program_space == b->pspace || b->pspace == NULL);
1034 elf_gnu_ifunc_record_cache (event_location_to_string (b->location.get ()),
1035 resolved_pc);
1037 b->type = bp_breakpoint;
1038 update_breakpoint_locations (b, current_program_space,
1039 find_function_start_sal (resolved_pc, NULL, true),
1040 {});
1043 /* A helper function for elf_symfile_read that reads the minimal
1044 symbols. */
1046 static void
1047 elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
1048 const struct elfinfo *ei)
1050 bfd *synth_abfd, *abfd = objfile->obfd;
1051 long symcount = 0, dynsymcount = 0, synthcount, storage_needed;
1052 asymbol **symbol_table = NULL, **dyn_symbol_table = NULL;
1053 asymbol *synthsyms;
1055 if (symtab_create_debug)
1057 fprintf_unfiltered (gdb_stdlog,
1058 "Reading minimal symbols of objfile %s ...\n",
1059 objfile_name (objfile));
1062 /* If we already have minsyms, then we can skip some work here.
1063 However, if there were stabs or mdebug sections, we go ahead and
1064 redo all the work anyway, because the psym readers for those
1065 kinds of debuginfo need extra information found here. This can
1066 go away once all types of symbols are in the per-BFD object. */
1067 if (objfile->per_bfd->minsyms_read
1068 && ei->stabsect == NULL
1069 && ei->mdebugsect == NULL
1070 && ei->ctfsect == NULL)
1072 if (symtab_create_debug)
1073 fprintf_unfiltered (gdb_stdlog,
1074 "... minimal symbols previously read\n");
1075 return;
1078 minimal_symbol_reader reader (objfile);
1080 /* Process the normal ELF symbol table first. */
1082 storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
1083 if (storage_needed < 0)
1084 error (_("Can't read symbols from %s: %s"),
1085 bfd_get_filename (objfile->obfd),
1086 bfd_errmsg (bfd_get_error ()));
1088 if (storage_needed > 0)
1090 /* Memory gets permanently referenced from ABFD after
1091 bfd_canonicalize_symtab so it must not get freed before ABFD gets. */
1093 symbol_table = (asymbol **) bfd_alloc (abfd, storage_needed);
1094 symcount = bfd_canonicalize_symtab (objfile->obfd, symbol_table);
1096 if (symcount < 0)
1097 error (_("Can't read symbols from %s: %s"),
1098 bfd_get_filename (objfile->obfd),
1099 bfd_errmsg (bfd_get_error ()));
1101 elf_symtab_read (reader, objfile, ST_REGULAR, symcount, symbol_table,
1102 false);
1105 /* Add the dynamic symbols. */
1107 storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd);
1109 if (storage_needed > 0)
1111 /* Memory gets permanently referenced from ABFD after
1112 bfd_get_synthetic_symtab so it must not get freed before ABFD gets.
1113 It happens only in the case when elf_slurp_reloc_table sees
1114 asection->relocation NULL. Determining which section is asection is
1115 done by _bfd_elf_get_synthetic_symtab which is all a bfd
1116 implementation detail, though. */
1118 dyn_symbol_table = (asymbol **) bfd_alloc (abfd, storage_needed);
1119 dynsymcount = bfd_canonicalize_dynamic_symtab (objfile->obfd,
1120 dyn_symbol_table);
1122 if (dynsymcount < 0)
1123 error (_("Can't read symbols from %s: %s"),
1124 bfd_get_filename (objfile->obfd),
1125 bfd_errmsg (bfd_get_error ()));
1127 elf_symtab_read (reader, objfile, ST_DYNAMIC, dynsymcount,
1128 dyn_symbol_table, false);
1130 elf_rel_plt_read (reader, objfile, dyn_symbol_table);
1133 /* Contrary to binutils --strip-debug/--only-keep-debug the strip command from
1134 elfutils (eu-strip) moves even the .symtab section into the .debug file.
1136 bfd_get_synthetic_symtab on ppc64 for each function descriptor ELF symbol
1137 'name' creates a new BSF_SYNTHETIC ELF symbol '.name' with its code
1138 address. But with eu-strip files bfd_get_synthetic_symtab would fail to
1139 read the code address from .opd while it reads the .symtab section from
1140 a separate debug info file as the .opd section is SHT_NOBITS there.
1142 With SYNTH_ABFD the .opd section will be read from the original
1143 backlinked binary where it is valid. */
1145 if (objfile->separate_debug_objfile_backlink)
1146 synth_abfd = objfile->separate_debug_objfile_backlink->obfd;
1147 else
1148 synth_abfd = abfd;
1150 /* Add synthetic symbols - for instance, names for any PLT entries. */
1152 synthcount = bfd_get_synthetic_symtab (synth_abfd, symcount, symbol_table,
1153 dynsymcount, dyn_symbol_table,
1154 &synthsyms);
1155 if (synthcount > 0)
1157 long i;
1159 std::unique_ptr<asymbol *[]>
1160 synth_symbol_table (new asymbol *[synthcount]);
1161 for (i = 0; i < synthcount; i++)
1162 synth_symbol_table[i] = synthsyms + i;
1163 elf_symtab_read (reader, objfile, ST_SYNTHETIC, synthcount,
1164 synth_symbol_table.get (), true);
1166 xfree (synthsyms);
1167 synthsyms = NULL;
1170 /* Install any minimal symbols that have been collected as the current
1171 minimal symbols for this objfile. The debug readers below this point
1172 should not generate new minimal symbols; if they do it's their
1173 responsibility to install them. "mdebug" appears to be the only one
1174 which will do this. */
1176 reader.install ();
1178 if (symtab_create_debug)
1179 fprintf_unfiltered (gdb_stdlog, "Done reading minimal symbols.\n");
1182 /* Scan and build partial symbols for a symbol file.
1183 We have been initialized by a call to elf_symfile_init, which
1184 currently does nothing.
1186 This function only does the minimum work necessary for letting the
1187 user "name" things symbolically; it does not read the entire symtab.
1188 Instead, it reads the external and static symbols and puts them in partial
1189 symbol tables. When more extensive information is requested of a
1190 file, the corresponding partial symbol table is mutated into a full
1191 fledged symbol table by going back and reading the symbols
1192 for real.
1194 We look for sections with specific names, to tell us what debug
1195 format to look for: FIXME!!!
1197 elfstab_build_psymtabs() handles STABS symbols;
1198 mdebug_build_psymtabs() handles ECOFF debugging information.
1200 Note that ELF files have a "minimal" symbol table, which looks a lot
1201 like a COFF symbol table, but has only the minimal information necessary
1202 for linking. We process this also, and use the information to
1203 build gdb's minimal symbol table. This gives us some minimal debugging
1204 capability even for files compiled without -g. */
1206 static void
1207 elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
1209 bfd *abfd = objfile->obfd;
1210 struct elfinfo ei;
1211 bool has_dwarf2 = true;
1213 memset ((char *) &ei, 0, sizeof (ei));
1214 if (!(objfile->flags & OBJF_READNEVER))
1215 bfd_map_over_sections (abfd, elf_locate_sections, (void *) & ei);
1217 elf_read_minimal_symbols (objfile, symfile_flags, &ei);
1219 /* ELF debugging information is inserted into the psymtab in the
1220 order of least informative first - most informative last. Since
1221 the psymtab table is searched `most recent insertion first' this
1222 increases the probability that more detailed debug information
1223 for a section is found.
1225 For instance, an object file might contain both .mdebug (XCOFF)
1226 and .debug_info (DWARF2) sections then .mdebug is inserted first
1227 (searched last) and DWARF2 is inserted last (searched first). If
1228 we don't do this then the XCOFF info is found first - for code in
1229 an included file XCOFF info is useless. */
1231 if (ei.mdebugsect)
1233 const struct ecoff_debug_swap *swap;
1235 /* .mdebug section, presumably holding ECOFF debugging
1236 information. */
1237 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1238 if (swap)
1239 elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
1241 if (ei.stabsect)
1243 asection *str_sect;
1245 /* Stab sections have an associated string table that looks like
1246 a separate section. */
1247 str_sect = bfd_get_section_by_name (abfd, ".stabstr");
1249 /* FIXME should probably warn about a stab section without a stabstr. */
1250 if (str_sect)
1251 elfstab_build_psymtabs (objfile,
1252 ei.stabsect,
1253 str_sect->filepos,
1254 bfd_section_size (str_sect));
1257 if (dwarf2_has_info (objfile, NULL, true))
1259 dw_index_kind index_kind;
1261 /* elf_sym_fns_gdb_index cannot handle simultaneous non-DWARF
1262 debug information present in OBJFILE. If there is such debug
1263 info present never use an index. */
1264 if (!objfile_has_partial_symbols (objfile)
1265 && dwarf2_initialize_objfile (objfile, &index_kind))
1267 switch (index_kind)
1269 case dw_index_kind::GDB_INDEX:
1270 objfile_set_sym_fns (objfile, &elf_sym_fns_gdb_index);
1271 break;
1272 case dw_index_kind::DEBUG_NAMES:
1273 objfile_set_sym_fns (objfile, &elf_sym_fns_debug_names);
1274 break;
1277 else
1279 /* It is ok to do this even if the stabs reader made some
1280 partial symbols, because OBJF_PSYMTABS_READ has not been
1281 set, and so our lazy reader function will still be called
1282 when needed. */
1283 objfile_set_sym_fns (objfile, &elf_sym_fns_lazy_psyms);
1286 /* If the file has its own symbol tables it has no separate debug
1287 info. `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to
1288 SYMTABS/PSYMTABS. `.gnu_debuglink' may no longer be present with
1289 `.note.gnu.build-id'.
1291 .gnu_debugdata is !objfile_has_partial_symbols because it contains only
1292 .symtab, not .debug_* section. But if we already added .gnu_debugdata as
1293 an objfile via find_separate_debug_file_in_section there was no separate
1294 debug info available. Therefore do not attempt to search for another one,
1295 objfile->separate_debug_objfile->separate_debug_objfile GDB guarantees to
1296 be NULL and we would possibly violate it. */
1298 else if (!objfile_has_partial_symbols (objfile)
1299 && objfile->separate_debug_objfile == NULL
1300 && objfile->separate_debug_objfile_backlink == NULL)
1302 std::string debugfile = find_separate_debug_file_by_buildid (objfile);
1304 if (debugfile.empty ())
1305 debugfile = find_separate_debug_file_by_debuglink (objfile);
1307 if (!debugfile.empty ())
1309 gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (debugfile.c_str ()));
1311 symbol_file_add_separate (debug_bfd.get (), debugfile.c_str (),
1312 symfile_flags, objfile);
1314 else
1315 has_dwarf2 = false;
1318 /* Read the CTF section only if there is no DWARF info. */
1319 if (!has_dwarf2 && ei.ctfsect)
1321 elfctf_build_psymtabs (objfile);
1325 /* Callback to lazily read psymtabs. */
1327 static void
1328 read_psyms (struct objfile *objfile)
1330 if (dwarf2_has_info (objfile, NULL))
1331 dwarf2_build_psymtabs (objfile);
1334 /* Initialize anything that needs initializing when a completely new symbol
1335 file is specified (not just adding some symbols from another file, e.g. a
1336 shared library). */
1338 static void
1339 elf_new_init (struct objfile *ignore)
1343 /* Perform any local cleanups required when we are done with a particular
1344 objfile. I.E, we are in the process of discarding all symbol information
1345 for an objfile, freeing up all memory held for it, and unlinking the
1346 objfile struct from the global list of known objfiles. */
1348 static void
1349 elf_symfile_finish (struct objfile *objfile)
1353 /* ELF specific initialization routine for reading symbols. */
1355 static void
1356 elf_symfile_init (struct objfile *objfile)
1358 /* ELF objects may be reordered, so set OBJF_REORDERED. If we
1359 find this causes a significant slowdown in gdb then we could
1360 set it in the debug symbol readers only when necessary. */
1361 objfile->flags |= OBJF_REORDERED;
1364 /* Implementation of `sym_get_probes', as documented in symfile.h. */
1366 static const elfread_data &
1367 elf_get_probes (struct objfile *objfile)
1369 elfread_data *probes_per_bfd = probe_key.get (objfile->obfd);
1371 if (probes_per_bfd == NULL)
1373 probes_per_bfd = probe_key.emplace (objfile->obfd);
1375 /* Here we try to gather information about all types of probes from the
1376 objfile. */
1377 for (const static_probe_ops *ops : all_static_probe_ops)
1378 ops->get_probes (probes_per_bfd, objfile);
1381 return *probes_per_bfd;
1386 /* Implementation `sym_probe_fns', as documented in symfile.h. */
1388 static const struct sym_probe_fns elf_probe_fns =
1390 elf_get_probes, /* sym_get_probes */
1393 /* Register that we are able to handle ELF object file formats. */
1395 static const struct sym_fns elf_sym_fns =
1397 elf_new_init, /* init anything gbl to entire symtab */
1398 elf_symfile_init, /* read initial info, setup for sym_read() */
1399 elf_symfile_read, /* read a symbol file into symtab */
1400 NULL, /* sym_read_psymbols */
1401 elf_symfile_finish, /* finished with file, cleanup */
1402 default_symfile_offsets, /* Translate ext. to int. relocation */
1403 elf_symfile_segments, /* Get segment information from a file. */
1404 NULL,
1405 default_symfile_relocate, /* Relocate a debug section. */
1406 &elf_probe_fns, /* sym_probe_fns */
1407 &psym_functions
1410 /* The same as elf_sym_fns, but not registered and lazily reads
1411 psymbols. */
1413 const struct sym_fns elf_sym_fns_lazy_psyms =
1415 elf_new_init, /* init anything gbl to entire symtab */
1416 elf_symfile_init, /* read initial info, setup for sym_read() */
1417 elf_symfile_read, /* read a symbol file into symtab */
1418 read_psyms, /* sym_read_psymbols */
1419 elf_symfile_finish, /* finished with file, cleanup */
1420 default_symfile_offsets, /* Translate ext. to int. relocation */
1421 elf_symfile_segments, /* Get segment information from a file. */
1422 NULL,
1423 default_symfile_relocate, /* Relocate a debug section. */
1424 &elf_probe_fns, /* sym_probe_fns */
1425 &psym_functions
1428 /* The same as elf_sym_fns, but not registered and uses the
1429 DWARF-specific GNU index rather than psymtab. */
1430 const struct sym_fns elf_sym_fns_gdb_index =
1432 elf_new_init, /* init anything gbl to entire symab */
1433 elf_symfile_init, /* read initial info, setup for sym_red() */
1434 elf_symfile_read, /* read a symbol file into symtab */
1435 NULL, /* sym_read_psymbols */
1436 elf_symfile_finish, /* finished with file, cleanup */
1437 default_symfile_offsets, /* Translate ext. to int. relocation */
1438 elf_symfile_segments, /* Get segment information from a file. */
1439 NULL,
1440 default_symfile_relocate, /* Relocate a debug section. */
1441 &elf_probe_fns, /* sym_probe_fns */
1442 &dwarf2_gdb_index_functions
1445 /* The same as elf_sym_fns, but not registered and uses the
1446 DWARF-specific .debug_names index rather than psymtab. */
1447 const struct sym_fns elf_sym_fns_debug_names =
1449 elf_new_init, /* init anything gbl to entire symab */
1450 elf_symfile_init, /* read initial info, setup for sym_red() */
1451 elf_symfile_read, /* read a symbol file into symtab */
1452 NULL, /* sym_read_psymbols */
1453 elf_symfile_finish, /* finished with file, cleanup */
1454 default_symfile_offsets, /* Translate ext. to int. relocation */
1455 elf_symfile_segments, /* Get segment information from a file. */
1456 NULL,
1457 default_symfile_relocate, /* Relocate a debug section. */
1458 &elf_probe_fns, /* sym_probe_fns */
1459 &dwarf2_debug_names_functions
1462 /* STT_GNU_IFUNC resolver vector to be installed to gnu_ifunc_fns_p. */
1464 static const struct gnu_ifunc_fns elf_gnu_ifunc_fns =
1466 elf_gnu_ifunc_resolve_addr,
1467 elf_gnu_ifunc_resolve_name,
1468 elf_gnu_ifunc_resolver_stop,
1469 elf_gnu_ifunc_resolver_return_stop
1472 void
1473 _initialize_elfread (void)
1475 add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns);
1477 gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;