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