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