1
/* Read ELF (Executable and Linking Format) object files for GDB.
3
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4
2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
5
Portions Copyright (C) 2001, 2002 Mission Critical Linux, Inc.
6
Copyright (c) 2002, 2003, 2004, 2005 Red Hat, Inc. All rights reserved.
8
Written by Fred Fish at Cygnus Support.
10
This file is part of GDB.
12
This program is free software; you can redistribute it and/or modify
13
it under the terms of the GNU General Public License as published by
14
the Free Software Foundation; either version 2 of the License, or
15
(at your option) any later version.
17
This program is distributed in the hope that it will be useful,
18
but WITHOUT ANY WARRANTY; without even the implied warranty of
19
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
GNU General Public License for more details.
22
You should have received a copy of the GNU General Public License
23
along with this program; if not, write to the Free Software
24
Foundation, Inc., 59 Temple Place - Suite 330,
25
Boston, MA 02111-1307, USA. */
29
#include "gdb_string.h"
36
#include "stabsread.h"
37
#include "gdb-stabs.h"
38
#include "complaints.h"
41
extern void _initialize_elfread (void);
43
/* The struct elfinfo is available only during ELF symbol table and
44
psymtab reading. It is destroyed at the completion of psymtab-reading.
45
It's local to elf_symfile_read. */
49
file_ptr dboffset; /* Offset to dwarf debug section */
50
unsigned int dbsize; /* Size of dwarf debug section */
51
file_ptr lnoffset; /* Offset to dwarf line number section */
52
unsigned int lnsize; /* Size of dwarf line number section */
53
asection *stabsect; /* Section pointer for .stab section */
54
asection *stabindexsect; /* Section pointer for .stab.index section */
55
asection *mdebugsect; /* Section pointer for .mdebug section */
58
static void free_elfinfo (void *);
60
/* We are called once per section from elf_symfile_read. We
61
need to examine each section we are passed, check to see
62
if it is something we are interested in processing, and
63
if so, stash away some access information for the section.
65
For now we recognize the dwarf debug information sections and
66
line number sections from matching their section names. The
67
ELF definition is no real help here since it has no direct
68
knowledge of DWARF (by design, so any debugging format can be
71
We also recognize the ".stab" sections used by the Sun compilers
72
released with Solaris 2.
74
FIXME: The section names should not be hardwired strings (what
75
should they be? I don't think most object file formats have enough
76
section flags to specify what kind of debug section it is
80
elf_locate_sections (bfd *ignore_abfd, asection *sectp, void *eip)
84
ei = (struct elfinfo *) eip;
85
if (strcmp (sectp->name, ".debug") == 0)
87
ei->dboffset = sectp->filepos;
88
ei->dbsize = bfd_get_section_size_before_reloc (sectp);
90
else if (strcmp (sectp->name, ".line") == 0)
92
ei->lnoffset = sectp->filepos;
93
ei->lnsize = bfd_get_section_size_before_reloc (sectp);
95
else if (strcmp (sectp->name, ".stab") == 0)
99
else if (strcmp (sectp->name, ".stab.index") == 0)
101
ei->stabindexsect = sectp;
103
else if (strcmp (sectp->name, ".mdebug") == 0)
105
ei->mdebugsect = sectp;
109
static struct minimal_symbol *
110
record_minimal_symbol (char *name, CORE_ADDR address,
111
enum minimal_symbol_type ms_type,
112
asection *bfd_section, struct objfile *objfile)
114
if (ms_type == mst_text || ms_type == mst_file_text)
115
address = SMASH_TEXT_ADDRESS (address);
117
return prim_record_minimal_symbol_and_info
118
(name, address, ms_type, NULL, bfd_section->index, bfd_section, objfile);
125
elf_symtab_read -- read the symbol table of an ELF file
129
void elf_symtab_read (struct objfile *objfile, int dynamic)
133
Given an objfile and a flag that specifies whether or not the objfile
134
is for an executable or not (may be shared library for example), add
135
all the global function and data symbols to the minimal symbol table.
137
In stabs-in-ELF, as implemented by Sun, there are some local symbols
138
defined in the ELF symbol table, which can be used to locate
139
the beginnings of sections from each ".o" file that was linked to
140
form the executable objfile. We gather any such info and record it
141
in data structures hung off the objfile's private data.
146
elf_symtab_read (struct objfile *objfile, int dynamic)
150
asymbol **symbol_table;
151
long number_of_symbols;
153
struct cleanup *back_to;
156
enum minimal_symbol_type ms_type;
157
/* If sectinfo is nonNULL, it contains section info that should end up
158
filed in the objfile. */
159
struct stab_section_info *sectinfo = NULL;
160
/* If filesym is nonzero, it points to a file symbol, but we haven't
161
seen any section info for it yet. */
162
asymbol *filesym = 0;
163
#ifdef SOFUN_ADDRESS_MAYBE_MISSING
164
/* Name of filesym, as saved on the objfile_obstack. */
165
char *filesymname = obsavestring ("", 0, &objfile->objfile_obstack);
167
struct dbx_symfile_info *dbx = objfile->sym_stab_info;
168
int stripped = (bfd_get_symcount (objfile->obfd) == 0);
172
storage_needed = bfd_get_dynamic_symtab_upper_bound (objfile->obfd);
174
/* Nothing to be done if there is no dynamic symtab. */
175
if (storage_needed < 0)
180
storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
181
if (storage_needed < 0)
182
error ("Can't read symbols from %s: %s", bfd_get_filename (objfile->obfd),
183
bfd_errmsg (bfd_get_error ()));
185
if (storage_needed > 0)
187
symbol_table = (asymbol **) xmalloc (storage_needed);
188
back_to = make_cleanup (xfree, symbol_table);
190
number_of_symbols = bfd_canonicalize_dynamic_symtab (objfile->obfd,
193
number_of_symbols = bfd_canonicalize_symtab (objfile->obfd, symbol_table);
194
if (number_of_symbols < 0)
195
error ("Can't read symbols from %s: %s", bfd_get_filename (objfile->obfd),
196
bfd_errmsg (bfd_get_error ()));
198
for (i = 0; i < number_of_symbols; i++)
200
sym = symbol_table[i];
201
if (sym->name == NULL || *sym->name == '\0')
203
/* Skip names that don't exist (shouldn't happen), or names
204
that are null strings (may happen). */
208
offset = ANOFFSET (objfile->section_offsets, sym->section->index);
210
&& sym->section == &bfd_und_section
211
&& (sym->flags & BSF_FUNCTION))
213
struct minimal_symbol *msym;
215
/* Symbol is a reference to a function defined in
217
If its value is non zero then it is usually the address
218
of the corresponding entry in the procedure linkage table,
219
plus the desired section offset.
220
If its value is zero then the dynamic linker has to resolve
221
the symbol. We are unable to find any meaningful address
222
for this symbol in the executable file, so we skip it. */
223
symaddr = sym->value;
227
msym = record_minimal_symbol
228
((char *) sym->name, symaddr,
229
mst_solib_trampoline, sym->section, objfile);
230
#ifdef SOFUN_ADDRESS_MAYBE_MISSING
232
msym->filename = filesymname;
237
/* If it is a nonstripped executable, do not enter dynamic
238
symbols, as the dynamic symbol table is usually a subset
239
of the main symbol table. */
240
if (dynamic && !stripped)
242
if (sym->flags & BSF_FILE)
244
/* STT_FILE debugging symbol that helps stabs-in-elf debugging.
245
Chain any old one onto the objfile; remember new sym. */
246
if (sectinfo != NULL)
248
sectinfo->next = dbx->stab_section_info;
249
dbx->stab_section_info = sectinfo;
253
#ifdef SOFUN_ADDRESS_MAYBE_MISSING
255
obsavestring ((char *) filesym->name, strlen (filesym->name),
256
&objfile->objfile_obstack);
259
else if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK))
261
struct minimal_symbol *msym;
263
/* Select global/local/weak symbols. Note that bfd puts abs
264
symbols in their own section, so all symbols we are
265
interested in will have a section. */
266
/* Bfd symbols are section relative. */
267
symaddr = sym->value + sym->section->vma;
268
/* Relocate all non-absolute symbols by the section offset. */
269
if (sym->section != &bfd_abs_section)
273
/* For non-absolute symbols, use the type of the section
274
they are relative to, to intuit text/data. Bfd provides
275
no way of figuring this out for absolute symbols. */
276
if (sym->section == &bfd_abs_section)
278
/* This is a hack to get the minimal symbol type
279
right for Irix 5, which has absolute addresses
280
with special section indices for dynamic symbols. */
281
unsigned short shndx =
282
((elf_symbol_type *) sym)->internal_elf_sym.st_shndx;
292
case SHN_MIPS_ACOMMON:
299
/* If it is an Irix dynamic symbol, skip section name
300
symbols, relocate all others by section offset. */
301
if (ms_type != mst_abs)
303
if (sym->name[0] == '.')
308
else if (sym->section->flags & SEC_CODE)
310
if (sym->flags & BSF_GLOBAL)
314
else if ((sym->name[0] == '.' && sym->name[1] == 'L')
315
|| ((sym->flags & BSF_LOCAL)
316
&& sym->name[0] == '$'
317
&& sym->name[1] == 'L'))
318
/* Looks like a compiler-generated label. Skip
319
it. The assembler should be skipping these (to
320
keep executables small), but apparently with
321
gcc on the (deleted) delta m88k SVR4, it loses.
322
So to have us check too should be harmless (but
323
I encourage people to fix this in the assembler
324
instead of adding checks here). */
328
ms_type = mst_file_text;
331
else if (sym->section->flags & SEC_ALLOC)
333
if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
335
if (sym->section->flags & SEC_LOAD)
344
else if (sym->flags & BSF_LOCAL)
346
/* Named Local variable in a Data section.
347
Check its name for stabs-in-elf. */
348
int special_local_sect;
349
if (strcmp ("Bbss.bss", sym->name) == 0)
350
special_local_sect = SECT_OFF_BSS (objfile);
351
else if (strcmp ("Ddata.data", sym->name) == 0)
352
special_local_sect = SECT_OFF_DATA (objfile);
353
else if (strcmp ("Drodata.rodata", sym->name) == 0)
354
special_local_sect = SECT_OFF_RODATA (objfile);
356
special_local_sect = -1;
357
if (special_local_sect >= 0)
359
/* Found a special local symbol. Allocate a
360
sectinfo, if needed, and fill it in. */
361
if (sectinfo == NULL)
367
= max (SECT_OFF_BSS (objfile),
368
max (SECT_OFF_DATA (objfile),
369
SECT_OFF_RODATA (objfile)));
371
/* max_index is the largest index we'll
372
use into this array, so we must
373
allocate max_index+1 elements for it.
374
However, 'struct stab_section_info'
375
already includes one element, so we
376
need to allocate max_index aadditional
378
size = (sizeof (struct stab_section_info)
379
+ (sizeof (CORE_ADDR)
381
sectinfo = (struct stab_section_info *)
382
xmmalloc (objfile->md, size);
383
memset (sectinfo, 0, size);
384
sectinfo->num_sections = max_index;
387
complaint (&symfile_complaints,
388
"elf/stab section information %s without a preceding file symbol",
394
(char *) filesym->name;
397
if (sectinfo->sections[special_local_sect] != 0)
398
complaint (&symfile_complaints,
399
"duplicated elf/stab section information for %s",
401
/* BFD symbols are section relative. */
402
symaddr = sym->value + sym->section->vma;
403
/* Relocate non-absolute symbols by the
405
if (sym->section != &bfd_abs_section)
407
sectinfo->sections[special_local_sect] = symaddr;
408
/* The special local symbols don't go in the
409
minimal symbol table, so ignore this one. */
412
/* Not a special stabs-in-elf symbol, do regular
413
symbol processing. */
414
if (sym->section->flags & SEC_LOAD)
416
ms_type = mst_file_data;
420
ms_type = mst_file_bss;
425
ms_type = mst_unknown;
430
/* FIXME: Solaris2 shared libraries include lots of
431
odd "absolute" and "undefined" symbols, that play
432
hob with actions like finding what function the PC
433
is in. Ignore them if they aren't text, data, or bss. */
434
/* ms_type = mst_unknown; */
435
continue; /* Skip this symbol. */
437
msym = record_minimal_symbol
438
((char *) sym->name, symaddr,
439
ms_type, sym->section, objfile);
442
/* Pass symbol size field in via BFD. FIXME!!! */
443
unsigned long size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
444
MSYMBOL_SIZE(msym) = size;
448
void patch_load_module(struct objfile *,
449
struct minimal_symbol *);
450
patch_load_module(objfile, msym);
453
#ifdef SOFUN_ADDRESS_MAYBE_MISSING
455
msym->filename = filesymname;
457
ELF_MAKE_MSYMBOL_SPECIAL (sym, msym);
460
do_cleanups (back_to);
464
/* Scan and build partial symbols for a symbol file.
465
We have been initialized by a call to elf_symfile_init, which
466
currently does nothing.
468
SECTION_OFFSETS is a set of offsets to apply to relocate the symbols
469
in each section. We simplify it down to a single offset for all
472
MAINLINE is true if we are reading the main symbol
473
table (as opposed to a shared lib or dynamically loaded file).
475
This function only does the minimum work necessary for letting the
476
user "name" things symbolically; it does not read the entire symtab.
477
Instead, it reads the external and static symbols and puts them in partial
478
symbol tables. When more extensive information is requested of a
479
file, the corresponding partial symbol table is mutated into a full
480
fledged symbol table by going back and reading the symbols
483
We look for sections with specific names, to tell us what debug
484
format to look for: FIXME!!!
486
dwarf_build_psymtabs() builds psymtabs for DWARF symbols;
487
elfstab_build_psymtabs() handles STABS symbols;
488
mdebug_build_psymtabs() handles ECOFF debugging information.
490
Note that ELF files have a "minimal" symbol table, which looks a lot
491
like a COFF symbol table, but has only the minimal information necessary
492
for linking. We process this also, and use the information to
493
build gdb's minimal symbol table. This gives us some minimal debugging
494
capability even for files compiled without -g. */
497
elf_symfile_read (struct objfile *objfile, int mainline)
499
bfd *abfd = objfile->obfd;
501
struct cleanup *back_to;
504
init_minimal_symbol_collection ();
505
back_to = make_cleanup_discard_minimal_symbols ();
507
memset ((char *) &ei, 0, sizeof (ei));
509
/* Allocate struct to keep track of the symfile */
510
objfile->sym_stab_info = (struct dbx_symfile_info *)
511
xmmalloc (objfile->md, sizeof (struct dbx_symfile_info));
512
memset ((char *) objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
513
make_cleanup (free_elfinfo, (void *) objfile);
515
/* Process the normal ELF symbol table first. This may write some
516
chain of info into the dbx_symfile_info in objfile->sym_stab_info,
517
which can later be used by elfstab_offset_sections. */
519
elf_symtab_read (objfile, 0);
521
/* Add the dynamic symbols. */
523
elf_symtab_read (objfile, 1);
525
/* Install any minimal symbols that have been collected as the current
526
minimal symbols for this objfile. The debug readers below this point
527
should not generate new minimal symbols; if they do it's their
528
responsibility to install them. "mdebug" appears to be the only one
529
which will do this. */
531
install_minimal_symbols (objfile);
532
do_cleanups (back_to);
534
/* Now process debugging information, which is contained in
535
special ELF sections. */
537
/* If we are reinitializing, or if we have never loaded syms yet,
538
set table to empty. MAINLINE is cleared so that *_read_psymtab
539
functions do not all also re-initialize the psymbol table. */
542
init_psymbol_list (objfile, 0);
546
/* We first have to find them... */
547
bfd_map_over_sections (abfd, elf_locate_sections, (void *) & ei);
549
/* ELF debugging information is inserted into the psymtab in the
550
order of least informative first - most informative last. Since
551
the psymtab table is searched `most recent insertion first' this
552
increases the probability that more detailed debug information
553
for a section is found.
555
For instance, an object file might contain both .mdebug (XCOFF)
556
and .debug_info (DWARF2) sections then .mdebug is inserted first
557
(searched last) and DWARF2 is inserted last (searched first). If
558
we don't do this then the XCOFF info is found first - for code in
559
an included file XCOFF info is useless. */
563
const struct ecoff_debug_swap *swap;
565
/* .mdebug section, presumably holding ECOFF debugging
567
swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
569
elfmdebug_build_psymtabs (objfile, swap, ei.mdebugsect);
575
/* Stab sections have an associated string table that looks like
576
a separate section. */
577
str_sect = bfd_get_section_by_name (abfd, ".stabstr");
579
/* FIXME should probably warn about a stab section without a stabstr. */
581
elfstab_build_psymtabs (objfile,
585
bfd_section_size (abfd, str_sect));
587
if (dwarf2_has_info (abfd))
589
/* DWARF 2 sections */
590
dwarf2_build_psymtabs (objfile, mainline);
592
else if (ei.dboffset && ei.lnoffset)
595
dwarf_build_psymtabs (objfile,
597
ei.dboffset, ei.dbsize,
598
ei.lnoffset, ei.lnsize);
601
/* FIXME: kettenis/20030504: This still needs to be integrated with
602
dwarf2read.c in a better way. */
603
dwarf2_build_frame_info (objfile);
606
/* This cleans up the objfile's sym_stab_info pointer, and the chain of
607
stab_section_info's, that might be dangling from it. */
610
free_elfinfo (void *objp)
612
struct objfile *objfile = (struct objfile *) objp;
613
struct dbx_symfile_info *dbxinfo = objfile->sym_stab_info;
614
struct stab_section_info *ssi, *nssi;
616
ssi = dbxinfo->stab_section_info;
620
xmfree (objfile->md, ssi);
624
dbxinfo->stab_section_info = 0; /* Just say No mo info about this. */
628
/* Initialize anything that needs initializing when a completely new symbol
629
file is specified (not just adding some symbols from another file, e.g. a
632
We reinitialize buildsym, since we may be reading stabs from an ELF file. */
635
elf_new_init (struct objfile *ignore)
637
stabsread_new_init ();
638
buildsym_new_init ();
641
/* Perform any local cleanups required when we are done with a particular
642
objfile. I.E, we are in the process of discarding all symbol information
643
for an objfile, freeing up all memory held for it, and unlinking the
644
objfile struct from the global list of known objfiles. */
647
elf_symfile_finish (struct objfile *objfile)
649
if (objfile->sym_stab_info != NULL)
651
xmfree (objfile->md, objfile->sym_stab_info);
655
/* ELF specific initialization routine for reading symbols.
657
It is passed a pointer to a struct sym_fns which contains, among other
658
things, the BFD for the file whose symbols are being read, and a slot for
659
a pointer to "private data" which we can fill with goodies.
661
For now at least, we have nothing in particular to do, so this function is
665
elf_symfile_init (struct objfile *objfile)
667
/* ELF objects may be reordered, so set OBJF_REORDERED. If we
668
find this causes a significant slowdown in gdb then we could
669
set it in the debug symbol readers only when necessary. */
670
objfile->flags |= OBJF_REORDERED;
673
/* When handling an ELF file that contains Sun STABS debug info,
674
some of the debug info is relative to the particular chunk of the
675
section that was generated in its individual .o file. E.g.
676
offsets to static variables are relative to the start of the data
677
segment *for that module before linking*. This information is
678
painfully squirreled away in the ELF symbol table as local symbols
679
with wierd names. Go get 'em when needed. */
682
elfstab_offset_sections (struct objfile *objfile, struct partial_symtab *pst)
684
char *filename = pst->filename;
685
struct dbx_symfile_info *dbx = objfile->sym_stab_info;
686
struct stab_section_info *maybe = dbx->stab_section_info;
687
struct stab_section_info *questionable = 0;
691
/* The ELF symbol info doesn't include path names, so strip the path
692
(if any) from the psymtab filename. */
693
while (0 != (p = strchr (filename, '/')))
696
/* FIXME: This linear search could speed up significantly
697
if it was chained in the right order to match how we search it,
698
and if we unchained when we found a match. */
699
for (; maybe; maybe = maybe->next)
701
if (filename[0] == maybe->filename[0]
702
&& strcmp (filename, maybe->filename) == 0)
704
/* We found a match. But there might be several source files
705
(from different directories) with the same name. */
706
if (0 == maybe->found)
708
questionable = maybe; /* Might use it later. */
712
if (maybe == 0 && questionable != 0)
714
complaint (&symfile_complaints,
715
"elf/stab section information questionable for %s", filename);
716
maybe = questionable;
721
/* Found it! Allocate a new psymtab struct, and fill it in. */
723
pst->section_offsets = (struct section_offsets *)
724
obstack_alloc (&objfile->objfile_obstack,
725
SIZEOF_N_SECTION_OFFSETS (objfile->num_sections));
726
for (i = 0; i < maybe->num_sections; i++)
727
(pst->section_offsets)->offsets[i] = maybe->sections[i];
731
/* We were unable to find any offsets for this file. Complain. */
732
if (dbx->stab_section_info) /* If there *is* any info, */
733
complaint (&symfile_complaints,
734
"elf/stab section information missing for %s", filename);
737
/* Register that we are able to handle ELF object file formats. */
739
static struct sym_fns elf_sym_fns =
741
bfd_target_elf_flavour,
742
elf_new_init, /* sym_new_init: init anything gbl to entire symtab */
743
elf_symfile_init, /* sym_init: read initial info, setup for sym_read() */
744
elf_symfile_read, /* sym_read: read a symbol file into symtab */
745
elf_symfile_finish, /* sym_finish: finished with file, cleanup */
746
default_symfile_offsets, /* sym_offsets: Translate ext. to int. relocation */
747
NULL /* next: pointer to next struct sym_fns */
751
_initialize_elfread (void)
753
add_symtab_fns (&elf_sym_fns);