4804d62074c47d10ec3ec65b477060a149f02355
[deliverable/binutils-gdb.git] / gdb / elfread.c
1 /* Read ELF (Executable and Linking Format) object files for GDB.
2
3 Copyright (C) 1991-2020 Free Software Foundation, Inc.
4
5 Written by Fred Fish at Cygnus Support.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 #include "defs.h"
23 #include "bfd.h"
24 #include "elf-bfd.h"
25 #include "elf/common.h"
26 #include "elf/internal.h"
27 #include "elf/mips.h"
28 #include "symtab.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "stabsread.h"
32 #include "complaints.h"
33 #include "demangle.h"
34 #include "psympriv.h"
35 #include "filenames.h"
36 #include "probe.h"
37 #include "arch-utils.h"
38 #include "gdbtypes.h"
39 #include "value.h"
40 #include "infcall.h"
41 #include "gdbthread.h"
42 #include "inferior.h"
43 #include "regcache.h"
44 #include "bcache.h"
45 #include "gdb_bfd.h"
46 #include "build-id.h"
47 #include "location.h"
48 #include "auxv.h"
49 #include "mdebugread.h"
50 #include "ctfread.h"
51 #include "gdbsupport/gdb_string_view.h"
52 #include "gdbsupport/scoped_fd.h"
53 #include "debuginfod-support.h"
54
55 /* Forward declarations. */
56 extern const struct sym_fns elf_sym_fns_gdb_index;
57 extern const struct sym_fns elf_sym_fns_debug_names;
58 extern const struct sym_fns elf_sym_fns_lazy_psyms;
59
60 /* The struct elfinfo is available only during ELF symbol table and
61 psymtab reading. It is destroyed at the completion of psymtab-reading.
62 It's local to elf_symfile_read. */
63
64 struct elfinfo
65 {
66 asection *stabsect; /* Section pointer for .stab section */
67 asection *mdebugsect; /* Section pointer for .mdebug section */
68 asection *ctfsect; /* Section pointer for .ctf section */
69 };
70
71 /* Type for per-BFD data. */
72
73 typedef std::vector<std::unique_ptr<probe>> elfread_data;
74
75 /* Per-BFD data for probe info. */
76
77 static const struct bfd_key<elfread_data> probe_key;
78
79 /* Minimal symbols located at the GOT entries for .plt - that is the real
80 pointer where the given entry will jump to. It gets updated by the real
81 function address during lazy ld.so resolving in the inferior. These
82 minimal symbols are indexed for <tab>-completion. */
83
84 #define SYMBOL_GOT_PLT_SUFFIX "@got.plt"
85
86 /* Locate the segments in ABFD. */
87
88 static symfile_segment_data_up
89 elf_symfile_segments (bfd *abfd)
90 {
91 Elf_Internal_Phdr *phdrs, **segments;
92 long phdrs_size;
93 int num_phdrs, num_segments, num_sections, i;
94 asection *sect;
95
96 phdrs_size = bfd_get_elf_phdr_upper_bound (abfd);
97 if (phdrs_size == -1)
98 return NULL;
99
100 phdrs = (Elf_Internal_Phdr *) alloca (phdrs_size);
101 num_phdrs = bfd_get_elf_phdrs (abfd, phdrs);
102 if (num_phdrs == -1)
103 return NULL;
104
105 num_segments = 0;
106 segments = XALLOCAVEC (Elf_Internal_Phdr *, num_phdrs);
107 for (i = 0; i < num_phdrs; i++)
108 if (phdrs[i].p_type == PT_LOAD)
109 segments[num_segments++] = &phdrs[i];
110
111 if (num_segments == 0)
112 return NULL;
113
114 symfile_segment_data_up data (new symfile_segment_data);
115 data->num_segments = num_segments;
116 data->segment_bases = XCNEWVEC (CORE_ADDR, num_segments);
117 data->segment_sizes = XCNEWVEC (CORE_ADDR, num_segments);
118
119 for (i = 0; i < num_segments; i++)
120 {
121 data->segment_bases[i] = segments[i]->p_vaddr;
122 data->segment_sizes[i] = segments[i]->p_memsz;
123 }
124
125 num_sections = bfd_count_sections (abfd);
126 data->segment_info = XCNEWVEC (int, num_sections);
127
128 for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
129 {
130 int j;
131
132 if ((bfd_section_flags (sect) & SEC_ALLOC) == 0)
133 continue;
134
135 Elf_Internal_Shdr *this_hdr = &elf_section_data (sect)->this_hdr;
136
137 for (j = 0; j < num_segments; j++)
138 if (ELF_SECTION_IN_SEGMENT (this_hdr, segments[j]))
139 {
140 data->segment_info[i] = j + 1;
141 break;
142 }
143
144 /* We should have found a segment for every non-empty section.
145 If we haven't, we will not relocate this section by any
146 offsets we apply to the segments. As an exception, do not
147 warn about SHT_NOBITS sections; in normal ELF execution
148 environments, SHT_NOBITS means zero-initialized and belongs
149 in a segment, but in no-OS environments some tools (e.g. ARM
150 RealView) use SHT_NOBITS for uninitialized data. Since it is
151 uninitialized, it doesn't need a program header. Such
152 binaries are not relocatable. */
153 if (bfd_section_size (sect) > 0 && j == num_segments
154 && (bfd_section_flags (sect) & SEC_LOAD) != 0)
155 warning (_("Loadable section \"%s\" outside of ELF segments"),
156 bfd_section_name (sect));
157 }
158
159 return data;
160 }
161
162 /* We are called once per section from elf_symfile_read. We
163 need to examine each section we are passed, check to see
164 if it is something we are interested in processing, and
165 if so, stash away some access information for the section.
166
167 For now we recognize the dwarf debug information sections and
168 line number sections from matching their section names. The
169 ELF definition is no real help here since it has no direct
170 knowledge of DWARF (by design, so any debugging format can be
171 used).
172
173 We also recognize the ".stab" sections used by the Sun compilers
174 released with Solaris 2.
175
176 FIXME: The section names should not be hardwired strings (what
177 should they be? I don't think most object file formats have enough
178 section flags to specify what kind of debug section it is.
179 -kingdon). */
180
181 static void
182 elf_locate_sections (bfd *ignore_abfd, asection *sectp, void *eip)
183 {
184 struct elfinfo *ei;
185
186 ei = (struct elfinfo *) eip;
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 bfd_map_over_sections (abfd, elf_locate_sections, (void *) & ei);
1218
1219 elf_read_minimal_symbols (objfile, symfile_flags, &ei);
1220
1221 /* ELF debugging information is inserted into the psymtab in the
1222 order of least informative first - most informative last. Since
1223 the psymtab table is searched `most recent insertion first' this
1224 increases the probability that more detailed debug information
1225 for a section is found.
1226
1227 For instance, an object file might contain both .mdebug (XCOFF)
1228 and .debug_info (DWARF2) sections then .mdebug is inserted first
1229 (searched last) and DWARF2 is inserted last (searched first). If
1230 we don't do this then the XCOFF info is found first - for code in
1231 an included file XCOFF info is useless. */
1232
1233 if (ei.mdebugsect)
1234 {
1235 const struct ecoff_debug_swap *swap;
1236
1237 /* .mdebug section, presumably holding ECOFF debugging
1238 information. */
1239 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1240 if (swap)
1241 elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
1242 }
1243 if (ei.stabsect)
1244 {
1245 asection *str_sect;
1246
1247 /* Stab sections have an associated string table that looks like
1248 a separate section. */
1249 str_sect = bfd_get_section_by_name (abfd, ".stabstr");
1250
1251 /* FIXME should probably warn about a stab section without a stabstr. */
1252 if (str_sect)
1253 elfstab_build_psymtabs (objfile,
1254 ei.stabsect,
1255 str_sect->filepos,
1256 bfd_section_size (str_sect));
1257 }
1258
1259 if (dwarf2_has_info (objfile, NULL, true))
1260 {
1261 dw_index_kind index_kind;
1262
1263 /* elf_sym_fns_gdb_index cannot handle simultaneous non-DWARF
1264 debug information present in OBJFILE. If there is such debug
1265 info present never use an index. */
1266 if (!objfile_has_partial_symbols (objfile)
1267 && dwarf2_initialize_objfile (objfile, &index_kind))
1268 {
1269 switch (index_kind)
1270 {
1271 case dw_index_kind::GDB_INDEX:
1272 objfile_set_sym_fns (objfile, &elf_sym_fns_gdb_index);
1273 break;
1274 case dw_index_kind::DEBUG_NAMES:
1275 objfile_set_sym_fns (objfile, &elf_sym_fns_debug_names);
1276 break;
1277 }
1278 }
1279 else
1280 {
1281 /* It is ok to do this even if the stabs reader made some
1282 partial symbols, because OBJF_PSYMTABS_READ has not been
1283 set, and so our lazy reader function will still be called
1284 when needed. */
1285 objfile_set_sym_fns (objfile, &elf_sym_fns_lazy_psyms);
1286 }
1287 }
1288 /* If the file has its own symbol tables it has no separate debug
1289 info. `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to
1290 SYMTABS/PSYMTABS. `.gnu_debuglink' may no longer be present with
1291 `.note.gnu.build-id'.
1292
1293 .gnu_debugdata is !objfile_has_partial_symbols because it contains only
1294 .symtab, not .debug_* section. But if we already added .gnu_debugdata as
1295 an objfile via find_separate_debug_file_in_section there was no separate
1296 debug info available. Therefore do not attempt to search for another one,
1297 objfile->separate_debug_objfile->separate_debug_objfile GDB guarantees to
1298 be NULL and we would possibly violate it. */
1299
1300 else if (!objfile_has_partial_symbols (objfile)
1301 && objfile->separate_debug_objfile == NULL
1302 && objfile->separate_debug_objfile_backlink == NULL)
1303 {
1304 std::string debugfile = find_separate_debug_file_by_buildid (objfile);
1305
1306 if (debugfile.empty ())
1307 debugfile = find_separate_debug_file_by_debuglink (objfile);
1308
1309 if (!debugfile.empty ())
1310 {
1311 gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (debugfile.c_str ()));
1312
1313 symbol_file_add_separate (debug_bfd.get (), debugfile.c_str (),
1314 symfile_flags, objfile);
1315 }
1316 else
1317 {
1318 has_dwarf2 = false;
1319 const struct bfd_build_id *build_id = build_id_bfd_get (objfile->obfd);
1320
1321 if (build_id != nullptr)
1322 {
1323 gdb::unique_xmalloc_ptr<char> symfile_path;
1324 scoped_fd fd (debuginfod_debuginfo_query (build_id->data,
1325 build_id->size,
1326 objfile->original_name,
1327 &symfile_path));
1328
1329 if (fd.get () >= 0)
1330 {
1331 /* File successfully retrieved from server. */
1332 gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (symfile_path.get ()));
1333
1334 if (debug_bfd == nullptr)
1335 warning (_("File \"%s\" from debuginfod cannot be opened as bfd"),
1336 objfile->original_name);
1337 else if (build_id_verify (debug_bfd.get (), build_id->size, build_id->data))
1338 {
1339 symbol_file_add_separate (debug_bfd.get (), symfile_path.get (),
1340 symfile_flags, objfile);
1341 has_dwarf2 = true;
1342 }
1343 }
1344 }
1345 }
1346 }
1347
1348 /* Read the CTF section only if there is no DWARF info. */
1349 if (!has_dwarf2 && ei.ctfsect)
1350 {
1351 elfctf_build_psymtabs (objfile);
1352 }
1353 }
1354
1355 /* Callback to lazily read psymtabs. */
1356
1357 static void
1358 read_psyms (struct objfile *objfile)
1359 {
1360 if (dwarf2_has_info (objfile, NULL))
1361 dwarf2_build_psymtabs (objfile);
1362 }
1363
1364 /* Initialize anything that needs initializing when a completely new symbol
1365 file is specified (not just adding some symbols from another file, e.g. a
1366 shared library). */
1367
1368 static void
1369 elf_new_init (struct objfile *ignore)
1370 {
1371 }
1372
1373 /* Perform any local cleanups required when we are done with a particular
1374 objfile. I.E, we are in the process of discarding all symbol information
1375 for an objfile, freeing up all memory held for it, and unlinking the
1376 objfile struct from the global list of known objfiles. */
1377
1378 static void
1379 elf_symfile_finish (struct objfile *objfile)
1380 {
1381 }
1382
1383 /* ELF specific initialization routine for reading symbols. */
1384
1385 static void
1386 elf_symfile_init (struct objfile *objfile)
1387 {
1388 /* ELF objects may be reordered, so set OBJF_REORDERED. If we
1389 find this causes a significant slowdown in gdb then we could
1390 set it in the debug symbol readers only when necessary. */
1391 objfile->flags |= OBJF_REORDERED;
1392 }
1393
1394 /* Implementation of `sym_get_probes', as documented in symfile.h. */
1395
1396 static const elfread_data &
1397 elf_get_probes (struct objfile *objfile)
1398 {
1399 elfread_data *probes_per_bfd = probe_key.get (objfile->obfd);
1400
1401 if (probes_per_bfd == NULL)
1402 {
1403 probes_per_bfd = probe_key.emplace (objfile->obfd);
1404
1405 /* Here we try to gather information about all types of probes from the
1406 objfile. */
1407 for (const static_probe_ops *ops : all_static_probe_ops)
1408 ops->get_probes (probes_per_bfd, objfile);
1409 }
1410
1411 return *probes_per_bfd;
1412 }
1413
1414 \f
1415
1416 /* Implementation `sym_probe_fns', as documented in symfile.h. */
1417
1418 static const struct sym_probe_fns elf_probe_fns =
1419 {
1420 elf_get_probes, /* sym_get_probes */
1421 };
1422
1423 /* Register that we are able to handle ELF object file formats. */
1424
1425 static const struct sym_fns elf_sym_fns =
1426 {
1427 elf_new_init, /* init anything gbl to entire symtab */
1428 elf_symfile_init, /* read initial info, setup for sym_read() */
1429 elf_symfile_read, /* read a symbol file into symtab */
1430 NULL, /* sym_read_psymbols */
1431 elf_symfile_finish, /* finished with file, cleanup */
1432 default_symfile_offsets, /* Translate ext. to int. relocation */
1433 elf_symfile_segments, /* Get segment information from a file. */
1434 NULL,
1435 default_symfile_relocate, /* Relocate a debug section. */
1436 &elf_probe_fns, /* sym_probe_fns */
1437 &psym_functions
1438 };
1439
1440 /* The same as elf_sym_fns, but not registered and lazily reads
1441 psymbols. */
1442
1443 const struct sym_fns elf_sym_fns_lazy_psyms =
1444 {
1445 elf_new_init, /* init anything gbl to entire symtab */
1446 elf_symfile_init, /* read initial info, setup for sym_read() */
1447 elf_symfile_read, /* read a symbol file into symtab */
1448 read_psyms, /* sym_read_psymbols */
1449 elf_symfile_finish, /* finished with file, cleanup */
1450 default_symfile_offsets, /* Translate ext. to int. relocation */
1451 elf_symfile_segments, /* Get segment information from a file. */
1452 NULL,
1453 default_symfile_relocate, /* Relocate a debug section. */
1454 &elf_probe_fns, /* sym_probe_fns */
1455 &psym_functions
1456 };
1457
1458 /* The same as elf_sym_fns, but not registered and uses the
1459 DWARF-specific GNU index rather than psymtab. */
1460 const struct sym_fns elf_sym_fns_gdb_index =
1461 {
1462 elf_new_init, /* init anything gbl to entire symab */
1463 elf_symfile_init, /* read initial info, setup for sym_red() */
1464 elf_symfile_read, /* read a symbol file into symtab */
1465 NULL, /* sym_read_psymbols */
1466 elf_symfile_finish, /* finished with file, cleanup */
1467 default_symfile_offsets, /* Translate ext. to int. relocation */
1468 elf_symfile_segments, /* Get segment information from a file. */
1469 NULL,
1470 default_symfile_relocate, /* Relocate a debug section. */
1471 &elf_probe_fns, /* sym_probe_fns */
1472 &dwarf2_gdb_index_functions
1473 };
1474
1475 /* The same as elf_sym_fns, but not registered and uses the
1476 DWARF-specific .debug_names index rather than psymtab. */
1477 const struct sym_fns elf_sym_fns_debug_names =
1478 {
1479 elf_new_init, /* init anything gbl to entire symab */
1480 elf_symfile_init, /* read initial info, setup for sym_red() */
1481 elf_symfile_read, /* read a symbol file into symtab */
1482 NULL, /* sym_read_psymbols */
1483 elf_symfile_finish, /* finished with file, cleanup */
1484 default_symfile_offsets, /* Translate ext. to int. relocation */
1485 elf_symfile_segments, /* Get segment information from a file. */
1486 NULL,
1487 default_symfile_relocate, /* Relocate a debug section. */
1488 &elf_probe_fns, /* sym_probe_fns */
1489 &dwarf2_debug_names_functions
1490 };
1491
1492 /* STT_GNU_IFUNC resolver vector to be installed to gnu_ifunc_fns_p. */
1493
1494 static const struct gnu_ifunc_fns elf_gnu_ifunc_fns =
1495 {
1496 elf_gnu_ifunc_resolve_addr,
1497 elf_gnu_ifunc_resolve_name,
1498 elf_gnu_ifunc_resolver_stop,
1499 elf_gnu_ifunc_resolver_return_stop
1500 };
1501
1502 void _initialize_elfread ();
1503 void
1504 _initialize_elfread ()
1505 {
1506 add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns);
1507
1508 gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;
1509 }
This page took 0.061712 seconds and 4 git commands to generate.