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