OSDN Git Service

* cli/cli-cmds.c (shell_escape): Use lbasename.
[pf3gnuchains/sourceware.git] / gdb / elfread.c
1 /* Read ELF (Executable and Linking Format) object files for GDB.
2
3    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
5    Free Software Foundation, Inc.
6
7    Written by Fred Fish at Cygnus Support.
8
9    This file is part of GDB.
10
11    This program is free software; you can redistribute it and/or modify
12    it under the terms of the GNU General Public License as published by
13    the Free Software Foundation; either version 3 of the License, or
14    (at your option) any later version.
15
16    This program is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19    GNU General Public License for more details.
20
21    You should have received a copy of the GNU General Public License
22    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
23
24 #include "defs.h"
25 #include "bfd.h"
26 #include "gdb_string.h"
27 #include "elf-bfd.h"
28 #include "elf/common.h"
29 #include "elf/internal.h"
30 #include "elf/mips.h"
31 #include "symtab.h"
32 #include "symfile.h"
33 #include "objfiles.h"
34 #include "buildsym.h"
35 #include "stabsread.h"
36 #include "gdb-stabs.h"
37 #include "complaints.h"
38 #include "demangle.h"
39 #include "psympriv.h"
40
41 extern void _initialize_elfread (void);
42
43 /* Forward declarations.  */
44 static const struct sym_fns elf_sym_fns_gdb_index;
45 static const struct sym_fns elf_sym_fns_lazy_psyms;
46
47 /* The struct elfinfo is available only during ELF symbol table and
48    psymtab reading.  It is destroyed at the completion of psymtab-reading.
49    It's local to elf_symfile_read.  */
50
51 struct elfinfo
52   {
53     asection *stabsect;         /* Section pointer for .stab section */
54     asection *stabindexsect;    /* Section pointer for .stab.index section */
55     asection *mdebugsect;       /* Section pointer for .mdebug section */
56   };
57
58 static void free_elfinfo (void *);
59
60 /* Locate the segments in ABFD.  */
61
62 static struct symfile_segment_data *
63 elf_symfile_segments (bfd *abfd)
64 {
65   Elf_Internal_Phdr *phdrs, **segments;
66   long phdrs_size;
67   int num_phdrs, num_segments, num_sections, i;
68   asection *sect;
69   struct symfile_segment_data *data;
70
71   phdrs_size = bfd_get_elf_phdr_upper_bound (abfd);
72   if (phdrs_size == -1)
73     return NULL;
74
75   phdrs = alloca (phdrs_size);
76   num_phdrs = bfd_get_elf_phdrs (abfd, phdrs);
77   if (num_phdrs == -1)
78     return NULL;
79
80   num_segments = 0;
81   segments = alloca (sizeof (Elf_Internal_Phdr *) * num_phdrs);
82   for (i = 0; i < num_phdrs; i++)
83     if (phdrs[i].p_type == PT_LOAD)
84       segments[num_segments++] = &phdrs[i];
85
86   if (num_segments == 0)
87     return NULL;
88
89   data = XZALLOC (struct symfile_segment_data);
90   data->num_segments = num_segments;
91   data->segment_bases = XCALLOC (num_segments, CORE_ADDR);
92   data->segment_sizes = XCALLOC (num_segments, CORE_ADDR);
93
94   for (i = 0; i < num_segments; i++)
95     {
96       data->segment_bases[i] = segments[i]->p_vaddr;
97       data->segment_sizes[i] = segments[i]->p_memsz;
98     }
99
100   num_sections = bfd_count_sections (abfd);
101   data->segment_info = XCALLOC (num_sections, int);
102
103   for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
104     {
105       int j;
106       CORE_ADDR vma;
107
108       if ((bfd_get_section_flags (abfd, sect) & SEC_ALLOC) == 0)
109         continue;
110
111       vma = bfd_get_section_vma (abfd, sect);
112
113       for (j = 0; j < num_segments; j++)
114         if (segments[j]->p_memsz > 0
115             && vma >= segments[j]->p_vaddr
116             && (vma - segments[j]->p_vaddr) < segments[j]->p_memsz)
117           {
118             data->segment_info[i] = j + 1;
119             break;
120           }
121
122       /* We should have found a segment for every non-empty section.
123          If we haven't, we will not relocate this section by any
124          offsets we apply to the segments.  As an exception, do not
125          warn about SHT_NOBITS sections; in normal ELF execution
126          environments, SHT_NOBITS means zero-initialized and belongs
127          in a segment, but in no-OS environments some tools (e.g. ARM
128          RealView) use SHT_NOBITS for uninitialized data.  Since it is
129          uninitialized, it doesn't need a program header.  Such
130          binaries are not relocatable.  */
131       if (bfd_get_section_size (sect) > 0 && j == num_segments
132           && (bfd_get_section_flags (abfd, sect) & SEC_LOAD) != 0)
133         warning (_("Loadable segment \"%s\" outside of ELF segments"),
134                  bfd_section_name (abfd, sect));
135     }
136
137   return data;
138 }
139
140 /* We are called once per section from elf_symfile_read.  We
141    need to examine each section we are passed, check to see
142    if it is something we are interested in processing, and
143    if so, stash away some access information for the section.
144
145    For now we recognize the dwarf debug information sections and
146    line number sections from matching their section names.  The
147    ELF definition is no real help here since it has no direct
148    knowledge of DWARF (by design, so any debugging format can be
149    used).
150
151    We also recognize the ".stab" sections used by the Sun compilers
152    released with Solaris 2.
153
154    FIXME: The section names should not be hardwired strings (what
155    should they be?  I don't think most object file formats have enough
156    section flags to specify what kind of debug section it is.
157    -kingdon).  */
158
159 static void
160 elf_locate_sections (bfd *ignore_abfd, asection *sectp, void *eip)
161 {
162   struct elfinfo *ei;
163
164   ei = (struct elfinfo *) eip;
165   if (strcmp (sectp->name, ".stab") == 0)
166     {
167       ei->stabsect = sectp;
168     }
169   else if (strcmp (sectp->name, ".stab.index") == 0)
170     {
171       ei->stabindexsect = sectp;
172     }
173   else if (strcmp (sectp->name, ".mdebug") == 0)
174     {
175       ei->mdebugsect = sectp;
176     }
177 }
178
179 static struct minimal_symbol *
180 record_minimal_symbol (const char *name, int name_len, int copy_name,
181                        CORE_ADDR address,
182                        enum minimal_symbol_type ms_type,
183                        asection *bfd_section, struct objfile *objfile)
184 {
185   struct gdbarch *gdbarch = get_objfile_arch (objfile);
186
187   if (ms_type == mst_text || ms_type == mst_file_text)
188     address = gdbarch_smash_text_address (gdbarch, address);
189
190   return prim_record_minimal_symbol_full (name, name_len, copy_name, address,
191                                           ms_type, bfd_section->index,
192                                           bfd_section, objfile);
193 }
194
195 /*
196
197    LOCAL FUNCTION
198
199    elf_symtab_read -- read the symbol table of an ELF file
200
201    SYNOPSIS
202
203    void elf_symtab_read (struct objfile *objfile, int type,
204                          long number_of_symbols, asymbol **symbol_table)
205
206    DESCRIPTION
207
208    Given an objfile, a symbol table, and a flag indicating whether the
209    symbol table contains regular, dynamic, or synthetic symbols, add all
210    the global function and data symbols to the minimal symbol table.
211
212    In stabs-in-ELF, as implemented by Sun, there are some local symbols
213    defined in the ELF symbol table, which can be used to locate
214    the beginnings of sections from each ".o" file that was linked to
215    form the executable objfile.  We gather any such info and record it
216    in data structures hung off the objfile's private data.
217
218  */
219
220 #define ST_REGULAR 0
221 #define ST_DYNAMIC 1
222 #define ST_SYNTHETIC 2
223
224 static void
225 elf_symtab_read (struct objfile *objfile, int type,
226                  long number_of_symbols, asymbol **symbol_table,
227                  int copy_names)
228 {
229   struct gdbarch *gdbarch = get_objfile_arch (objfile);
230   asymbol *sym;
231   long i;
232   CORE_ADDR symaddr;
233   CORE_ADDR offset;
234   enum minimal_symbol_type ms_type;
235   /* If sectinfo is nonNULL, it contains section info that should end up
236      filed in the objfile.  */
237   struct stab_section_info *sectinfo = NULL;
238   /* If filesym is nonzero, it points to a file symbol, but we haven't
239      seen any section info for it yet.  */
240   asymbol *filesym = 0;
241   /* Name of filesym.  This is either a constant string or is saved on
242      the objfile's obstack.  */
243   char *filesymname = "";
244   struct dbx_symfile_info *dbx = objfile->deprecated_sym_stab_info;
245   int stripped = (bfd_get_symcount (objfile->obfd) == 0);
246   struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
247
248   for (i = 0; i < number_of_symbols; i++)
249     {
250       sym = symbol_table[i];
251       if (sym->name == NULL || *sym->name == '\0')
252         {
253           /* Skip names that don't exist (shouldn't happen), or names
254              that are null strings (may happen).  */
255           continue;
256         }
257
258       /* Skip "special" symbols, e.g. ARM mapping symbols.  These are
259          symbols which do not correspond to objects in the symbol table,
260          but have some other target-specific meaning.  */
261       if (bfd_is_target_special_symbol (objfile->obfd, sym))
262         {
263           if (gdbarch_record_special_symbol_p (gdbarch))
264             gdbarch_record_special_symbol (gdbarch, objfile, sym);
265           continue;
266         }
267
268       offset = ANOFFSET (objfile->section_offsets, sym->section->index);
269       if (type == ST_DYNAMIC
270           && sym->section == &bfd_und_section
271           && (sym->flags & BSF_FUNCTION))
272         {
273           struct minimal_symbol *msym;
274           bfd *abfd = objfile->obfd;
275           asection *sect; 
276
277           /* Symbol is a reference to a function defined in
278              a shared library.
279              If its value is non zero then it is usually the address
280              of the corresponding entry in the procedure linkage table,
281              plus the desired section offset.
282              If its value is zero then the dynamic linker has to resolve
283              the symbol.  We are unable to find any meaningful address
284              for this symbol in the executable file, so we skip it.  */
285           symaddr = sym->value;
286           if (symaddr == 0)
287             continue;
288
289           /* sym->section is the undefined section.  However, we want to
290              record the section where the PLT stub resides with the
291              minimal symbol.  Search the section table for the one that
292              covers the stub's address.  */
293           for (sect = abfd->sections; sect != NULL; sect = sect->next)
294             {
295               if ((bfd_get_section_flags (abfd, sect) & SEC_ALLOC) == 0)
296                 continue;
297
298               if (symaddr >= bfd_get_section_vma (abfd, sect)
299                   && symaddr < bfd_get_section_vma (abfd, sect)
300                                + bfd_get_section_size (sect))
301                 break;
302             }
303           if (!sect)
304             continue;
305
306           symaddr += ANOFFSET (objfile->section_offsets, sect->index);
307
308           msym = record_minimal_symbol
309             (sym->name, strlen (sym->name), copy_names,
310              symaddr, mst_solib_trampoline, sect, objfile);
311           if (msym != NULL)
312             msym->filename = filesymname;
313           continue;
314         }
315
316       /* If it is a nonstripped executable, do not enter dynamic
317          symbols, as the dynamic symbol table is usually a subset
318          of the main symbol table.  */
319       if (type == ST_DYNAMIC && !stripped)
320         continue;
321       if (sym->flags & BSF_FILE)
322         {
323           /* STT_FILE debugging symbol that helps stabs-in-elf debugging.
324              Chain any old one onto the objfile; remember new sym.  */
325           if (sectinfo != NULL)
326             {
327               sectinfo->next = dbx->stab_section_info;
328               dbx->stab_section_info = sectinfo;
329               sectinfo = NULL;
330             }
331           filesym = sym;
332           filesymname =
333             obsavestring ((char *) filesym->name, strlen (filesym->name),
334                           &objfile->objfile_obstack);
335         }
336       else if (sym->flags & BSF_SECTION_SYM)
337         continue;
338       else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK))
339         {
340           struct minimal_symbol *msym;
341
342           /* Select global/local/weak symbols.  Note that bfd puts abs
343              symbols in their own section, so all symbols we are
344              interested in will have a section.  */
345           /* Bfd symbols are section relative.  */
346           symaddr = sym->value + sym->section->vma;
347           /* Relocate all non-absolute and non-TLS symbols by the
348              section offset.  */
349           if (sym->section != &bfd_abs_section
350               && !(sym->section->flags & SEC_THREAD_LOCAL))
351             {
352               symaddr += offset;
353             }
354           /* For non-absolute symbols, use the type of the section
355              they are relative to, to intuit text/data.  Bfd provides
356              no way of figuring this out for absolute symbols.  */
357           if (sym->section == &bfd_abs_section)
358             {
359               /* This is a hack to get the minimal symbol type
360                  right for Irix 5, which has absolute addresses
361                  with special section indices for dynamic symbols.
362
363                  NOTE: uweigand-20071112: Synthetic symbols do not
364                  have an ELF-private part, so do not touch those.  */
365               unsigned int shndx = type == ST_SYNTHETIC ? 0 : 
366                 ((elf_symbol_type *) sym)->internal_elf_sym.st_shndx;
367
368               switch (shndx)
369                 {
370                 case SHN_MIPS_TEXT:
371                   ms_type = mst_text;
372                   break;
373                 case SHN_MIPS_DATA:
374                   ms_type = mst_data;
375                   break;
376                 case SHN_MIPS_ACOMMON:
377                   ms_type = mst_bss;
378                   break;
379                 default:
380                   ms_type = mst_abs;
381                 }
382
383               /* If it is an Irix dynamic symbol, skip section name
384                  symbols, relocate all others by section offset.  */
385               if (ms_type != mst_abs)
386                 {
387                   if (sym->name[0] == '.')
388                     continue;
389                   symaddr += offset;
390                 }
391             }
392           else if (sym->section->flags & SEC_CODE)
393             {
394               if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
395                 {
396                   ms_type = mst_text;
397                 }
398               else if ((sym->name[0] == '.' && sym->name[1] == 'L')
399                        || ((sym->flags & BSF_LOCAL)
400                            && sym->name[0] == '$'
401                            && sym->name[1] == 'L'))
402                 /* Looks like a compiler-generated label.  Skip
403                    it.  The assembler should be skipping these (to
404                    keep executables small), but apparently with
405                    gcc on the (deleted) delta m88k SVR4, it loses.
406                    So to have us check too should be harmless (but
407                    I encourage people to fix this in the assembler
408                    instead of adding checks here).  */
409                 continue;
410               else
411                 {
412                   ms_type = mst_file_text;
413                 }
414             }
415           else if (sym->section->flags & SEC_ALLOC)
416             {
417               if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
418                 {
419                   if (sym->section->flags & SEC_LOAD)
420                     {
421                       ms_type = mst_data;
422                     }
423                   else
424                     {
425                       ms_type = mst_bss;
426                     }
427                 }
428               else if (sym->flags & BSF_LOCAL)
429                 {
430                   /* Named Local variable in a Data section.
431                      Check its name for stabs-in-elf.  */
432                   int special_local_sect;
433
434                   if (strcmp ("Bbss.bss", sym->name) == 0)
435                     special_local_sect = SECT_OFF_BSS (objfile);
436                   else if (strcmp ("Ddata.data", sym->name) == 0)
437                     special_local_sect = SECT_OFF_DATA (objfile);
438                   else if (strcmp ("Drodata.rodata", sym->name) == 0)
439                     special_local_sect = SECT_OFF_RODATA (objfile);
440                   else
441                     special_local_sect = -1;
442                   if (special_local_sect >= 0)
443                     {
444                       /* Found a special local symbol.  Allocate a
445                          sectinfo, if needed, and fill it in.  */
446                       if (sectinfo == NULL)
447                         {
448                           int max_index;
449                           size_t size;
450
451                           max_index = SECT_OFF_BSS (objfile);
452                           if (objfile->sect_index_data > max_index)
453                             max_index = objfile->sect_index_data;
454                           if (objfile->sect_index_rodata > max_index)
455                             max_index = objfile->sect_index_rodata;
456
457                           /* max_index is the largest index we'll
458                              use into this array, so we must
459                              allocate max_index+1 elements for it.
460                              However, 'struct stab_section_info'
461                              already includes one element, so we
462                              need to allocate max_index aadditional
463                              elements.  */
464                           size = (sizeof (struct stab_section_info) 
465                                   + (sizeof (CORE_ADDR) * max_index));
466                           sectinfo = (struct stab_section_info *)
467                             xmalloc (size);
468                           make_cleanup (xfree, sectinfo);
469                           memset (sectinfo, 0, size);
470                           sectinfo->num_sections = max_index;
471                           if (filesym == NULL)
472                             {
473                               complaint (&symfile_complaints,
474                                          _("elf/stab section information %s "
475                                            "without a preceding file symbol"),
476                                          sym->name);
477                             }
478                           else
479                             {
480                               sectinfo->filename =
481                                 (char *) filesym->name;
482                             }
483                         }
484                       if (sectinfo->sections[special_local_sect] != 0)
485                         complaint (&symfile_complaints,
486                                    _("duplicated elf/stab section "
487                                      "information for %s"),
488                                    sectinfo->filename);
489                       /* BFD symbols are section relative.  */
490                       symaddr = sym->value + sym->section->vma;
491                       /* Relocate non-absolute symbols by the
492                          section offset.  */
493                       if (sym->section != &bfd_abs_section)
494                         symaddr += offset;
495                       sectinfo->sections[special_local_sect] = symaddr;
496                       /* The special local symbols don't go in the
497                          minimal symbol table, so ignore this one.  */
498                       continue;
499                     }
500                   /* Not a special stabs-in-elf symbol, do regular
501                      symbol processing.  */
502                   if (sym->section->flags & SEC_LOAD)
503                     {
504                       ms_type = mst_file_data;
505                     }
506                   else
507                     {
508                       ms_type = mst_file_bss;
509                     }
510                 }
511               else
512                 {
513                   ms_type = mst_unknown;
514                 }
515             }
516           else
517             {
518               /* FIXME:  Solaris2 shared libraries include lots of
519                  odd "absolute" and "undefined" symbols, that play 
520                  hob with actions like finding what function the PC
521                  is in.  Ignore them if they aren't text, data, or bss.  */
522               /* ms_type = mst_unknown; */
523               continue; /* Skip this symbol.  */
524             }
525           msym = record_minimal_symbol
526             (sym->name, strlen (sym->name), copy_names, symaddr,
527              ms_type, sym->section, objfile);
528
529           if (msym)
530             {
531               /* Pass symbol size field in via BFD.  FIXME!!!  */
532               elf_symbol_type *elf_sym;
533
534               /* NOTE: uweigand-20071112: A synthetic symbol does not have an
535                  ELF-private part.  However, in some cases (e.g. synthetic
536                  'dot' symbols on ppc64) the udata.p entry is set to point back
537                  to the original ELF symbol it was derived from.  Get the size
538                  from that symbol.  */ 
539               if (type != ST_SYNTHETIC)
540                 elf_sym = (elf_symbol_type *) sym;
541               else
542                 elf_sym = (elf_symbol_type *) sym->udata.p;
543
544               if (elf_sym)
545                 MSYMBOL_SIZE(msym) = elf_sym->internal_elf_sym.st_size;
546           
547               msym->filename = filesymname;
548               gdbarch_elf_make_msymbol_special (gdbarch, sym, msym);
549             }
550
551           /* For @plt symbols, also record a trampoline to the
552              destination symbol.  The @plt symbol will be used in
553              disassembly, and the trampoline will be used when we are
554              trying to find the target.  */
555           if (msym && ms_type == mst_text && type == ST_SYNTHETIC)
556             {
557               int len = strlen (sym->name);
558
559               if (len > 4 && strcmp (sym->name + len - 4, "@plt") == 0)
560                 {
561                   struct minimal_symbol *mtramp;
562
563                   mtramp = record_minimal_symbol (sym->name, len - 4, 1,
564                                                   symaddr,
565                                                   mst_solib_trampoline,
566                                                   sym->section, objfile);
567                   if (mtramp)
568                     {
569                       MSYMBOL_SIZE (mtramp) = MSYMBOL_SIZE (msym);
570                       mtramp->filename = filesymname;
571                       gdbarch_elf_make_msymbol_special (gdbarch, sym, mtramp);
572                     }
573                 }
574             }
575         }
576     }
577   do_cleanups (back_to);
578 }
579
580 struct build_id
581   {
582     size_t size;
583     gdb_byte data[1];
584   };
585
586 /* Locate NT_GNU_BUILD_ID from ABFD and return its content.  */
587
588 static struct build_id *
589 build_id_bfd_get (bfd *abfd)
590 {
591   struct build_id *retval;
592
593   if (!bfd_check_format (abfd, bfd_object)
594       || bfd_get_flavour (abfd) != bfd_target_elf_flavour
595       || elf_tdata (abfd)->build_id == NULL)
596     return NULL;
597
598   retval = xmalloc (sizeof *retval - 1 + elf_tdata (abfd)->build_id_size);
599   retval->size = elf_tdata (abfd)->build_id_size;
600   memcpy (retval->data, elf_tdata (abfd)->build_id, retval->size);
601
602   return retval;
603 }
604
605 /* Return if FILENAME has NT_GNU_BUILD_ID matching the CHECK value.  */
606
607 static int
608 build_id_verify (const char *filename, struct build_id *check)
609 {
610   bfd *abfd;
611   struct build_id *found = NULL;
612   int retval = 0;
613
614   /* We expect to be silent on the non-existing files.  */
615   abfd = bfd_open_maybe_remote (filename);
616   if (abfd == NULL)
617     return 0;
618
619   found = build_id_bfd_get (abfd);
620
621   if (found == NULL)
622     warning (_("File \"%s\" has no build-id, file skipped"), filename);
623   else if (found->size != check->size
624            || memcmp (found->data, check->data, found->size) != 0)
625     warning (_("File \"%s\" has a different build-id, file skipped"),
626              filename);
627   else
628     retval = 1;
629
630   gdb_bfd_close_or_warn (abfd);
631
632   xfree (found);
633
634   return retval;
635 }
636
637 static char *
638 build_id_to_debug_filename (struct build_id *build_id)
639 {
640   char *link, *debugdir, *retval = NULL;
641
642   /* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */
643   link = alloca (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
644                  + 2 * build_id->size + (sizeof ".debug" - 1) + 1);
645
646   /* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
647      cause "/.build-id/..." lookups.  */
648
649   debugdir = debug_file_directory;
650   do
651     {
652       char *s, *debugdir_end;
653       gdb_byte *data = build_id->data;
654       size_t size = build_id->size;
655
656       while (*debugdir == DIRNAME_SEPARATOR)
657         debugdir++;
658
659       debugdir_end = strchr (debugdir, DIRNAME_SEPARATOR);
660       if (debugdir_end == NULL)
661         debugdir_end = &debugdir[strlen (debugdir)];
662
663       memcpy (link, debugdir, debugdir_end - debugdir);
664       s = &link[debugdir_end - debugdir];
665       s += sprintf (s, "/.build-id/");
666       if (size > 0)
667         {
668           size--;
669           s += sprintf (s, "%02x", (unsigned) *data++);
670         }
671       if (size > 0)
672         *s++ = '/';
673       while (size-- > 0)
674         s += sprintf (s, "%02x", (unsigned) *data++);
675       strcpy (s, ".debug");
676
677       /* lrealpath() is expensive even for the usually non-existent files.  */
678       if (access (link, F_OK) == 0)
679         retval = lrealpath (link);
680
681       if (retval != NULL && !build_id_verify (retval, build_id))
682         {
683           xfree (retval);
684           retval = NULL;
685         }
686
687       if (retval != NULL)
688         break;
689
690       debugdir = debugdir_end;
691     }
692   while (*debugdir != 0);
693
694   return retval;
695 }
696
697 static char *
698 find_separate_debug_file_by_buildid (struct objfile *objfile)
699 {
700   struct build_id *build_id;
701
702   build_id = build_id_bfd_get (objfile->obfd);
703   if (build_id != NULL)
704     {
705       char *build_id_name;
706
707       build_id_name = build_id_to_debug_filename (build_id);
708       xfree (build_id);
709       /* Prevent looping on a stripped .debug file.  */
710       if (build_id_name != NULL && strcmp (build_id_name, objfile->name) == 0)
711         {
712           warning (_("\"%s\": separate debug info file has no debug info"),
713                    build_id_name);
714           xfree (build_id_name);
715         }
716       else if (build_id_name != NULL)
717         return build_id_name;
718     }
719   return NULL;
720 }
721
722 /* Scan and build partial symbols for a symbol file.
723    We have been initialized by a call to elf_symfile_init, which 
724    currently does nothing.
725
726    SECTION_OFFSETS is a set of offsets to apply to relocate the symbols
727    in each section.  We simplify it down to a single offset for all
728    symbols.  FIXME.
729
730    This function only does the minimum work necessary for letting the
731    user "name" things symbolically; it does not read the entire symtab.
732    Instead, it reads the external and static symbols and puts them in partial
733    symbol tables.  When more extensive information is requested of a
734    file, the corresponding partial symbol table is mutated into a full
735    fledged symbol table by going back and reading the symbols
736    for real.
737
738    We look for sections with specific names, to tell us what debug
739    format to look for:  FIXME!!!
740
741    elfstab_build_psymtabs() handles STABS symbols;
742    mdebug_build_psymtabs() handles ECOFF debugging information.
743
744    Note that ELF files have a "minimal" symbol table, which looks a lot
745    like a COFF symbol table, but has only the minimal information necessary
746    for linking.  We process this also, and use the information to
747    build gdb's minimal symbol table.  This gives us some minimal debugging
748    capability even for files compiled without -g.  */
749
750 static void
751 elf_symfile_read (struct objfile *objfile, int symfile_flags)
752 {
753   bfd *abfd = objfile->obfd;
754   struct elfinfo ei;
755   struct cleanup *back_to;
756   long symcount = 0, dynsymcount = 0, synthcount, storage_needed;
757   asymbol **symbol_table = NULL, **dyn_symbol_table = NULL;
758   asymbol *synthsyms;
759
760   init_minimal_symbol_collection ();
761   back_to = make_cleanup_discard_minimal_symbols ();
762
763   memset ((char *) &ei, 0, sizeof (ei));
764
765   /* Allocate struct to keep track of the symfile.  */
766   objfile->deprecated_sym_stab_info = (struct dbx_symfile_info *)
767     xmalloc (sizeof (struct dbx_symfile_info));
768   memset ((char *) objfile->deprecated_sym_stab_info,
769           0, sizeof (struct dbx_symfile_info));
770   make_cleanup (free_elfinfo, (void *) objfile);
771
772   /* Process the normal ELF symbol table first.  This may write some
773      chain of info into the dbx_symfile_info in
774      objfile->deprecated_sym_stab_info, which can later be used by
775      elfstab_offset_sections.  */
776
777   storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
778   if (storage_needed < 0)
779     error (_("Can't read symbols from %s: %s"),
780            bfd_get_filename (objfile->obfd),
781            bfd_errmsg (bfd_get_error ()));
782
783   if (storage_needed > 0)
784     {
785       symbol_table = (asymbol **) xmalloc (storage_needed);
786       make_cleanup (xfree, symbol_table);
787       symcount = bfd_canonicalize_symtab (objfile->obfd, symbol_table);
788
789       if (symcount < 0)
790         error (_("Can't read symbols from %s: %s"),
791                bfd_get_filename (objfile->obfd),
792                bfd_errmsg (bfd_get_error ()));
793
794       elf_symtab_read (objfile, ST_REGULAR, symcount, symbol_table, 0);
795     }
796
797   /* Add the dynamic symbols.  */
798
799   storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd);
800
801   if (storage_needed > 0)
802     {
803       /* Memory gets permanently referenced from ABFD after
804          bfd_get_synthetic_symtab so it must not get freed before ABFD gets.
805          It happens only in the case when elf_slurp_reloc_table sees
806          asection->relocation NULL.  Determining which section is asection is
807          done by _bfd_elf_get_synthetic_symtab which is all a bfd
808          implementation detail, though.  */
809
810       dyn_symbol_table = bfd_alloc (abfd, storage_needed);
811       dynsymcount = bfd_canonicalize_dynamic_symtab (objfile->obfd,
812                                                      dyn_symbol_table);
813
814       if (dynsymcount < 0)
815         error (_("Can't read symbols from %s: %s"),
816                bfd_get_filename (objfile->obfd),
817                bfd_errmsg (bfd_get_error ()));
818
819       elf_symtab_read (objfile, ST_DYNAMIC, dynsymcount, dyn_symbol_table, 0);
820     }
821
822   /* Add synthetic symbols - for instance, names for any PLT entries.  */
823
824   synthcount = bfd_get_synthetic_symtab (abfd, symcount, symbol_table,
825                                          dynsymcount, dyn_symbol_table,
826                                          &synthsyms);
827   if (synthcount > 0)
828     {
829       asymbol **synth_symbol_table;
830       long i;
831
832       make_cleanup (xfree, synthsyms);
833       synth_symbol_table = xmalloc (sizeof (asymbol *) * synthcount);
834       for (i = 0; i < synthcount; i++)
835         synth_symbol_table[i] = synthsyms + i;
836       make_cleanup (xfree, synth_symbol_table);
837       elf_symtab_read (objfile, ST_SYNTHETIC, synthcount,
838                        synth_symbol_table, 1);
839     }
840
841   /* Install any minimal symbols that have been collected as the current
842      minimal symbols for this objfile.  The debug readers below this point
843      should not generate new minimal symbols; if they do it's their
844      responsibility to install them.  "mdebug" appears to be the only one
845      which will do this.  */
846
847   install_minimal_symbols (objfile);
848   do_cleanups (back_to);
849
850   /* Now process debugging information, which is contained in
851      special ELF sections.  */
852
853   /* We first have to find them...  */
854   bfd_map_over_sections (abfd, elf_locate_sections, (void *) & ei);
855
856   /* ELF debugging information is inserted into the psymtab in the
857      order of least informative first - most informative last.  Since
858      the psymtab table is searched `most recent insertion first' this
859      increases the probability that more detailed debug information
860      for a section is found.
861
862      For instance, an object file might contain both .mdebug (XCOFF)
863      and .debug_info (DWARF2) sections then .mdebug is inserted first
864      (searched last) and DWARF2 is inserted last (searched first).  If
865      we don't do this then the XCOFF info is found first - for code in
866      an included file XCOFF info is useless.  */
867
868   if (ei.mdebugsect)
869     {
870       const struct ecoff_debug_swap *swap;
871
872       /* .mdebug section, presumably holding ECOFF debugging
873          information.  */
874       swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
875       if (swap)
876         elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
877     }
878   if (ei.stabsect)
879     {
880       asection *str_sect;
881
882       /* Stab sections have an associated string table that looks like
883          a separate section.  */
884       str_sect = bfd_get_section_by_name (abfd, ".stabstr");
885
886       /* FIXME should probably warn about a stab section without a stabstr.  */
887       if (str_sect)
888         elfstab_build_psymtabs (objfile,
889                                 ei.stabsect,
890                                 str_sect->filepos,
891                                 bfd_section_size (abfd, str_sect));
892     }
893
894   if (dwarf2_has_info (objfile))
895     {
896       if (dwarf2_initialize_objfile (objfile))
897         objfile->sf = &elf_sym_fns_gdb_index;
898       else
899         {
900           /* It is ok to do this even if the stabs reader made some
901              partial symbols, because OBJF_PSYMTABS_READ has not been
902              set, and so our lazy reader function will still be called
903              when needed.  */
904           objfile->sf = &elf_sym_fns_lazy_psyms;
905         }
906     }
907   /* If the file has its own symbol tables it has no separate debug
908      info.  `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to
909      SYMTABS/PSYMTABS.  `.gnu_debuglink' may no longer be present with
910      `.note.gnu.build-id'.  */
911   else if (!objfile_has_partial_symbols (objfile))
912     {
913       char *debugfile;
914
915       debugfile = find_separate_debug_file_by_buildid (objfile);
916
917       if (debugfile == NULL)
918         debugfile = find_separate_debug_file_by_debuglink (objfile);
919
920       if (debugfile)
921         {
922           bfd *abfd = symfile_bfd_open (debugfile);
923
924           symbol_file_add_separate (abfd, symfile_flags, objfile);
925           xfree (debugfile);
926         }
927     }
928 }
929
930 /* Callback to lazily read psymtabs.  */
931
932 static void
933 read_psyms (struct objfile *objfile)
934 {
935   if (dwarf2_has_info (objfile))
936     dwarf2_build_psymtabs (objfile);
937 }
938
939 /* This cleans up the objfile's deprecated_sym_stab_info pointer, and
940    the chain of stab_section_info's, that might be dangling from
941    it.  */
942
943 static void
944 free_elfinfo (void *objp)
945 {
946   struct objfile *objfile = (struct objfile *) objp;
947   struct dbx_symfile_info *dbxinfo = objfile->deprecated_sym_stab_info;
948   struct stab_section_info *ssi, *nssi;
949
950   ssi = dbxinfo->stab_section_info;
951   while (ssi)
952     {
953       nssi = ssi->next;
954       xfree (ssi);
955       ssi = nssi;
956     }
957
958   dbxinfo->stab_section_info = 0;       /* Just say No mo info about this.  */
959 }
960
961
962 /* Initialize anything that needs initializing when a completely new symbol
963    file is specified (not just adding some symbols from another file, e.g. a
964    shared library).
965
966    We reinitialize buildsym, since we may be reading stabs from an ELF
967    file.  */
968
969 static void
970 elf_new_init (struct objfile *ignore)
971 {
972   stabsread_new_init ();
973   buildsym_new_init ();
974 }
975
976 /* Perform any local cleanups required when we are done with a particular
977    objfile.  I.E, we are in the process of discarding all symbol information
978    for an objfile, freeing up all memory held for it, and unlinking the
979    objfile struct from the global list of known objfiles.  */
980
981 static void
982 elf_symfile_finish (struct objfile *objfile)
983 {
984   if (objfile->deprecated_sym_stab_info != NULL)
985     {
986       xfree (objfile->deprecated_sym_stab_info);
987     }
988
989   dwarf2_free_objfile (objfile);
990 }
991
992 /* ELF specific initialization routine for reading symbols.
993
994    It is passed a pointer to a struct sym_fns which contains, among other
995    things, the BFD for the file whose symbols are being read, and a slot for
996    a pointer to "private data" which we can fill with goodies.
997
998    For now at least, we have nothing in particular to do, so this function is
999    just a stub.  */
1000
1001 static void
1002 elf_symfile_init (struct objfile *objfile)
1003 {
1004   /* ELF objects may be reordered, so set OBJF_REORDERED.  If we
1005      find this causes a significant slowdown in gdb then we could
1006      set it in the debug symbol readers only when necessary.  */
1007   objfile->flags |= OBJF_REORDERED;
1008 }
1009
1010 /* When handling an ELF file that contains Sun STABS debug info,
1011    some of the debug info is relative to the particular chunk of the
1012    section that was generated in its individual .o file.  E.g.
1013    offsets to static variables are relative to the start of the data
1014    segment *for that module before linking*.  This information is
1015    painfully squirreled away in the ELF symbol table as local symbols
1016    with wierd names.  Go get 'em when needed.  */
1017
1018 void
1019 elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst)
1020 {
1021   const char *filename = pst->filename;
1022   struct dbx_symfile_info *dbx = objfile->deprecated_sym_stab_info;
1023   struct stab_section_info *maybe = dbx->stab_section_info;
1024   struct stab_section_info *questionable = 0;
1025   int i;
1026   char *p;
1027
1028   /* The ELF symbol info doesn't include path names, so strip the path
1029      (if any) from the psymtab filename.  */
1030   while (0 != (p = strchr (filename, '/')))
1031     filename = p + 1;
1032
1033   /* FIXME:  This linear search could speed up significantly
1034      if it was chained in the right order to match how we search it,
1035      and if we unchained when we found a match.  */
1036   for (; maybe; maybe = maybe->next)
1037     {
1038       if (filename[0] == maybe->filename[0]
1039           && strcmp (filename, maybe->filename) == 0)
1040         {
1041           /* We found a match.  But there might be several source files
1042              (from different directories) with the same name.  */
1043           if (0 == maybe->found)
1044             break;
1045           questionable = maybe; /* Might use it later.  */
1046         }
1047     }
1048
1049   if (maybe == 0 && questionable != 0)
1050     {
1051       complaint (&symfile_complaints,
1052                  _("elf/stab section information questionable for %s"),
1053                  filename);
1054       maybe = questionable;
1055     }
1056
1057   if (maybe)
1058     {
1059       /* Found it!  Allocate a new psymtab struct, and fill it in.  */
1060       maybe->found++;
1061       pst->section_offsets = (struct section_offsets *)
1062         obstack_alloc (&objfile->objfile_obstack, 
1063                        SIZEOF_N_SECTION_OFFSETS (objfile->num_sections));
1064       for (i = 0; i < maybe->num_sections; i++)
1065         (pst->section_offsets)->offsets[i] = maybe->sections[i];
1066       return;
1067     }
1068
1069   /* We were unable to find any offsets for this file.  Complain.  */
1070   if (dbx->stab_section_info)   /* If there *is* any info, */
1071     complaint (&symfile_complaints,
1072                _("elf/stab section information missing for %s"), filename);
1073 }
1074 \f
1075 /* Register that we are able to handle ELF object file formats.  */
1076
1077 static const struct sym_fns elf_sym_fns =
1078 {
1079   bfd_target_elf_flavour,
1080   elf_new_init,                 /* init anything gbl to entire symtab */
1081   elf_symfile_init,             /* read initial info, setup for sym_read() */
1082   elf_symfile_read,             /* read a symbol file into symtab */
1083   NULL,                         /* sym_read_psymbols */
1084   elf_symfile_finish,           /* finished with file, cleanup */
1085   default_symfile_offsets,      /* Translate ext. to int. relocation */
1086   elf_symfile_segments,         /* Get segment information from a file.  */
1087   NULL,
1088   default_symfile_relocate,     /* Relocate a debug section.  */
1089   &psym_functions
1090 };
1091
1092 /* The same as elf_sym_fns, but not registered and lazily reads
1093    psymbols.  */
1094
1095 static const struct sym_fns elf_sym_fns_lazy_psyms =
1096 {
1097   bfd_target_elf_flavour,
1098   elf_new_init,                 /* init anything gbl to entire symtab */
1099   elf_symfile_init,             /* read initial info, setup for sym_read() */
1100   elf_symfile_read,             /* read a symbol file into symtab */
1101   read_psyms,                   /* sym_read_psymbols */
1102   elf_symfile_finish,           /* finished with file, cleanup */
1103   default_symfile_offsets,      /* Translate ext. to int. relocation */
1104   elf_symfile_segments,         /* Get segment information from a file.  */
1105   NULL,
1106   default_symfile_relocate,     /* Relocate a debug section.  */
1107   &psym_functions
1108 };
1109
1110 /* The same as elf_sym_fns, but not registered and uses the
1111    DWARF-specific GNU index rather than psymtab.  */
1112 static const struct sym_fns elf_sym_fns_gdb_index =
1113 {
1114   bfd_target_elf_flavour,
1115   elf_new_init,                 /* init anything gbl to entire symab */
1116   elf_symfile_init,             /* read initial info, setup for sym_red() */
1117   elf_symfile_read,             /* read a symbol file into symtab */
1118   NULL,                         /* sym_read_psymbols */
1119   elf_symfile_finish,           /* finished with file, cleanup */
1120   default_symfile_offsets,      /* Translate ext. to int. relocatin */
1121   elf_symfile_segments,         /* Get segment information from a file.  */
1122   NULL,
1123   default_symfile_relocate,     /* Relocate a debug section.  */
1124   &dwarf2_gdb_index_functions
1125 };
1126
1127 void
1128 _initialize_elfread (void)
1129 {
1130   add_symtab_fns (&elf_sym_fns);
1131 }