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