Regenerate spu overlay and icache manager files
[deliverable/binutils-gdb.git] / gdb / elfread.c
1 /* Read ELF (Executable and Linking Format) object files for GDB.
2
3 Copyright (C) 1991-2014 Free Software Foundation, Inc.
4
5 Written by Fred Fish at Cygnus Support.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 #include "defs.h"
23 #include "bfd.h"
24 #include "elf-bfd.h"
25 #include "elf/common.h"
26 #include "elf/internal.h"
27 #include "elf/mips.h"
28 #include "symtab.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "buildsym.h"
32 #include "stabsread.h"
33 #include "gdb-stabs.h"
34 #include "complaints.h"
35 #include "demangle.h"
36 #include "psympriv.h"
37 #include "filenames.h"
38 #include "probe.h"
39 #include "arch-utils.h"
40 #include "gdbtypes.h"
41 #include "value.h"
42 #include "infcall.h"
43 #include "gdbthread.h"
44 #include "regcache.h"
45 #include "bcache.h"
46 #include "gdb_bfd.h"
47 #include "build-id.h"
48
49 extern void _initialize_elfread (void);
50
51 /* Forward declarations. */
52 static const struct sym_fns elf_sym_fns_gdb_index;
53 static const struct sym_fns elf_sym_fns_lazy_psyms;
54
55 /* The struct elfinfo is available only during ELF symbol table and
56 psymtab reading. It is destroyed at the completion of psymtab-reading.
57 It's local to elf_symfile_read. */
58
59 struct elfinfo
60 {
61 asection *stabsect; /* Section pointer for .stab section */
62 asection *mdebugsect; /* Section pointer for .mdebug section */
63 };
64
65 /* Per-BFD data for probe info. */
66
67 static const struct bfd_data *probe_key = NULL;
68
69 static void free_elfinfo (void *);
70
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
78 /* Locate the segments in ABFD. */
79
80 static struct symfile_segment_data *
81 elf_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
107 data = XCNEW (struct symfile_segment_data);
108 data->num_segments = num_segments;
109 data->segment_bases = XCNEWVEC (CORE_ADDR, num_segments);
110 data->segment_sizes = XCNEWVEC (CORE_ADDR, num_segments);
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);
119 data->segment_info = XCNEWVEC (int, num_sections);
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
134 && (vma - segments[j]->p_vaddr) < segments[j]->p_memsz)
135 {
136 data->segment_info[i] = j + 1;
137 break;
138 }
139
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)
151 warning (_("Loadable section \"%s\" outside of ELF segments"),
152 bfd_section_name (abfd, sect));
153 }
154
155 return data;
156 }
157
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
174 section flags to specify what kind of debug section it is.
175 -kingdon). */
176
177 static void
178 elf_locate_sections (bfd *ignore_abfd, asection *sectp, void *eip)
179 {
180 struct elfinfo *ei;
181
182 ei = (struct elfinfo *) eip;
183 if (strcmp (sectp->name, ".stab") == 0)
184 {
185 ei->stabsect = sectp;
186 }
187 else if (strcmp (sectp->name, ".mdebug") == 0)
188 {
189 ei->mdebugsect = sectp;
190 }
191 }
192
193 static struct minimal_symbol *
194 record_minimal_symbol (const char *name, int name_len, int copy_name,
195 CORE_ADDR address,
196 enum minimal_symbol_type ms_type,
197 asection *bfd_section, struct objfile *objfile)
198 {
199 struct gdbarch *gdbarch = get_objfile_arch (objfile);
200
201 if (ms_type == mst_text || ms_type == mst_file_text
202 || ms_type == mst_text_gnu_ifunc)
203 address = gdbarch_addr_bits_remove (gdbarch, address);
204
205 return prim_record_minimal_symbol_full (name, name_len, copy_name, address,
206 ms_type,
207 gdb_bfd_section_index (objfile->obfd,
208 bfd_section),
209 objfile);
210 }
211
212 /* Read the symbol table of an ELF file.
213
214 Given an objfile, a symbol table, and a flag indicating whether the
215 symbol table contains regular, dynamic, or synthetic symbols, add all
216 the global function and data symbols to the minimal symbol table.
217
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
222 in data structures hung off the objfile's private data. */
223
224 #define ST_REGULAR 0
225 #define ST_DYNAMIC 1
226 #define ST_SYNTHETIC 2
227
228 static void
229 elf_symtab_read (struct objfile *objfile, int type,
230 long number_of_symbols, asymbol **symbol_table,
231 int copy_names)
232 {
233 struct gdbarch *gdbarch = get_objfile_arch (objfile);
234 asymbol *sym;
235 long i;
236 CORE_ADDR symaddr;
237 CORE_ADDR offset;
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;
245 /* Name of filesym. This is either a constant string or is saved on
246 the objfile's filename cache. */
247 const char *filesymname = "";
248 struct dbx_symfile_info *dbx = DBX_SYMFILE_INFO (objfile);
249 int stripped = (bfd_get_symcount (objfile->obfd) == 0);
250
251 for (i = 0; i < number_of_symbols; i++)
252 {
253 sym = symbol_table[i];
254 if (sym->name == NULL || *sym->name == '\0')
255 {
256 /* Skip names that don't exist (shouldn't happen), or names
257 that are null strings (may happen). */
258 continue;
259 }
260
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))
265 {
266 if (gdbarch_record_special_symbol_p (gdbarch))
267 gdbarch_record_special_symbol (gdbarch, objfile, sym);
268 continue;
269 }
270
271 offset = ANOFFSET (objfile->section_offsets,
272 gdb_bfd_section_index (objfile->obfd, sym->section));
273 if (type == ST_DYNAMIC
274 && sym->section == bfd_und_section_ptr
275 && (sym->flags & BSF_FUNCTION))
276 {
277 struct minimal_symbol *msym;
278 bfd *abfd = objfile->obfd;
279 asection *sect;
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
287 the symbol. We are unable to find any meaningful address
288 for this symbol in the executable file, so we skip it. */
289 symaddr = sym->value;
290 if (symaddr == 0)
291 continue;
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
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
327 msym = record_minimal_symbol
328 (sym->name, strlen (sym->name), copy_names,
329 symaddr, mst_solib_trampoline, sect, objfile);
330 if (msym != NULL)
331 {
332 msym->filename = filesymname;
333 gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
334 }
335 continue;
336 }
337
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. */
341 if (type == ST_DYNAMIC && !stripped)
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)
348 {
349 sectinfo->next = dbx->stab_section_info;
350 dbx->stab_section_info = sectinfo;
351 sectinfo = NULL;
352 }
353 filesym = sym;
354 filesymname = bcache (filesym->name, strlen (filesym->name) + 1,
355 objfile->per_bfd->filename_cache);
356 }
357 else if (sym->flags & BSF_SECTION_SYM)
358 continue;
359 else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK
360 | BSF_GNU_UNIQUE))
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
366 interested in will have a section. */
367 /* Bfd symbols are section relative. */
368 symaddr = sym->value + sym->section->vma;
369 /* For non-absolute symbols, use the type of the section
370 they are relative to, to intuit text/data. Bfd provides
371 no way of figuring this out for absolute symbols. */
372 if (sym->section == bfd_abs_section_ptr)
373 {
374 /* This is a hack to get the minimal symbol type
375 right for Irix 5, which has absolute addresses
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. */
380 unsigned int shndx = type == ST_SYNTHETIC ? 0 :
381 ((elf_symbol_type *) sym)->internal_elf_sym.st_shndx;
382
383 switch (shndx)
384 {
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
399 symbols, relocate all others by section offset. */
400 if (ms_type != mst_abs)
401 {
402 if (sym->name[0] == '.')
403 continue;
404 }
405 }
406 else if (sym->section->flags & SEC_CODE)
407 {
408 if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
409 {
410 if (sym->flags & BSF_GNU_INDIRECT_FUNCTION)
411 ms_type = mst_text_gnu_ifunc;
412 else
413 ms_type = mst_text;
414 }
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)
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;
434 }
435 }
436 else if (sym->section->flags & SEC_ALLOC)
437 {
438 if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
439 {
440 if (sym->section->flags & SEC_LOAD)
441 {
442 ms_type = mst_data;
443 }
444 else
445 {
446 ms_type = mst_bss;
447 }
448 }
449 else if (sym->flags & BSF_LOCAL)
450 {
451 /* Named Local variable in a Data section.
452 Check its name for stabs-in-elf. */
453 int special_local_sect;
454
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)
464 {
465 /* Found a special local symbol. Allocate a
466 sectinfo, if needed, and fill it in. */
467 if (sectinfo == NULL)
468 {
469 int max_index;
470 size_t size;
471
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;
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. */
485 size = (sizeof (struct stab_section_info)
486 + (sizeof (CORE_ADDR) * max_index));
487 sectinfo = (struct stab_section_info *)
488 xmalloc (size);
489 memset (sectinfo, 0, size);
490 sectinfo->num_sections = max_index;
491 if (filesym == NULL)
492 {
493 complaint (&symfile_complaints,
494 _("elf/stab section information %s "
495 "without a preceding file symbol"),
496 sym->name);
497 }
498 else
499 {
500 sectinfo->filename =
501 (char *) filesym->name;
502 }
503 }
504 if (sectinfo->sections[special_local_sect] != 0)
505 complaint (&symfile_complaints,
506 _("duplicated elf/stab section "
507 "information for %s"),
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. */
513 if (sym->section != bfd_abs_section_ptr)
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;
525 }
526 else
527 {
528 ms_type = mst_file_bss;
529 }
530 }
531 else
532 {
533 ms_type = mst_unknown;
534 }
535 }
536 else
537 {
538 /* FIXME: Solaris2 shared libraries include lots of
539 odd "absolute" and "undefined" symbols, that play
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; */
543 continue; /* Skip this symbol. */
544 }
545 msym = record_minimal_symbol
546 (sym->name, strlen (sym->name), copy_names, symaddr,
547 ms_type, sym->section, objfile);
548
549 if (msym)
550 {
551 /* NOTE: uweigand-20071112: A synthetic symbol does not have an
552 ELF-private part. */
553 if (type != ST_SYNTHETIC)
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 }
559
560 msym->filename = filesymname;
561 gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
562 }
563
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
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 {
589 struct minimal_symbol *mtramp;
590
591 mtramp = record_minimal_symbol (sym->name, len - 4, 1,
592 symaddr,
593 mst_solib_trampoline,
594 sym->section, objfile);
595 if (mtramp)
596 {
597 SET_MSYMBOL_SIZE (mtramp, MSYMBOL_SIZE (msym));
598 mtramp->created_by_gdb = 1;
599 mtramp->filename = filesymname;
600 gdbarch_elf_make_msymbol_special (gdbarch, sym, mtramp);
601 }
602 }
603 }
604 }
605 }
606 }
607
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
615 static void
616 elf_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;
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;
626 struct gdbarch *gdbarch = get_objfile_arch (objfile);
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)
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 }
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 {
664 const char *name;
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
684 if (string_buffer_size < name_len + got_suffix_len + 1)
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,
691 got_suffix_len + 1);
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)
697 SET_MSYMBOL_SIZE (msym, ptr_size);
698 }
699
700 do_cleanups (back_to);
701 }
702
703 /* The data pointer is htab_t for gnu_ifunc_record_cache_unchecked. */
704
705 static 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
709 struct 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
719 static hashval_t
720 elf_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
729 static int
730 elf_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
746 static int
747 elf_gnu_ifunc_record_cache (const char *name, CORE_ADDR addr)
748 {
749 struct bound_minimal_symbol msym;
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);
757 if (msym.minsym == NULL)
758 return 0;
759 if (BMSYMBOL_VALUE_ADDRESS (msym) != addr)
760 return 0;
761 /* minimal symbols have always SYMBOL_OBJ_SECTION non-NULL. */
762 sect = MSYMBOL_OBJ_SECTION (msym.objfile, msym.minsym)->the_bfd_section;
763 objfile = msym.objfile;
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;
792 struct gdbarch *gdbarch = get_objfile_arch (objfile);
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
819 static int
820 elf_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
859 static int
860 elf_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;
872 struct gdbarch *gdbarch = get_objfile_arch (objfile);
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);
878 struct bound_minimal_symbol msym;
879
880 msym = lookup_minimal_symbol (name_got_plt, NULL, objfile);
881 if (msym.minsym == NULL)
882 continue;
883 if (MSYMBOL_TYPE (msym.minsym) != mst_slot_got_plt)
884 continue;
885 pointer_address = BMSYMBOL_VALUE_ADDRESS (msym);
886
887 plt = bfd_get_section_by_name (obfd, ".plt");
888 if (plt == NULL)
889 continue;
890
891 if (MSYMBOL_SIZE (msym.minsym) != ptr_size)
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);
898 addr = gdbarch_addr_bits_remove (gdbarch, addr);
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
916 static int
917 elf_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;
921
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
933 static CORE_ADDR
934 elf_gnu_ifunc_resolve_addr (struct gdbarch *gdbarch, CORE_ADDR pc)
935 {
936 const char *name_at_pc;
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);
962 address = gdbarch_addr_bits_remove (gdbarch, address);
963
964 if (name_at_pc)
965 elf_gnu_ifunc_record_cache (name_at_pc, address);
966
967 return address;
968 }
969
970 /* Handle inferior hit of bp_gnu_ifunc_resolver, see its definition. */
971
972 static void
973 elf_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
1012 /* set_momentary_breakpoint invalidates PREV_FRAME. */
1013 prev_frame = NULL;
1014
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
1024 static void
1025 elf_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);
1031 struct value *func_func;
1032 struct value *value;
1033 CORE_ADDR resolved_address, resolved_pc;
1034 struct symtab_and_line sal;
1035 struct symtabs_and_lines sals, sals_end;
1036
1037 gdb_assert (b->type == bp_gnu_ifunc_resolver_return);
1038
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);
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);
1071 resolved_pc = gdbarch_addr_bits_remove (gdbarch, resolved_pc);
1072
1073 gdb_assert (current_program_space == b->pspace || b->pspace == NULL);
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;
1079 sals_end.nelts = 0;
1080
1081 b->type = bp_breakpoint;
1082 update_breakpoint_locations (b, sals, sals_end);
1083 }
1084
1085 /* A helper function for elf_symfile_read that reads the minimal
1086 symbols. */
1087
1088 static void
1089 elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
1090 const struct elfinfo *ei)
1091 {
1092 bfd *synth_abfd, *abfd = objfile->obfd;
1093 struct cleanup *back_to;
1094 long symcount = 0, dynsymcount = 0, synthcount, storage_needed;
1095 asymbol **symbol_table = NULL, **dyn_symbol_table = NULL;
1096 asymbol *synthsyms;
1097 struct dbx_symfile_info *dbx;
1098
1099 if (symtab_create_debug)
1100 {
1101 fprintf_unfiltered (gdb_stdlog,
1102 "Reading minimal symbols of objfile %s ...\n",
1103 objfile_name (objfile));
1104 }
1105
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
1121 init_minimal_symbol_collection ();
1122 back_to = make_cleanup_discard_minimal_symbols ();
1123
1124 /* Allocate struct to keep track of the symfile. */
1125 dbx = XCNEW (struct dbx_symfile_info);
1126 set_objfile_data (objfile, dbx_objfile_data_key, dbx);
1127 make_cleanup (free_elfinfo, (void *) objfile);
1128
1129 /* Process the normal ELF symbol table first. This may write some
1130 chain of info into the dbx_symfile_info of the objfile, which can
1131 later be used by elfstab_offset_sections. */
1132
1133 storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
1134 if (storage_needed < 0)
1135 error (_("Can't read symbols from %s: %s"),
1136 bfd_get_filename (objfile->obfd),
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)
1146 error (_("Can't read symbols from %s: %s"),
1147 bfd_get_filename (objfile->obfd),
1148 bfd_errmsg (bfd_get_error ()));
1149
1150 elf_symtab_read (objfile, ST_REGULAR, symcount, symbol_table, 0);
1151 }
1152
1153 /* Add the dynamic symbols. */
1154
1155 storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd);
1156
1157 if (storage_needed > 0)
1158 {
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);
1167 dynsymcount = bfd_canonicalize_dynamic_symtab (objfile->obfd,
1168 dyn_symbol_table);
1169
1170 if (dynsymcount < 0)
1171 error (_("Can't read symbols from %s: %s"),
1172 bfd_get_filename (objfile->obfd),
1173 bfd_errmsg (bfd_get_error ()));
1174
1175 elf_symtab_read (objfile, ST_DYNAMIC, dynsymcount, dyn_symbol_table, 0);
1176
1177 elf_rel_plt_read (objfile, dyn_symbol_table);
1178 }
1179
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
1197 /* Add synthetic symbols - for instance, names for any PLT entries. */
1198
1199 synthcount = bfd_get_synthetic_symtab (synth_abfd, symcount, symbol_table,
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++)
1210 synth_symbol_table[i] = synthsyms + i;
1211 make_cleanup (xfree, synth_symbol_table);
1212 elf_symtab_read (objfile, ST_SYNTHETIC, synthcount,
1213 synth_symbol_table, 1);
1214 }
1215
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
1225 if (symtab_create_debug)
1226 fprintf_unfiltered (gdb_stdlog, "Done reading minimal symbols.\n");
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
1257 static void
1258 elf_symfile_read (struct objfile *objfile, int symfile_flags)
1259 {
1260 bfd *abfd = objfile->obfd;
1261 struct elfinfo ei;
1262
1263 memset ((char *) &ei, 0, sizeof (ei));
1264 bfd_map_over_sections (abfd, elf_locate_sections, (void *) & ei);
1265
1266 elf_read_minimal_symbols (objfile, symfile_flags, &ei);
1267
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
1278 an included file XCOFF info is useless. */
1279
1280 if (ei.mdebugsect)
1281 {
1282 const struct ecoff_debug_swap *swap;
1283
1284 /* .mdebug section, presumably holding ECOFF debugging
1285 information. */
1286 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1287 if (swap)
1288 elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
1289 }
1290 if (ei.stabsect)
1291 {
1292 asection *str_sect;
1293
1294 /* Stab sections have an associated string table that looks like
1295 a separate section. */
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,
1301 ei.stabsect,
1302 str_sect->filepos,
1303 bfd_section_size (abfd, str_sect));
1304 }
1305
1306 if (dwarf2_has_info (objfile, NULL))
1307 {
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))
1314 objfile_set_sym_fns (objfile, &elf_sym_fns_gdb_index);
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. */
1321 objfile_set_sym_fns (objfile, &elf_sym_fns_lazy_psyms);
1322 }
1323 }
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
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)
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 {
1349 struct cleanup *cleanup = make_cleanup (xfree, debugfile);
1350 bfd *abfd = symfile_bfd_open (debugfile);
1351
1352 make_cleanup_bfd_unref (abfd);
1353 symbol_file_add_separate (abfd, debugfile, symfile_flags, objfile);
1354 do_cleanups (cleanup);
1355 }
1356 }
1357 }
1358
1359 /* Callback to lazily read psymtabs. */
1360
1361 static void
1362 read_psyms (struct objfile *objfile)
1363 {
1364 if (dwarf2_has_info (objfile, NULL))
1365 dwarf2_build_psymtabs (objfile);
1366 }
1367
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. */
1370
1371 static void
1372 free_elfinfo (void *objp)
1373 {
1374 struct objfile *objfile = (struct objfile *) objp;
1375 struct dbx_symfile_info *dbxinfo = DBX_SYMFILE_INFO (objfile);
1376 struct stab_section_info *ssi, *nssi;
1377
1378 ssi = dbxinfo->stab_section_info;
1379 while (ssi)
1380 {
1381 nssi = ssi->next;
1382 xfree (ssi);
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
1394 We reinitialize buildsym, since we may be reading stabs from an ELF
1395 file. */
1396
1397 static void
1398 elf_new_init (struct objfile *ignore)
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
1407 objfile struct from the global list of known objfiles. */
1408
1409 static void
1410 elf_symfile_finish (struct objfile *objfile)
1411 {
1412 dwarf2_free_objfile (objfile);
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
1422 just a stub. */
1423
1424 static void
1425 elf_symfile_init (struct objfile *objfile)
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
1441 void
1442 elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst)
1443 {
1444 const char *filename = pst->filename;
1445 struct dbx_symfile_info *dbx = DBX_SYMFILE_INFO (objfile);
1446 struct stab_section_info *maybe = dbx->stab_section_info;
1447 struct stab_section_info *questionable = 0;
1448 int i;
1449
1450 /* The ELF symbol info doesn't include path names, so strip the path
1451 (if any) from the psymtab filename. */
1452 filename = lbasename (filename);
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,
1456 and if we unchained when we found a match. */
1457 for (; maybe; maybe = maybe->next)
1458 {
1459 if (filename[0] == maybe->filename[0]
1460 && filename_cmp (filename, maybe->filename) == 0)
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;
1466 questionable = maybe; /* Might use it later. */
1467 }
1468 }
1469
1470 if (maybe == 0 && questionable != 0)
1471 {
1472 complaint (&symfile_complaints,
1473 _("elf/stab section information questionable for %s"),
1474 filename);
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 *)
1483 obstack_alloc (&objfile->objfile_obstack,
1484 SIZEOF_N_SECTION_OFFSETS (objfile->num_sections));
1485 for (i = 0; i < maybe->num_sections; i++)
1486 (pst->section_offsets)->offsets[i] = maybe->sections[i];
1487 return;
1488 }
1489
1490 /* We were unable to find any offsets for this file. Complain. */
1491 if (dbx->stab_section_info) /* If there *is* any info, */
1492 complaint (&symfile_complaints,
1493 _("elf/stab section information missing for %s"), filename);
1494 }
1495
1496 /* Implementation of `sym_get_probes', as documented in symfile.h. */
1497
1498 static VEC (probe_p) *
1499 elf_get_probes (struct objfile *objfile)
1500 {
1501 VEC (probe_p) *probes_per_bfd;
1502
1503 /* Have we parsed this objfile's probes already? */
1504 probes_per_bfd = bfd_data (objfile->obfd, probe_key);
1505
1506 if (!probes_per_bfd)
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++)
1515 probe_ops->get_probes (&probes_per_bfd, objfile);
1516
1517 if (probes_per_bfd == NULL)
1518 {
1519 VEC_reserve (probe_p, probes_per_bfd, 1);
1520 gdb_assert (probes_per_bfd != NULL);
1521 }
1522
1523 set_bfd_data (objfile->obfd, probe_key, probes_per_bfd);
1524 }
1525
1526 return probes_per_bfd;
1527 }
1528
1529 /* Helper function used to free the space allocated for storing SystemTap
1530 probe information. */
1531
1532 static void
1533 probe_key_free (bfd *abfd, void *d)
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
1545 \f
1546
1547 /* Implementation `sym_probe_fns', as documented in symfile.h. */
1548
1549 static const struct sym_probe_fns elf_probe_fns =
1550 {
1551 elf_get_probes, /* sym_get_probes */
1552 };
1553
1554 /* Register that we are able to handle ELF object file formats. */
1555
1556 static const struct sym_fns elf_sym_fns =
1557 {
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 */
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. */
1567 &elf_probe_fns, /* sym_probe_fns */
1568 &psym_functions
1569 };
1570
1571 /* The same as elf_sym_fns, but not registered and lazily reads
1572 psymbols. */
1573
1574 static const struct sym_fns elf_sym_fns_lazy_psyms =
1575 {
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 */
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. */
1585 &elf_probe_fns, /* sym_probe_fns */
1586 &psym_functions
1587 };
1588
1589 /* The same as elf_sym_fns, but not registered and uses the
1590 DWARF-specific GNU index rather than psymtab. */
1591 static const struct sym_fns elf_sym_fns_gdb_index =
1592 {
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 */
1596 NULL, /* sym_read_psymbols */
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. */
1602 &elf_probe_fns, /* sym_probe_fns */
1603 &dwarf2_gdb_index_functions
1604 };
1605
1606 /* STT_GNU_IFUNC resolver vector to be installed to gnu_ifunc_fns_p. */
1607
1608 static const struct gnu_ifunc_fns elf_gnu_ifunc_fns =
1609 {
1610 elf_gnu_ifunc_resolve_addr,
1611 elf_gnu_ifunc_resolve_name,
1612 elf_gnu_ifunc_resolver_stop,
1613 elf_gnu_ifunc_resolver_return_stop
1614 };
1615
1616 void
1617 _initialize_elfread (void)
1618 {
1619 probe_key = register_bfd_data_with_cleanup (NULL, probe_key_free);
1620 add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns);
1621
1622 elf_objfile_gnu_ifunc_cache_data = register_objfile_data ();
1623 gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;
1624 }
This page took 0.062028 seconds and 4 git commands to generate.