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