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