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