Merge from vendor branch GDB:
[dragonfly.git] / contrib / gdb-6 / 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 Free Software Foundation, Inc.
5
6    Written by Fred Fish at Cygnus Support.
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
23 #include "defs.h"
24 #include "bfd.h"
25 #include "gdb_string.h"
26 #include "elf-bfd.h"
27 #include "elf/common.h"
28 #include "elf/internal.h"
29 #include "elf/mips.h"
30 #include "symtab.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "buildsym.h"
34 #include "stabsread.h"
35 #include "gdb-stabs.h"
36 #include "complaints.h"
37 #include "demangle.h"
38
39 extern void _initialize_elfread (void);
40
41 /* The struct elfinfo is available only during ELF symbol table and
42    psymtab reading.  It is destroyed at the completion of psymtab-reading.
43    It's local to elf_symfile_read.  */
44
45 struct elfinfo
46   {
47     asection *stabsect;         /* Section pointer for .stab section */
48     asection *stabindexsect;    /* Section pointer for .stab.index section */
49     asection *mdebugsect;       /* Section pointer for .mdebug section */
50   };
51
52 static void free_elfinfo (void *);
53
54 /* Locate the segments in ABFD.  */
55
56 static struct symfile_segment_data *
57 elf_symfile_segments (bfd *abfd)
58 {
59   Elf_Internal_Phdr *phdrs, **segments;
60   long phdrs_size;
61   int num_phdrs, num_segments, num_sections, i;
62   asection *sect;
63   struct symfile_segment_data *data;
64
65   phdrs_size = bfd_get_elf_phdr_upper_bound (abfd);
66   if (phdrs_size == -1)
67     return NULL;
68
69   phdrs = alloca (phdrs_size);
70   num_phdrs = bfd_get_elf_phdrs (abfd, phdrs);
71   if (num_phdrs == -1)
72     return NULL;
73
74   num_segments = 0;
75   segments = alloca (sizeof (Elf_Internal_Phdr *) * num_phdrs);
76   for (i = 0; i < num_phdrs; i++)
77     if (phdrs[i].p_type == PT_LOAD)
78       segments[num_segments++] = &phdrs[i];
79
80   if (num_segments == 0)
81     return NULL;
82
83   data = XZALLOC (struct symfile_segment_data);
84   data->num_segments = num_segments;
85   data->segment_bases = XCALLOC (num_segments, CORE_ADDR);
86   data->segment_sizes = XCALLOC (num_segments, CORE_ADDR);
87
88   for (i = 0; i < num_segments; i++)
89     {
90       data->segment_bases[i] = segments[i]->p_vaddr;
91       data->segment_sizes[i] = segments[i]->p_memsz;
92     }
93
94   num_sections = bfd_count_sections (abfd);
95   data->segment_info = XCALLOC (num_sections, int);
96
97   for (i = 0, sect = abfd->sections; sect != NULL; i++, sect = sect->next)
98     {
99       int j;
100       CORE_ADDR vma;
101
102       if ((bfd_get_section_flags (abfd, sect) & SEC_ALLOC) == 0)
103         continue;
104
105       vma = bfd_get_section_vma (abfd, sect);
106
107       for (j = 0; j < num_segments; j++)
108         if (segments[j]->p_memsz > 0
109             && vma >= segments[j]->p_vaddr
110             && vma < segments[j]->p_vaddr + segments[j]->p_memsz)
111           {
112             data->segment_info[i] = j + 1;
113             break;
114           }
115
116       if (bfd_get_section_size (sect) > 0 && j == num_segments)
117         warning (_("Loadable segment \"%s\" outside of ELF segments"),
118                  bfd_section_name (abfd, sect));
119     }
120
121   return data;
122 }
123
124 /* We are called once per section from elf_symfile_read.  We
125    need to examine each section we are passed, check to see
126    if it is something we are interested in processing, and
127    if so, stash away some access information for the section.
128
129    For now we recognize the dwarf debug information sections and
130    line number sections from matching their section names.  The
131    ELF definition is no real help here since it has no direct
132    knowledge of DWARF (by design, so any debugging format can be
133    used).
134
135    We also recognize the ".stab" sections used by the Sun compilers
136    released with Solaris 2.
137
138    FIXME: The section names should not be hardwired strings (what
139    should they be?  I don't think most object file formats have enough
140    section flags to specify what kind of debug section it is
141    -kingdon).  */
142
143 static void
144 elf_locate_sections (bfd *ignore_abfd, asection *sectp, void *eip)
145 {
146   struct elfinfo *ei;
147
148   ei = (struct elfinfo *) eip;
149   if (strcmp (sectp->name, ".stab") == 0)
150     {
151       ei->stabsect = sectp;
152     }
153   else if (strcmp (sectp->name, ".stab.index") == 0)
154     {
155       ei->stabindexsect = sectp;
156     }
157   else if (strcmp (sectp->name, ".mdebug") == 0)
158     {
159       ei->mdebugsect = sectp;
160     }
161 }
162
163 static struct minimal_symbol *
164 record_minimal_symbol (char *name, CORE_ADDR address,
165                        enum minimal_symbol_type ms_type,
166                        asection *bfd_section, struct objfile *objfile)
167 {
168   if (ms_type == mst_text || ms_type == mst_file_text)
169     address = gdbarch_smash_text_address (current_gdbarch, address);
170
171   return prim_record_minimal_symbol_and_info
172     (name, address, ms_type, NULL, bfd_section->index, bfd_section, objfile);
173 }
174
175 /*
176
177    LOCAL FUNCTION
178
179    elf_symtab_read -- read the symbol table of an ELF file
180
181    SYNOPSIS
182
183    void elf_symtab_read (struct objfile *objfile, int dynamic,
184                          long number_of_symbols, asymbol **symbol_table)
185
186    DESCRIPTION
187
188    Given an objfile, a symbol table, and a flag indicating whether the
189    symbol table contains dynamic symbols, add all the global function
190    and data symbols to the minimal symbol table.
191
192    In stabs-in-ELF, as implemented by Sun, there are some local symbols
193    defined in the ELF symbol table, which can be used to locate
194    the beginnings of sections from each ".o" file that was linked to
195    form the executable objfile.  We gather any such info and record it
196    in data structures hung off the objfile's private data.
197
198  */
199
200 static void
201 elf_symtab_read (struct objfile *objfile, int dynamic,
202                  long number_of_symbols, asymbol **symbol_table)
203 {
204   long storage_needed;
205   asymbol *sym;
206   long i;
207   CORE_ADDR symaddr;
208   CORE_ADDR offset;
209   enum minimal_symbol_type ms_type;
210   /* If sectinfo is nonNULL, it contains section info that should end up
211      filed in the objfile.  */
212   struct stab_section_info *sectinfo = NULL;
213   /* If filesym is nonzero, it points to a file symbol, but we haven't
214      seen any section info for it yet.  */
215   asymbol *filesym = 0;
216 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
217   /* Name of filesym, as saved on the objfile_obstack.  */
218   char *filesymname = obsavestring ("", 0, &objfile->objfile_obstack);
219 #endif
220   struct dbx_symfile_info *dbx = objfile->deprecated_sym_stab_info;
221   int stripped = (bfd_get_symcount (objfile->obfd) == 0);
222
223   for (i = 0; i < number_of_symbols; i++)
224     {
225       sym = symbol_table[i];
226       if (sym->name == NULL || *sym->name == '\0')
227         {
228           /* Skip names that don't exist (shouldn't happen), or names
229              that are null strings (may happen). */
230           continue;
231         }
232
233       /* Skip "special" symbols, e.g. ARM mapping symbols.  These are
234          symbols which do not correspond to objects in the symbol table,
235          but have some other target-specific meaning.  */
236       if (bfd_is_target_special_symbol (objfile->obfd, sym))
237         continue;
238
239       offset = ANOFFSET (objfile->section_offsets, sym->section->index);
240       if (dynamic
241           && sym->section == &bfd_und_section
242           && (sym->flags & BSF_FUNCTION))
243         {
244           struct minimal_symbol *msym;
245
246           /* Symbol is a reference to a function defined in
247              a shared library.
248              If its value is non zero then it is usually the address
249              of the corresponding entry in the procedure linkage table,
250              plus the desired section offset.
251              If its value is zero then the dynamic linker has to resolve
252              the symbol. We are unable to find any meaningful address
253              for this symbol in the executable file, so we skip it.  */
254           symaddr = sym->value;
255           if (symaddr == 0)
256             continue;
257           symaddr += offset;
258           msym = record_minimal_symbol
259             ((char *) sym->name, symaddr,
260              mst_solib_trampoline, sym->section, objfile);
261 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
262           if (msym != NULL)
263             msym->filename = filesymname;
264 #endif
265           continue;
266         }
267
268       /* If it is a nonstripped executable, do not enter dynamic
269          symbols, as the dynamic symbol table is usually a subset
270          of the main symbol table.  */
271       if (dynamic && !stripped)
272         continue;
273       if (sym->flags & BSF_FILE)
274         {
275           /* STT_FILE debugging symbol that helps stabs-in-elf debugging.
276              Chain any old one onto the objfile; remember new sym.  */
277           if (sectinfo != NULL)
278             {
279               sectinfo->next = dbx->stab_section_info;
280               dbx->stab_section_info = sectinfo;
281               sectinfo = NULL;
282             }
283           filesym = sym;
284 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
285           filesymname =
286             obsavestring ((char *) filesym->name, strlen (filesym->name),
287                           &objfile->objfile_obstack);
288 #endif
289         }
290       else if (sym->flags & BSF_SECTION_SYM)
291         continue;
292       else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK))
293         {
294           struct minimal_symbol *msym;
295
296           /* Select global/local/weak symbols.  Note that bfd puts abs
297              symbols in their own section, so all symbols we are
298              interested in will have a section. */
299           /* Bfd symbols are section relative. */
300           symaddr = sym->value + sym->section->vma;
301           /* Relocate all non-absolute symbols by the section offset.  */
302           if (sym->section != &bfd_abs_section)
303             {
304               symaddr += offset;
305             }
306           /* For non-absolute symbols, use the type of the section
307              they are relative to, to intuit text/data.  Bfd provides
308              no way of figuring this out for absolute symbols. */
309           if (sym->section == &bfd_abs_section)
310             {
311               /* This is a hack to get the minimal symbol type
312                  right for Irix 5, which has absolute addresses
313                  with special section indices for dynamic symbols. */
314               unsigned short shndx =
315                 ((elf_symbol_type *) sym)->internal_elf_sym.st_shndx;
316
317               switch (shndx)
318                 {
319                 case SHN_MIPS_TEXT:
320                   ms_type = mst_text;
321                   break;
322                 case SHN_MIPS_DATA:
323                   ms_type = mst_data;
324                   break;
325                 case SHN_MIPS_ACOMMON:
326                   ms_type = mst_bss;
327                   break;
328                 default:
329                   ms_type = mst_abs;
330                 }
331
332               /* If it is an Irix dynamic symbol, skip section name
333                  symbols, relocate all others by section offset. */
334               if (ms_type != mst_abs)
335                 {
336                   if (sym->name[0] == '.')
337                     continue;
338                   symaddr += offset;
339                 }
340             }
341           else if (sym->section->flags & SEC_CODE)
342             {
343               if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
344                 {
345                   ms_type = mst_text;
346                 }
347               else if ((sym->name[0] == '.' && sym->name[1] == 'L')
348                        || ((sym->flags & BSF_LOCAL)
349                            && sym->name[0] == '$'
350                            && sym->name[1] == 'L'))
351                 /* Looks like a compiler-generated label.  Skip
352                    it.  The assembler should be skipping these (to
353                    keep executables small), but apparently with
354                    gcc on the (deleted) delta m88k SVR4, it loses.
355                    So to have us check too should be harmless (but
356                    I encourage people to fix this in the assembler
357                    instead of adding checks here).  */
358                 continue;
359               else
360                 {
361                   ms_type = mst_file_text;
362                 }
363             }
364           else if (sym->section->flags & SEC_ALLOC)
365             {
366               if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
367                 {
368                   if (sym->section->flags & SEC_LOAD)
369                     {
370                       ms_type = mst_data;
371                     }
372                   else
373                     {
374                       ms_type = mst_bss;
375                     }
376                 }
377               else if (sym->flags & BSF_LOCAL)
378                 {
379                   /* Named Local variable in a Data section.
380                      Check its name for stabs-in-elf.  */
381                   int special_local_sect;
382                   if (strcmp ("Bbss.bss", sym->name) == 0)
383                     special_local_sect = SECT_OFF_BSS (objfile);
384                   else if (strcmp ("Ddata.data", sym->name) == 0)
385                     special_local_sect = SECT_OFF_DATA (objfile);
386                   else if (strcmp ("Drodata.rodata", sym->name) == 0)
387                     special_local_sect = SECT_OFF_RODATA (objfile);
388                   else
389                     special_local_sect = -1;
390                   if (special_local_sect >= 0)
391                     {
392                       /* Found a special local symbol.  Allocate a
393                          sectinfo, if needed, and fill it in.  */
394                       if (sectinfo == NULL)
395                         {
396                           int max_index;
397                           size_t size;
398
399                           max_index 
400                             = max (SECT_OFF_BSS (objfile),
401                                    max (SECT_OFF_DATA (objfile),
402                                         SECT_OFF_RODATA (objfile)));
403
404                           /* max_index is the largest index we'll
405                              use into this array, so we must
406                              allocate max_index+1 elements for it.
407                              However, 'struct stab_section_info'
408                              already includes one element, so we
409                              need to allocate max_index aadditional
410                              elements.  */
411                           size = (sizeof (struct stab_section_info) 
412                                   + (sizeof (CORE_ADDR)
413                                      * max_index));
414                           sectinfo = (struct stab_section_info *)
415                             xmalloc (size);
416                           memset (sectinfo, 0, size);
417                           sectinfo->num_sections = max_index;
418                           if (filesym == NULL)
419                             {
420                               complaint (&symfile_complaints,
421                                          _("elf/stab section information %s without a preceding file symbol"),
422                                          sym->name);
423                             }
424                           else
425                             {
426                               sectinfo->filename =
427                                 (char *) filesym->name;
428                             }
429                         }
430                       if (sectinfo->sections[special_local_sect] != 0)
431                         complaint (&symfile_complaints,
432                                    _("duplicated elf/stab section information for %s"),
433                                    sectinfo->filename);
434                       /* BFD symbols are section relative.  */
435                       symaddr = sym->value + sym->section->vma;
436                       /* Relocate non-absolute symbols by the
437                          section offset.  */
438                       if (sym->section != &bfd_abs_section)
439                         symaddr += offset;
440                       sectinfo->sections[special_local_sect] = symaddr;
441                       /* The special local symbols don't go in the
442                          minimal symbol table, so ignore this one.  */
443                       continue;
444                     }
445                   /* Not a special stabs-in-elf symbol, do regular
446                      symbol processing.  */
447                   if (sym->section->flags & SEC_LOAD)
448                     {
449                       ms_type = mst_file_data;
450                     }
451                   else
452                     {
453                       ms_type = mst_file_bss;
454                     }
455                 }
456               else
457                 {
458                   ms_type = mst_unknown;
459                 }
460             }
461           else
462             {
463               /* FIXME:  Solaris2 shared libraries include lots of
464                  odd "absolute" and "undefined" symbols, that play 
465                  hob with actions like finding what function the PC
466                  is in.  Ignore them if they aren't text, data, or bss.  */
467               /* ms_type = mst_unknown; */
468               continue; /* Skip this symbol. */
469             }
470           msym = record_minimal_symbol
471             ((char *) sym->name, symaddr,
472              ms_type, sym->section, objfile);
473           if (msym)
474             {
475               /* Pass symbol size field in via BFD.  FIXME!!!  */
476               unsigned long size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
477               MSYMBOL_SIZE(msym) = size;
478             }
479 #ifdef SOFUN_ADDRESS_MAYBE_MISSING
480           if (msym != NULL)
481             msym->filename = filesymname;
482 #endif
483           gdbarch_elf_make_msymbol_special (current_gdbarch, sym, msym);
484         }
485     }
486 }
487
488 /* Scan and build partial symbols for a symbol file.
489    We have been initialized by a call to elf_symfile_init, which 
490    currently does nothing.
491
492    SECTION_OFFSETS is a set of offsets to apply to relocate the symbols
493    in each section.  We simplify it down to a single offset for all
494    symbols.  FIXME.
495
496    MAINLINE is true if we are reading the main symbol
497    table (as opposed to a shared lib or dynamically loaded file).
498
499    This function only does the minimum work necessary for letting the
500    user "name" things symbolically; it does not read the entire symtab.
501    Instead, it reads the external and static symbols and puts them in partial
502    symbol tables.  When more extensive information is requested of a
503    file, the corresponding partial symbol table is mutated into a full
504    fledged symbol table by going back and reading the symbols
505    for real.
506
507    We look for sections with specific names, to tell us what debug
508    format to look for:  FIXME!!!
509
510    elfstab_build_psymtabs() handles STABS symbols;
511    mdebug_build_psymtabs() handles ECOFF debugging information.
512
513    Note that ELF files have a "minimal" symbol table, which looks a lot
514    like a COFF symbol table, but has only the minimal information necessary
515    for linking.  We process this also, and use the information to
516    build gdb's minimal symbol table.  This gives us some minimal debugging
517    capability even for files compiled without -g.  */
518
519 static void
520 elf_symfile_read (struct objfile *objfile, int mainline)
521 {
522   bfd *abfd = objfile->obfd;
523   struct elfinfo ei;
524   struct cleanup *back_to;
525   CORE_ADDR offset;
526   long symcount = 0, dynsymcount = 0, synthcount, storage_needed;
527   asymbol **symbol_table = NULL, **dyn_symbol_table = NULL;
528   asymbol *synthsyms;
529
530   init_minimal_symbol_collection ();
531   back_to = make_cleanup_discard_minimal_symbols ();
532
533   memset ((char *) &ei, 0, sizeof (ei));
534
535   /* Allocate struct to keep track of the symfile */
536   objfile->deprecated_sym_stab_info = (struct dbx_symfile_info *)
537     xmalloc (sizeof (struct dbx_symfile_info));
538   memset ((char *) objfile->deprecated_sym_stab_info, 0, sizeof (struct dbx_symfile_info));
539   make_cleanup (free_elfinfo, (void *) objfile);
540
541   /* Process the normal ELF symbol table first.  This may write some 
542      chain of info into the dbx_symfile_info in objfile->deprecated_sym_stab_info,
543      which can later be used by elfstab_offset_sections.  */
544
545   storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
546   if (storage_needed < 0)
547     error (_("Can't read symbols from %s: %s"), bfd_get_filename (objfile->obfd),
548            bfd_errmsg (bfd_get_error ()));
549
550   if (storage_needed > 0)
551     {
552       symbol_table = (asymbol **) xmalloc (storage_needed);
553       make_cleanup (xfree, symbol_table);
554       symcount = bfd_canonicalize_symtab (objfile->obfd, symbol_table);
555
556       if (symcount < 0)
557         error (_("Can't read symbols from %s: %s"), bfd_get_filename (objfile->obfd),
558                bfd_errmsg (bfd_get_error ()));
559
560       elf_symtab_read (objfile, 0, symcount, symbol_table);
561     }
562
563   /* Add the dynamic symbols.  */
564
565   storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd);
566
567   if (storage_needed > 0)
568     {
569       dyn_symbol_table = (asymbol **) xmalloc (storage_needed);
570       make_cleanup (xfree, dyn_symbol_table);
571       dynsymcount = bfd_canonicalize_dynamic_symtab (objfile->obfd,
572                                                      dyn_symbol_table);
573
574       if (dynsymcount < 0)
575         error (_("Can't read symbols from %s: %s"), bfd_get_filename (objfile->obfd),
576                bfd_errmsg (bfd_get_error ()));
577
578       elf_symtab_read (objfile, 1, dynsymcount, dyn_symbol_table);
579     }
580
581   /* Add synthetic symbols - for instance, names for any PLT entries.  */
582
583   synthcount = bfd_get_synthetic_symtab (abfd, symcount, symbol_table,
584                                          dynsymcount, dyn_symbol_table,
585                                          &synthsyms);
586   if (synthcount > 0)
587     {
588       asymbol **synth_symbol_table;
589       long i;
590
591       make_cleanup (xfree, synthsyms);
592       synth_symbol_table = xmalloc (sizeof (asymbol *) * synthcount);
593       for (i = 0; i < synthcount; i++)
594         synth_symbol_table[i] = synthsyms + i;
595       make_cleanup (xfree, synth_symbol_table);
596       elf_symtab_read (objfile, 0, synthcount, synth_symbol_table);
597     }
598
599   /* Install any minimal symbols that have been collected as the current
600      minimal symbols for this objfile.  The debug readers below this point
601      should not generate new minimal symbols; if they do it's their
602      responsibility to install them.  "mdebug" appears to be the only one
603      which will do this.  */
604
605   install_minimal_symbols (objfile);
606   do_cleanups (back_to);
607
608   /* Now process debugging information, which is contained in
609      special ELF sections. */
610
611   /* If we are reinitializing, or if we have never loaded syms yet,
612      set table to empty.  MAINLINE is cleared so that *_read_psymtab
613      functions do not all also re-initialize the psymbol table. */
614   if (mainline)
615     {
616       init_psymbol_list (objfile, 0);
617       mainline = 0;
618     }
619
620   /* We first have to find them... */
621   bfd_map_over_sections (abfd, elf_locate_sections, (void *) & ei);
622
623   /* ELF debugging information is inserted into the psymtab in the
624      order of least informative first - most informative last.  Since
625      the psymtab table is searched `most recent insertion first' this
626      increases the probability that more detailed debug information
627      for a section is found.
628
629      For instance, an object file might contain both .mdebug (XCOFF)
630      and .debug_info (DWARF2) sections then .mdebug is inserted first
631      (searched last) and DWARF2 is inserted last (searched first).  If
632      we don't do this then the XCOFF info is found first - for code in
633      an included file XCOFF info is useless. */
634
635   if (ei.mdebugsect)
636     {
637       const struct ecoff_debug_swap *swap;
638
639       /* .mdebug section, presumably holding ECOFF debugging
640          information.  */
641       swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
642       if (swap)
643         elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
644     }
645   if (ei.stabsect)
646     {
647       asection *str_sect;
648
649       /* Stab sections have an associated string table that looks like
650          a separate section.  */
651       str_sect = bfd_get_section_by_name (abfd, ".stabstr");
652
653       /* FIXME should probably warn about a stab section without a stabstr.  */
654       if (str_sect)
655         elfstab_build_psymtabs (objfile,
656                                 mainline,
657                                 ei.stabsect,
658                                 str_sect->filepos,
659                                 bfd_section_size (abfd, str_sect));
660     }
661   if (dwarf2_has_info (objfile))
662     {
663       /* DWARF 2 sections */
664       dwarf2_build_psymtabs (objfile, mainline);
665     }
666
667   /* FIXME: kettenis/20030504: This still needs to be integrated with
668      dwarf2read.c in a better way.  */
669   dwarf2_build_frame_info (objfile);
670 }
671
672 /* This cleans up the objfile's deprecated_sym_stab_info pointer, and
673    the chain of stab_section_info's, that might be dangling from
674    it.  */
675
676 static void
677 free_elfinfo (void *objp)
678 {
679   struct objfile *objfile = (struct objfile *) objp;
680   struct dbx_symfile_info *dbxinfo = objfile->deprecated_sym_stab_info;
681   struct stab_section_info *ssi, *nssi;
682
683   ssi = dbxinfo->stab_section_info;
684   while (ssi)
685     {
686       nssi = ssi->next;
687       xfree (ssi);
688       ssi = nssi;
689     }
690
691   dbxinfo->stab_section_info = 0;       /* Just say No mo info about this.  */
692 }
693
694
695 /* Initialize anything that needs initializing when a completely new symbol
696    file is specified (not just adding some symbols from another file, e.g. a
697    shared library).
698
699    We reinitialize buildsym, since we may be reading stabs from an ELF file.  */
700
701 static void
702 elf_new_init (struct objfile *ignore)
703 {
704   stabsread_new_init ();
705   buildsym_new_init ();
706 }
707
708 /* Perform any local cleanups required when we are done with a particular
709    objfile.  I.E, we are in the process of discarding all symbol information
710    for an objfile, freeing up all memory held for it, and unlinking the
711    objfile struct from the global list of known objfiles. */
712
713 static void
714 elf_symfile_finish (struct objfile *objfile)
715 {
716   if (objfile->deprecated_sym_stab_info != NULL)
717     {
718       xfree (objfile->deprecated_sym_stab_info);
719     }
720 }
721
722 /* ELF specific initialization routine for reading symbols.
723
724    It is passed a pointer to a struct sym_fns which contains, among other
725    things, the BFD for the file whose symbols are being read, and a slot for
726    a pointer to "private data" which we can fill with goodies.
727
728    For now at least, we have nothing in particular to do, so this function is
729    just a stub. */
730
731 static void
732 elf_symfile_init (struct objfile *objfile)
733 {
734   /* ELF objects may be reordered, so set OBJF_REORDERED.  If we
735      find this causes a significant slowdown in gdb then we could
736      set it in the debug symbol readers only when necessary.  */
737   objfile->flags |= OBJF_REORDERED;
738 }
739
740 /* When handling an ELF file that contains Sun STABS debug info,
741    some of the debug info is relative to the particular chunk of the
742    section that was generated in its individual .o file.  E.g.
743    offsets to static variables are relative to the start of the data
744    segment *for that module before linking*.  This information is
745    painfully squirreled away in the ELF symbol table as local symbols
746    with wierd names.  Go get 'em when needed.  */
747
748 void
749 elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst)
750 {
751   char *filename = pst->filename;
752   struct dbx_symfile_info *dbx = objfile->deprecated_sym_stab_info;
753   struct stab_section_info *maybe = dbx->stab_section_info;
754   struct stab_section_info *questionable = 0;
755   int i;
756   char *p;
757
758   /* The ELF symbol info doesn't include path names, so strip the path
759      (if any) from the psymtab filename.  */
760   while (0 != (p = strchr (filename, '/')))
761     filename = p + 1;
762
763   /* FIXME:  This linear search could speed up significantly
764      if it was chained in the right order to match how we search it,
765      and if we unchained when we found a match. */
766   for (; maybe; maybe = maybe->next)
767     {
768       if (filename[0] == maybe->filename[0]
769           && strcmp (filename, maybe->filename) == 0)
770         {
771           /* We found a match.  But there might be several source files
772              (from different directories) with the same name.  */
773           if (0 == maybe->found)
774             break;
775           questionable = maybe; /* Might use it later.  */
776         }
777     }
778
779   if (maybe == 0 && questionable != 0)
780     {
781       complaint (&symfile_complaints,
782                  _("elf/stab section information questionable for %s"), filename);
783       maybe = questionable;
784     }
785
786   if (maybe)
787     {
788       /* Found it!  Allocate a new psymtab struct, and fill it in.  */
789       maybe->found++;
790       pst->section_offsets = (struct section_offsets *)
791         obstack_alloc (&objfile->objfile_obstack, 
792                        SIZEOF_N_SECTION_OFFSETS (objfile->num_sections));
793       for (i = 0; i < maybe->num_sections; i++)
794         (pst->section_offsets)->offsets[i] = maybe->sections[i];
795       return;
796     }
797
798   /* We were unable to find any offsets for this file.  Complain.  */
799   if (dbx->stab_section_info)   /* If there *is* any info, */
800     complaint (&symfile_complaints,
801                _("elf/stab section information missing for %s"), filename);
802 }
803 \f
804 /* Register that we are able to handle ELF object file formats.  */
805
806 static struct sym_fns elf_sym_fns =
807 {
808   bfd_target_elf_flavour,
809   elf_new_init,                 /* sym_new_init: init anything gbl to entire symtab */
810   elf_symfile_init,             /* sym_init: read initial info, setup for sym_read() */
811   elf_symfile_read,             /* sym_read: read a symbol file into symtab */
812   elf_symfile_finish,           /* sym_finish: finished with file, cleanup */
813   default_symfile_offsets,      /* sym_offsets:  Translate ext. to int. relocation */
814   elf_symfile_segments,         /* sym_segments: Get segment information from
815                                    a file.  */
816   NULL                          /* next: pointer to next struct sym_fns */
817 };
818
819 void
820 _initialize_elfread (void)
821 {
822   add_symtab_fns (&elf_sym_fns);
823 }