xref: /dflybsd-src/contrib/gdb-7/gdb/elfread.c (revision c666f28aa7c82e205ee3709528b79a41e8cc5308)
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 
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 }
1633