Introduce dwarf2/public.h
[deliverable/binutils-gdb.git] / gdb / elfread.c
CommitLineData
c906108c 1/* Read ELF (Executable and Linking Format) object files for GDB.
1bac305b 2
3666a048 3 Copyright (C) 1991-2021 Free Software Foundation, Inc.
1bac305b 4
c906108c
SS
5 Written by Fred Fish at Cygnus Support.
6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
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
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
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.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
23#include "bfd.h"
c906108c 24#include "elf-bfd.h"
31d99776
DJ
25#include "elf/common.h"
26#include "elf/internal.h"
c906108c 27#include "elf/mips.h"
4de283e4
TT
28#include "symtab.h"
29#include "symfile.h"
30#include "objfiles.h"
31#include "stabsread.h"
4de283e4
TT
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"
07be84bf 38#include "gdbtypes.h"
4de283e4 39#include "value.h"
07be84bf 40#include "infcall.h"
4de283e4 41#include "gdbthread.h"
00431a78 42#include "inferior.h"
4de283e4
TT
43#include "regcache.h"
44#include "bcache.h"
45#include "gdb_bfd.h"
46#include "build-id.h"
f00aae0f 47#include "location.h"
4de283e4 48#include "auxv.h"
0e8f53ba 49#include "mdebugread.h"
30d1f018 50#include "ctfread.h"
31edb802 51#include "gdbsupport/gdb_string_view.h"
0d79cdc4
AM
52#include "gdbsupport/scoped_fd.h"
53#include "debuginfod-support.h"
70182375 54#include "dwarf2/public.h"
c906108c 55
3c0aa29a
PA
56/* Forward declarations. */
57extern const struct sym_fns elf_sym_fns_gdb_index;
58extern const struct sym_fns elf_sym_fns_debug_names;
59extern const struct sym_fns elf_sym_fns_lazy_psyms;
60
c906108c 61/* The struct elfinfo is available only during ELF symbol table and
6426a772 62 psymtab reading. It is destroyed at the completion of psymtab-reading.
c906108c
SS
63 It's local to elf_symfile_read. */
64
c5aa993b
JM
65struct elfinfo
66 {
c5aa993b 67 asection *stabsect; /* Section pointer for .stab section */
c5aa993b 68 asection *mdebugsect; /* Section pointer for .mdebug section */
30d1f018 69 asection *ctfsect; /* Section pointer for .ctf section */
c5aa993b 70 };
c906108c 71
814cf43a
TT
72/* Type for per-BFD data. */
73
74typedef std::vector<std::unique_ptr<probe>> elfread_data;
75
5d9cf8a4 76/* Per-BFD data for probe info. */
55aa24fb 77
814cf43a 78static const struct bfd_key<elfread_data> probe_key;
55aa24fb 79
07be84bf
JK
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
31d99776
DJ
87/* Locate the segments in ABFD. */
88
62982abd 89static symfile_segment_data_up
31d99776
DJ
90elf_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;
31d99776
DJ
96
97 phdrs_size = bfd_get_elf_phdr_upper_bound (abfd);
98 if (phdrs_size == -1)
99 return NULL;
100
224c3ddb 101 phdrs = (Elf_Internal_Phdr *) alloca (phdrs_size);
31d99776
DJ
102 num_phdrs = bfd_get_elf_phdrs (abfd, phdrs);
103 if (num_phdrs == -1)
104 return NULL;
105
106 num_segments = 0;
8d749320 107 segments = XALLOCAVEC (Elf_Internal_Phdr *, num_phdrs);
31d99776
DJ
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
62982abd 115 symfile_segment_data_up data (new symfile_segment_data);
68b888ff 116 data->segments.reserve (num_segments);
31d99776
DJ
117
118 for (i = 0; i < num_segments; i++)
68b888ff 119 data->segments.emplace_back (segments[i]->p_vaddr, segments[i]->p_memsz);
31d99776
DJ
120
121 num_sections = bfd_count_sections (abfd);
9005fbbb
SM
122
123 /* All elements are initialized to 0 (map to no segment). */
124 data->segment_info.resize (num_sections);
31d99776
DJ
125
126 for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
127 {
128 int j;
31d99776 129
fd361982 130 if ((bfd_section_flags (sect) & SEC_ALLOC) == 0)
31d99776
DJ
131 continue;
132
62b74cb8 133 Elf_Internal_Shdr *this_hdr = &elf_section_data (sect)->this_hdr;
31d99776
DJ
134
135 for (j = 0; j < num_segments; j++)
62b74cb8 136 if (ELF_SECTION_IN_SEGMENT (this_hdr, segments[j]))
31d99776
DJ
137 {
138 data->segment_info[i] = j + 1;
139 break;
140 }
141
ad09a548
DJ
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. */
25f4c262
KS
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
fd361982 157 && (bfd_section_flags (sect) & SEC_LOAD) != 0)
9d3ab915
KS
158 warning (_("Loadable section \"%s\" outside of ELF segments\n in %s"),
159 bfd_section_name (sect), bfd_get_filename (abfd));
31d99776
DJ
160 }
161
162 return data;
163}
164
c906108c
SS
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
0963b4bd 181 section flags to specify what kind of debug section it is.
c906108c
SS
182 -kingdon). */
183
184static void
08f93a1a 185elf_locate_sections (asection *sectp, struct elfinfo *ei)
c906108c 186{
7ce59000 187 if (strcmp (sectp->name, ".stab") == 0)
c906108c 188 {
c5aa993b 189 ei->stabsect = sectp;
c906108c 190 }
6314a349 191 else if (strcmp (sectp->name, ".mdebug") == 0)
c906108c 192 {
c5aa993b 193 ei->mdebugsect = sectp;
c906108c 194 }
30d1f018
WP
195 else if (strcmp (sectp->name, ".ctf") == 0)
196 {
197 ei->ctfsect = sectp;
198 }
c906108c
SS
199}
200
c906108c 201static struct minimal_symbol *
8dddcb8f 202record_minimal_symbol (minimal_symbol_reader &reader,
31edb802 203 gdb::string_view name, bool copy_name,
04a679b8 204 CORE_ADDR address,
f594e5e9
MC
205 enum minimal_symbol_type ms_type,
206 asection *bfd_section, struct objfile *objfile)
c906108c 207{
08feed99 208 struct gdbarch *gdbarch = objfile->arch ();
5e2b427d 209
0875794a
JK
210 if (ms_type == mst_text || ms_type == mst_file_text
211 || ms_type == mst_text_gnu_ifunc)
85ddcc70 212 address = gdbarch_addr_bits_remove (gdbarch, address);
c906108c 213
44e4c775
AB
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
4b610737 222 struct minimal_symbol *result
44e4c775 223 = reader.record_full (name, copy_name, address, ms_type, section_index);
4b610737
TT
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;
c906108c
SS
229}
230
7f86f058 231/* Read the symbol table of an ELF file.
c906108c 232
62553543 233 Given an objfile, a symbol table, and a flag indicating whether the
6f610d07
UW
234 symbol table contains regular, dynamic, or synthetic symbols, add all
235 the global function and data symbols to the minimal symbol table.
c906108c 236
c5aa993b
JM
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
7f86f058 241 in data structures hung off the objfile's private data. */
c906108c 242
6f610d07
UW
243#define ST_REGULAR 0
244#define ST_DYNAMIC 1
245#define ST_SYNTHETIC 2
246
c906108c 247static void
8dddcb8f
TT
248elf_symtab_read (minimal_symbol_reader &reader,
249 struct objfile *objfile, int type,
04a679b8 250 long number_of_symbols, asymbol **symbol_table,
ce6c454e 251 bool copy_names)
c906108c 252{
08feed99 253 struct gdbarch *gdbarch = objfile->arch ();
c906108c 254 asymbol *sym;
c906108c 255 long i;
c906108c
SS
256 CORE_ADDR symaddr;
257 enum minimal_symbol_type ms_type;
18a94d75
DE
258 /* Name of the last file symbol. This is either a constant string or is
259 saved on the objfile's filename cache. */
0af1e9a5 260 const char *filesymname = "";
d4f3574e 261 int stripped = (bfd_get_symcount (objfile->obfd) == 0);
3e29f34a
MR
262 int elf_make_msymbol_special_p
263 = gdbarch_elf_make_msymbol_special_p (gdbarch);
c5aa993b 264
0cc7b392 265 for (i = 0; i < number_of_symbols; i++)
c906108c 266 {
0cc7b392
DJ
267 sym = symbol_table[i];
268 if (sym->name == NULL || *sym->name == '\0')
c906108c 269 {
0cc7b392 270 /* Skip names that don't exist (shouldn't happen), or names
0963b4bd 271 that are null strings (may happen). */
0cc7b392
DJ
272 continue;
273 }
c906108c 274
74763737
DJ
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))
60c5725c
DJ
279 {
280 if (gdbarch_record_special_symbol_p (gdbarch))
281 gdbarch_record_special_symbol (gdbarch, objfile, sym);
282 continue;
283 }
74763737 284
6f610d07 285 if (type == ST_DYNAMIC
45dfa85a 286 && sym->section == bfd_und_section_ptr
0cc7b392
DJ
287 && (sym->flags & BSF_FUNCTION))
288 {
289 struct minimal_symbol *msym;
02c75f72 290 bfd *abfd = objfile->obfd;
dea91a5c 291 asection *sect;
0cc7b392
DJ
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
0963b4bd 299 the symbol. We are unable to find any meaningful address
0cc7b392
DJ
300 for this symbol in the executable file, so we skip it. */
301 symaddr = sym->value;
302 if (symaddr == 0)
303 continue;
02c75f72
UW
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 {
fd361982 311 if ((bfd_section_flags (sect) & SEC_ALLOC) == 0)
02c75f72
UW
312 continue;
313
fd361982
AM
314 if (symaddr >= bfd_section_vma (sect)
315 && symaddr < bfd_section_vma (sect)
316 + bfd_section_size (sect))
02c75f72
UW
317 break;
318 }
319 if (!sect)
320 continue;
321
828cfa8d
JB
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. */
61012eef 335 if (!startswith (sect->name, ".plt")
828cfa8d
JB
336 && bfd_get_section_by_name (abfd, ".plt") != NULL)
337 continue;
338
0cc7b392 339 msym = record_minimal_symbol
31edb802 340 (reader, sym->name, copy_names,
04a679b8 341 symaddr, mst_solib_trampoline, sect, objfile);
0cc7b392 342 if (msym != NULL)
9b807e7b
MR
343 {
344 msym->filename = filesymname;
3e29f34a
MR
345 if (elf_make_msymbol_special_p)
346 gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
9b807e7b 347 }
0cc7b392
DJ
348 continue;
349 }
c906108c 350
0cc7b392
DJ
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. */
6f610d07 354 if (type == ST_DYNAMIC && !stripped)
0cc7b392
DJ
355 continue;
356 if (sym->flags & BSF_FILE)
be1e3d3e 357 filesymname = objfile->intern (sym->name);
0cc7b392
DJ
358 else if (sym->flags & BSF_SECTION_SYM)
359 continue;
bb869963
SDJ
360 else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK
361 | BSF_GNU_UNIQUE))
0cc7b392
DJ
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
0963b4bd
MS
367 interested in will have a section. */
368 /* Bfd symbols are section relative. */
0cc7b392 369 symaddr = sym->value + sym->section->vma;
0cc7b392
DJ
370 /* For non-absolute symbols, use the type of the section
371 they are relative to, to intuit text/data. Bfd provides
0963b4bd 372 no way of figuring this out for absolute symbols. */
45dfa85a 373 if (sym->section == bfd_abs_section_ptr)
c906108c 374 {
0cc7b392
DJ
375 /* This is a hack to get the minimal symbol type
376 right for Irix 5, which has absolute addresses
6f610d07
UW
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. */
dea91a5c 381 unsigned int shndx = type == ST_SYNTHETIC ? 0 :
0cc7b392
DJ
382 ((elf_symbol_type *) sym)->internal_elf_sym.st_shndx;
383
384 switch (shndx)
c906108c 385 {
0cc7b392
DJ
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
0963b4bd 400 symbols, relocate all others by section offset. */
0cc7b392
DJ
401 if (ms_type != mst_abs)
402 {
403 if (sym->name[0] == '.')
404 continue;
c906108c 405 }
0cc7b392
DJ
406 }
407 else if (sym->section->flags & SEC_CODE)
408 {
bb869963 409 if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
c906108c 410 {
0875794a
JK
411 if (sym->flags & BSF_GNU_INDIRECT_FUNCTION)
412 ms_type = mst_text_gnu_ifunc;
413 else
414 ms_type = mst_text;
0cc7b392 415 }
90359a16
JK
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)
0cc7b392
DJ
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;
c906108c 435 }
0cc7b392
DJ
436 }
437 else if (sym->section->flags & SEC_ALLOC)
438 {
bb869963 439 if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
c906108c 440 {
f50776aa
PA
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)
c906108c 446 {
0cc7b392 447 ms_type = mst_data;
c906108c 448 }
c906108c
SS
449 else
450 {
0cc7b392 451 ms_type = mst_bss;
c906108c
SS
452 }
453 }
0cc7b392 454 else if (sym->flags & BSF_LOCAL)
c906108c 455 {
0cc7b392
DJ
456 if (sym->section->flags & SEC_LOAD)
457 {
458 ms_type = mst_file_data;
c906108c
SS
459 }
460 else
461 {
0cc7b392 462 ms_type = mst_file_bss;
c906108c
SS
463 }
464 }
465 else
466 {
0cc7b392 467 ms_type = mst_unknown;
c906108c 468 }
0cc7b392
DJ
469 }
470 else
471 {
472 /* FIXME: Solaris2 shared libraries include lots of
dea91a5c 473 odd "absolute" and "undefined" symbols, that play
0cc7b392
DJ
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; */
0963b4bd 477 continue; /* Skip this symbol. */
0cc7b392
DJ
478 }
479 msym = record_minimal_symbol
31edb802 480 (reader, sym->name, copy_names, symaddr,
0cc7b392 481 ms_type, sym->section, objfile);
6f610d07 482
0cc7b392
DJ
483 if (msym)
484 {
6f610d07 485 /* NOTE: uweigand-20071112: A synthetic symbol does not have an
24c274a1 486 ELF-private part. */
6f610d07 487 if (type != ST_SYNTHETIC)
24c274a1
AM
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 }
dea91a5c 493
a103a963 494 msym->filename = filesymname;
3e29f34a
MR
495 if (elf_make_msymbol_special_p)
496 gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
0cc7b392 497 }
2eaf8d2a 498
715c6909
TT
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
31edb802
CB
509 record_minimal_symbol (reader,
510 gdb::string_view (sym->name, len),
511 true, symaddr, ms_type, sym->section,
512 objfile);
715c6909
TT
513 }
514 }
515
2eaf8d2a
DJ
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 {
2eaf8d2a
DJ
526 struct minimal_symbol *mtramp;
527
31edb802
CB
528 mtramp = record_minimal_symbol
529 (reader, gdb::string_view (sym->name, len - 4), true,
530 symaddr, mst_solib_trampoline, sym->section, objfile);
2eaf8d2a
DJ
531 if (mtramp)
532 {
d9eaeb59 533 SET_MSYMBOL_SIZE (mtramp, MSYMBOL_SIZE (msym));
422d65e7 534 mtramp->created_by_gdb = 1;
2eaf8d2a 535 mtramp->filename = filesymname;
3e29f34a
MR
536 if (elf_make_msymbol_special_p)
537 gdbarch_elf_make_msymbol_special (gdbarch,
538 sym, mtramp);
2eaf8d2a
DJ
539 }
540 }
541 }
c906108c 542 }
c906108c
SS
543 }
544}
545
07be84bf
JK
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
553static void
8dddcb8f
TT
554elf_rel_plt_read (minimal_symbol_reader &reader,
555 struct objfile *objfile, asymbol **dyn_symbol_table)
07be84bf
JK
556{
557 bfd *obfd = objfile->obfd;
558 const struct elf_backend_data *bed = get_elf_backend_data (obfd);
02e169e2 559 asection *relplt, *got_plt;
07be84bf 560 bfd_size_type reloc_count, reloc;
08feed99 561 struct gdbarch *gdbarch = objfile->arch ();
07be84bf
JK
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
07be84bf
JK
568 got_plt = bfd_get_section_by_name (obfd, ".got.plt");
569 if (got_plt == NULL)
4b7d1f7f
WN
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 }
07be84bf 576
02e169e2
PA
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
07be84bf
JK
584 /* This search algorithm is from _bfd_elf_canonicalize_dynamic_reloc. */
585 for (relplt = obfd->sections; relplt != NULL; relplt = relplt->next)
02e169e2
PA
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 }
07be84bf
JK
596 if (relplt == NULL)
597 return;
598
599 if (! bed->s->slurp_reloc_table (obfd, relplt, dyn_symbol_table, TRUE))
600 return;
601
26fcd5d7 602 std::string string_buffer;
07be84bf 603
02e169e2
PA
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
fd361982
AM
610 return (bfd_section_vma (section) <= address
611 && (address < bfd_section_vma (section)
612 + bfd_section_size (section)));
02e169e2
PA
613 };
614
07be84bf
JK
615 reloc_count = relplt->size / elf_section_data (relplt)->this_hdr.sh_entsize;
616 for (reloc = 0; reloc < reloc_count; reloc++)
617 {
22e048c9 618 const char *name;
07be84bf
JK
619 struct minimal_symbol *msym;
620 CORE_ADDR address;
26fcd5d7 621 const char *got_suffix = SYMBOL_GOT_PLT_SUFFIX;
07be84bf 622 const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
07be84bf
JK
623
624 name = bfd_asymbol_name (*relplt->relocation[reloc].sym_ptr_ptr);
07be84bf
JK
625 address = relplt->relocation[reloc].address;
626
02e169e2
PA
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
07be84bf
JK
636 continue;
637
f50776aa
PA
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. */
07be84bf 642
26fcd5d7
TT
643 string_buffer.assign (name);
644 string_buffer.append (got_suffix, got_suffix + got_suffix_len);
07be84bf 645
31edb802 646 msym = record_minimal_symbol (reader, string_buffer,
02e169e2
PA
647 true, address, mst_slot_got_plt,
648 msym_section, objfile);
07be84bf 649 if (msym)
d9eaeb59 650 SET_MSYMBOL_SIZE (msym, ptr_size);
07be84bf 651 }
07be84bf
JK
652}
653
654/* The data pointer is htab_t for gnu_ifunc_record_cache_unchecked. */
655
8127a2fa
TT
656static const struct objfile_key<htab, htab_deleter>
657 elf_objfile_gnu_ifunc_cache_data;
07be84bf
JK
658
659/* Map function names to CORE_ADDR in elf_objfile_gnu_ifunc_cache_data. */
660
661struct 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
671static hashval_t
672elf_gnu_ifunc_cache_hash (const void *a_voidp)
673{
9a3c8263
SM
674 const struct elf_gnu_ifunc_cache *a
675 = (const struct elf_gnu_ifunc_cache *) a_voidp;
07be84bf
JK
676
677 return htab_hash_string (a->name);
678}
679
680/* htab_eq for elf_objfile_gnu_ifunc_cache_data. */
681
682static int
683elf_gnu_ifunc_cache_eq (const void *a_voidp, const void *b_voidp)
684{
9a3c8263
SM
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;
07be84bf
JK
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
701static int
702elf_gnu_ifunc_record_cache (const char *name, CORE_ADDR addr)
703{
7cbd4a93 704 struct bound_minimal_symbol msym;
07be84bf
JK
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);
7cbd4a93 711 if (msym.minsym == NULL)
07be84bf 712 return 0;
77e371c0 713 if (BMSYMBOL_VALUE_ADDRESS (msym) != addr)
07be84bf 714 return 0;
e27d198c 715 objfile = msym.objfile;
07be84bf
JK
716
717 /* If .plt jumps back to .plt the symbol is still deferred for later
1adeb822 718 resolution and it has no use for GDB. */
c9d95fa3 719 const char *target_name = msym.minsym->linkage_name ();
1adeb822
PA
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)
07be84bf
JK
726 return 0;
727
8127a2fa 728 htab = elf_objfile_gnu_ifunc_cache_data.get (objfile);
07be84bf
JK
729 if (htab == NULL)
730 {
8127a2fa
TT
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);
07be84bf
JK
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);
224c3ddb
SM
741 entry_p
742 = (struct elf_gnu_ifunc_cache *) obstack_finish (&objfile->objfile_obstack);
07be84bf
JK
743
744 slot = htab_find_slot (htab, entry_p, INSERT);
745 if (*slot != NULL)
746 {
9a3c8263
SM
747 struct elf_gnu_ifunc_cache *entry_found_p
748 = (struct elf_gnu_ifunc_cache *) *slot;
08feed99 749 struct gdbarch *gdbarch = objfile->arch ();
07be84bf
JK
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
776static int
777elf_gnu_ifunc_resolve_by_cache (const char *name, CORE_ADDR *addr_p)
778{
2030c079 779 for (objfile *objfile : current_program_space->objfiles ())
07be84bf
JK
780 {
781 htab_t htab;
782 struct elf_gnu_ifunc_cache *entry_p;
783 void **slot;
784
8127a2fa 785 htab = elf_objfile_gnu_ifunc_cache_data.get (objfile);
07be84bf
JK
786 if (htab == NULL)
787 continue;
788
224c3ddb
SM
789 entry_p = ((struct elf_gnu_ifunc_cache *)
790 alloca (sizeof (*entry_p) + strlen (name)));
07be84bf
JK
791 strcpy (entry_p->name, name);
792
793 slot = htab_find_slot (htab, entry_p, NO_INSERT);
794 if (slot == NULL)
795 continue;
9a3c8263 796 entry_p = (struct elf_gnu_ifunc_cache *) *slot;
07be84bf
JK
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
815static int
816elf_gnu_ifunc_resolve_by_got (const char *name, CORE_ADDR *addr_p)
817{
818 char *name_got_plt;
07be84bf
JK
819 const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
820
224c3ddb 821 name_got_plt = (char *) alloca (strlen (name) + got_suffix_len + 1);
07be84bf
JK
822 sprintf (name_got_plt, "%s" SYMBOL_GOT_PLT_SUFFIX, name);
823
2030c079 824 for (objfile *objfile : current_program_space->objfiles ())
07be84bf
JK
825 {
826 bfd *obfd = objfile->obfd;
08feed99 827 struct gdbarch *gdbarch = objfile->arch ();
07be84bf
JK
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;
224c3ddb 832 gdb_byte *buf = (gdb_byte *) alloca (ptr_size);
3b7344d5 833 struct bound_minimal_symbol msym;
07be84bf
JK
834
835 msym = lookup_minimal_symbol (name_got_plt, NULL, objfile);
3b7344d5 836 if (msym.minsym == NULL)
07be84bf 837 continue;
3b7344d5 838 if (MSYMBOL_TYPE (msym.minsym) != mst_slot_got_plt)
07be84bf 839 continue;
77e371c0 840 pointer_address = BMSYMBOL_VALUE_ADDRESS (msym);
07be84bf
JK
841
842 plt = bfd_get_section_by_name (obfd, ".plt");
843 if (plt == NULL)
844 continue;
845
3b7344d5 846 if (MSYMBOL_SIZE (msym.minsym) != ptr_size)
07be84bf
JK
847 continue;
848 if (target_read_memory (pointer_address, buf, ptr_size) != 0)
849 continue;
850 addr = extract_typed_address (buf, ptr_type);
8b88a78e
PA
851 addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
852 current_top_target ());
4b7d1f7f 853 addr = gdbarch_addr_bits_remove (gdbarch, addr);
07be84bf 854
07be84bf 855 if (elf_gnu_ifunc_record_cache (name, addr))
28f4fa4d
PA
856 {
857 if (addr_p != NULL)
858 *addr_p = addr;
859 return 1;
860 }
07be84bf
JK
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
ececd218 868 is not NULL) and the function returns true. It returns false otherwise.
07be84bf
JK
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
ececd218 873static bool
07be84bf
JK
874elf_gnu_ifunc_resolve_name (const char *name, CORE_ADDR *addr_p)
875{
876 if (elf_gnu_ifunc_resolve_by_cache (name, addr_p))
ececd218 877 return true;
dea91a5c 878
07be84bf 879 if (elf_gnu_ifunc_resolve_by_got (name, addr_p))
ececd218 880 return true;
07be84bf 881
ececd218 882 return false;
07be84bf
JK
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
890static CORE_ADDR
891elf_gnu_ifunc_resolve_addr (struct gdbarch *gdbarch, CORE_ADDR pc)
892{
2c02bd72 893 const char *name_at_pc;
07be84bf
JK
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;
e1b2624a
AA
897 CORE_ADDR hwcap = 0;
898 struct value *hwcap_val;
07be84bf
JK
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);
1a088441 912 VALUE_LVAL (function) = lval_memory;
07be84bf
JK
913 set_value_address (function, pc);
914
e1b2624a
AA
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. */
07be84bf 918
8b88a78e 919 target_auxv_search (current_top_target (), AT_HWCAP, &hwcap);
e1b2624a
AA
920 hwcap_val = value_from_longest (builtin_type (gdbarch)
921 ->builtin_unsigned_long, hwcap);
e71585ff 922 address_val = call_function_by_hand (function, NULL, hwcap_val);
07be84bf 923 address = value_as_address (address_val);
8b88a78e 924 address = gdbarch_convert_from_func_ptr_addr (gdbarch, address, current_top_target ());
4b7d1f7f 925 address = gdbarch_addr_bits_remove (gdbarch, address);
07be84bf
JK
926
927 if (name_at_pc)
928 elf_gnu_ifunc_record_cache (name_at_pc, address);
929
930 return address;
931}
932
0e30163f
JK
933/* Handle inferior hit of bp_gnu_ifunc_resolver, see its definition. */
934
935static void
936elf_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);
00431a78 942 int thread_id = inferior_thread ()->global_num;
0e30163f
JK
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 {
0e30163f
JK
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
51abb421 964 symtab_and_line sal;
0e30163f
JK
965 sal.pspace = current_inferior ()->pspace;
966 sal.pc = prev_pc;
967 sal.section = find_pc_overlay (sal.pc);
968 sal.explicit_pc = 1;
454dafbd
TT
969 b_return
970 = set_momentary_breakpoint (get_frame_arch (prev_frame), sal,
971 prev_frame_id,
972 bp_gnu_ifunc_resolver_return).release ();
0e30163f 973
c70a6932
JK
974 /* set_momentary_breakpoint invalidates PREV_FRAME. */
975 prev_frame = NULL;
976
0e30163f
JK
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
986static void
987elf_gnu_ifunc_resolver_return_stop (struct breakpoint *b)
988{
00431a78 989 thread_info *thread = inferior_thread ();
0e30163f
JK
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);
00431a78 993 struct regcache *regcache = get_thread_regcache (thread);
6a3a010b 994 struct value *func_func;
0e30163f
JK
995 struct value *value;
996 CORE_ADDR resolved_address, resolved_pc;
0e30163f
JK
997
998 gdb_assert (b->type == bp_gnu_ifunc_resolver_return);
999
0e30163f
JK
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);
6a3a010b
MR
1020 gdb_assert (b->loc->next == NULL);
1021
1022 func_func = allocate_value (func_func_type);
1a088441 1023 VALUE_LVAL (func_func) = lval_memory;
6a3a010b
MR
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,
8b88a78e 1032 current_top_target ());
4b7d1f7f 1033 resolved_pc = gdbarch_addr_bits_remove (gdbarch, resolved_pc);
0e30163f 1034
f8eba3c6 1035 gdb_assert (current_program_space == b->pspace || b->pspace == NULL);
d28cd78a 1036 elf_gnu_ifunc_record_cache (event_location_to_string (b->location.get ()),
f00aae0f 1037 resolved_pc);
0e30163f 1038
0e30163f 1039 b->type = bp_breakpoint;
6c5b2ebe 1040 update_breakpoint_locations (b, current_program_space,
79188d8d
PA
1041 find_function_start_sal (resolved_pc, NULL, true),
1042 {});
0e30163f
JK
1043}
1044
2750ef27
TT
1045/* A helper function for elf_symfile_read that reads the minimal
1046 symbols. */
c906108c
SS
1047
1048static void
5f6cac40
TT
1049elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
1050 const struct elfinfo *ei)
c906108c 1051{
63524580 1052 bfd *synth_abfd, *abfd = objfile->obfd;
62553543
EZ
1053 long symcount = 0, dynsymcount = 0, synthcount, storage_needed;
1054 asymbol **symbol_table = NULL, **dyn_symbol_table = NULL;
1055 asymbol *synthsyms;
c906108c 1056
45cfd468
DE
1057 if (symtab_create_debug)
1058 {
1059 fprintf_unfiltered (gdb_stdlog,
1060 "Reading minimal symbols of objfile %s ...\n",
4262abfb 1061 objfile_name (objfile));
45cfd468
DE
1062 }
1063
5f6cac40
TT
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
30d1f018
WP
1071 && ei->mdebugsect == NULL
1072 && ei->ctfsect == NULL)
5f6cac40
TT
1073 {
1074 if (symtab_create_debug)
1075 fprintf_unfiltered (gdb_stdlog,
1076 "... minimal symbols previously read\n");
1077 return;
1078 }
1079
d25e8719 1080 minimal_symbol_reader reader (objfile);
c906108c 1081
18a94d75 1082 /* Process the normal ELF symbol table first. */
c906108c 1083
62553543
EZ
1084 storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
1085 if (storage_needed < 0)
3e43a32a
MS
1086 error (_("Can't read symbols from %s: %s"),
1087 bfd_get_filename (objfile->obfd),
62553543
EZ
1088 bfd_errmsg (bfd_get_error ()));
1089
1090 if (storage_needed > 0)
1091 {
80c57053
JK
1092 /* Memory gets permanently referenced from ABFD after
1093 bfd_canonicalize_symtab so it must not get freed before ABFD gets. */
1094
224c3ddb 1095 symbol_table = (asymbol **) bfd_alloc (abfd, storage_needed);
62553543
EZ
1096 symcount = bfd_canonicalize_symtab (objfile->obfd, symbol_table);
1097
1098 if (symcount < 0)
3e43a32a
MS
1099 error (_("Can't read symbols from %s: %s"),
1100 bfd_get_filename (objfile->obfd),
62553543
EZ
1101 bfd_errmsg (bfd_get_error ()));
1102
ce6c454e
TT
1103 elf_symtab_read (reader, objfile, ST_REGULAR, symcount, symbol_table,
1104 false);
62553543 1105 }
c906108c
SS
1106
1107 /* Add the dynamic symbols. */
1108
62553543
EZ
1109 storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd);
1110
1111 if (storage_needed > 0)
1112 {
3f1eff0a
JK
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
224c3ddb 1120 dyn_symbol_table = (asymbol **) bfd_alloc (abfd, storage_needed);
62553543
EZ
1121 dynsymcount = bfd_canonicalize_dynamic_symtab (objfile->obfd,
1122 dyn_symbol_table);
1123
1124 if (dynsymcount < 0)
3e43a32a
MS
1125 error (_("Can't read symbols from %s: %s"),
1126 bfd_get_filename (objfile->obfd),
62553543
EZ
1127 bfd_errmsg (bfd_get_error ()));
1128
8dddcb8f 1129 elf_symtab_read (reader, objfile, ST_DYNAMIC, dynsymcount,
ce6c454e 1130 dyn_symbol_table, false);
07be84bf 1131
8dddcb8f 1132 elf_rel_plt_read (reader, objfile, dyn_symbol_table);
62553543
EZ
1133 }
1134
63524580
JK
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
62553543
EZ
1152 /* Add synthetic symbols - for instance, names for any PLT entries. */
1153
63524580 1154 synthcount = bfd_get_synthetic_symtab (synth_abfd, symcount, symbol_table,
62553543
EZ
1155 dynsymcount, dyn_symbol_table,
1156 &synthsyms);
1157 if (synthcount > 0)
1158 {
62553543
EZ
1159 long i;
1160
b22e99fd 1161 std::unique_ptr<asymbol *[]>
d1e4a624 1162 synth_symbol_table (new asymbol *[synthcount]);
62553543 1163 for (i = 0; i < synthcount; i++)
9f20e3da 1164 synth_symbol_table[i] = synthsyms + i;
8dddcb8f 1165 elf_symtab_read (reader, objfile, ST_SYNTHETIC, synthcount,
ce6c454e 1166 synth_symbol_table.get (), true);
ba713918
AL
1167
1168 xfree (synthsyms);
1169 synthsyms = NULL;
62553543 1170 }
c906108c 1171
7134143f
DJ
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
d25e8719 1178 reader.install ();
7134143f 1179
4f00dda3
DE
1180 if (symtab_create_debug)
1181 fprintf_unfiltered (gdb_stdlog, "Done reading minimal symbols.\n");
2750ef27
TT
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
2750ef27
TT
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
1208static void
b15cc25c 1209elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
2750ef27
TT
1210{
1211 bfd *abfd = objfile->obfd;
1212 struct elfinfo ei;
30d1f018 1213 bool has_dwarf2 = true;
2750ef27 1214
2750ef27 1215 memset ((char *) &ei, 0, sizeof (ei));
97cbe998 1216 if (!(objfile->flags & OBJF_READNEVER))
08f93a1a
TT
1217 {
1218 for (asection *sect : gdb_bfd_sections (abfd))
1219 elf_locate_sections (sect, &ei);
1220 }
c906108c 1221
5f6cac40
TT
1222 elf_read_minimal_symbols (objfile, symfile_flags, &ei);
1223
c906108c
SS
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
0963b4bd 1234 an included file XCOFF info is useless. */
c906108c
SS
1235
1236 if (ei.mdebugsect)
1237 {
1238 const struct ecoff_debug_swap *swap;
1239
1240 /* .mdebug section, presumably holding ECOFF debugging
dda83cd7 1241 information. */
c906108c
SS
1242 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1243 if (swap)
d4f3574e 1244 elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
c906108c
SS
1245 }
1246 if (ei.stabsect)
1247 {
1248 asection *str_sect;
1249
1250 /* Stab sections have an associated string table that looks like
dda83cd7 1251 a separate section. */
c906108c
SS
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,
086df311 1257 ei.stabsect,
c906108c 1258 str_sect->filepos,
fd361982 1259 bfd_section_size (str_sect));
c906108c 1260 }
9291a0cd 1261
4b610737 1262 if (dwarf2_has_info (objfile, NULL, true))
b11896a5 1263 {
3c0aa29a 1264 dw_index_kind index_kind;
3e03848b 1265
3c0aa29a
PA
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 (objfile)
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
b11896a5
TT
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. */
8fb8eb5c 1288 objfile_set_sym_fns (objfile, &elf_sym_fns_lazy_psyms);
b11896a5
TT
1289 }
1290 }
3e43a32a
MS
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
8a92335b
JK
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 (objfile)
1304 && objfile->separate_debug_objfile == NULL
1305 && objfile->separate_debug_objfile_backlink == NULL)
9cce227f 1306 {
a8dbfd58 1307 std::string debugfile = find_separate_debug_file_by_buildid (objfile);
9cce227f 1308
a8dbfd58
SM
1309 if (debugfile.empty ())
1310 debugfile = find_separate_debug_file_by_debuglink (objfile);
9cce227f 1311
a8dbfd58 1312 if (!debugfile.empty ())
9cce227f 1313 {
b926417a 1314 gdb_bfd_ref_ptr debug_bfd (symfile_bfd_open (debugfile.c_str ()));
d7f9d729 1315
b926417a 1316 symbol_file_add_separate (debug_bfd.get (), debugfile.c_str (),
192b62ce 1317 symfile_flags, objfile);
9cce227f 1318 }
0d79cdc4
AM
1319 else
1320 {
30d1f018 1321 has_dwarf2 = false;
0d79cdc4
AM
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 }
30d1f018
WP
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);
9cce227f 1355 }
c906108c
SS
1356}
1357
b11896a5
TT
1358/* Callback to lazily read psymtabs. */
1359
1360static void
1361read_psyms (struct objfile *objfile)
1362{
251d32d9 1363 if (dwarf2_has_info (objfile, NULL))
b11896a5
TT
1364 dwarf2_build_psymtabs (objfile);
1365}
1366
c906108c
SS
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
caa429d8 1369 shared library). */
c906108c
SS
1370
1371static void
fba45db2 1372elf_new_init (struct objfile *ignore)
c906108c 1373{
c906108c
SS
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
0963b4bd 1379 objfile struct from the global list of known objfiles. */
c906108c
SS
1380
1381static void
fba45db2 1382elf_symfile_finish (struct objfile *objfile)
c906108c 1383{
c906108c
SS
1384}
1385
db7a9bcd 1386/* ELF specific initialization routine for reading symbols. */
c906108c
SS
1387
1388static void
fba45db2 1389elf_symfile_init (struct objfile *objfile)
c906108c
SS
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
55aa24fb
SDJ
1397/* Implementation of `sym_get_probes', as documented in symfile.h. */
1398
814cf43a 1399static const elfread_data &
55aa24fb
SDJ
1400elf_get_probes (struct objfile *objfile)
1401{
814cf43a 1402 elfread_data *probes_per_bfd = probe_key.get (objfile->obfd);
55aa24fb 1403
aaa63a31 1404 if (probes_per_bfd == NULL)
55aa24fb 1405 {
814cf43a 1406 probes_per_bfd = probe_key.emplace (objfile->obfd);
55aa24fb
SDJ
1407
1408 /* Here we try to gather information about all types of probes from the
1409 objfile. */
935676c9 1410 for (const static_probe_ops *ops : all_static_probe_ops)
0782db84 1411 ops->get_probes (probes_per_bfd, objfile);
55aa24fb
SDJ
1412 }
1413
aaa63a31 1414 return *probes_per_bfd;
55aa24fb
SDJ
1415}
1416
c906108c 1417\f
55aa24fb
SDJ
1418
1419/* Implementation `sym_probe_fns', as documented in symfile.h. */
1420
1421static const struct sym_probe_fns elf_probe_fns =
1422{
25f9533e 1423 elf_get_probes, /* sym_get_probes */
55aa24fb
SDJ
1424};
1425
c906108c
SS
1426/* Register that we are able to handle ELF object file formats. */
1427
00b5771c 1428static const struct sym_fns elf_sym_fns =
c906108c 1429{
3e43a32a
MS
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 */
b11896a5
TT
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. */
55aa24fb 1439 &elf_probe_fns, /* sym_probe_fns */
b11896a5
TT
1440 &psym_functions
1441};
1442
1443/* The same as elf_sym_fns, but not registered and lazily reads
1444 psymbols. */
1445
e36122e9 1446const struct sym_fns elf_sym_fns_lazy_psyms =
b11896a5 1447{
b11896a5
TT
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 */
3e43a32a
MS
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. */
55aa24fb 1457 &elf_probe_fns, /* sym_probe_fns */
00b5771c 1458 &psym_functions
c906108c
SS
1459};
1460
9291a0cd
TT
1461/* The same as elf_sym_fns, but not registered and uses the
1462 DWARF-specific GNU index rather than psymtab. */
e36122e9 1463const struct sym_fns elf_sym_fns_gdb_index =
9291a0cd 1464{
3e43a32a
MS
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 */
b11896a5 1468 NULL, /* sym_read_psymbols */
3e43a32a 1469 elf_symfile_finish, /* finished with file, cleanup */
405feb71 1470 default_symfile_offsets, /* Translate ext. to int. relocation */
3e43a32a
MS
1471 elf_symfile_segments, /* Get segment information from a file. */
1472 NULL,
1473 default_symfile_relocate, /* Relocate a debug section. */
55aa24fb 1474 &elf_probe_fns, /* sym_probe_fns */
00b5771c 1475 &dwarf2_gdb_index_functions
9291a0cd
TT
1476};
1477
927aa2e7
JK
1478/* The same as elf_sym_fns, but not registered and uses the
1479 DWARF-specific .debug_names index rather than psymtab. */
1480const 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 */
405feb71 1487 default_symfile_offsets, /* Translate ext. to int. relocation */
927aa2e7
JK
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
07be84bf
JK
1495/* STT_GNU_IFUNC resolver vector to be installed to gnu_ifunc_fns_p. */
1496
1497static const struct gnu_ifunc_fns elf_gnu_ifunc_fns =
1498{
1499 elf_gnu_ifunc_resolve_addr,
1500 elf_gnu_ifunc_resolve_name,
0e30163f
JK
1501 elf_gnu_ifunc_resolver_stop,
1502 elf_gnu_ifunc_resolver_return_stop
07be84bf
JK
1503};
1504
6c265988 1505void _initialize_elfread ();
c906108c 1506void
6c265988 1507_initialize_elfread ()
c906108c 1508{
c256e171 1509 add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns);
07be84bf 1510
07be84bf 1511 gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;
c906108c 1512}
This page took 2.139358 seconds and 4 git commands to generate.