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