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