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