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