* elfread.c (elf_symtab_read): Change storage_needed,
[external/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_abs_section)
315                 {
316                   ms_type = mst_abs;
317                 }
318               else if (sym -> section -> flags & SEC_CODE)
319                 {
320                   if (sym -> flags & BSF_GLOBAL)
321                     {
322                       ms_type = mst_text;
323                     }
324                   else if (sym->name[0] == '.' && sym->name[1] == 'L')
325                     /* Looks like a compiler-generated label.  Skip it.
326                        The assembler should be skipping these (to keep
327                        executables small), but apparently with gcc on the
328                        delta m88k SVR4, it loses.  So to have us check too
329                        should be harmless (but I encourage people to fix this
330                        in the assembler instead of adding checks here).  */
331                     continue;
332                   else
333                     {
334                       ms_type = mst_file_text;
335                     }
336                 }
337               else if (sym -> section -> flags & SEC_ALLOC)
338                 {
339                   if (sym -> flags & BSF_GLOBAL)
340                     {
341                       if (sym -> section -> flags & SEC_LOAD)
342                         {
343                           ms_type = mst_data;
344                         }
345                       else
346                         {
347                           ms_type = mst_bss;
348                         }
349                     }
350                   else if (sym -> flags & BSF_LOCAL)
351                     {
352                       /* Named Local variable in a Data section.  Check its
353                          name for stabs-in-elf.  The STREQ macro checks the
354                          first character inline, so we only actually do a
355                          strcmp function call on names that start with 'B'
356                          or 'D' */
357                       index = SECT_OFF_MAX;
358                       if (STREQ ("Bbss.bss", sym -> name))
359                         {
360                           index = SECT_OFF_BSS;
361                         }
362                       else if (STREQ ("Ddata.data", sym -> name))
363                         {
364                           index = SECT_OFF_DATA;
365                         }
366                       else if (STREQ ("Drodata.rodata", sym -> name))
367                         {
368                           index = SECT_OFF_RODATA;
369                         }
370                       if (index != SECT_OFF_MAX)
371                         {
372                           /* Found a special local symbol.  Allocate a
373                              sectinfo, if needed, and fill it in.  */
374                           if (sectinfo == NULL)
375                             {
376                               sectinfo = (struct stab_section_info *)
377                                 xmmalloc (objfile -> md, sizeof (*sectinfo));
378                               memset ((PTR) sectinfo, 0, sizeof (*sectinfo));
379                               if (filesym == NULL)
380                                 {
381                                   complain (&section_info_complaint,
382                                             sym -> name);
383                                 }
384                               else
385                                 {
386                                   sectinfo -> filename =
387                                     (char *) filesym -> name;
388                                 }
389                             }
390                           if (sectinfo -> sections[index] != 0)
391                             {
392                               complain (&section_info_dup_complaint,
393                                         sectinfo -> filename);
394                             }
395                           /* Bfd symbols are section relative. */
396                           symaddr = sym -> value + sym -> section -> vma;
397                           /* Relocate non-absolute symbols by base address.  */
398                           if (sym -> section != &bfd_abs_section)
399                             {
400                               symaddr += addr;
401                             }
402                           sectinfo -> sections[index] = symaddr;
403                           /* The special local symbols don't go in the
404                              minimal symbol table, so ignore this one. */
405                           continue;
406                         }
407                       /* Not a special stabs-in-elf symbol, do regular
408                          symbol processing. */
409                       if (sym -> section -> flags & SEC_LOAD)
410                         {
411                           ms_type = mst_file_data;
412                         }
413                       else
414                         {
415                           ms_type = mst_file_bss;
416                         }
417                     }
418                   else
419                     {
420                       ms_type = mst_unknown;
421                     }
422                 }
423               else
424                 {
425                   /* FIXME:  Solaris2 shared libraries include lots of
426                      odd "absolute" and "undefined" symbols, that play 
427                      hob with actions like finding what function the PC
428                      is in.  Ignore them if they aren't text, data, or bss.  */
429                   /* ms_type = mst_unknown; */
430                   continue;             /* Skip this symbol. */
431                 }
432               /* Pass symbol size field in via BFD.  FIXME!!!  */
433               size = ((elf_symbol_type *) sym) -> internal_elf_sym.st_size;
434               record_minimal_symbol_and_info ((char *) sym -> name, symaddr,
435                                               ms_type, (PTR) size, objfile);
436             }
437         }
438       do_cleanups (back_to);
439     }
440 }
441
442 /* Scan and build partial symbols for a symbol file.
443    We have been initialized by a call to elf_symfile_init, which 
444    currently does nothing.
445
446    SECTION_OFFSETS is a set of offsets to apply to relocate the symbols
447    in each section.  We simplify it down to a single offset for all
448    symbols.  FIXME.
449
450    MAINLINE is true if we are reading the main symbol
451    table (as opposed to a shared lib or dynamically loaded file).
452
453    This function only does the minimum work necessary for letting the
454    user "name" things symbolically; it does not read the entire symtab.
455    Instead, it reads the external and static symbols and puts them in partial
456    symbol tables.  When more extensive information is requested of a
457    file, the corresponding partial symbol table is mutated into a full
458    fledged symbol table by going back and reading the symbols
459    for real.
460
461    We look for sections with specific names, to tell us what debug
462    format to look for:  FIXME!!!
463
464    dwarf_build_psymtabs() builds psymtabs for DWARF symbols;
465    elfstab_build_psymtabs() handles STABS symbols;
466    mdebug_build_psymtabs() handles ECOFF debugging information.
467
468    Note that ELF files have a "minimal" symbol table, which looks a lot
469    like a COFF symbol table, but has only the minimal information necessary
470    for linking.  We process this also, and use the information to
471    build gdb's minimal symbol table.  This gives us some minimal debugging
472    capability even for files compiled without -g.  */
473
474 static void
475 elf_symfile_read (objfile, section_offsets, mainline)
476      struct objfile *objfile;
477      struct section_offsets *section_offsets;
478      int mainline;
479 {
480   bfd *abfd = objfile->obfd;
481   struct elfinfo ei;
482   struct cleanup *back_to;
483   CORE_ADDR offset;
484
485   init_minimal_symbol_collection ();
486   back_to = make_cleanup (discard_minimal_symbols, 0);
487
488   memset ((char *) &ei, 0, sizeof (ei));
489
490   /* Allocate struct to keep track of the symfile */
491   objfile->sym_stab_info = (PTR)
492     xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
493   memset ((char *) objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
494   make_cleanup (free_elfinfo, (PTR) objfile);
495
496   /* Process the normal ELF symbol table first.  This may write some 
497      chain of info into the dbx_symfile_info in objfile->sym_stab_info,
498      which can later be used by elfstab_offset_sections.  */
499
500   /* FIXME, should take a section_offsets param, not just an offset.  */
501   offset = ANOFFSET (section_offsets, 0);
502   elf_symtab_read (abfd, offset, objfile);
503
504   /* Now process debugging information, which is contained in
505      special ELF sections.  We first have to find them... */
506
507   bfd_map_over_sections (abfd, elf_locate_sections, (PTR) &ei);
508   if (ei.dboffset && ei.lnoffset)
509     {
510       /* DWARF sections */
511       dwarf_build_psymtabs (objfile,
512                             section_offsets, mainline,
513                             ei.dboffset, ei.dbsize,
514                             ei.lnoffset, ei.lnsize);
515     }
516   if (ei.stabsect)
517     {
518       /* STABS sections */
519
520       /* FIXME:  Sun didn't really know how to implement this well.
521          They made .stab sections that don't point to the .stabstr
522          section with the sh_link field.  BFD doesn't make string table
523          sections visible to the caller.  So we have to search the
524          ELF section table, not the BFD section table, for the string
525          table.  */
526       struct elf32_internal_shdr *elf_sect;
527
528       elf_sect = bfd_elf_find_section (abfd, ".stabstr");
529       if (elf_sect)
530         elfstab_build_psymtabs (objfile,
531           section_offsets,
532           mainline,
533           ei.stabsect->filepos,                         /* .stab offset */
534           bfd_get_section_size_before_reloc (ei.stabsect),/* .stab size */
535           (file_ptr) elf_sect->sh_offset,               /* .stabstr offset */
536           elf_sect->sh_size);                           /* .stabstr size */
537     }
538   if (ei.mdebugsect)
539     {
540       const struct ecoff_debug_swap *swap;
541
542       /* .mdebug section, presumably holding ECOFF debugging
543          information.  */
544       swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
545       if (swap)
546         elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect,
547                                   section_offsets);
548     }
549
550   if (!have_partial_symbols ())
551     {
552       wrap_here ("");
553       printf_filtered ("(no debugging symbols found)...");
554       wrap_here ("");
555     }
556
557   /* Install any minimal symbols that have been collected as the current
558      minimal symbols for this objfile. */
559
560   install_minimal_symbols (objfile);
561
562   do_cleanups (back_to);
563 }
564
565 /* This cleans up the objfile's sym_stab_info pointer, and the chain of
566    stab_section_info's, that might be dangling from it.  */
567
568 static void
569 free_elfinfo (objp)
570      PTR objp;
571 {
572   struct objfile *objfile = (struct objfile *)objp;
573   struct dbx_symfile_info *dbxinfo = (struct dbx_symfile_info *)
574                                      objfile->sym_stab_info;
575   struct stab_section_info *ssi, *nssi;
576
577   ssi = dbxinfo->stab_section_info;
578   while (ssi)
579     {
580       nssi = ssi->next;
581       mfree (objfile->md, ssi);
582       ssi = nssi;
583     }
584
585   dbxinfo->stab_section_info = 0;       /* Just say No mo info about this.  */
586 }
587
588
589 /* Initialize anything that needs initializing when a completely new symbol
590    file is specified (not just adding some symbols from another file, e.g. a
591    shared library).
592
593    We reinitialize buildsym, since we may be reading stabs from an ELF file.  */
594
595 static void
596 elf_new_init (ignore)
597      struct objfile *ignore;
598 {
599   stabsread_new_init ();
600   buildsym_new_init ();
601 }
602
603 /* Perform any local cleanups required when we are done with a particular
604    objfile.  I.E, we are in the process of discarding all symbol information
605    for an objfile, freeing up all memory held for it, and unlinking the
606    objfile struct from the global list of known objfiles. */
607
608 static void
609 elf_symfile_finish (objfile)
610      struct objfile *objfile;
611 {
612   if (objfile -> sym_stab_info != NULL)
613     {
614       mfree (objfile -> md, objfile -> sym_stab_info);
615     }
616 }
617
618 /* ELF specific initialization routine for reading symbols.
619
620    It is passed a pointer to a struct sym_fns which contains, among other
621    things, the BFD for the file whose symbols are being read, and a slot for
622    a pointer to "private data" which we can fill with goodies.
623
624    For now at least, we have nothing in particular to do, so this function is
625    just a stub. */
626
627 static void
628 elf_symfile_init (ignore)
629      struct objfile *ignore;
630 {
631 }
632
633 /* ELF specific parsing routine for section offsets.
634
635    Plain and simple for now.  */
636
637 static
638 struct section_offsets *
639 elf_symfile_offsets (objfile, addr)
640      struct objfile *objfile;
641      CORE_ADDR addr;
642 {
643   struct section_offsets *section_offsets;
644   int i;
645
646   objfile->num_sections = SECT_OFF_MAX;
647   section_offsets = (struct section_offsets *)
648     obstack_alloc (&objfile -> psymbol_obstack,
649                    sizeof (struct section_offsets)
650                    + sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
651
652   for (i = 0; i < SECT_OFF_MAX; i++)
653     ANOFFSET (section_offsets, i) = addr;
654
655   return section_offsets;
656 }
657 \f
658 /* When handling an ELF file that contains Sun STABS debug info,
659    some of the debug info is relative to the particular chunk of the
660    section that was generated in its individual .o file.  E.g.
661    offsets to static variables are relative to the start of the data
662    segment *for that module before linking*.  This information is
663    painfully squirreled away in the ELF symbol table as local symbols
664    with wierd names.  Go get 'em when needed.  */
665
666 void
667 elfstab_offset_sections (objfile, pst)
668      struct objfile *objfile;
669      struct partial_symtab *pst;
670 {
671   char *filename = pst->filename;
672   struct dbx_symfile_info *dbx = (struct dbx_symfile_info *)
673                                  objfile->sym_stab_info;
674   struct stab_section_info *maybe = dbx->stab_section_info;
675   struct stab_section_info *questionable = 0;
676   int i;
677   char *p;
678
679   /* The ELF symbol info doesn't include path names, so strip the path
680      (if any) from the psymtab filename.  */
681   while (0 != (p = strchr (filename, '/')))
682     filename = p+1;
683
684   /* FIXME:  This linear search could speed up significantly
685      if it was chained in the right order to match how we search it,
686      and if we unchained when we found a match. */
687   for (; maybe; maybe = maybe->next)
688     {
689       if (filename[0] == maybe->filename[0]
690           && STREQ (filename, maybe->filename))
691         {
692           /* We found a match.  But there might be several source files
693              (from different directories) with the same name.  */
694           if (0 == maybe->found)
695             break;
696           questionable = maybe;         /* Might use it later.  */
697         }
698     }
699
700   if (maybe == 0 && questionable != 0)
701     {
702       complain (&stab_info_questionable_complaint, filename);
703       maybe = questionable;
704     }
705
706   if (maybe)
707     {
708       /* Found it!  Allocate a new psymtab struct, and fill it in.  */
709       maybe->found++;
710       pst->section_offsets = (struct section_offsets *)
711         obstack_alloc (&objfile -> psymbol_obstack,
712                        sizeof (struct section_offsets) +
713                sizeof (pst->section_offsets->offsets) * (SECT_OFF_MAX-1));
714
715       for (i = 0; i < SECT_OFF_MAX; i++)
716         ANOFFSET (pst->section_offsets, i) = maybe->sections[i];
717       return;
718     }
719
720   /* We were unable to find any offsets for this file.  Complain.  */
721   if (dbx->stab_section_info)           /* If there *is* any info, */
722     complain (&stab_info_mismatch_complaint, filename);
723 }
724 \f
725 /* Register that we are able to handle ELF object file formats.  */
726
727 static struct sym_fns elf_sym_fns =
728 {
729   bfd_target_elf_flavour,
730   elf_new_init,         /* sym_new_init: init anything gbl to entire symtab */
731   elf_symfile_init,     /* sym_init: read initial info, setup for sym_read() */
732   elf_symfile_read,     /* sym_read: read a symbol file into symtab */
733   elf_symfile_finish,   /* sym_finish: finished with file, cleanup */
734   elf_symfile_offsets,  /* sym_offsets:  Translate ext. to int. relocation */
735   NULL                  /* next: pointer to next struct sym_fns */
736 };
737
738 void
739 _initialize_elfread ()
740 {
741   add_symtab_fns (&elf_sym_fns);
742 }