1 /* Read ELF (Executable and Linking Format) object files for GDB.
2 
3    Copyright (C) 1991-2024 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 "bfd.h"
23 #include "elf-bfd.h"
24 #include "elf/common.h"
25 #include "elf/internal.h"
26 #include "elf/mips.h"
27 #include "extract-store-integer.h"
28 #include "symtab.h"
29 #include "symfile.h"
30 #include "objfiles.h"
31 #include "stabsread.h"
32 #include "demangle.h"
33 #include "filenames.h"
34 #include "probe.h"
35 #include "arch-utils.h"
36 #include "gdbtypes.h"
37 #include "value.h"
38 #include "infcall.h"
39 #include "gdbthread.h"
40 #include "inferior.h"
41 #include "regcache.h"
42 #include "bcache.h"
43 #include "gdb_bfd.h"
44 #include "location.h"
45 #include "auxv.h"
46 #include "mdebugread.h"
47 #include "ctfread.h"
48 #include <string_view>
49 #include "gdbsupport/scoped_fd.h"
50 #include "dwarf2/public.h"
51 #include "cli/cli-cmds.h"
52 
53 /* Whether ctf should always be read, or only if no dwarf is present.  */
54 static bool always_read_ctf;
55 
56 /* The struct elfinfo is available only during ELF symbol table and
57    psymtab reading.  It is destroyed at the completion of psymtab-reading.
58    It's local to elf_symfile_read.  */
59 
60 struct elfinfo
61   {
62     asection *stabsect;                 /* Section pointer for .stab section */
63     asection *mdebugsect;     /* Section pointer for .mdebug section */
64     asection *ctfsect;                  /* Section pointer for .ctf section */
65   };
66 
67 /* Type for per-BFD data.  */
68 
69 typedef std::vector<std::unique_ptr<probe>> elfread_data;
70 
71 /* Per-BFD data for probe info.  */
72 
73 static const registry<bfd>::key<elfread_data> probe_key;
74 
75 /* Minimal symbols located at the GOT entries for .plt - that is the real
76    pointer where the given entry will jump to.  It gets updated by the real
77    function address during lazy ld.so resolving in the inferior.  These
78    minimal symbols are indexed for <tab>-completion.  */
79 
80 #define SYMBOL_GOT_PLT_SUFFIX "@got.plt"
81 
82 /* Locate the segments in ABFD.  */
83 
84 static symfile_segment_data_up
elf_symfile_segments(bfd * abfd)85 elf_symfile_segments (bfd *abfd)
86 {
87   Elf_Internal_Phdr *phdrs, **segments;
88   long phdrs_size;
89   int num_phdrs, num_segments, num_sections, i;
90   asection *sect;
91 
92   phdrs_size = bfd_get_elf_phdr_upper_bound (abfd);
93   if (phdrs_size == -1)
94     return NULL;
95 
96   phdrs = (Elf_Internal_Phdr *) alloca (phdrs_size);
97   num_phdrs = bfd_get_elf_phdrs (abfd, phdrs);
98   if (num_phdrs == -1)
99     return NULL;
100 
101   num_segments = 0;
102   segments = XALLOCAVEC (Elf_Internal_Phdr *, num_phdrs);
103   for (i = 0; i < num_phdrs; i++)
104     if (phdrs[i].p_type == PT_LOAD)
105       segments[num_segments++] = &phdrs[i];
106 
107   if (num_segments == 0)
108     return NULL;
109 
110   symfile_segment_data_up data (new symfile_segment_data);
111   data->segments.reserve (num_segments);
112 
113   for (i = 0; i < num_segments; i++)
114     data->segments.emplace_back (segments[i]->p_vaddr, segments[i]->p_memsz);
115 
116   num_sections = bfd_count_sections (abfd);
117 
118   /* All elements are initialized to 0 (map to no segment).  */
119   data->segment_info.resize (num_sections);
120 
121   for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
122     {
123       int j;
124 
125       if ((bfd_section_flags (sect) & SEC_ALLOC) == 0)
126           continue;
127 
128       Elf_Internal_Shdr *this_hdr = &elf_section_data (sect)->this_hdr;
129 
130       for (j = 0; j < num_segments; j++)
131           if (ELF_SECTION_IN_SEGMENT (this_hdr, segments[j]))
132             {
133               data->segment_info[i] = j + 1;
134               break;
135             }
136 
137       /* We should have found a segment for every non-empty section.
138            If we haven't, we will not relocate this section by any
139            offsets we apply to the segments.  As an exception, do not
140            warn about SHT_NOBITS sections; in normal ELF execution
141            environments, SHT_NOBITS means zero-initialized and belongs
142            in a segment, but in no-OS environments some tools (e.g. ARM
143            RealView) use SHT_NOBITS for uninitialized data.  Since it is
144            uninitialized, it doesn't need a program header.  Such
145            binaries are not relocatable.  */
146 
147       /* Exclude debuginfo files from this warning, too, since those
148            are often not strictly compliant with the standard. See, e.g.,
149            ld/24717 for more discussion.  */
150       if (!is_debuginfo_file (abfd)
151             && bfd_section_size (sect) > 0 && j == num_segments
152             && (bfd_section_flags (sect) & SEC_LOAD) != 0)
153           warning (_("Loadable section \"%s\" outside of ELF segments\n  in %s"),
154                      bfd_section_name (sect), bfd_get_filename (abfd));
155     }
156 
157   return data;
158 }
159 
160 /* We are called once per section from elf_symfile_read.  We
161    need to examine each section we are passed, check to see
162    if it is something we are interested in processing, and
163    if so, stash away some access information for the section.
164 
165    For now we recognize the dwarf debug information sections and
166    line number sections from matching their section names.  The
167    ELF definition is no real help here since it has no direct
168    knowledge of DWARF (by design, so any debugging format can be
169    used).
170 
171    We also recognize the ".stab" sections used by the Sun compilers
172    released with Solaris 2.
173 
174    FIXME: The section names should not be hardwired strings (what
175    should they be?  I don't think most object file formats have enough
176    section flags to specify what kind of debug section it is.
177    -kingdon).  */
178 
179 static void
elf_locate_sections(asection * sectp,struct elfinfo * ei)180 elf_locate_sections (asection *sectp, struct elfinfo *ei)
181 {
182   if (strcmp (sectp->name, ".stab") == 0)
183     {
184       ei->stabsect = sectp;
185     }
186   else if (strcmp (sectp->name, ".mdebug") == 0)
187     {
188       ei->mdebugsect = sectp;
189     }
190   else if (strcmp (sectp->name, ".ctf") == 0)
191     {
192       ei->ctfsect = sectp;
193     }
194 }
195 
196 static struct minimal_symbol *
record_minimal_symbol(minimal_symbol_reader & reader,std::string_view name,bool copy_name,unrelocated_addr address,enum minimal_symbol_type ms_type,asection * bfd_section,struct objfile * objfile)197 record_minimal_symbol (minimal_symbol_reader &reader,
198                            std::string_view name, bool copy_name,
199                            unrelocated_addr address,
200                            enum minimal_symbol_type ms_type,
201                            asection *bfd_section, struct objfile *objfile)
202 {
203   struct gdbarch *gdbarch = objfile->arch ();
204 
205   if (ms_type == mst_text || ms_type == mst_file_text
206       || ms_type == mst_text_gnu_ifunc)
207     address
208       = unrelocated_addr (gdbarch_addr_bits_remove (gdbarch,
209                                                                 CORE_ADDR (address)));
210 
211   /* We only setup section information for allocatable sections.  Usually
212      we'd only expect to find msymbols for allocatable sections, but if the
213      ELF is malformed then this might not be the case.  In that case don't
214      create an msymbol that references an uninitialised section object.  */
215   int section_index = 0;
216   if ((bfd_section_flags (bfd_section) & SEC_ALLOC) == SEC_ALLOC
217       || bfd_section == bfd_abs_section_ptr)
218     section_index = gdb_bfd_section_index (objfile->obfd.get (), bfd_section);
219 
220   return reader.record_full (name, copy_name, address, ms_type, section_index);
221 }
222 
223 /* Read the symbol table of an ELF file.
224 
225    Given an objfile, a symbol table, and a flag indicating whether the
226    symbol table contains regular, dynamic, or synthetic symbols, add all
227    the global function and data symbols to the minimal symbol table.
228 
229    In stabs-in-ELF, as implemented by Sun, there are some local symbols
230    defined in the ELF symbol table, which can be used to locate
231    the beginnings of sections from each ".o" file that was linked to
232    form the executable objfile.  We gather any such info and record it
233    in data structures hung off the objfile's private data.  */
234 
235 #define ST_REGULAR 0
236 #define ST_DYNAMIC 1
237 #define ST_SYNTHETIC 2
238 
239 static void
elf_symtab_read(minimal_symbol_reader & reader,struct objfile * objfile,int type,long number_of_symbols,asymbol ** symbol_table,bool copy_names)240 elf_symtab_read (minimal_symbol_reader &reader,
241                      struct objfile *objfile, int type,
242                      long number_of_symbols, asymbol **symbol_table,
243                      bool copy_names)
244 {
245   struct gdbarch *gdbarch = objfile->arch ();
246   asymbol *sym;
247   long i;
248   CORE_ADDR symaddr;
249   enum minimal_symbol_type ms_type;
250   /* Name of the last file symbol.  This is either a constant string or is
251      saved on the objfile's filename cache.  */
252   const char *filesymname = "";
253   int stripped = (bfd_get_symcount (objfile->obfd.get ()) == 0);
254   int elf_make_msymbol_special_p
255     = gdbarch_elf_make_msymbol_special_p (gdbarch);
256 
257   for (i = 0; i < number_of_symbols; i++)
258     {
259       sym = symbol_table[i];
260       if (sym->name == NULL || *sym->name == '\0')
261           {
262             /* Skip names that don't exist (shouldn't happen), or names
263                that are null strings (may happen).  */
264             continue;
265           }
266 
267       elf_symbol_type *elf_sym = (elf_symbol_type *) sym;
268 
269       /* Skip "special" symbols, e.g. ARM mapping symbols.  These are
270            symbols which do not correspond to objects in the symbol table,
271            but have some other target-specific meaning.  */
272       if (bfd_is_target_special_symbol (objfile->obfd.get (), sym))
273           {
274             if (gdbarch_record_special_symbol_p (gdbarch))
275               gdbarch_record_special_symbol (gdbarch, objfile, sym);
276             continue;
277           }
278 
279       if (type == ST_DYNAMIC
280             && sym->section == bfd_und_section_ptr
281             && (sym->flags & BSF_FUNCTION))
282           {
283             struct minimal_symbol *msym;
284             bfd *abfd = objfile->obfd.get ();
285             asection *sect;
286 
287             /* Symbol is a reference to a function defined in
288                a shared library.
289                If its value is non zero then it is usually the address
290                of the corresponding entry in the procedure linkage table,
291                plus the desired section offset.
292                If its value is zero then the dynamic linker has to resolve
293                the symbol.  We are unable to find any meaningful address
294                for this symbol in the executable file, so we skip it.  */
295             symaddr = sym->value;
296             if (symaddr == 0)
297               continue;
298 
299             /* sym->section is the undefined section.  However, we want to
300                record the section where the PLT stub resides with the
301                minimal symbol.  Search the section table for the one that
302                covers the stub's address.  */
303             for (sect = abfd->sections; sect != NULL; sect = sect->next)
304               {
305                 if ((bfd_section_flags (sect) & SEC_ALLOC) == 0)
306                     continue;
307 
308                 if (symaddr >= bfd_section_vma (sect)
309                       && symaddr < bfd_section_vma (sect)
310                                      + bfd_section_size (sect))
311                     break;
312               }
313             if (!sect)
314               continue;
315 
316             /* On ia64-hpux, we have discovered that the system linker
317                adds undefined symbols with nonzero addresses that cannot
318                be right (their address points inside the code of another
319                function in the .text section).  This creates problems
320                when trying to determine which symbol corresponds to
321                a given address.
322 
323                We try to detect those buggy symbols by checking which
324                section we think they correspond to.  Normally, PLT symbols
325                are stored inside their own section, and the typical name
326                for that section is ".plt".  So, if there is a ".plt"
327                section, and yet the section name of our symbol does not
328                start with ".plt", we ignore that symbol.  */
329             if (!startswith (sect->name, ".plt")
330                 && bfd_get_section_by_name (abfd, ".plt") != NULL)
331               continue;
332 
333             msym = record_minimal_symbol
334               (reader, sym->name, copy_names,
335                unrelocated_addr (symaddr),
336                mst_solib_trampoline, sect, objfile);
337             if (msym != NULL)
338               {
339                 msym->filename = filesymname;
340                 if (elf_make_msymbol_special_p)
341                     gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
342               }
343             continue;
344           }
345 
346       /* If it is a nonstripped executable, do not enter dynamic
347            symbols, as the dynamic symbol table is usually a subset
348            of the main symbol table.  */
349       if (type == ST_DYNAMIC && !stripped)
350           continue;
351       if (sym->flags & BSF_FILE)
352           filesymname = objfile->intern (sym->name);
353       else if (sym->flags & BSF_SECTION_SYM)
354           continue;
355       else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK
356                                    | BSF_GNU_UNIQUE))
357           {
358             struct minimal_symbol *msym;
359 
360             /* Select global/local/weak symbols.  Note that bfd puts abs
361                symbols in their own section, so all symbols we are
362                interested in will have a section.  */
363             /* Bfd symbols are section relative.  */
364             symaddr = sym->value + sym->section->vma;
365             /* For non-absolute symbols, use the type of the section
366                they are relative to, to intuit text/data.  Bfd provides
367                no way of figuring this out for absolute symbols.  */
368             if (sym->section == bfd_abs_section_ptr)
369               {
370                 /* This is a hack to get the minimal symbol type
371                      right for Irix 5, which has absolute addresses
372                      with special section indices for dynamic symbols.
373 
374                      NOTE: uweigand-20071112: Synthetic symbols do not
375                      have an ELF-private part, so do not touch those.  */
376                 unsigned int shndx = type == ST_SYNTHETIC ? 0 :
377                     elf_sym->internal_elf_sym.st_shndx;
378 
379                 switch (shndx)
380                     {
381                     case SHN_MIPS_TEXT:
382                       ms_type = mst_text;
383                       break;
384                     case SHN_MIPS_DATA:
385                       ms_type = mst_data;
386                       break;
387                     case SHN_MIPS_ACOMMON:
388                       ms_type = mst_bss;
389                       break;
390                     default:
391                       ms_type = mst_abs;
392                     }
393 
394                 /* If it is an Irix dynamic symbol, skip section name
395                      symbols, relocate all others by section offset.  */
396                 if (ms_type != mst_abs)
397                     {
398                       if (sym->name[0] == '.')
399                         continue;
400                     }
401               }
402             else if (sym->section->flags & SEC_CODE)
403               {
404                 if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
405                     {
406                       if (sym->flags & BSF_GNU_INDIRECT_FUNCTION)
407                         ms_type = mst_text_gnu_ifunc;
408                       else
409                         ms_type = mst_text;
410                     }
411                 /* The BSF_SYNTHETIC check is there to omit ppc64 function
412                      descriptors mistaken for static functions starting with 'L'.
413                      */
414                 else if ((sym->name[0] == '.' && sym->name[1] == 'L'
415                               && (sym->flags & BSF_SYNTHETIC) == 0)
416                            || ((sym->flags & BSF_LOCAL)
417                                  && sym->name[0] == '$'
418                                  && sym->name[1] == 'L'))
419                     /* Looks like a compiler-generated label.  Skip
420                        it.  The assembler should be skipping these (to
421                        keep executables small), but apparently with
422                        gcc on the (deleted) delta m88k SVR4, it loses.
423                        So to have us check too should be harmless (but
424                        I encourage people to fix this in the assembler
425                        instead of adding checks here).  */
426                     continue;
427                 else
428                     {
429                       ms_type = mst_file_text;
430                     }
431               }
432             else if (sym->section->flags & SEC_ALLOC)
433               {
434                 if (sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE))
435                     {
436                       if (sym->flags & BSF_GNU_INDIRECT_FUNCTION)
437                         {
438                           ms_type = mst_data_gnu_ifunc;
439                         }
440                       else if (sym->section->flags & SEC_LOAD)
441                         {
442                           ms_type = mst_data;
443                         }
444                       else
445                         {
446                           ms_type = mst_bss;
447                         }
448                     }
449                 else if (sym->flags & BSF_LOCAL)
450                     {
451                       if (sym->section->flags & SEC_LOAD)
452                         {
453                           ms_type = mst_file_data;
454                         }
455                       else
456                         {
457                           ms_type = mst_file_bss;
458                         }
459                     }
460                 else
461                     {
462                       ms_type = mst_unknown;
463                     }
464               }
465             else
466               {
467                 /* FIXME:  Solaris2 shared libraries include lots of
468                      odd "absolute" and "undefined" symbols, that play
469                      hob with actions like finding what function the PC
470                      is in.  Ignore them if they aren't text, data, or bss.  */
471                 /* ms_type = mst_unknown; */
472                 continue;     /* Skip this symbol.  */
473               }
474             msym = record_minimal_symbol
475               (reader, sym->name, copy_names, unrelocated_addr (symaddr),
476                ms_type, sym->section, objfile);
477 
478             if (msym)
479               {
480                 /* NOTE: uweigand-20071112: A synthetic symbol does not have an
481                      ELF-private part.  */
482                 if (type != ST_SYNTHETIC)
483                     {
484                       /* Pass symbol size field in via BFD.  FIXME!!!  */
485                       msym->set_size (elf_sym->internal_elf_sym.st_size);
486                     }
487 
488                 msym->filename = filesymname;
489                 if (elf_make_msymbol_special_p)
490                     gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
491               }
492 
493             /* If we see a default versioned symbol, install it under
494                its version-less name.  */
495             if (msym != NULL)
496               {
497                 const char *atsign = strchr (sym->name, '@');
498                 bool is_at_symbol = atsign != nullptr && atsign > sym->name;
499                 bool is_plt = is_at_symbol && strcmp (atsign, "@plt") == 0;
500                 int len = is_at_symbol ? atsign - sym->name : 0;
501 
502                 if (is_at_symbol
503                       && !is_plt
504                       && (elf_sym->version & VERSYM_HIDDEN) == 0)
505                     record_minimal_symbol (reader,
506                                                std::string_view (sym->name, len),
507                                                true, unrelocated_addr (symaddr),
508                                                ms_type, sym->section, objfile);
509                 else if (is_plt)
510                     {
511                       /* For @plt symbols, also record a trampoline to the
512                          destination symbol.  The @plt symbol will be used
513                          in disassembly, and the trampoline will be used
514                          when we are trying to find the target.  */
515                       if (ms_type == mst_text && type == ST_SYNTHETIC)
516                         {
517                           struct minimal_symbol *mtramp;
518 
519                           mtramp = record_minimal_symbol
520                               (reader, std::string_view (sym->name, len), true,
521                                unrelocated_addr (symaddr),
522                                mst_solib_trampoline, sym->section, objfile);
523                           if (mtramp)
524                               {
525                                 mtramp->set_size (msym->size());
526                                 mtramp->created_by_gdb = 1;
527                                 mtramp->filename = filesymname;
528                                 if (elf_make_msymbol_special_p)
529                                   gdbarch_elf_make_msymbol_special (gdbarch,
530                                                                             sym, mtramp);
531                               }
532                         }
533                     }
534               }
535           }
536     }
537 }
538 
539 /* Build minimal symbols named `function@got.plt' (see SYMBOL_GOT_PLT_SUFFIX)
540    for later look ups of which function to call when user requests
541    a STT_GNU_IFUNC function.  As the STT_GNU_IFUNC type is found at the target
542    library defining `function' we cannot yet know while reading OBJFILE which
543    of the SYMBOL_GOT_PLT_SUFFIX entries will be needed and later
544    DYN_SYMBOL_TABLE is no longer easily available for OBJFILE.  */
545 
546 static void
elf_rel_plt_read(minimal_symbol_reader & reader,struct objfile * objfile,asymbol ** dyn_symbol_table)547 elf_rel_plt_read (minimal_symbol_reader &reader,
548                       struct objfile *objfile, asymbol **dyn_symbol_table)
549 {
550   bfd *obfd = objfile->obfd.get ();
551   const struct elf_backend_data *bed = get_elf_backend_data (obfd);
552   asection *relplt, *got_plt;
553   bfd_size_type reloc_count, reloc;
554   struct gdbarch *gdbarch = objfile->arch ();
555   struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
556   size_t ptr_size = ptr_type->length ();
557 
558   if (objfile->separate_debug_objfile_backlink)
559     return;
560 
561   got_plt = bfd_get_section_by_name (obfd, ".got.plt");
562   if (got_plt == NULL)
563     {
564       /* For platforms where there is no separate .got.plt.  */
565       got_plt = bfd_get_section_by_name (obfd, ".got");
566       if (got_plt == NULL)
567           return;
568     }
569 
570   /* Depending on system, we may find jump slots in a relocation
571      section for either .got.plt or .plt.  */
572   asection *plt = bfd_get_section_by_name (obfd, ".plt");
573   int plt_elf_idx = (plt != NULL) ? elf_section_data (plt)->this_idx : -1;
574 
575   int got_plt_elf_idx = elf_section_data (got_plt)->this_idx;
576 
577   /* This search algorithm is from _bfd_elf_canonicalize_dynamic_reloc.  */
578   for (relplt = obfd->sections; relplt != NULL; relplt = relplt->next)
579     {
580       const auto &this_hdr = elf_section_data (relplt)->this_hdr;
581 
582       if (this_hdr.sh_type == SHT_REL || this_hdr.sh_type == SHT_RELA)
583           {
584             if (this_hdr.sh_info == plt_elf_idx
585                 || this_hdr.sh_info == got_plt_elf_idx)
586               break;
587           }
588     }
589   if (relplt == NULL)
590     return;
591 
592   if (! bed->s->slurp_reloc_table (obfd, relplt, dyn_symbol_table, TRUE))
593     return;
594 
595   std::string string_buffer;
596 
597   /* Does ADDRESS reside in SECTION of OBFD?  */
598   auto within_section = [obfd] (asection *section, CORE_ADDR address)
599     {
600       if (section == NULL)
601           return false;
602 
603       return (bfd_section_vma (section) <= address
604                 && (address < bfd_section_vma (section)
605                       + bfd_section_size (section)));
606     };
607 
608   reloc_count = relplt->size / elf_section_data (relplt)->this_hdr.sh_entsize;
609   for (reloc = 0; reloc < reloc_count; reloc++)
610     {
611       const char *name;
612       struct minimal_symbol *msym;
613       CORE_ADDR address;
614       const char *got_suffix = SYMBOL_GOT_PLT_SUFFIX;
615       const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
616 
617       name = bfd_asymbol_name (*relplt->relocation[reloc].sym_ptr_ptr);
618       address = relplt->relocation[reloc].address;
619 
620       asection *msym_section;
621 
622       /* Does the pointer reside in either the .got.plt or .plt
623            sections?  */
624       if (within_section (got_plt, address))
625           msym_section = got_plt;
626       else if (within_section (plt, address))
627           msym_section = plt;
628       else
629           continue;
630 
631       /* We cannot check if NAME is a reference to
632            mst_text_gnu_ifunc/mst_data_gnu_ifunc as in OBJFILE the
633            symbol is undefined and the objfile having NAME defined may
634            not yet have been loaded.  */
635 
636       string_buffer.assign (name);
637       string_buffer.append (got_suffix, got_suffix + got_suffix_len);
638 
639       msym = record_minimal_symbol (reader, string_buffer,
640                                             true, unrelocated_addr (address),
641                                             mst_slot_got_plt, msym_section, objfile);
642       if (msym)
643           msym->set_size (ptr_size);
644     }
645 }
646 
647 /* The data pointer is htab_t for gnu_ifunc_record_cache_unchecked.  */
648 
649 static const registry<objfile>::key<htab, htab_deleter>
650   elf_objfile_gnu_ifunc_cache_data;
651 
652 /* Map function names to CORE_ADDR in elf_objfile_gnu_ifunc_cache_data.  */
653 
654 struct elf_gnu_ifunc_cache
655 {
656   /* This is always a function entry address, not a function descriptor.  */
657   CORE_ADDR addr;
658 
659   char name[1];
660 };
661 
662 /* htab_hash for elf_objfile_gnu_ifunc_cache_data.  */
663 
664 static hashval_t
elf_gnu_ifunc_cache_hash(const void * a_voidp)665 elf_gnu_ifunc_cache_hash (const void *a_voidp)
666 {
667   const struct elf_gnu_ifunc_cache *a
668     = (const struct elf_gnu_ifunc_cache *) a_voidp;
669 
670   return htab_hash_string (a->name);
671 }
672 
673 /* htab_eq for elf_objfile_gnu_ifunc_cache_data.  */
674 
675 static int
elf_gnu_ifunc_cache_eq(const void * a_voidp,const void * b_voidp)676 elf_gnu_ifunc_cache_eq (const void *a_voidp, const void *b_voidp)
677 {
678   const struct elf_gnu_ifunc_cache *a
679     = (const struct elf_gnu_ifunc_cache *) a_voidp;
680   const struct elf_gnu_ifunc_cache *b
681     = (const struct elf_gnu_ifunc_cache *) b_voidp;
682 
683   return strcmp (a->name, b->name) == 0;
684 }
685 
686 /* Record the target function address of a STT_GNU_IFUNC function NAME is the
687    function entry address ADDR.  Return 1 if NAME and ADDR are considered as
688    valid and therefore they were successfully recorded, return 0 otherwise.
689 
690    Function does not expect a duplicate entry.  Use
691    elf_gnu_ifunc_resolve_by_cache first to check if the entry for NAME already
692    exists.  */
693 
694 static int
elf_gnu_ifunc_record_cache(const char * name,CORE_ADDR addr)695 elf_gnu_ifunc_record_cache (const char *name, CORE_ADDR addr)
696 {
697   struct bound_minimal_symbol msym;
698   struct objfile *objfile;
699   htab_t htab;
700   struct elf_gnu_ifunc_cache entry_local, *entry_p;
701   void **slot;
702 
703   msym = lookup_minimal_symbol_by_pc (addr);
704   if (msym.minsym == NULL)
705     return 0;
706   if (msym.value_address () != addr)
707     return 0;
708   objfile = msym.objfile;
709 
710   /* If .plt jumps back to .plt the symbol is still deferred for later
711      resolution and it has no use for GDB.  */
712   const char *target_name = msym.minsym->linkage_name ();
713   size_t len = strlen (target_name);
714 
715   /* Note we check the symbol's name instead of checking whether the
716      symbol is in the .plt section because some systems have @plt
717      symbols in the .text section.  */
718   if (len > 4 && strcmp (target_name + len - 4, "@plt") == 0)
719     return 0;
720 
721   if (strcmp (target_name, "_PROCEDURE_LINKAGE_TABLE_") == 0)
722     return 0;
723 
724   htab = elf_objfile_gnu_ifunc_cache_data.get (objfile);
725   if (htab == NULL)
726     {
727       htab = htab_create_alloc (1, elf_gnu_ifunc_cache_hash,
728                                         elf_gnu_ifunc_cache_eq,
729                                         NULL, xcalloc, xfree);
730       elf_objfile_gnu_ifunc_cache_data.set (objfile, htab);
731     }
732 
733   entry_local.addr = addr;
734   obstack_grow (&objfile->objfile_obstack, &entry_local,
735                     offsetof (struct elf_gnu_ifunc_cache, name));
736   obstack_grow_str0 (&objfile->objfile_obstack, name);
737   entry_p
738     = (struct elf_gnu_ifunc_cache *) obstack_finish (&objfile->objfile_obstack);
739 
740   slot = htab_find_slot (htab, entry_p, INSERT);
741   if (*slot != NULL)
742     {
743       struct elf_gnu_ifunc_cache *entry_found_p
744           = (struct elf_gnu_ifunc_cache *) *slot;
745       struct gdbarch *gdbarch = objfile->arch ();
746 
747       if (entry_found_p->addr != addr)
748           {
749             /* This case indicates buggy inferior program, the resolved address
750                should never change.  */
751 
752               warning (_("gnu-indirect-function \"%s\" has changed its resolved "
753                            "function_address from %s to %s"),
754                          name, paddress (gdbarch, entry_found_p->addr),
755                          paddress (gdbarch, addr));
756           }
757 
758       /* New ENTRY_P is here leaked/duplicate in the OBJFILE obstack.  */
759     }
760   *slot = entry_p;
761 
762   return 1;
763 }
764 
765 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
766    function NAME.  If the address is found it is stored to *ADDR_P (if ADDR_P
767    is not NULL) and the function returns 1.  It returns 0 otherwise.
768 
769    Only the elf_objfile_gnu_ifunc_cache_data hash table is searched by this
770    function.  */
771 
772 static int
elf_gnu_ifunc_resolve_by_cache(const char * name,CORE_ADDR * addr_p)773 elf_gnu_ifunc_resolve_by_cache (const char *name, CORE_ADDR *addr_p)
774 {
775   int found = 0;
776 
777   /* FIXME: we only search the initial namespace.
778 
779      To search other namespaces, we would need to provide context, e.g. in
780      form of an objfile in that namespace.  */
781   gdbarch_iterate_over_objfiles_in_search_order
782     (current_inferior ()->arch (),
783      [name, &addr_p, &found] (struct objfile *objfile)
784        {
785            htab_t htab;
786            elf_gnu_ifunc_cache *entry_p;
787            void **slot;
788 
789            htab = elf_objfile_gnu_ifunc_cache_data.get (objfile);
790            if (htab == NULL)
791              return 0;
792 
793            entry_p = ((elf_gnu_ifunc_cache *)
794                         alloca (sizeof (*entry_p) + strlen (name)));
795            strcpy (entry_p->name, name);
796 
797            slot = htab_find_slot (htab, entry_p, NO_INSERT);
798            if (slot == NULL)
799              return 0;
800            entry_p = (elf_gnu_ifunc_cache *) *slot;
801            gdb_assert (entry_p != NULL);
802 
803            if (addr_p)
804              *addr_p = entry_p->addr;
805 
806            found = 1;
807            return 1;
808        }, nullptr);
809 
810   return found;
811 }
812 
813 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
814    function NAME.  If the address is found it is stored to *ADDR_P (if ADDR_P
815    is not NULL) and the function returns 1.  It returns 0 otherwise.
816 
817    Only the SYMBOL_GOT_PLT_SUFFIX locations are searched by this function.
818    elf_gnu_ifunc_resolve_by_cache must have been already called for NAME to
819    prevent cache entries duplicates.  */
820 
821 static int
elf_gnu_ifunc_resolve_by_got(const char * name,CORE_ADDR * addr_p)822 elf_gnu_ifunc_resolve_by_got (const char *name, CORE_ADDR *addr_p)
823 {
824   char *name_got_plt;
825   const size_t got_suffix_len = strlen (SYMBOL_GOT_PLT_SUFFIX);
826   int found = 0;
827 
828   name_got_plt = (char *) alloca (strlen (name) + got_suffix_len + 1);
829   sprintf (name_got_plt, "%s" SYMBOL_GOT_PLT_SUFFIX, name);
830 
831   /* FIXME: we only search the initial namespace.
832 
833      To search other namespaces, we would need to provide context, e.g. in
834      form of an objfile in that namespace.  */
835   gdbarch_iterate_over_objfiles_in_search_order
836     (current_inferior ()->arch (),
837      [name, name_got_plt, &addr_p, &found] (struct objfile *objfile)
838        {
839            bfd *obfd = objfile->obfd.get ();
840            struct gdbarch *gdbarch = objfile->arch ();
841            type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
842            size_t ptr_size = ptr_type->length ();
843            CORE_ADDR pointer_address, addr;
844            asection *plt;
845            gdb_byte *buf = (gdb_byte *) alloca (ptr_size);
846            bound_minimal_symbol msym;
847 
848            msym = lookup_minimal_symbol (name_got_plt, NULL, objfile);
849            if (msym.minsym == NULL)
850              return 0;
851            if (msym.minsym->type () != mst_slot_got_plt)
852              return 0;
853            pointer_address = msym.value_address ();
854 
855            plt = bfd_get_section_by_name (obfd, ".plt");
856            if (plt == NULL)
857              return 0;
858 
859            if (msym.minsym->size () != ptr_size)
860              return 0;
861            if (target_read_memory (pointer_address, buf, ptr_size) != 0)
862              return 0;
863            addr = extract_typed_address (buf, ptr_type);
864            addr = gdbarch_convert_from_func_ptr_addr
865              (gdbarch, addr, current_inferior ()->top_target ());
866            addr = gdbarch_addr_bits_remove (gdbarch, addr);
867 
868            if (elf_gnu_ifunc_record_cache (name, addr))
869              {
870                if (addr_p != NULL)
871                  *addr_p = addr;
872 
873                found = 1;
874                return 1;
875              }
876 
877            return 0;
878        }, nullptr);
879 
880   return found;
881 }
882 
883 /* Try to find the target resolved function entry address of a STT_GNU_IFUNC
884    function NAME.  If the address is found it is stored to *ADDR_P (if ADDR_P
885    is not NULL) and the function returns true.  It returns false otherwise.
886 
887    Both the elf_objfile_gnu_ifunc_cache_data hash table and
888    SYMBOL_GOT_PLT_SUFFIX locations are searched by this function.  */
889 
890 static bool
elf_gnu_ifunc_resolve_name(const char * name,CORE_ADDR * addr_p)891 elf_gnu_ifunc_resolve_name (const char *name, CORE_ADDR *addr_p)
892 {
893   if (elf_gnu_ifunc_resolve_by_cache (name, addr_p))
894     return true;
895 
896   if (elf_gnu_ifunc_resolve_by_got (name, addr_p))
897     return true;
898 
899   return false;
900 }
901 
902 /* Call STT_GNU_IFUNC - a function returning addresss of a real function to
903    call.  PC is theSTT_GNU_IFUNC resolving function entry.  The value returned
904    is the entry point of the resolved STT_GNU_IFUNC target function to call.
905    */
906 
907 static CORE_ADDR
elf_gnu_ifunc_resolve_addr(struct gdbarch * gdbarch,CORE_ADDR pc)908 elf_gnu_ifunc_resolve_addr (struct gdbarch *gdbarch, CORE_ADDR pc)
909 {
910   const char *name_at_pc;
911   CORE_ADDR start_at_pc, address;
912   struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
913   struct value *function, *address_val;
914   CORE_ADDR hwcap = 0;
915   struct value *hwcap_val;
916 
917   /* Try first any non-intrusive methods without an inferior call.  */
918 
919   if (find_pc_partial_function (pc, &name_at_pc, &start_at_pc, NULL)
920       && start_at_pc == pc)
921     {
922       if (elf_gnu_ifunc_resolve_name (name_at_pc, &address))
923           return address;
924     }
925   else
926     name_at_pc = NULL;
927 
928   function = value::allocate (func_func_type);
929   function->set_lval (lval_memory);
930   function->set_address (pc);
931 
932   /* STT_GNU_IFUNC resolver functions usually receive the HWCAP vector as
933      parameter.  FUNCTION is the function entry address.  ADDRESS may be a
934      function descriptor.  */
935 
936   target_auxv_search (AT_HWCAP, &hwcap);
937   hwcap_val = value_from_longest (builtin_type (gdbarch)
938                                           ->builtin_unsigned_long, hwcap);
939   address_val = call_function_by_hand (function, NULL, hwcap_val);
940   address = value_as_address (address_val);
941   address = gdbarch_convert_from_func_ptr_addr
942     (gdbarch, address, current_inferior ()->top_target ());
943   address = gdbarch_addr_bits_remove (gdbarch, address);
944 
945   if (name_at_pc)
946     elf_gnu_ifunc_record_cache (name_at_pc, address);
947 
948   return address;
949 }
950 
951 /* Handle inferior hit of bp_gnu_ifunc_resolver, see its definition.  */
952 
953 static void
elf_gnu_ifunc_resolver_stop(code_breakpoint * b)954 elf_gnu_ifunc_resolver_stop (code_breakpoint *b)
955 {
956   struct breakpoint *b_return;
957   frame_info_ptr prev_frame = get_prev_frame (get_current_frame ());
958   struct frame_id prev_frame_id = get_stack_frame_id (prev_frame);
959   CORE_ADDR prev_pc = get_frame_pc (prev_frame);
960   int thread_id = inferior_thread ()->global_num;
961 
962   gdb_assert (b->type == bp_gnu_ifunc_resolver);
963 
964   for (b_return = b->related_breakpoint; b_return != b;
965        b_return = b_return->related_breakpoint)
966     {
967       gdb_assert (b_return->type == bp_gnu_ifunc_resolver_return);
968       gdb_assert (b_return->has_single_location ());
969       gdb_assert (frame_id_p (b_return->frame_id));
970 
971       if (b_return->thread == thread_id
972             && b_return->first_loc ().requested_address == prev_pc
973             && b_return->frame_id == prev_frame_id)
974           break;
975     }
976 
977   if (b_return == b)
978     {
979       /* No need to call find_pc_line for symbols resolving as this is only
980            a helper breakpointer never shown to the user.  */
981 
982       symtab_and_line sal;
983       sal.pspace = current_inferior ()->pspace;
984       sal.pc = prev_pc;
985       sal.section = find_pc_overlay (sal.pc);
986       sal.explicit_pc = 1;
987       b_return
988           = set_momentary_breakpoint (get_frame_arch (prev_frame), sal,
989                                             prev_frame_id,
990                                             bp_gnu_ifunc_resolver_return).release ();
991 
992 
993       /* Add new b_return to the ring list b->related_breakpoint.  */
994       gdb_assert (b_return->related_breakpoint == b_return);
995       b_return->related_breakpoint = b->related_breakpoint;
996       b->related_breakpoint = b_return;
997     }
998 }
999 
1000 /* Handle inferior hit of bp_gnu_ifunc_resolver_return, see its definition.  */
1001 
1002 static void
elf_gnu_ifunc_resolver_return_stop(code_breakpoint * b)1003 elf_gnu_ifunc_resolver_return_stop (code_breakpoint *b)
1004 {
1005   thread_info *thread = inferior_thread ();
1006   struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
1007   struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
1008   struct type *value_type = func_func_type->target_type ();
1009   struct regcache *regcache = get_thread_regcache (thread);
1010   struct value *func_func;
1011   struct value *value;
1012   CORE_ADDR resolved_address, resolved_pc;
1013 
1014   gdb_assert (b->type == bp_gnu_ifunc_resolver_return);
1015 
1016   while (b->related_breakpoint != b)
1017     {
1018       struct breakpoint *b_next = b->related_breakpoint;
1019 
1020       switch (b->type)
1021           {
1022           case bp_gnu_ifunc_resolver:
1023             break;
1024           case bp_gnu_ifunc_resolver_return:
1025             delete_breakpoint (b);
1026             break;
1027           default:
1028             internal_error (_("handle_inferior_event: Invalid "
1029                                   "gnu-indirect-function breakpoint type %d"),
1030                                 (int) b->type);
1031           }
1032       b = gdb::checked_static_cast<code_breakpoint *> (b_next);
1033     }
1034   gdb_assert (b->type == bp_gnu_ifunc_resolver);
1035   gdb_assert (b->has_single_location ());
1036 
1037   func_func = value::allocate (func_func_type);
1038   func_func->set_lval (lval_memory);
1039   func_func->set_address (b->first_loc ().related_address);
1040 
1041   value = value::allocate (value_type);
1042   gdbarch_return_value_as_value (gdbarch, func_func, value_type, regcache,
1043                                          &value, NULL);
1044   resolved_address = value_as_address (value);
1045   resolved_pc = gdbarch_convert_from_func_ptr_addr
1046     (gdbarch, resolved_address, current_inferior ()->top_target ());
1047   resolved_pc = gdbarch_addr_bits_remove (gdbarch, resolved_pc);
1048 
1049   gdb_assert (current_program_space == b->pspace || b->pspace == NULL);
1050   elf_gnu_ifunc_record_cache (b->locspec->to_string (), resolved_pc);
1051 
1052   b->type = bp_breakpoint;
1053   update_breakpoint_locations (b, current_program_space,
1054                                      find_function_start_sal (resolved_pc, NULL, true),
1055                                      {});
1056 }
1057 
1058 /* A helper function for elf_symfile_read that reads the minimal
1059    symbols.  */
1060 
1061 static void
elf_read_minimal_symbols(struct objfile * objfile,int symfile_flags,const struct elfinfo * ei)1062 elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
1063                                 const struct elfinfo *ei)
1064 {
1065   bfd *synth_abfd, *abfd = objfile->obfd.get ();
1066   long symcount = 0, dynsymcount = 0, synthcount, storage_needed;
1067   asymbol **symbol_table = NULL, **dyn_symbol_table = NULL;
1068   asymbol *synthsyms;
1069 
1070   symtab_create_debug_printf ("reading minimal symbols of objfile %s",
1071                                     objfile_name (objfile));
1072 
1073   /* If we already have minsyms, then we can skip some work here.
1074      However, if there were stabs or mdebug sections, we go ahead and
1075      redo all the work anyway, because the psym readers for those
1076      kinds of debuginfo need extra information found here.  This can
1077      go away once all types of symbols are in the per-BFD object.  */
1078   if (objfile->per_bfd->minsyms_read
1079       && ei->stabsect == NULL
1080       && ei->mdebugsect == NULL
1081       && ei->ctfsect == NULL)
1082     {
1083       symtab_create_debug_printf ("minimal symbols were previously read");
1084       return;
1085     }
1086 
1087   minimal_symbol_reader reader (objfile);
1088 
1089   /* Process the normal ELF symbol table first.  */
1090 
1091   storage_needed = bfd_get_symtab_upper_bound (objfile->obfd.get ());
1092   if (storage_needed < 0)
1093     error (_("Can't read symbols from %s: %s"),
1094              bfd_get_filename (objfile->obfd.get ()),
1095              bfd_errmsg (bfd_get_error ()));
1096 
1097   if (storage_needed > 0)
1098     {
1099       /* Memory gets permanently referenced from ABFD after
1100            bfd_canonicalize_symtab so it must not get freed before ABFD gets.  */
1101 
1102       symbol_table = (asymbol **) bfd_alloc (abfd, storage_needed);
1103       symcount = bfd_canonicalize_symtab (objfile->obfd.get (), symbol_table);
1104 
1105       if (symcount < 0)
1106           error (_("Can't read symbols from %s: %s"),
1107                  bfd_get_filename (objfile->obfd.get ()),
1108                  bfd_errmsg (bfd_get_error ()));
1109 
1110       elf_symtab_read (reader, objfile, ST_REGULAR, symcount, symbol_table,
1111                            false);
1112     }
1113 
1114   /* Add the dynamic symbols.  */
1115 
1116   storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd.get ());
1117 
1118   if (storage_needed > 0)
1119     {
1120       /* Memory gets permanently referenced from ABFD after
1121            bfd_get_synthetic_symtab so it must not get freed before ABFD gets.
1122            It happens only in the case when elf_slurp_reloc_table sees
1123            asection->relocation NULL.  Determining which section is asection is
1124            done by _bfd_elf_get_synthetic_symtab which is all a bfd
1125            implementation detail, though.  */
1126 
1127       dyn_symbol_table = (asymbol **) bfd_alloc (abfd, storage_needed);
1128       dynsymcount = bfd_canonicalize_dynamic_symtab (objfile->obfd.get (),
1129                                                                  dyn_symbol_table);
1130 
1131       if (dynsymcount < 0)
1132           error (_("Can't read symbols from %s: %s"),
1133                  bfd_get_filename (objfile->obfd.get ()),
1134                  bfd_errmsg (bfd_get_error ()));
1135 
1136       elf_symtab_read (reader, objfile, ST_DYNAMIC, dynsymcount,
1137                            dyn_symbol_table, false);
1138 
1139       elf_rel_plt_read (reader, objfile, dyn_symbol_table);
1140     }
1141 
1142   /* Contrary to binutils --strip-debug/--only-keep-debug the strip command from
1143      elfutils (eu-strip) moves even the .symtab section into the .debug file.
1144 
1145      bfd_get_synthetic_symtab on ppc64 for each function descriptor ELF symbol
1146      'name' creates a new BSF_SYNTHETIC ELF symbol '.name' with its code
1147      address.  But with eu-strip files bfd_get_synthetic_symtab would fail to
1148      read the code address from .opd while it reads the .symtab section from
1149      a separate debug info file as the .opd section is SHT_NOBITS there.
1150 
1151      With SYNTH_ABFD the .opd section will be read from the original
1152      backlinked binary where it is valid.  */
1153 
1154   if (objfile->separate_debug_objfile_backlink)
1155     synth_abfd = objfile->separate_debug_objfile_backlink->obfd.get ();
1156   else
1157     synth_abfd = abfd;
1158 
1159   /* Add synthetic symbols - for instance, names for any PLT entries.  */
1160 
1161   synthcount = bfd_get_synthetic_symtab (synth_abfd, symcount, symbol_table,
1162                                                    dynsymcount, dyn_symbol_table,
1163                                                    &synthsyms);
1164   if (synthcount > 0)
1165     {
1166       long i;
1167 
1168       std::unique_ptr<asymbol *[]>
1169           synth_symbol_table (new asymbol *[synthcount]);
1170       for (i = 0; i < synthcount; i++)
1171           synth_symbol_table[i] = synthsyms + i;
1172       elf_symtab_read (reader, objfile, ST_SYNTHETIC, synthcount,
1173                            synth_symbol_table.get (), true);
1174 
1175       xfree (synthsyms);
1176       synthsyms = NULL;
1177     }
1178 
1179   /* Install any minimal symbols that have been collected as the current
1180      minimal symbols for this objfile.  The debug readers below this point
1181      should not generate new minimal symbols; if they do it's their
1182      responsibility to install them.  "mdebug" appears to be the only one
1183      which will do this.  */
1184 
1185   reader.install ();
1186 
1187   symtab_create_debug_printf ("done reading minimal symbols");
1188 }
1189 
1190 /* Dwarf-specific helper for elf_symfile_read.  Return true if we managed to
1191    load dwarf debug info.  */
1192 
1193 static bool
elf_symfile_read_dwarf2(struct objfile * objfile,symfile_add_flags symfile_flags)1194 elf_symfile_read_dwarf2 (struct objfile *objfile,
1195                                symfile_add_flags symfile_flags)
1196 {
1197   bool has_dwarf2 = true;
1198 
1199   if (dwarf2_initialize_objfile (objfile, nullptr, true))
1200     {
1201       /* Nothing.  */
1202     }
1203   /* If the file has its own symbol tables it has no separate debug
1204      info.  `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to
1205      SYMTABS/PSYMTABS.        `.gnu_debuglink' may no longer be present with
1206      `.note.gnu.build-id'.
1207 
1208      .gnu_debugdata is !objfile::has_partial_symbols because it contains only
1209      .symtab, not .debug_* section.  But if we already added .gnu_debugdata as
1210      an objfile via find_separate_debug_file_in_section there was no separate
1211      debug info available.  Therefore do not attempt to search for another one,
1212      objfile->separate_debug_objfile->separate_debug_objfile GDB guarantees to
1213      be NULL and we would possibly violate it.    */
1214 
1215   else if (!objfile->has_partial_symbols ()
1216              && objfile->separate_debug_objfile == NULL
1217              && objfile->separate_debug_objfile_backlink == NULL)
1218     {
1219       if (objfile->find_and_add_separate_symbol_file (symfile_flags))
1220           gdb_assert (objfile->separate_debug_objfile != nullptr);
1221       else
1222           has_dwarf2 = false;
1223     }
1224 
1225   return has_dwarf2;
1226 }
1227 
1228 /* Scan and build partial symbols for a symbol file.
1229    We have been initialized by a call to elf_symfile_init, which
1230    currently does nothing.
1231 
1232    This function only does the minimum work necessary for letting the
1233    user "name" things symbolically; it does not read the entire symtab.
1234    Instead, it reads the external and static symbols and puts them in partial
1235    symbol tables.  When more extensive information is requested of a
1236    file, the corresponding partial symbol table is mutated into a full
1237    fledged symbol table by going back and reading the symbols
1238    for real.
1239 
1240    We look for sections with specific names, to tell us what debug
1241    format to look for:  FIXME!!!
1242 
1243    elfstab_build_psymtabs() handles STABS symbols;
1244    mdebug_build_psymtabs() handles ECOFF debugging information.
1245 
1246    Note that ELF files have a "minimal" symbol table, which looks a lot
1247    like a COFF symbol table, but has only the minimal information necessary
1248    for linking.  We process this also, and use the information to
1249    build gdb's minimal symbol table.  This gives us some minimal debugging
1250    capability even for files compiled without -g.  */
1251 
1252 static void
elf_symfile_read(struct objfile * objfile,symfile_add_flags symfile_flags)1253 elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
1254 {
1255   bfd *abfd = objfile->obfd.get ();
1256   struct elfinfo ei;
1257 
1258   memset ((char *) &ei, 0, sizeof (ei));
1259   if (!(objfile->flags & OBJF_READNEVER))
1260     {
1261       for (asection *sect : gdb_bfd_sections (abfd))
1262           elf_locate_sections (sect, &ei);
1263     }
1264 
1265   elf_read_minimal_symbols (objfile, symfile_flags, &ei);
1266 
1267   /* ELF debugging information is inserted into the psymtab in the
1268      order of least informative first - most informative last.  Since
1269      the psymtab table is searched `most recent insertion first' this
1270      increases the probability that more detailed debug information
1271      for a section is found.
1272 
1273      For instance, an object file might contain both .mdebug (XCOFF)
1274      and .debug_info (DWARF2) sections then .mdebug is inserted first
1275      (searched last) and DWARF2 is inserted last (searched first).  If
1276      we don't do this then the XCOFF info is found first - for code in
1277      an included file XCOFF info is useless.  */
1278 
1279   if (ei.mdebugsect)
1280     {
1281       const struct ecoff_debug_swap *swap;
1282 
1283       /* .mdebug section, presumably holding ECOFF debugging
1284            information.  */
1285       swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1286       if (swap)
1287           elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
1288     }
1289   if (ei.stabsect)
1290     {
1291       asection *str_sect;
1292 
1293       /* Stab sections have an associated string table that looks like
1294            a separate section.  */
1295       str_sect = bfd_get_section_by_name (abfd, ".stabstr");
1296 
1297       /* FIXME should probably warn about a stab section without a stabstr.  */
1298       if (str_sect)
1299           elfstab_build_psymtabs (objfile,
1300                                         ei.stabsect,
1301                                         str_sect->filepos,
1302                                         bfd_section_size (str_sect));
1303     }
1304 
1305   /* Read the CTF section only if there is no DWARF info.  */
1306   if (always_read_ctf && ei.ctfsect)
1307     {
1308       elfctf_build_psymtabs (objfile);
1309     }
1310 
1311   bool has_dwarf2 = elf_symfile_read_dwarf2 (objfile, symfile_flags);
1312 
1313   /* Read the CTF section only if there is no DWARF info.  */
1314   if (!always_read_ctf && !has_dwarf2 && ei.ctfsect)
1315     {
1316       elfctf_build_psymtabs (objfile);
1317     }
1318 
1319   /* Copy relocations are used by some ABIs using the ELF format, so
1320      set the objfile flag indicating this fact.  */
1321   objfile->object_format_has_copy_relocs = true;
1322 }
1323 
1324 /* Initialize anything that needs initializing when a completely new symbol
1325    file is specified (not just adding some symbols from another file, e.g. a
1326    shared library).  */
1327 
1328 static void
elf_new_init(struct objfile * ignore)1329 elf_new_init (struct objfile *ignore)
1330 {
1331 }
1332 
1333 /* Perform any local cleanups required when we are done with a particular
1334    objfile.  I.E, we are in the process of discarding all symbol information
1335    for an objfile, freeing up all memory held for it, and unlinking the
1336    objfile struct from the global list of known objfiles.  */
1337 
1338 static void
elf_symfile_finish(struct objfile * objfile)1339 elf_symfile_finish (struct objfile *objfile)
1340 {
1341 }
1342 
1343 /* ELF specific initialization routine for reading symbols.  */
1344 
1345 static void
elf_symfile_init(struct objfile * objfile)1346 elf_symfile_init (struct objfile *objfile)
1347 {
1348 }
1349 
1350 /* Implementation of `sym_get_probes', as documented in symfile.h.  */
1351 
1352 static const elfread_data &
elf_get_probes(struct objfile * objfile)1353 elf_get_probes (struct objfile *objfile)
1354 {
1355   elfread_data *probes_per_bfd = probe_key.get (objfile->obfd.get ());
1356 
1357   if (probes_per_bfd == NULL)
1358     {
1359       probes_per_bfd = probe_key.emplace (objfile->obfd.get ());
1360 
1361       /* Here we try to gather information about all types of probes from the
1362            objfile.  */
1363       for (const static_probe_ops *ops : all_static_probe_ops)
1364           ops->get_probes (probes_per_bfd, objfile);
1365     }
1366 
1367   return *probes_per_bfd;
1368 }
1369 
1370 
1371 
1372 /* Implementation `sym_probe_fns', as documented in symfile.h.  */
1373 
1374 static const struct sym_probe_fns elf_probe_fns =
1375 {
1376   elf_get_probes,                 /* sym_get_probes */
1377 };
1378 
1379 /* Register that we are able to handle ELF object file formats.  */
1380 
1381 static const struct sym_fns elf_sym_fns =
1382 {
1383   elf_new_init,                         /* init anything gbl to entire symtab */
1384   elf_symfile_init,           /* read initial info, setup for sym_read() */
1385   elf_symfile_read,           /* read a symbol file into symtab */
1386   elf_symfile_finish,                   /* finished with file, cleanup */
1387   default_symfile_offsets,    /* Translate ext. to int. relocation */
1388   elf_symfile_segments,                 /* Get segment information from a file.  */
1389   NULL,
1390   default_symfile_relocate,   /* Relocate a debug section.  */
1391   &elf_probe_fns,             /* sym_probe_fns */
1392 };
1393 
1394 /* STT_GNU_IFUNC resolver vector to be installed to gnu_ifunc_fns_p.  */
1395 
1396 static const struct gnu_ifunc_fns elf_gnu_ifunc_fns =
1397 {
1398   elf_gnu_ifunc_resolve_addr,
1399   elf_gnu_ifunc_resolve_name,
1400   elf_gnu_ifunc_resolver_stop,
1401   elf_gnu_ifunc_resolver_return_stop
1402 };
1403 
1404 void _initialize_elfread ();
1405 void
_initialize_elfread()1406 _initialize_elfread ()
1407 {
1408   add_symtab_fns (bfd_target_elf_flavour, &elf_sym_fns);
1409 
1410   gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;
1411 
1412   /* Add "set always-read-ctf on/off".  */
1413   add_setshow_boolean_cmd ("always-read-ctf", class_support, &always_read_ctf,
1414                                  _("\
1415 Set whether CTF is always read."),
1416                                  _("\
1417 Show whether CTF is always read."),
1418                                  _("\
1419 When off, CTF is only read if DWARF is not present.  When on, CTF is read\
1420  regardless of whether DWARF is present."),
1421                                  nullptr /* set_func */, nullptr /* show_func */,
1422                                  &setlist, &showlist);
1423 }
1424