Home | History | Annotate | Line # | Download | only in bfd
syms.c revision 1.1.1.11
      1 /* Generic symbol-table support for the BFD library.
      2    Copyright (C) 1990-2024 Free Software Foundation, Inc.
      3    Written by Cygnus Support.
      4 
      5    This file is part of BFD, the Binary File Descriptor library.
      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 3 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., 51 Franklin Street - Fifth Floor, Boston,
     20    MA 02110-1301, USA.  */
     21 
     22 /*
     23 SECTION
     24 	Symbols
     25 
     26 	BFD tries to maintain as much symbol information as it can when
     27 	it moves information from file to file. BFD passes information
     28 	to applications though the <<asymbol>> structure. When the
     29 	application requests the symbol table, BFD reads the table in
     30 	the native form and translates parts of it into the internal
     31 	format. To maintain more than the information passed to
     32 	applications, some targets keep some information ``behind the
     33 	scenes'' in a structure only the particular back end knows
     34 	about. For example, the coff back end keeps the original
     35 	symbol table structure as well as the canonical structure when
     36 	a BFD is read in. On output, the coff back end can reconstruct
     37 	the output symbol table so that no information is lost, even
     38 	information unique to coff which BFD doesn't know or
     39 	understand. If a coff symbol table were read, but were written
     40 	through an a.out back end, all the coff specific information
     41 	would be lost. The symbol table of a BFD
     42 	is not necessarily read in until a canonicalize request is
     43 	made. Then the BFD back end fills in a table provided by the
     44 	application with pointers to the canonical information.  To
     45 	output symbols, the application provides BFD with a table of
     46 	pointers to pointers to <<asymbol>>s. This allows applications
     47 	like the linker to output a symbol as it was read, since the ``behind
     48 	the scenes'' information will be still available.
     49 @menu
     50 @* Reading Symbols::
     51 @* Writing Symbols::
     52 @* Mini Symbols::
     53 @* typedef asymbol::
     54 @* symbol handling functions::
     55 @end menu
     56 
     57 INODE
     58 Reading Symbols, Writing Symbols, Symbols, Symbols
     59 SUBSECTION
     60 	Reading symbols
     61 
     62 	There are two stages to reading a symbol table from a BFD:
     63 	allocating storage, and the actual reading process. This is an
     64 	excerpt from an application which reads the symbol table:
     65 
     66 |         long storage_needed;
     67 |         asymbol **symbol_table;
     68 |         long number_of_symbols;
     69 |         long i;
     70 |
     71 |         storage_needed = bfd_get_symtab_upper_bound (abfd);
     72 |
     73 |         if (storage_needed < 0)
     74 |           FAIL
     75 |
     76 |         if (storage_needed == 0)
     77 |           return;
     78 |
     79 |         symbol_table = xmalloc (storage_needed);
     80 |           ...
     81 |         number_of_symbols =
     82 |            bfd_canonicalize_symtab (abfd, symbol_table);
     83 |
     84 |         if (number_of_symbols < 0)
     85 |           FAIL
     86 |
     87 |         for (i = 0; i < number_of_symbols; i++)
     88 |           process_symbol (symbol_table[i]);
     89 
     90 	All storage for the symbols themselves is in an objalloc
     91 	connected to the BFD; it is freed when the BFD is closed.
     92 
     93 INODE
     94 Writing Symbols, Mini Symbols, Reading Symbols, Symbols
     95 SUBSECTION
     96 	Writing symbols
     97 
     98 	Writing of a symbol table is automatic when a BFD open for
     99 	writing is closed. The application attaches a vector of
    100 	pointers to pointers to symbols to the BFD being written, and
    101 	fills in the symbol count. The close and cleanup code reads
    102 	through the table provided and performs all the necessary
    103 	operations. The BFD output code must always be provided with an
    104 	``owned'' symbol: one which has come from another BFD, or one
    105 	which has been created using <<bfd_make_empty_symbol>>.  Here is an
    106 	example showing the creation of a symbol table with only one element:
    107 
    108 |       #include "sysdep.h"
    109 |       #include "bfd.h"
    110 |       int main (void)
    111 |       {
    112 |         bfd *abfd;
    113 |         asymbol *ptrs[2];
    114 |         asymbol *new;
    115 |
    116 |         abfd = bfd_openw ("foo","a.out-sunos-big");
    117 |         bfd_set_format (abfd, bfd_object);
    118 |         new = bfd_make_empty_symbol (abfd);
    119 |         new->name = "dummy_symbol";
    120 |         new->section = bfd_make_section_old_way (abfd, ".text");
    121 |         new->flags = BSF_GLOBAL;
    122 |         new->value = 0x12345;
    123 |
    124 |         ptrs[0] = new;
    125 |         ptrs[1] = 0;
    126 |
    127 |         bfd_set_symtab (abfd, ptrs, 1);
    128 |         bfd_close (abfd);
    129 |         return 0;
    130 |       }
    131 |
    132 |       ./makesym
    133 |       nm foo
    134 |       00012345 A dummy_symbol
    135 
    136 	Many formats cannot represent arbitrary symbol information; for
    137 	instance, the <<a.out>> object format does not allow an
    138 	arbitrary number of sections. A symbol pointing to a section
    139 	which is not one  of <<.text>>, <<.data>> or <<.bss>> cannot
    140 	be described.
    141 
    142 INODE
    143 Mini Symbols, typedef asymbol, Writing Symbols, Symbols
    144 SUBSECTION
    145 	Mini Symbols
    146 
    147 	Mini symbols provide read-only access to the symbol table.
    148 	They use less memory space, but require more time to access.
    149 	They can be useful for tools like nm or objdump, which may
    150 	have to handle symbol tables of extremely large executables.
    151 
    152 	The <<bfd_read_minisymbols>> function will read the symbols
    153 	into memory in an internal form.  It will return a <<void *>>
    154 	pointer to a block of memory, a symbol count, and the size of
    155 	each symbol.  The pointer is allocated using <<malloc>>, and
    156 	should be freed by the caller when it is no longer needed.
    157 
    158 	The function <<bfd_minisymbol_to_symbol>> will take a pointer
    159 	to a minisymbol, and a pointer to a structure returned by
    160 	<<bfd_make_empty_symbol>>, and return a <<asymbol>> structure.
    161 	The return value may or may not be the same as the value from
    162 	<<bfd_make_empty_symbol>> which was passed in.
    163 
    164 */
    165 
    166 /*
    167 DOCDD
    168 INODE
    169 typedef asymbol, symbol handling functions, Mini Symbols, Symbols
    170 
    171 SUBSECTION
    172 	typedef asymbol
    173 
    174 	An <<asymbol>> has the form:
    175 
    176 CODE_FRAGMENT
    177 .typedef struct bfd_symbol
    178 .{
    179 .  {* A pointer to the BFD which owns the symbol. This information
    180 .     is necessary so that a back end can work out what additional
    181 .     information (invisible to the application writer) is carried
    182 .     with the symbol.
    183 .
    184 .     This field is *almost* redundant, since you can use section->owner
    185 .     instead, except that some symbols point to the global sections
    186 .     bfd_{abs,com,und}_section.  This could be fixed by making
    187 .     these globals be per-bfd (or per-target-flavor).  FIXME.  *}
    188 .  struct bfd *the_bfd; {* Use bfd_asymbol_bfd(sym) to access this field.  *}
    189 .
    190 .  {* The text of the symbol. The name is left alone, and not copied; the
    191 .     application may not alter it.  *}
    192 .  const char *name;
    193 .
    194 .  {* The value of the symbol.  This really should be a union of a
    195 .     numeric value with a pointer, since some flags indicate that
    196 .     a pointer to another symbol is stored here.  *}
    197 .  symvalue value;
    198 .
    199 .  {* Attributes of a symbol.  *}
    200 .#define BSF_NO_FLAGS            0
    201 .
    202 .  {* The symbol has local scope; <<static>> in <<C>>. The value
    203 .     is the offset into the section of the data.  *}
    204 .#define BSF_LOCAL               (1 << 0)
    205 .
    206 .  {* The symbol has global scope; initialized data in <<C>>. The
    207 .     value is the offset into the section of the data.  *}
    208 .#define BSF_GLOBAL              (1 << 1)
    209 .
    210 .  {* The symbol has global scope and is exported. The value is
    211 .     the offset into the section of the data.  *}
    212 .#define BSF_EXPORT              BSF_GLOBAL {* No real difference.  *}
    213 .
    214 .  {* A normal C symbol would be one of:
    215 .     <<BSF_LOCAL>>, <<BSF_UNDEFINED>> or <<BSF_GLOBAL>>.  *}
    216 .
    217 .  {* The symbol is a debugging record. The value has an arbitrary
    218 .     meaning, unless BSF_DEBUGGING_RELOC is also set.  *}
    219 .#define BSF_DEBUGGING           (1 << 2)
    220 .
    221 .  {* The symbol denotes a function entry point.  Used in ELF,
    222 .     perhaps others someday.  *}
    223 .#define BSF_FUNCTION            (1 << 3)
    224 .
    225 .  {* Used by the linker.  *}
    226 .#define BSF_KEEP                (1 << 5)
    227 .
    228 .  {* An ELF common symbol.  *}
    229 .#define BSF_ELF_COMMON          (1 << 6)
    230 .
    231 .  {* A weak global symbol, overridable without warnings by
    232 .     a regular global symbol of the same name.  *}
    233 .#define BSF_WEAK                (1 << 7)
    234 .
    235 .  {* This symbol was created to point to a section, e.g. ELF's
    236 .     STT_SECTION symbols.  *}
    237 .#define BSF_SECTION_SYM         (1 << 8)
    238 .
    239 .  {* The symbol used to be a common symbol, but now it is
    240 .     allocated.  *}
    241 .#define BSF_OLD_COMMON          (1 << 9)
    242 .
    243 .  {* In some files the type of a symbol sometimes alters its
    244 .     location in an output file - ie in coff a <<ISFCN>> symbol
    245 .     which is also <<C_EXT>> symbol appears where it was
    246 .     declared and not at the end of a section.  This bit is set
    247 .     by the target BFD part to convey this information.  *}
    248 .#define BSF_NOT_AT_END          (1 << 10)
    249 .
    250 .  {* Signal that the symbol is the label of constructor section.  *}
    251 .#define BSF_CONSTRUCTOR         (1 << 11)
    252 .
    253 .  {* Signal that the symbol is a warning symbol.  The name is a
    254 .     warning.  The name of the next symbol is the one to warn about;
    255 .     if a reference is made to a symbol with the same name as the next
    256 .     symbol, a warning is issued by the linker.  *}
    257 .#define BSF_WARNING             (1 << 12)
    258 .
    259 .  {* Signal that the symbol is indirect.  This symbol is an indirect
    260 .     pointer to the symbol with the same name as the next symbol.  *}
    261 .#define BSF_INDIRECT            (1 << 13)
    262 .
    263 .  {* BSF_FILE marks symbols that contain a file name.  This is used
    264 .     for ELF STT_FILE symbols.  *}
    265 .#define BSF_FILE                (1 << 14)
    266 .
    267 .  {* Symbol is from dynamic linking information.  *}
    268 .#define BSF_DYNAMIC             (1 << 15)
    269 .
    270 .  {* The symbol denotes a data object.  Used in ELF, and perhaps
    271 .     others someday.  *}
    272 .#define BSF_OBJECT              (1 << 16)
    273 .
    274 .  {* This symbol is a debugging symbol.  The value is the offset
    275 .     into the section of the data.  BSF_DEBUGGING should be set
    276 .     as well.  *}
    277 .#define BSF_DEBUGGING_RELOC     (1 << 17)
    278 .
    279 .  {* This symbol is thread local.  Used in ELF.  *}
    280 .#define BSF_THREAD_LOCAL        (1 << 18)
    281 .
    282 .  {* This symbol represents a complex relocation expression,
    283 .     with the expression tree serialized in the symbol name.  *}
    284 .#define BSF_RELC                (1 << 19)
    285 .
    286 .  {* This symbol represents a signed complex relocation expression,
    287 .     with the expression tree serialized in the symbol name.  *}
    288 .#define BSF_SRELC               (1 << 20)
    289 .
    290 .  {* This symbol was created by bfd_get_synthetic_symtab.  *}
    291 .#define BSF_SYNTHETIC           (1 << 21)
    292 .
    293 .  {* This symbol is an indirect code object.  Unrelated to BSF_INDIRECT.
    294 .     The dynamic linker will compute the value of this symbol by
    295 .     calling the function that it points to.  BSF_FUNCTION must
    296 .     also be also set.  *}
    297 .#define BSF_GNU_INDIRECT_FUNCTION (1 << 22)
    298 .  {* This symbol is a globally unique data object.  The dynamic linker
    299 .     will make sure that in the entire process there is just one symbol
    300 .     with this name and type in use.  BSF_OBJECT must also be set.  *}
    301 .#define BSF_GNU_UNIQUE          (1 << 23)
    302 .
    303 .  {* This section symbol should be included in the symbol table.  *}
    304 .#define BSF_SECTION_SYM_USED    (1 << 24)
    305 .
    306 .  flagword flags;
    307 .
    308 .  {* A pointer to the section to which this symbol is
    309 .     relative.  This will always be non NULL, there are special
    310 .     sections for undefined and absolute symbols.  *}
    311 .  struct bfd_section *section;
    312 .
    313 .  {* Back end special data.  *}
    314 .  union
    315 .    {
    316 .      void *p;
    317 .      bfd_vma i;
    318 .    }
    319 .  udata;
    320 .}
    321 .asymbol;
    322 .
    323 
    324 EXTERNAL
    325 .typedef enum bfd_print_symbol
    326 .{
    327 .  bfd_print_symbol_name,
    328 .  bfd_print_symbol_more,
    329 .  bfd_print_symbol_all
    330 .} bfd_print_symbol_type;
    331 .
    332 .{* Information about a symbol that nm needs.  *}
    333 .
    334 .typedef struct _symbol_info
    335 .{
    336 .  symvalue value;
    337 .  char type;
    338 .  const char *name;		{* Symbol name.  *}
    339 .  unsigned char stab_type;	{* Stab type.  *}
    340 .  char stab_other;		{* Stab other.  *}
    341 .  short stab_desc;		{* Stab desc.  *}
    342 .  const char *stab_name;	{* String for stab type.  *}
    343 .} symbol_info;
    344 .
    345 */
    346 
    347 #include "sysdep.h"
    348 #include "bfd.h"
    349 #include "libbfd.h"
    350 #include "safe-ctype.h"
    351 #include "bfdlink.h"
    352 #include "aout/stab_gnu.h"
    353 
    354 /*
    355 DOCDD
    356 INODE
    357 symbol handling functions,  , typedef asymbol, Symbols
    358 SUBSECTION
    359 	Symbol handling functions
    360 */
    361 
    362 /*
    363 FUNCTION
    364 	bfd_get_symtab_upper_bound
    365 
    366 DESCRIPTION
    367 	Return the number of bytes required to store a vector of pointers
    368 	to <<asymbols>> for all the symbols in the BFD @var{abfd},
    369 	including a terminal NULL pointer. If there are no symbols in
    370 	the BFD, then return 0.  If an error occurs, return -1.
    371 
    372 .#define bfd_get_symtab_upper_bound(abfd) \
    373 .	BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
    374 .
    375 */
    376 
    377 /*
    378 FUNCTION
    379 	bfd_is_local_label
    380 
    381 SYNOPSIS
    382 	bool bfd_is_local_label (bfd *abfd, asymbol *sym);
    383 
    384 DESCRIPTION
    385 	Return TRUE if the given symbol @var{sym} in the BFD @var{abfd} is
    386 	a compiler generated local label, else return FALSE.
    387 */
    388 
    389 bool
    390 bfd_is_local_label (bfd *abfd, asymbol *sym)
    391 {
    392   /* The BSF_SECTION_SYM check is needed for IA-64, where every label that
    393      starts with '.' is local.  This would accidentally catch section names
    394      if we didn't reject them here.  */
    395   if ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_FILE | BSF_SECTION_SYM)) != 0)
    396     return false;
    397   if (sym->name == NULL)
    398     return false;
    399   return bfd_is_local_label_name (abfd, sym->name);
    400 }
    401 
    402 /*
    403 FUNCTION
    404 	bfd_is_local_label_name
    405 
    406 SYNOPSIS
    407 	bool bfd_is_local_label_name (bfd *abfd, const char *name);
    408 
    409 DESCRIPTION
    410 	Return TRUE if a symbol with the name @var{name} in the BFD
    411 	@var{abfd} is a compiler generated local label, else return
    412 	FALSE.  This just checks whether the name has the form of a
    413 	local label.
    414 
    415 .#define bfd_is_local_label_name(abfd, name) \
    416 .	BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
    417 .
    418 */
    419 
    420 /*
    421 FUNCTION
    422 	bfd_is_target_special_symbol
    423 
    424 SYNOPSIS
    425 	bool bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
    426 
    427 DESCRIPTION
    428 	Return TRUE iff a symbol @var{sym} in the BFD @var{abfd} is something
    429 	special to the particular target represented by the BFD.  Such symbols
    430 	should normally not be mentioned to the user.
    431 
    432 .#define bfd_is_target_special_symbol(abfd, sym) \
    433 .	BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
    434 .
    435 */
    436 
    437 /*
    438 FUNCTION
    439 	bfd_canonicalize_symtab
    440 
    441 DESCRIPTION
    442 	Read the symbols from the BFD @var{abfd}, and fills in
    443 	the vector @var{location} with pointers to the symbols and
    444 	a trailing NULL.
    445 	Return the actual number of symbol pointers, not
    446 	including the NULL.
    447 
    448 .#define bfd_canonicalize_symtab(abfd, location) \
    449 .	BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))
    450 .
    451 */
    452 
    453 /*
    454 FUNCTION
    455 	bfd_set_symtab
    456 
    457 SYNOPSIS
    458 	bool bfd_set_symtab
    459 	  (bfd *abfd, asymbol **location, unsigned int count);
    460 
    461 DESCRIPTION
    462 	Arrange that when the output BFD @var{abfd} is closed,
    463 	the table @var{location} of @var{count} pointers to symbols
    464 	will be written.
    465 */
    466 
    467 bool
    468 bfd_set_symtab (bfd *abfd, asymbol **location, unsigned int symcount)
    469 {
    470   if (abfd->format != bfd_object || bfd_read_p (abfd))
    471     {
    472       bfd_set_error (bfd_error_invalid_operation);
    473       return false;
    474     }
    475 
    476   abfd->outsymbols = location;
    477   abfd->symcount = symcount;
    478   return true;
    479 }
    480 
    481 /*
    482 FUNCTION
    483 	bfd_print_symbol_vandf
    484 
    485 SYNOPSIS
    486 	void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
    487 
    488 DESCRIPTION
    489 	Print the value and flags of the @var{symbol} supplied to the
    490 	stream @var{file}.
    491 */
    492 void
    493 bfd_print_symbol_vandf (bfd *abfd, void *arg, asymbol *symbol)
    494 {
    495   FILE *file = (FILE *) arg;
    496 
    497   flagword type = symbol->flags;
    498 
    499   if (symbol->section != NULL)
    500     bfd_fprintf_vma (abfd, file, symbol->value + symbol->section->vma);
    501   else
    502     bfd_fprintf_vma (abfd, file, symbol->value);
    503 
    504   /* This presumes that a symbol can not be both BSF_DEBUGGING and
    505      BSF_DYNAMIC, nor more than one of BSF_FUNCTION, BSF_FILE, and
    506      BSF_OBJECT.  */
    507   fprintf (file, " %c%c%c%c%c%c%c",
    508 	   ((type & BSF_LOCAL)
    509 	    ? (type & BSF_GLOBAL) ? '!' : 'l'
    510 	    : (type & BSF_GLOBAL) ? 'g'
    511 	    : (type & BSF_GNU_UNIQUE) ? 'u' : ' '),
    512 	   (type & BSF_WEAK) ? 'w' : ' ',
    513 	   (type & BSF_CONSTRUCTOR) ? 'C' : ' ',
    514 	   (type & BSF_WARNING) ? 'W' : ' ',
    515 	   (type & BSF_INDIRECT) ? 'I' : (type & BSF_GNU_INDIRECT_FUNCTION) ? 'i' : ' ',
    516 	   (type & BSF_DEBUGGING) ? 'd' : (type & BSF_DYNAMIC) ? 'D' : ' ',
    517 	   ((type & BSF_FUNCTION)
    518 	    ? 'F'
    519 	    : ((type & BSF_FILE)
    520 	       ? 'f'
    521 	       : ((type & BSF_OBJECT) ? 'O' : ' '))));
    522 }
    523 
    524 /*
    525 FUNCTION
    526 	bfd_make_empty_symbol
    527 
    528 DESCRIPTION
    529 	Create a new <<asymbol>> structure for the BFD @var{abfd}
    530 	and return a pointer to it.
    531 
    532 	This routine is necessary because each back end has private
    533 	information surrounding the <<asymbol>>. Building your own
    534 	<<asymbol>> and pointing to it will not create the private
    535 	information, and will cause problems later on.
    536 
    537 .#define bfd_make_empty_symbol(abfd) \
    538 .	BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
    539 .
    540 */
    541 
    542 /*
    543 FUNCTION
    544 	_bfd_generic_make_empty_symbol
    545 
    546 SYNOPSIS
    547 	asymbol *_bfd_generic_make_empty_symbol (bfd *);
    548 
    549 DESCRIPTION
    550 	Create a new <<asymbol>> structure for the BFD @var{abfd}
    551 	and return a pointer to it.  Used by core file routines,
    552 	binary back-end and anywhere else where no private info
    553 	is needed.
    554 */
    555 
    556 asymbol *
    557 _bfd_generic_make_empty_symbol (bfd *abfd)
    558 {
    559   size_t amt = sizeof (asymbol);
    560   asymbol *new_symbol = (asymbol *) bfd_zalloc (abfd, amt);
    561   if (new_symbol)
    562     new_symbol->the_bfd = abfd;
    563   return new_symbol;
    564 }
    565 
    566 /*
    567 FUNCTION
    568 	bfd_make_debug_symbol
    569 
    570 DESCRIPTION
    571 	Create a new <<asymbol>> structure for the BFD @var{abfd},
    572 	to be used as a debugging symbol.
    573 
    574 .#define bfd_make_debug_symbol(abfd) \
    575 .	BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd))
    576 .
    577 */
    578 
    579 struct section_to_type
    580 {
    581   const char *section;
    582   char type;
    583 };
    584 
    585 /* Map special section names to POSIX/BSD single-character symbol types.
    586    This table is probably incomplete.  It is sorted for convenience of
    587    adding entries.  Since it is so short, a linear search is used.  */
    588 static const struct section_to_type stt[] =
    589 {
    590   {".drectve", 'i'},		/* MSVC's .drective section */
    591   {".edata", 'e'},		/* MSVC's .edata (export) section */
    592   {".idata", 'i'},		/* MSVC's .idata (import) section */
    593   {".pdata", 'p'},		/* MSVC's .pdata (stack unwind) section */
    594   {0, 0}
    595 };
    596 
    597 /* Return the single-character symbol type corresponding to
    598    section S, or '?' for an unknown COFF section.
    599 
    600    Check for leading strings which match, followed by a number, '.',
    601    or '$' so .idata5 matches the .idata entry.  */
    602 
    603 static char
    604 coff_section_type (const char *s)
    605 {
    606   const struct section_to_type *t;
    607 
    608   for (t = &stt[0]; t->section; t++)
    609     {
    610       size_t len = strlen (t->section);
    611       if (strncmp (s, t->section, len) == 0
    612 	  && memchr (".$0123456789", s[len], 13) != 0)
    613 	return t->type;
    614     }
    615 
    616   return '?';
    617 }
    618 
    619 /* Return the single-character symbol type corresponding to section
    620    SECTION, or '?' for an unknown section.  This uses section flags to
    621    identify sections.
    622 
    623    FIXME These types are unhandled: e, i, p.  If we handled these also,
    624    we could perhaps obsolete coff_section_type.  */
    625 
    626 static char
    627 decode_section_type (const struct bfd_section *section)
    628 {
    629   if (section->flags & SEC_CODE)
    630     return 't';
    631   if (section->flags & SEC_DATA)
    632     {
    633       if (section->flags & SEC_READONLY)
    634 	return 'r';
    635       else if (section->flags & SEC_SMALL_DATA)
    636 	return 'g';
    637       else
    638 	return 'd';
    639     }
    640   if ((section->flags & SEC_HAS_CONTENTS) == 0)
    641     {
    642       if (section->flags & SEC_SMALL_DATA)
    643 	return 's';
    644       else
    645 	return 'b';
    646     }
    647   if (section->flags & SEC_DEBUGGING)
    648     return 'N';
    649   if ((section->flags & SEC_HAS_CONTENTS) && (section->flags & SEC_READONLY))
    650     return 'n';
    651 
    652   return '?';
    653 }
    654 
    655 /*
    656 FUNCTION
    657 	bfd_decode_symclass
    658 
    659 SYNOPSIS
    660 	int bfd_decode_symclass (asymbol *symbol);
    661 
    662 DESCRIPTION
    663 	Return a character corresponding to the symbol
    664 	class of @var{symbol}, or '?' for an unknown class.
    665 */
    666 int
    667 bfd_decode_symclass (asymbol *symbol)
    668 {
    669   char c;
    670 
    671   /* Paranoia...  */
    672   if (symbol == NULL || symbol->section == NULL)
    673     return '?';
    674 
    675   if (symbol->section && bfd_is_com_section (symbol->section))
    676     {
    677       if (symbol->section->flags & SEC_SMALL_DATA)
    678 	return 'c';
    679       else
    680 	return 'C';
    681     }
    682   if (bfd_is_und_section (symbol->section))
    683     {
    684       if (symbol->flags & BSF_WEAK)
    685 	{
    686 	  /* If weak, determine if it's specifically an object
    687 	     or non-object weak.  */
    688 	  if (symbol->flags & BSF_OBJECT)
    689 	    return 'v';
    690 	  else
    691 	    return 'w';
    692 	}
    693       else
    694 	return 'U';
    695     }
    696   if (bfd_is_ind_section (symbol->section))
    697     return 'I';
    698   if (symbol->flags & BSF_GNU_INDIRECT_FUNCTION)
    699     return 'i';
    700   if (symbol->flags & BSF_WEAK)
    701     {
    702       /* If weak, determine if it's specifically an object
    703 	 or non-object weak.  */
    704       if (symbol->flags & BSF_OBJECT)
    705 	return 'V';
    706       else
    707 	return 'W';
    708     }
    709   if (symbol->flags & BSF_GNU_UNIQUE)
    710     return 'u';
    711   if (!(symbol->flags & (BSF_GLOBAL | BSF_LOCAL)))
    712     return '?';
    713 
    714   if (bfd_is_abs_section (symbol->section))
    715     c = 'a';
    716   else if (symbol->section)
    717     {
    718       c = coff_section_type (symbol->section->name);
    719       if (c == '?')
    720 	c = decode_section_type (symbol->section);
    721     }
    722   else
    723     return '?';
    724   if (symbol->flags & BSF_GLOBAL)
    725     c = TOUPPER (c);
    726   return c;
    727 
    728   /* We don't have to handle these cases just yet, but we will soon:
    729      N_SETV: 'v';
    730      N_SETA: 'l';
    731      N_SETT: 'x';
    732      N_SETD: 'z';
    733      N_SETB: 's';
    734      N_INDR: 'i';
    735      */
    736 }
    737 
    738 /*
    739 FUNCTION
    740 	bfd_is_undefined_symclass
    741 
    742 SYNOPSIS
    743 	bool bfd_is_undefined_symclass (int symclass);
    744 
    745 DESCRIPTION
    746 	Returns non-zero if the class symbol returned by
    747 	bfd_decode_symclass represents an undefined symbol.
    748 	Returns zero otherwise.
    749 */
    750 
    751 bool
    752 bfd_is_undefined_symclass (int symclass)
    753 {
    754   return symclass == 'U' || symclass == 'w' || symclass == 'v';
    755 }
    756 
    757 /*
    758 FUNCTION
    759 	bfd_symbol_info
    760 
    761 SYNOPSIS
    762 	void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
    763 
    764 DESCRIPTION
    765 	Fill in the basic info about symbol that nm needs.
    766 	Additional info may be added by the back-ends after
    767 	calling this function.
    768 */
    769 
    770 void
    771 bfd_symbol_info (asymbol *symbol, symbol_info *ret)
    772 {
    773   ret->type = bfd_decode_symclass (symbol);
    774 
    775   if (bfd_is_undefined_symclass (ret->type))
    776     ret->value = 0;
    777   else
    778     ret->value = symbol->value + symbol->section->vma;
    779 
    780   ret->name = symbol->name;
    781 }
    782 
    783 /*
    784 FUNCTION
    785 	bfd_copy_private_symbol_data
    786 
    787 SYNOPSIS
    788 	bool bfd_copy_private_symbol_data
    789 	  (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
    790 
    791 DESCRIPTION
    792 	Copy private symbol information from @var{isym} in the BFD
    793 	@var{ibfd} to the symbol @var{osym} in the BFD @var{obfd}.
    794 	Return <<TRUE>> on success, <<FALSE>> on error.  Possible error
    795 	returns are:
    796 
    797 	o <<bfd_error_no_memory>> -
    798 	Not enough memory exists to create private data for @var{osec}.
    799 
    800 .#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
    801 .	BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
    802 .		  (ibfd, isymbol, obfd, osymbol))
    803 .
    804 */
    805 
    806 /* The generic version of the function which returns mini symbols.
    807    This is used when the backend does not provide a more efficient
    808    version.  It just uses BFD asymbol structures as mini symbols.  */
    809 
    810 long
    811 _bfd_generic_read_minisymbols (bfd *abfd,
    812 			       bool dynamic,
    813 			       void **minisymsp,
    814 			       unsigned int *sizep)
    815 {
    816   long storage;
    817   asymbol **syms = NULL;
    818   long symcount;
    819 
    820   if (dynamic)
    821     storage = bfd_get_dynamic_symtab_upper_bound (abfd);
    822   else
    823     storage = bfd_get_symtab_upper_bound (abfd);
    824   if (storage < 0)
    825     goto error_return;
    826   if (storage == 0)
    827     return 0;
    828 
    829   syms = (asymbol **) bfd_malloc (storage);
    830   if (syms == NULL)
    831     goto error_return;
    832 
    833   if (dynamic)
    834     symcount = bfd_canonicalize_dynamic_symtab (abfd, syms);
    835   else
    836     symcount = bfd_canonicalize_symtab (abfd, syms);
    837   if (symcount < 0)
    838     goto error_return;
    839 
    840   if (symcount == 0)
    841     /* We return 0 above when storage is 0.  Exit in the same state
    842        here, so as to not complicate callers with having to deal with
    843        freeing memory for zero symcount.  */
    844     free (syms);
    845   else
    846     {
    847       *minisymsp = syms;
    848       *sizep = sizeof (asymbol *);
    849     }
    850   return symcount;
    851 
    852  error_return:
    853   bfd_set_error (bfd_error_no_symbols);
    854   free (syms);
    855   return -1;
    856 }
    857 
    858 /* The generic version of the function which converts a minisymbol to
    859    an asymbol.  We don't worry about the sym argument we are passed;
    860    we just return the asymbol the minisymbol points to.  */
    861 
    862 asymbol *
    863 _bfd_generic_minisymbol_to_symbol (bfd *abfd ATTRIBUTE_UNUSED,
    864 				   bool dynamic ATTRIBUTE_UNUSED,
    865 				   const void *minisym,
    866 				   asymbol *sym ATTRIBUTE_UNUSED)
    867 {
    868   return *(asymbol **) minisym;
    869 }
    870 
    871 /* Look through stabs debugging information in .stab and .stabstr
    872    sections to find the source file and line closest to a desired
    873    location.  This is used by COFF and ELF targets.  It sets *pfound
    874    to TRUE if it finds some information.  The *pinfo field is used to
    875    pass cached information in and out of this routine; this first time
    876    the routine is called for a BFD, *pinfo should be NULL.  The value
    877    placed in *pinfo should be saved with the BFD, and passed back each
    878    time this function is called.  */
    879 
    880 /* We use a cache by default.  */
    881 
    882 #define ENABLE_CACHING
    883 
    884 /* We keep an array of indexentry structures to record where in the
    885    stabs section we should look to find line number information for a
    886    particular address.  */
    887 
    888 struct indexentry
    889 {
    890   bfd_vma val;
    891   bfd_byte *stab;
    892   bfd_byte *str;
    893   char *directory_name;
    894   char *file_name;
    895   char *function_name;
    896   int idx;
    897 };
    898 
    899 /* Compare two indexentry structures.  This is called via qsort.  */
    900 
    901 static int
    902 cmpindexentry (const void *a, const void *b)
    903 {
    904   const struct indexentry *contestantA = (const struct indexentry *) a;
    905   const struct indexentry *contestantB = (const struct indexentry *) b;
    906 
    907   if (contestantA->val < contestantB->val)
    908     return -1;
    909   if (contestantA->val > contestantB->val)
    910     return 1;
    911   return contestantA->idx - contestantB->idx;
    912 }
    913 
    914 /* A pointer to this structure is stored in *pinfo.  */
    915 
    916 struct stab_find_info
    917 {
    918   /* The .stab section.  */
    919   asection *stabsec;
    920   /* The .stabstr section.  */
    921   asection *strsec;
    922   /* The contents of the .stab section.  */
    923   bfd_byte *stabs;
    924   /* The contents of the .stabstr section.  */
    925   bfd_byte *strs;
    926 
    927   /* A table that indexes stabs by memory address.  */
    928   struct indexentry *indextable;
    929   /* The number of entries in indextable.  */
    930   int indextablesize;
    931 
    932 #ifdef ENABLE_CACHING
    933   /* Cached values to restart quickly.  */
    934   struct indexentry *cached_indexentry;
    935   bfd_vma cached_offset;
    936   bfd_byte *cached_stab;
    937   char *cached_file_name;
    938 #endif
    939 
    940   /* Saved ptr to malloc'ed filename.  */
    941   char *filename;
    942 };
    943 
    944 bool
    945 _bfd_stab_section_find_nearest_line (bfd *abfd,
    946 				     asymbol **symbols,
    947 				     asection *section,
    948 				     bfd_vma offset,
    949 				     bool *pfound,
    950 				     const char **pfilename,
    951 				     const char **pfnname,
    952 				     unsigned int *pline,
    953 				     void **pinfo)
    954 {
    955   struct stab_find_info *info;
    956   bfd_size_type stabsize, strsize;
    957   bfd_byte *stab, *str;
    958   bfd_byte *nul_fun, *nul_str;
    959   bfd_size_type stroff;
    960   struct indexentry *indexentry;
    961   char *file_name;
    962   char *directory_name;
    963   bool saw_line, saw_func;
    964 
    965   *pfound = false;
    966   *pfilename = bfd_get_filename (abfd);
    967   *pfnname = NULL;
    968   *pline = 0;
    969 
    970   /* Stabs entries use a 12 byte format:
    971        4 byte string table index
    972        1 byte stab type
    973        1 byte stab other field
    974        2 byte stab desc field
    975        4 byte stab value
    976      FIXME: This will have to change for a 64 bit object format.
    977 
    978      The stabs symbols are divided into compilation units.  For the
    979      first entry in each unit, the type of 0, the value is the length
    980      of the string table for this unit, and the desc field is the
    981      number of stabs symbols for this unit.  */
    982 
    983 #define STRDXOFF (0)
    984 #define TYPEOFF (4)
    985 #define OTHEROFF (5)
    986 #define DESCOFF (6)
    987 #define VALOFF (8)
    988 #define STABSIZE (12)
    989 
    990   info = (struct stab_find_info *) *pinfo;
    991   if (info != NULL)
    992     {
    993       if (info->stabsec == NULL || info->strsec == NULL)
    994 	{
    995 	  /* No usable stabs debugging information.  */
    996 	  return true;
    997 	}
    998 
    999       stabsize = (info->stabsec->rawsize
   1000 		  ? info->stabsec->rawsize
   1001 		  : info->stabsec->size);
   1002       strsize = (info->strsec->rawsize
   1003 		 ? info->strsec->rawsize
   1004 		 : info->strsec->size);
   1005     }
   1006   else
   1007     {
   1008       long reloc_size, reloc_count;
   1009       arelent **reloc_vector;
   1010       int i;
   1011       char *function_name;
   1012       bfd_size_type amt = sizeof *info;
   1013 
   1014       info = (struct stab_find_info *) bfd_zalloc (abfd, amt);
   1015       if (info == NULL)
   1016 	return false;
   1017       *pinfo = info;
   1018 
   1019       /* FIXME: When using the linker --split-by-file or
   1020 	 --split-by-reloc options, it is possible for the .stab and
   1021 	 .stabstr sections to be split.  We should handle that.  */
   1022 
   1023       info->stabsec = bfd_get_section_by_name (abfd, ".stab");
   1024       info->strsec = bfd_get_section_by_name (abfd, ".stabstr");
   1025 
   1026       if (info->stabsec == NULL || info->strsec == NULL)
   1027 	{
   1028 	  /* Try SOM section names.  */
   1029 	  info->stabsec = bfd_get_section_by_name (abfd, "$GDB_SYMBOLS$");
   1030 	  info->strsec  = bfd_get_section_by_name (abfd, "$GDB_STRINGS$");
   1031 
   1032 	  if (info->stabsec == NULL || info->strsec == NULL)
   1033 	    return true;
   1034 	}
   1035 
   1036       if ((info->stabsec->flags & SEC_HAS_CONTENTS) == 0
   1037 	  || (info->strsec->flags & SEC_HAS_CONTENTS) == 0)
   1038 	goto out;
   1039 
   1040       stabsize = (info->stabsec->rawsize
   1041 		  ? info->stabsec->rawsize
   1042 		  : info->stabsec->size);
   1043       stabsize = (stabsize / STABSIZE) * STABSIZE;
   1044       strsize = (info->strsec->rawsize
   1045 		 ? info->strsec->rawsize
   1046 		 : info->strsec->size);
   1047 
   1048       if (stabsize == 0 || strsize == 0)
   1049 	goto out;
   1050 
   1051       if (!bfd_malloc_and_get_section (abfd, info->stabsec, &info->stabs))
   1052 	goto out;
   1053       if (!bfd_malloc_and_get_section (abfd, info->strsec, &info->strs))
   1054 	goto out1;
   1055 
   1056       /* Stab strings ought to be nul terminated.  Ensure the last one
   1057 	 is, to prevent running off the end of the buffer.  */
   1058       info->strs[strsize - 1] = 0;
   1059 
   1060       /* If this is a relocatable object file, we have to relocate
   1061 	 the entries in .stab.  This should always be simple 32 bit
   1062 	 relocations against symbols defined in this object file, so
   1063 	 this should be no big deal.  */
   1064       reloc_size = bfd_get_reloc_upper_bound (abfd, info->stabsec);
   1065       if (reloc_size < 0)
   1066 	goto out2;
   1067       reloc_vector = (arelent **) bfd_malloc (reloc_size);
   1068       if (reloc_vector == NULL && reloc_size != 0)
   1069 	goto out2;
   1070       reloc_count = bfd_canonicalize_reloc (abfd, info->stabsec, reloc_vector,
   1071 					    symbols);
   1072       if (reloc_count < 0)
   1073 	{
   1074 	out3:
   1075 	  free (reloc_vector);
   1076 	out2:
   1077 	  free (info->strs);
   1078 	  info->strs = NULL;
   1079 	out1:
   1080 	  free (info->stabs);
   1081 	  info->stabs = NULL;
   1082 	out:
   1083 	  info->stabsec = NULL;
   1084 	  return false;
   1085 	}
   1086       if (reloc_count > 0)
   1087 	{
   1088 	  arelent **pr;
   1089 
   1090 	  for (pr = reloc_vector; *pr != NULL; pr++)
   1091 	    {
   1092 	      arelent *r;
   1093 	      unsigned long val;
   1094 	      asymbol *sym;
   1095 	      bfd_size_type octets;
   1096 
   1097 	      r = *pr;
   1098 	      /* Ignore R_*_NONE relocs.  */
   1099 	      if (r->howto->dst_mask == 0)
   1100 		continue;
   1101 
   1102 	      octets = r->address * bfd_octets_per_byte (abfd, NULL);
   1103 	      if (r->howto->rightshift != 0
   1104 		  || bfd_get_reloc_size (r->howto) != 4
   1105 		  || r->howto->bitsize != 32
   1106 		  || r->howto->pc_relative
   1107 		  || r->howto->bitpos != 0
   1108 		  || r->howto->dst_mask != 0xffffffff
   1109 		  || octets > stabsize - 4)
   1110 		{
   1111 		  _bfd_error_handler
   1112 		    (_("unsupported .stab relocation"));
   1113 		  bfd_set_error (bfd_error_invalid_operation);
   1114 		  goto out3;
   1115 		}
   1116 
   1117 	      val = bfd_get_32 (abfd, info->stabs + octets);
   1118 	      val &= r->howto->src_mask;
   1119 	      sym = *r->sym_ptr_ptr;
   1120 	      val += sym->value + sym->section->vma + r->addend;
   1121 	      bfd_put_32 (abfd, (bfd_vma) val, info->stabs + octets);
   1122 	    }
   1123 	}
   1124 
   1125       free (reloc_vector);
   1126 
   1127       /* First time through this function, build a table matching
   1128 	 function VM addresses to stabs, then sort based on starting
   1129 	 VM address.  Do this in two passes: once to count how many
   1130 	 table entries we'll need, and a second to actually build the
   1131 	 table.  */
   1132 
   1133       info->indextablesize = 0;
   1134       nul_fun = NULL;
   1135       for (stab = info->stabs; stab < info->stabs + stabsize; stab += STABSIZE)
   1136 	{
   1137 	  if (stab[TYPEOFF] == (bfd_byte) N_SO)
   1138 	    {
   1139 	      /* if we did not see a function def, leave space for one.  */
   1140 	      if (nul_fun != NULL)
   1141 		++info->indextablesize;
   1142 
   1143 	      /* N_SO with null name indicates EOF */
   1144 	      if (bfd_get_32 (abfd, stab + STRDXOFF) == 0)
   1145 		nul_fun = NULL;
   1146 	      else
   1147 		{
   1148 		  nul_fun = stab;
   1149 
   1150 		  /* two N_SO's in a row is a filename and directory. Skip */
   1151 		  if (stab + STABSIZE + TYPEOFF < info->stabs + stabsize
   1152 		      && *(stab + STABSIZE + TYPEOFF) == (bfd_byte) N_SO)
   1153 		    stab += STABSIZE;
   1154 		}
   1155 	    }
   1156 	  else if (stab[TYPEOFF] == (bfd_byte) N_FUN
   1157 		   && bfd_get_32 (abfd, stab + STRDXOFF) != 0)
   1158 	    {
   1159 	      nul_fun = NULL;
   1160 	      ++info->indextablesize;
   1161 	    }
   1162 	}
   1163 
   1164       if (nul_fun != NULL)
   1165 	++info->indextablesize;
   1166 
   1167       if (info->indextablesize == 0)
   1168 	{
   1169 	  free (info->strs);
   1170 	  info->strs = NULL;
   1171 	  free (info->stabs);
   1172 	  info->stabs = NULL;
   1173 	  info->stabsec = NULL;
   1174 	  return true;
   1175 	}
   1176       ++info->indextablesize;
   1177 
   1178       amt = info->indextablesize;
   1179       amt *= sizeof (struct indexentry);
   1180       info->indextable = (struct indexentry *) bfd_malloc (amt);
   1181       if (info->indextable == NULL)
   1182 	goto out3;
   1183 
   1184       file_name = NULL;
   1185       directory_name = NULL;
   1186       nul_fun = NULL;
   1187       stroff = 0;
   1188 
   1189       for (i = 0, stab = info->stabs, nul_str = str = info->strs;
   1190 	   i < info->indextablesize && stab < info->stabs + stabsize;
   1191 	   stab += STABSIZE)
   1192 	{
   1193 	  switch (stab[TYPEOFF])
   1194 	    {
   1195 	    case 0:
   1196 	      /* This is the first entry in a compilation unit.  */
   1197 	      if ((bfd_size_type) ((info->strs + strsize) - str) < stroff)
   1198 		break;
   1199 	      str += stroff;
   1200 	      stroff = bfd_get_32 (abfd, stab + VALOFF);
   1201 	      break;
   1202 
   1203 	    case N_SO:
   1204 	      /* The main file name.  */
   1205 
   1206 	      /* The following code creates a new indextable entry with
   1207 		 a NULL function name if there were no N_FUNs in a file.
   1208 		 Note that a N_SO without a file name is an EOF and
   1209 		 there could be 2 N_SO following it with the new filename
   1210 		 and directory.  */
   1211 	      if (nul_fun != NULL)
   1212 		{
   1213 		  info->indextable[i].val = bfd_get_32 (abfd, nul_fun + VALOFF);
   1214 		  info->indextable[i].stab = nul_fun;
   1215 		  info->indextable[i].str = nul_str;
   1216 		  info->indextable[i].directory_name = directory_name;
   1217 		  info->indextable[i].file_name = file_name;
   1218 		  info->indextable[i].function_name = NULL;
   1219 		  info->indextable[i].idx = i;
   1220 		  ++i;
   1221 		}
   1222 
   1223 	      directory_name = NULL;
   1224 	      file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
   1225 	      if (file_name == (char *) str)
   1226 		{
   1227 		  file_name = NULL;
   1228 		  nul_fun = NULL;
   1229 		}
   1230 	      else
   1231 		{
   1232 		  nul_fun = stab;
   1233 		  nul_str = str;
   1234 		  if (file_name >= (char *) info->strs + strsize
   1235 		      || file_name < (char *) str)
   1236 		    file_name = NULL;
   1237 		  if (stab + STABSIZE + TYPEOFF < info->stabs + stabsize
   1238 		      && *(stab + STABSIZE + TYPEOFF) == (bfd_byte) N_SO)
   1239 		    {
   1240 		      /* Two consecutive N_SOs are a directory and a
   1241 			 file name.  */
   1242 		      stab += STABSIZE;
   1243 		      directory_name = file_name;
   1244 		      file_name = ((char *) str
   1245 				   + bfd_get_32 (abfd, stab + STRDXOFF));
   1246 		      if (file_name >= (char *) info->strs + strsize
   1247 			  || file_name < (char *) str)
   1248 			file_name = NULL;
   1249 		    }
   1250 		}
   1251 	      break;
   1252 
   1253 	    case N_SOL:
   1254 	      /* The name of an include file.  */
   1255 	      file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
   1256 	      /* PR 17512: file: 0c680a1f.  */
   1257 	      /* PR 17512: file: 5da8aec4.  */
   1258 	      if (file_name >= (char *) info->strs + strsize
   1259 		  || file_name < (char *) str)
   1260 		file_name = NULL;
   1261 	      break;
   1262 
   1263 	    case N_FUN:
   1264 	      /* A function name.  */
   1265 	      function_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
   1266 	      if (function_name == (char *) str)
   1267 		continue;
   1268 	      if (function_name >= (char *) info->strs + strsize
   1269 		  || function_name < (char *) str)
   1270 		function_name = NULL;
   1271 
   1272 	      nul_fun = NULL;
   1273 	      info->indextable[i].val = bfd_get_32 (abfd, stab + VALOFF);
   1274 	      info->indextable[i].stab = stab;
   1275 	      info->indextable[i].str = str;
   1276 	      info->indextable[i].directory_name = directory_name;
   1277 	      info->indextable[i].file_name = file_name;
   1278 	      info->indextable[i].function_name = function_name;
   1279 	      info->indextable[i].idx = i;
   1280 	      ++i;
   1281 	      break;
   1282 	    }
   1283 	}
   1284 
   1285       if (nul_fun != NULL)
   1286 	{
   1287 	  info->indextable[i].val = bfd_get_32 (abfd, nul_fun + VALOFF);
   1288 	  info->indextable[i].stab = nul_fun;
   1289 	  info->indextable[i].str = nul_str;
   1290 	  info->indextable[i].directory_name = directory_name;
   1291 	  info->indextable[i].file_name = file_name;
   1292 	  info->indextable[i].function_name = NULL;
   1293 	  info->indextable[i].idx = i;
   1294 	  ++i;
   1295 	}
   1296 
   1297       info->indextable[i].val = (bfd_vma) -1;
   1298       info->indextable[i].stab = info->stabs + stabsize;
   1299       info->indextable[i].str = str;
   1300       info->indextable[i].directory_name = NULL;
   1301       info->indextable[i].file_name = NULL;
   1302       info->indextable[i].function_name = NULL;
   1303       info->indextable[i].idx = i;
   1304       ++i;
   1305 
   1306       info->indextablesize = i;
   1307       qsort (info->indextable, (size_t) i, sizeof (struct indexentry),
   1308 	     cmpindexentry);
   1309     }
   1310 
   1311   /* We are passed a section relative offset.  The offsets in the
   1312      stabs information are absolute.  */
   1313   offset += bfd_section_vma (section);
   1314 
   1315 #ifdef ENABLE_CACHING
   1316   if (info->cached_indexentry != NULL
   1317       && offset >= info->cached_offset
   1318       && offset < (info->cached_indexentry + 1)->val)
   1319     {
   1320       stab = info->cached_stab;
   1321       indexentry = info->cached_indexentry;
   1322       file_name = info->cached_file_name;
   1323     }
   1324   else
   1325 #endif
   1326     {
   1327       long low, high;
   1328       long mid = -1;
   1329 
   1330       /* Cache non-existent or invalid.  Do binary search on
   1331 	 indextable.  */
   1332       indexentry = NULL;
   1333 
   1334       low = 0;
   1335       high = info->indextablesize - 1;
   1336       while (low != high)
   1337 	{
   1338 	  mid = (high + low) / 2;
   1339 	  if (offset >= info->indextable[mid].val
   1340 	      && offset < info->indextable[mid + 1].val)
   1341 	    {
   1342 	      indexentry = &info->indextable[mid];
   1343 	      break;
   1344 	    }
   1345 
   1346 	  if (info->indextable[mid].val > offset)
   1347 	    high = mid;
   1348 	  else
   1349 	    low = mid + 1;
   1350 	}
   1351 
   1352       if (indexentry == NULL)
   1353 	return true;
   1354 
   1355       stab = indexentry->stab + STABSIZE;
   1356       file_name = indexentry->file_name;
   1357     }
   1358 
   1359   directory_name = indexentry->directory_name;
   1360   str = indexentry->str;
   1361 
   1362   saw_line = false;
   1363   saw_func = false;
   1364   for (; stab < (indexentry+1)->stab; stab += STABSIZE)
   1365     {
   1366       bool done;
   1367       bfd_vma val;
   1368 
   1369       done = false;
   1370 
   1371       switch (stab[TYPEOFF])
   1372 	{
   1373 	case N_SOL:
   1374 	  /* The name of an include file.  */
   1375 	  val = bfd_get_32 (abfd, stab + VALOFF);
   1376 	  if (val <= offset)
   1377 	    {
   1378 	      file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
   1379 	      if (file_name >= (char *) info->strs + strsize
   1380 		  || file_name < (char *) str)
   1381 		file_name = NULL;
   1382 	      *pline = 0;
   1383 	    }
   1384 	  break;
   1385 
   1386 	case N_SLINE:
   1387 	case N_DSLINE:
   1388 	case N_BSLINE:
   1389 	  /* A line number.  If the function was specified, then the value
   1390 	     is relative to the start of the function.  Otherwise, the
   1391 	     value is an absolute address.  */
   1392 	  val = ((indexentry->function_name ? indexentry->val : 0)
   1393 		 + bfd_get_32 (abfd, stab + VALOFF));
   1394 	  /* If this line starts before our desired offset, or if it's
   1395 	     the first line we've been able to find, use it.  The
   1396 	     !saw_line check works around a bug in GCC 2.95.3, which emits
   1397 	     the first N_SLINE late.  */
   1398 	  if (!saw_line || val <= offset)
   1399 	    {
   1400 	      *pline = bfd_get_16 (abfd, stab + DESCOFF);
   1401 
   1402 #ifdef ENABLE_CACHING
   1403 	      info->cached_stab = stab;
   1404 	      info->cached_offset = val;
   1405 	      info->cached_file_name = file_name;
   1406 	      info->cached_indexentry = indexentry;
   1407 #endif
   1408 	    }
   1409 	  if (val > offset)
   1410 	    done = true;
   1411 	  saw_line = true;
   1412 	  break;
   1413 
   1414 	case N_FUN:
   1415 	case N_SO:
   1416 	  if (saw_func || saw_line)
   1417 	    done = true;
   1418 	  saw_func = true;
   1419 	  break;
   1420 	}
   1421 
   1422       if (done)
   1423 	break;
   1424     }
   1425 
   1426   *pfound = true;
   1427 
   1428   if (file_name == NULL || IS_ABSOLUTE_PATH (file_name)
   1429       || directory_name == NULL)
   1430     *pfilename = file_name;
   1431   else
   1432     {
   1433       size_t dirlen;
   1434 
   1435       dirlen = strlen (directory_name);
   1436       if (info->filename == NULL
   1437 	  || filename_ncmp (info->filename, directory_name, dirlen) != 0
   1438 	  || filename_cmp (info->filename + dirlen, file_name) != 0)
   1439 	{
   1440 	  size_t len;
   1441 
   1442 	  /* Don't free info->filename here.  objdump and other
   1443 	     apps keep a copy of a previously returned file name
   1444 	     pointer.  */
   1445 	  len = strlen (file_name) + 1;
   1446 	  info->filename = (char *) bfd_alloc (abfd, dirlen + len);
   1447 	  if (info->filename == NULL)
   1448 	    return false;
   1449 	  memcpy (info->filename, directory_name, dirlen);
   1450 	  memcpy (info->filename + dirlen, file_name, len);
   1451 	}
   1452 
   1453       *pfilename = info->filename;
   1454     }
   1455 
   1456   if (indexentry->function_name != NULL)
   1457     {
   1458       char *s;
   1459 
   1460       /* This will typically be something like main:F(0,1), so we want
   1461 	 to clobber the colon.  It's OK to change the name, since the
   1462 	 string is in our own local storage anyhow.  */
   1463       s = strchr (indexentry->function_name, ':');
   1464       if (s != NULL)
   1465 	*s = '\0';
   1466 
   1467       *pfnname = indexentry->function_name;
   1468     }
   1469 
   1470   return true;
   1471 }
   1472 
   1473 void
   1474 _bfd_stab_cleanup (bfd *abfd ATTRIBUTE_UNUSED, void **pinfo)
   1475 {
   1476   struct stab_find_info *info = (struct stab_find_info *) *pinfo;
   1477   if (info == NULL)
   1478     return;
   1479 
   1480   free (info->indextable);
   1481   free (info->strs);
   1482   free (info->stabs);
   1483 }
   1484 
   1485 long
   1486 _bfd_nosymbols_canonicalize_symtab (bfd *abfd ATTRIBUTE_UNUSED,
   1487 				    asymbol **location ATTRIBUTE_UNUSED)
   1488 {
   1489   return 0;
   1490 }
   1491 
   1492 void
   1493 _bfd_nosymbols_print_symbol (bfd *abfd ATTRIBUTE_UNUSED,
   1494 			     void *afile ATTRIBUTE_UNUSED,
   1495 			     asymbol *symbol ATTRIBUTE_UNUSED,
   1496 			     bfd_print_symbol_type how ATTRIBUTE_UNUSED)
   1497 {
   1498 }
   1499 
   1500 void
   1501 _bfd_nosymbols_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED,
   1502 				asymbol *sym ATTRIBUTE_UNUSED,
   1503 				symbol_info *ret ATTRIBUTE_UNUSED)
   1504 {
   1505 }
   1506 
   1507 const char *
   1508 _bfd_nosymbols_get_symbol_version_string (bfd *abfd,
   1509 					  asymbol *symbol ATTRIBUTE_UNUSED,
   1510 					  bool base_p ATTRIBUTE_UNUSED,
   1511 					  bool *hidden ATTRIBUTE_UNUSED)
   1512 {
   1513   return (const char *) _bfd_ptr_bfd_null_error (abfd);
   1514 }
   1515 
   1516 bool
   1517 _bfd_nosymbols_bfd_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
   1518 					const char *name ATTRIBUTE_UNUSED)
   1519 {
   1520   return false;
   1521 }
   1522 
   1523 alent *
   1524 _bfd_nosymbols_get_lineno (bfd *abfd, asymbol *sym ATTRIBUTE_UNUSED)
   1525 {
   1526   return (alent *) _bfd_ptr_bfd_null_error (abfd);
   1527 }
   1528 
   1529 bool
   1530 _bfd_nosymbols_find_nearest_line
   1531     (bfd *abfd,
   1532      asymbol **symbols ATTRIBUTE_UNUSED,
   1533      asection *section ATTRIBUTE_UNUSED,
   1534      bfd_vma offset ATTRIBUTE_UNUSED,
   1535      const char **filename_ptr ATTRIBUTE_UNUSED,
   1536      const char **functionname_ptr ATTRIBUTE_UNUSED,
   1537      unsigned int *line_ptr ATTRIBUTE_UNUSED,
   1538      unsigned int *discriminator_ptr ATTRIBUTE_UNUSED)
   1539 {
   1540   return _bfd_bool_bfd_false_error (abfd);
   1541 }
   1542 
   1543 bool
   1544 _bfd_nosymbols_find_nearest_line_with_alt
   1545     (bfd *abfd,
   1546      const char *alt_filename ATTRIBUTE_UNUSED,
   1547      asymbol **symbols ATTRIBUTE_UNUSED,
   1548      asection *section ATTRIBUTE_UNUSED,
   1549      bfd_vma offset ATTRIBUTE_UNUSED,
   1550      const char **filename_ptr ATTRIBUTE_UNUSED,
   1551      const char **functionname_ptr ATTRIBUTE_UNUSED,
   1552      unsigned int *line_ptr ATTRIBUTE_UNUSED,
   1553      unsigned int *discriminator_ptr ATTRIBUTE_UNUSED)
   1554 {
   1555   return _bfd_bool_bfd_false_error (abfd);
   1556 }
   1557 
   1558 bool
   1559 _bfd_nosymbols_find_line (bfd *abfd,
   1560 			  asymbol **symbols ATTRIBUTE_UNUSED,
   1561 			  asymbol *symbol ATTRIBUTE_UNUSED,
   1562 			  const char **filename_ptr ATTRIBUTE_UNUSED,
   1563 			  unsigned int *line_ptr ATTRIBUTE_UNUSED)
   1564 {
   1565   return _bfd_bool_bfd_false_error (abfd);
   1566 }
   1567 
   1568 bool
   1569 _bfd_nosymbols_find_inliner_info
   1570     (bfd *abfd,
   1571      const char **filename_ptr ATTRIBUTE_UNUSED,
   1572      const char **functionname_ptr ATTRIBUTE_UNUSED,
   1573      unsigned int *line_ptr ATTRIBUTE_UNUSED)
   1574 {
   1575   return _bfd_bool_bfd_false_error (abfd);
   1576 }
   1577 
   1578 asymbol *
   1579 _bfd_nosymbols_bfd_make_debug_symbol (bfd *abfd)
   1580 {
   1581   return (asymbol *) _bfd_ptr_bfd_null_error (abfd);
   1582 }
   1583 
   1584 long
   1585 _bfd_nosymbols_read_minisymbols (bfd *abfd,
   1586 				 bool dynamic ATTRIBUTE_UNUSED,
   1587 				 void **minisymsp ATTRIBUTE_UNUSED,
   1588 				 unsigned int *sizep ATTRIBUTE_UNUSED)
   1589 {
   1590   return _bfd_long_bfd_n1_error (abfd);
   1591 }
   1592 
   1593 asymbol *
   1594 _bfd_nosymbols_minisymbol_to_symbol (bfd *abfd,
   1595 				     bool dynamic ATTRIBUTE_UNUSED,
   1596 				     const void *minisym ATTRIBUTE_UNUSED,
   1597 				     asymbol *sym ATTRIBUTE_UNUSED)
   1598 {
   1599   return (asymbol *) _bfd_ptr_bfd_null_error (abfd);
   1600 }
   1601 
   1602 long
   1603 _bfd_nodynamic_get_synthetic_symtab (bfd *abfd,
   1604 				     long symcount ATTRIBUTE_UNUSED,
   1605 				     asymbol **syms ATTRIBUTE_UNUSED,
   1606 				     long dynsymcount ATTRIBUTE_UNUSED,
   1607 				     asymbol **dynsyms ATTRIBUTE_UNUSED,
   1608 				     asymbol **ret ATTRIBUTE_UNUSED)
   1609 {
   1610   return _bfd_long_bfd_n1_error (abfd);
   1611 }
   1612