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