* elf64-ppc.c (ppc_add_stub): Replace strcpy/strncpy with memcpy.
[external/binutils.git] / bfd / syms.c
1 /* Generic symbol-table support for the BFD library.
2    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3    2000, 2001, 2002
4    Free Software Foundation, Inc.
5    Written by Cygnus Support.
6
7 This file is part of BFD, the Binary File Descriptor library.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
22
23 /*
24 SECTION
25         Symbols
26
27         BFD tries to maintain as much symbol information as it can when
28         it moves information from file to file. BFD passes information
29         to applications though the <<asymbol>> structure. When the
30         application requests the symbol table, BFD reads the table in
31         the native form and translates parts of it into the internal
32         format. To maintain more than the information passed to
33         applications, some targets keep some information ``behind the
34         scenes'' in a structure only the particular back end knows
35         about. For example, the coff back end keeps the original
36         symbol table structure as well as the canonical structure when
37         a BFD is read in. On output, the coff back end can reconstruct
38         the output symbol table so that no information is lost, even
39         information unique to coff which BFD doesn't know or
40         understand. If a coff symbol table were read, but were written
41         through an a.out back end, all the coff specific information
42         would be lost. The symbol table of a BFD
43         is not necessarily read in until a canonicalize request is
44         made. Then the BFD back end fills in a table provided by the
45         application with pointers to the canonical information.  To
46         output symbols, the application provides BFD with a table of
47         pointers to pointers to <<asymbol>>s. This allows applications
48         like the linker to output a symbol as it was read, since the ``behind
49         the scenes'' information will be still available.
50 @menu
51 @* Reading Symbols::
52 @* Writing Symbols::
53 @* Mini Symbols::
54 @* typedef asymbol::
55 @* symbol handling functions::
56 @end menu
57
58 INODE
59 Reading Symbols, Writing Symbols, Symbols, Symbols
60 SUBSECTION
61         Reading symbols
62
63         There are two stages to reading a symbol table from a BFD:
64         allocating storage, and the actual reading process. This is an
65         excerpt from an application which reads the symbol table:
66
67 |         long storage_needed;
68 |         asymbol **symbol_table;
69 |         long number_of_symbols;
70 |         long i;
71 |
72 |         storage_needed = bfd_get_symtab_upper_bound (abfd);
73 |
74 |         if (storage_needed < 0)
75 |           FAIL
76 |
77 |         if (storage_needed == 0) {
78 |            return ;
79 |         }
80 |         symbol_table = (asymbol **) xmalloc (storage_needed);
81 |           ...
82 |         number_of_symbols =
83 |            bfd_canonicalize_symtab (abfd, symbol_table);
84 |
85 |         if (number_of_symbols < 0)
86 |           FAIL
87 |
88 |         for (i = 0; i < number_of_symbols; i++) {
89 |            process_symbol (symbol_table[i]);
90 |         }
91
92         All storage for the symbols themselves is in an objalloc
93         connected to the BFD; it is freed when the BFD is closed.
94
95 INODE
96 Writing Symbols, Mini Symbols, Reading Symbols, Symbols
97 SUBSECTION
98         Writing symbols
99
100         Writing of a symbol table is automatic when a BFD open for
101         writing is closed. The application attaches a vector of
102         pointers to pointers to symbols to the BFD being written, and
103         fills in the symbol count. The close and cleanup code reads
104         through the table provided and performs all the necessary
105         operations. The BFD output code must always be provided with an
106         ``owned'' symbol: one which has come from another BFD, or one
107         which has been created using <<bfd_make_empty_symbol>>.  Here is an
108         example showing the creation of a symbol table with only one element:
109
110 |       #include "bfd.h"
111 |       main()
112 |       {
113 |         bfd *abfd;
114 |         asymbol *ptrs[2];
115 |         asymbol *new;
116 |
117 |         abfd = bfd_openw("foo","a.out-sunos-big");
118 |         bfd_set_format(abfd, bfd_object);
119 |         new = bfd_make_empty_symbol(abfd);
120 |         new->name = "dummy_symbol";
121 |         new->section = bfd_make_section_old_way(abfd, ".text");
122 |         new->flags = BSF_GLOBAL;
123 |         new->value = 0x12345;
124 |
125 |         ptrs[0] = new;
126 |         ptrs[1] = (asymbol *)0;
127 |
128 |         bfd_set_symtab(abfd, ptrs, 1);
129 |         bfd_close(abfd);
130 |       }
131 |
132 |       ./makesym
133 |       nm foo
134 |       00012345 A dummy_symbol
135
136         Many formats cannot represent arbitary symbol information; for
137         instance, the <<a.out>> object format does not allow an
138         arbitary 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 */
172 /*
173 SUBSECTION
174         typedef asymbol
175
176         An <<asymbol>> has the form:
177
178 */
179
180 /*
181 CODE_FRAGMENT
182
183 .
184 .typedef struct symbol_cache_entry
185 .{
186 .  {* A pointer to the BFD which owns the symbol. This information
187 .     is necessary so that a back end can work out what additional
188 .     information (invisible to the application writer) is carried
189 .     with the symbol.
190 .
191 .     This field is *almost* redundant, since you can use section->owner
192 .     instead, except that some symbols point to the global sections
193 .     bfd_{abs,com,und}_section.  This could be fixed by making
194 .     these globals be per-bfd (or per-target-flavor).  FIXME.  *}
195 .  struct _bfd *the_bfd; {* Use bfd_asymbol_bfd(sym) to access this field.  *}
196 .
197 .  {* The text of the symbol. The name is left alone, and not copied; the
198 .     application may not alter it.  *}
199 .  const char *name;
200 .
201 .  {* The value of the symbol.  This really should be a union of a
202 .     numeric value with a pointer, since some flags indicate that
203 .     a pointer to another symbol is stored here.  *}
204 .  symvalue value;
205 .
206 .  {* Attributes of a symbol.  *}
207 .#define BSF_NO_FLAGS    0x00
208 .
209 .  {* The symbol has local scope; <<static>> in <<C>>. The value
210 .     is the offset into the section of the data.  *}
211 .#define BSF_LOCAL      0x01
212 .
213 .  {* The symbol has global scope; initialized data in <<C>>. The
214 .     value is the offset into the section of the data.  *}
215 .#define BSF_GLOBAL     0x02
216 .
217 .  {* The symbol has global scope and is exported. The value is
218 .     the offset into the section of the data.  *}
219 .#define BSF_EXPORT     BSF_GLOBAL {* No real difference.  *}
220 .
221 .  {* A normal C symbol would be one of:
222 .     <<BSF_LOCAL>>, <<BSF_FORT_COMM>>,  <<BSF_UNDEFINED>> or
223 .     <<BSF_GLOBAL>>.  *}
224 .
225 .  {* The symbol is a debugging record. The value has an arbitary
226 .     meaning, unless BSF_DEBUGGING_RELOC is also set.  *}
227 .#define BSF_DEBUGGING  0x08
228 .
229 .  {* The symbol denotes a function entry point.  Used in ELF,
230 .     perhaps others someday.  *}
231 .#define BSF_FUNCTION    0x10
232 .
233 .  {* Used by the linker.  *}
234 .#define BSF_KEEP        0x20
235 .#define BSF_KEEP_G      0x40
236 .
237 .  {* A weak global symbol, overridable without warnings by
238 .     a regular global symbol of the same name.  *}
239 .#define BSF_WEAK        0x80
240 .
241 .  {* This symbol was created to point to a section, e.g. ELF's
242 .     STT_SECTION symbols.  *}
243 .#define BSF_SECTION_SYM 0x100
244 .
245 .  {* The symbol used to be a common symbol, but now it is
246 .     allocated.  *}
247 .#define BSF_OLD_COMMON  0x200
248 .
249 .  {* The default value for common data.  *}
250 .#define BFD_FORT_COMM_DEFAULT_VALUE 0
251 .
252 .  {* In some files the type of a symbol sometimes alters its
253 .     location in an output file - ie in coff a <<ISFCN>> symbol
254 .     which is also <<C_EXT>> symbol appears where it was
255 .     declared and not at the end of a section.  This bit is set
256 .     by the target BFD part to convey this information.  *}
257 .#define BSF_NOT_AT_END    0x400
258 .
259 .  {* Signal that the symbol is the label of constructor section.  *}
260 .#define BSF_CONSTRUCTOR   0x800
261 .
262 .  {* Signal that the symbol is a warning symbol.  The name is a
263 .     warning.  The name of the next symbol is the one to warn about;
264 .     if a reference is made to a symbol with the same name as the next
265 .     symbol, a warning is issued by the linker.  *}
266 .#define BSF_WARNING       0x1000
267 .
268 .  {* Signal that the symbol is indirect.  This symbol is an indirect
269 .     pointer to the symbol with the same name as the next symbol.  *}
270 .#define BSF_INDIRECT      0x2000
271 .
272 .  {* BSF_FILE marks symbols that contain a file name.  This is used
273 .     for ELF STT_FILE symbols.  *}
274 .#define BSF_FILE          0x4000
275 .
276 .  {* Symbol is from dynamic linking information.  *}
277 .#define BSF_DYNAMIC       0x8000
278 .
279 .  {* The symbol denotes a data object.  Used in ELF, and perhaps
280 .     others someday.  *}
281 .#define BSF_OBJECT        0x10000
282 .
283 .  {* This symbol is a debugging symbol.  The value is the offset
284 .     into the section of the data.  BSF_DEBUGGING should be set
285 .     as well.  *}
286 .#define BSF_DEBUGGING_RELOC 0x20000
287 .
288 .  {* This symbol is thread local.  Used in ELF.  *}
289 .#define BSF_THREAD_LOCAL  0x40000
290 .
291 .  flagword flags;
292 .
293 .  {* A pointer to the section to which this symbol is
294 .     relative.  This will always be non NULL, there are special
295 .     sections for undefined and absolute symbols.  *}
296 .  struct sec *section;
297 .
298 .  {* Back end special data.  *}
299 .  union
300 .    {
301 .      PTR p;
302 .      bfd_vma i;
303 .    }
304 .  udata;
305 .}
306 .asymbol;
307 .
308 */
309
310 #include "bfd.h"
311 #include "sysdep.h"
312 #include "libbfd.h"
313 #include "safe-ctype.h"
314 #include "bfdlink.h"
315 #include "aout/stab_gnu.h"
316
317 static char coff_section_type PARAMS ((const char *));
318 static int cmpindexentry PARAMS ((const PTR, const PTR));
319
320 /*
321 DOCDD
322 INODE
323 symbol handling functions,  , typedef asymbol, Symbols
324 SUBSECTION
325         Symbol handling functions
326 */
327
328 /*
329 FUNCTION
330         bfd_get_symtab_upper_bound
331
332 DESCRIPTION
333         Return the number of bytes required to store a vector of pointers
334         to <<asymbols>> for all the symbols in the BFD @var{abfd},
335         including a terminal NULL pointer. If there are no symbols in
336         the BFD, then return 0.  If an error occurs, return -1.
337
338 .#define bfd_get_symtab_upper_bound(abfd) \
339 .     BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
340 .
341 */
342
343 /*
344 FUNCTION
345         bfd_is_local_label
346
347 SYNOPSIS
348         boolean bfd_is_local_label(bfd *abfd, asymbol *sym);
349
350 DESCRIPTION
351         Return true if the given symbol @var{sym} in the BFD @var{abfd} is
352         a compiler generated local label, else return false.
353 */
354
355 boolean
356 bfd_is_local_label (abfd, sym)
357      bfd *abfd;
358      asymbol *sym;
359 {
360   /* The BSF_SECTION_SYM check is needed for IA-64, where every label that
361      starts with '.' is local.  This would accidentally catch section names
362      if we didn't reject them here.  */
363   if ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_SECTION_SYM)) != 0)
364     return false;
365   if (sym->name == NULL)
366     return false;
367   return bfd_is_local_label_name (abfd, sym->name);
368 }
369
370 /*
371 FUNCTION
372         bfd_is_local_label_name
373
374 SYNOPSIS
375         boolean bfd_is_local_label_name(bfd *abfd, const char *name);
376
377 DESCRIPTION
378         Return true if a symbol with the name @var{name} in the BFD
379         @var{abfd} is a compiler generated local label, else return
380         false.  This just checks whether the name has the form of a
381         local label.
382
383 .#define bfd_is_local_label_name(abfd, name) \
384 .     BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
385 .
386 */
387
388 /*
389 FUNCTION
390         bfd_canonicalize_symtab
391
392 DESCRIPTION
393         Read the symbols from the BFD @var{abfd}, and fills in
394         the vector @var{location} with pointers to the symbols and
395         a trailing NULL.
396         Return the actual number of symbol pointers, not
397         including the NULL.
398
399 .#define bfd_canonicalize_symtab(abfd, location) \
400 .     BFD_SEND (abfd, _bfd_canonicalize_symtab,\
401 .                  (abfd, location))
402 .
403 */
404
405 /*
406 FUNCTION
407         bfd_set_symtab
408
409 SYNOPSIS
410         boolean bfd_set_symtab (bfd *abfd, asymbol **location, unsigned int count);
411
412 DESCRIPTION
413         Arrange that when the output BFD @var{abfd} is closed,
414         the table @var{location} of @var{count} pointers to symbols
415         will be written.
416 */
417
418 boolean
419 bfd_set_symtab (abfd, location, symcount)
420      bfd *abfd;
421      asymbol **location;
422      unsigned int symcount;
423 {
424   if ((abfd->format != bfd_object) || (bfd_read_p (abfd)))
425     {
426       bfd_set_error (bfd_error_invalid_operation);
427       return false;
428     }
429
430   bfd_get_outsymbols (abfd) = location;
431   bfd_get_symcount (abfd) = symcount;
432   return true;
433 }
434
435 /*
436 FUNCTION
437         bfd_print_symbol_vandf
438
439 SYNOPSIS
440         void bfd_print_symbol_vandf(bfd *abfd, PTR file, asymbol *symbol);
441
442 DESCRIPTION
443         Print the value and flags of the @var{symbol} supplied to the
444         stream @var{file}.
445 */
446 void
447 bfd_print_symbol_vandf (abfd, arg, symbol)
448      bfd *abfd;
449      PTR arg;
450      asymbol *symbol;
451 {
452   FILE *file = (FILE *) arg;
453   flagword type = symbol->flags;
454   if (symbol->section != (asection *) NULL)
455     {
456       bfd_fprintf_vma (abfd, file,
457                        symbol->value + symbol->section->vma);
458     }
459   else
460     {
461       bfd_fprintf_vma (abfd, file, symbol->value);
462     }
463
464   /* This presumes that a symbol can not be both BSF_DEBUGGING and
465      BSF_DYNAMIC, nor more than one of BSF_FUNCTION, BSF_FILE, and
466      BSF_OBJECT.  */
467   fprintf (file, " %c%c%c%c%c%c%c",
468            ((type & BSF_LOCAL)
469             ? (type & BSF_GLOBAL) ? '!' : 'l'
470             : (type & BSF_GLOBAL) ? 'g' : ' '),
471            (type & BSF_WEAK) ? 'w' : ' ',
472            (type & BSF_CONSTRUCTOR) ? 'C' : ' ',
473            (type & BSF_WARNING) ? 'W' : ' ',
474            (type & BSF_INDIRECT) ? 'I' : ' ',
475            (type & BSF_DEBUGGING) ? 'd' : (type & BSF_DYNAMIC) ? 'D' : ' ',
476            ((type & BSF_FUNCTION)
477             ? 'F'
478             : ((type & BSF_FILE)
479                ? 'f'
480                : ((type & BSF_OBJECT) ? 'O' : ' '))));
481 }
482
483 /*
484 FUNCTION
485         bfd_make_empty_symbol
486
487 DESCRIPTION
488         Create a new <<asymbol>> structure for the BFD @var{abfd}
489         and return a pointer to it.
490
491         This routine is necessary because each back end has private
492         information surrounding the <<asymbol>>. Building your own
493         <<asymbol>> and pointing to it will not create the private
494         information, and will cause problems later on.
495
496 .#define bfd_make_empty_symbol(abfd) \
497 .     BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
498 .
499 */
500
501 /*
502 FUNCTION
503         _bfd_generic_make_empty_symbol
504
505 SYNOPSIS
506         asymbol *_bfd_generic_make_empty_symbol (bfd *);
507
508 DESCRIPTION
509         Create a new <<asymbol>> structure for the BFD @var{abfd}
510         and return a pointer to it.  Used by core file routines,
511         binary back-end and anywhere else where no private info
512         is needed.
513 */
514
515 asymbol *
516 _bfd_generic_make_empty_symbol (abfd)
517      bfd *abfd;
518 {
519   bfd_size_type amt = sizeof (asymbol);
520   asymbol *new = (asymbol *) bfd_zalloc (abfd, amt);
521   if (new)
522     new->the_bfd = abfd;
523   return new;
524 }
525
526 /*
527 FUNCTION
528         bfd_make_debug_symbol
529
530 DESCRIPTION
531         Create a new <<asymbol>> structure for the BFD @var{abfd},
532         to be used as a debugging symbol.  Further details of its use have
533         yet to be worked out.
534
535 .#define bfd_make_debug_symbol(abfd,ptr,size) \
536 .        BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
537 .
538 */
539
540 struct section_to_type
541 {
542   const char *section;
543   char type;
544 };
545
546 /* Map section names to POSIX/BSD single-character symbol types.
547    This table is probably incomplete.  It is sorted for convenience of
548    adding entries.  Since it is so short, a linear search is used.  */
549 static const struct section_to_type stt[] =
550 {
551   {".bss", 'b'},
552   {"code", 't'},                /* MRI .text */
553   {".data", 'd'},
554   {"*DEBUG*", 'N'},
555   {".debug", 'N'},              /* MSVC's .debug (non-standard debug syms) */
556   {".drectve", 'i'},            /* MSVC's .drective section */
557   {".edata", 'e'},              /* MSVC's .edata (export) section */
558   {".fini", 't'},               /* ELF fini section */
559   {".idata", 'i'},              /* MSVC's .idata (import) section */
560   {".init", 't'},               /* ELF init section */
561   {".pdata", 'p'},              /* MSVC's .pdata (stack unwind) section */
562   {".rdata", 'r'},              /* Read only data.  */
563   {".rodata", 'r'},             /* Read only data.  */
564   {".sbss", 's'},               /* Small BSS (uninitialized data).  */
565   {".scommon", 'c'},            /* Small common.  */
566   {".sdata", 'g'},              /* Small initialized data.  */
567   {".text", 't'},
568   {"vars", 'd'},                /* MRI .data */
569   {"zerovars", 'b'},            /* MRI .bss */
570   {0, 0}
571 };
572
573 /* Return the single-character symbol type corresponding to
574    section S, or '?' for an unknown COFF section.
575
576    Check for any leading string which matches, so .text5 returns
577    't' as well as .text */
578
579 static char
580 coff_section_type (s)
581      const char *s;
582 {
583   const struct section_to_type *t;
584
585   for (t = &stt[0]; t->section; t++)
586     if (!strncmp (s, t->section, strlen (t->section)))
587       return t->type;
588
589   return '?';
590 }
591
592 /*
593 FUNCTION
594         bfd_decode_symclass
595
596 DESCRIPTION
597         Return a character corresponding to the symbol
598         class of @var{symbol}, or '?' for an unknown class.
599
600 SYNOPSIS
601         int bfd_decode_symclass(asymbol *symbol);
602 */
603 int
604 bfd_decode_symclass (symbol)
605      asymbol *symbol;
606 {
607   char c;
608
609   if (bfd_is_com_section (symbol->section))
610     return 'C';
611   if (bfd_is_und_section (symbol->section))
612     {
613       if (symbol->flags & BSF_WEAK)
614         {
615           /* If weak, determine if it's specifically an object
616              or non-object weak.  */
617           if (symbol->flags & BSF_OBJECT)
618             return 'v';
619           else
620             return 'w';
621         }
622       else
623         return 'U';
624     }
625   if (bfd_is_ind_section (symbol->section))
626     return 'I';
627   if (symbol->flags & BSF_WEAK)
628     {
629       /* If weak, determine if it's specifically an object
630          or non-object weak.  */
631       if (symbol->flags & BSF_OBJECT)
632         return 'V';
633       else
634         return 'W';
635     }
636   if (!(symbol->flags & (BSF_GLOBAL | BSF_LOCAL)))
637     return '?';
638
639   if (bfd_is_abs_section (symbol->section))
640     c = 'a';
641   else if (symbol->section)
642     c = coff_section_type (symbol->section->name);
643   else
644     return '?';
645   if (symbol->flags & BSF_GLOBAL)
646     c = TOUPPER (c);
647   return c;
648
649   /* We don't have to handle these cases just yet, but we will soon:
650      N_SETV: 'v';
651      N_SETA: 'l';
652      N_SETT: 'x';
653      N_SETD: 'z';
654      N_SETB: 's';
655      N_INDR: 'i';
656      */
657 }
658
659 /*
660 FUNCTION
661         bfd_is_undefined_symclass
662
663 DESCRIPTION
664         Returns non-zero if the class symbol returned by
665         bfd_decode_symclass represents an undefined symbol.
666         Returns zero otherwise.
667
668 SYNOPSIS
669         boolean bfd_is_undefined_symclass (int symclass);
670 */
671
672 boolean
673 bfd_is_undefined_symclass (symclass)
674      int symclass;
675 {
676   return symclass == 'U' || symclass == 'w' || symclass == 'v';
677 }
678
679 /*
680 FUNCTION
681         bfd_symbol_info
682
683 DESCRIPTION
684         Fill in the basic info about symbol that nm needs.
685         Additional info may be added by the back-ends after
686         calling this function.
687
688 SYNOPSIS
689         void bfd_symbol_info(asymbol *symbol, symbol_info *ret);
690 */
691
692 void
693 bfd_symbol_info (symbol, ret)
694      asymbol *symbol;
695      symbol_info *ret;
696 {
697   ret->type = bfd_decode_symclass (symbol);
698
699   if (bfd_is_undefined_symclass (ret->type))
700     ret->value = 0;
701   else
702     ret->value = symbol->value + symbol->section->vma;
703
704   ret->name = symbol->name;
705 }
706
707 /*
708 FUNCTION
709         bfd_copy_private_symbol_data
710
711 SYNOPSIS
712         boolean bfd_copy_private_symbol_data(bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
713
714 DESCRIPTION
715         Copy private symbol information from @var{isym} in the BFD
716         @var{ibfd} to the symbol @var{osym} in the BFD @var{obfd}.
717         Return <<true>> on success, <<false>> on error.  Possible error
718         returns are:
719
720         o <<bfd_error_no_memory>> -
721         Not enough memory exists to create private data for @var{osec}.
722
723 .#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
724 .     BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
725 .               (ibfd, isymbol, obfd, osymbol))
726 .
727 */
728
729 /* The generic version of the function which returns mini symbols.
730    This is used when the backend does not provide a more efficient
731    version.  It just uses BFD asymbol structures as mini symbols.  */
732
733 long
734 _bfd_generic_read_minisymbols (abfd, dynamic, minisymsp, sizep)
735      bfd *abfd;
736      boolean dynamic;
737      PTR *minisymsp;
738      unsigned int *sizep;
739 {
740   long storage;
741   asymbol **syms = NULL;
742   long symcount;
743
744   if (dynamic)
745     storage = bfd_get_dynamic_symtab_upper_bound (abfd);
746   else
747     storage = bfd_get_symtab_upper_bound (abfd);
748   if (storage < 0)
749     goto error_return;
750   if (storage == 0)
751     return 0;
752
753   syms = (asymbol **) bfd_malloc ((bfd_size_type) storage);
754   if (syms == NULL)
755     goto error_return;
756
757   if (dynamic)
758     symcount = bfd_canonicalize_dynamic_symtab (abfd, syms);
759   else
760     symcount = bfd_canonicalize_symtab (abfd, syms);
761   if (symcount < 0)
762     goto error_return;
763
764   *minisymsp = (PTR) syms;
765   *sizep = sizeof (asymbol *);
766   return symcount;
767
768  error_return:
769   if (syms != NULL)
770     free (syms);
771   return -1;
772 }
773
774 /* The generic version of the function which converts a minisymbol to
775    an asymbol.  We don't worry about the sym argument we are passed;
776    we just return the asymbol the minisymbol points to.  */
777
778 /*ARGSUSED*/
779 asymbol *
780 _bfd_generic_minisymbol_to_symbol (abfd, dynamic, minisym, sym)
781      bfd *abfd ATTRIBUTE_UNUSED;
782      boolean dynamic ATTRIBUTE_UNUSED;
783      const PTR minisym;
784      asymbol *sym ATTRIBUTE_UNUSED;
785 {
786   return *(asymbol **) minisym;
787 }
788
789 /* Look through stabs debugging information in .stab and .stabstr
790    sections to find the source file and line closest to a desired
791    location.  This is used by COFF and ELF targets.  It sets *pfound
792    to true if it finds some information.  The *pinfo field is used to
793    pass cached information in and out of this routine; this first time
794    the routine is called for a BFD, *pinfo should be NULL.  The value
795    placed in *pinfo should be saved with the BFD, and passed back each
796    time this function is called.  */
797
798 /* We use a cache by default.  */
799
800 #define ENABLE_CACHING
801
802 /* We keep an array of indexentry structures to record where in the
803    stabs section we should look to find line number information for a
804    particular address.  */
805
806 struct indexentry
807 {
808   bfd_vma val;
809   bfd_byte *stab;
810   bfd_byte *str;
811   char *directory_name;
812   char *file_name;
813   char *function_name;
814 };
815
816 /* Compare two indexentry structures.  This is called via qsort.  */
817
818 static int
819 cmpindexentry (a, b)
820      const PTR a;
821      const PTR b;
822 {
823   const struct indexentry *contestantA = (const struct indexentry *) a;
824   const struct indexentry *contestantB = (const struct indexentry *) b;
825
826   if (contestantA->val < contestantB->val)
827     return -1;
828   else if (contestantA->val > contestantB->val)
829     return 1;
830   else
831     return 0;
832 }
833
834 /* A pointer to this structure is stored in *pinfo.  */
835
836 struct stab_find_info
837 {
838   /* The .stab section.  */
839   asection *stabsec;
840   /* The .stabstr section.  */
841   asection *strsec;
842   /* The contents of the .stab section.  */
843   bfd_byte *stabs;
844   /* The contents of the .stabstr section.  */
845   bfd_byte *strs;
846
847   /* A table that indexes stabs by memory address.  */
848   struct indexentry *indextable;
849   /* The number of entries in indextable.  */
850   int indextablesize;
851
852 #ifdef ENABLE_CACHING
853   /* Cached values to restart quickly.  */
854   struct indexentry *cached_indexentry;
855   bfd_vma cached_offset;
856   bfd_byte *cached_stab;
857   char *cached_file_name;
858 #endif
859
860   /* Saved ptr to malloc'ed filename.  */
861   char *filename;
862 };
863
864 boolean
865 _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset, pfound,
866                                      pfilename, pfnname, pline, pinfo)
867      bfd *abfd;
868      asymbol **symbols;
869      asection *section;
870      bfd_vma offset;
871      boolean *pfound;
872      const char **pfilename;
873      const char **pfnname;
874      unsigned int *pline;
875      PTR *pinfo;
876 {
877   struct stab_find_info *info;
878   bfd_size_type stabsize, strsize;
879   bfd_byte *stab, *str;
880   bfd_byte *last_stab = NULL;
881   bfd_size_type stroff;
882   struct indexentry *indexentry;
883   char *file_name;
884   char *directory_name;
885   int saw_fun;
886   boolean saw_line, saw_func;
887
888   *pfound = false;
889   *pfilename = bfd_get_filename (abfd);
890   *pfnname = NULL;
891   *pline = 0;
892
893   /* Stabs entries use a 12 byte format:
894        4 byte string table index
895        1 byte stab type
896        1 byte stab other field
897        2 byte stab desc field
898        4 byte stab value
899      FIXME: This will have to change for a 64 bit object format.
900
901      The stabs symbols are divided into compilation units.  For the
902      first entry in each unit, the type of 0, the value is the length
903      of the string table for this unit, and the desc field is the
904      number of stabs symbols for this unit.  */
905
906 #define STRDXOFF (0)
907 #define TYPEOFF (4)
908 #define OTHEROFF (5)
909 #define DESCOFF (6)
910 #define VALOFF (8)
911 #define STABSIZE (12)
912
913   info = (struct stab_find_info *) *pinfo;
914   if (info != NULL)
915     {
916       if (info->stabsec == NULL || info->strsec == NULL)
917         {
918           /* No stabs debugging information.  */
919           return true;
920         }
921
922       stabsize = info->stabsec->_raw_size;
923       strsize = info->strsec->_raw_size;
924     }
925   else
926     {
927       long reloc_size, reloc_count;
928       arelent **reloc_vector;
929       int i;
930       char *name;
931       char *function_name;
932       bfd_size_type amt = sizeof *info;
933
934       info = (struct stab_find_info *) bfd_zalloc (abfd, amt);
935       if (info == NULL)
936         return false;
937
938       /* FIXME: When using the linker --split-by-file or
939          --split-by-reloc options, it is possible for the .stab and
940          .stabstr sections to be split.  We should handle that.  */
941
942       info->stabsec = bfd_get_section_by_name (abfd, ".stab");
943       info->strsec = bfd_get_section_by_name (abfd, ".stabstr");
944
945       if (info->stabsec == NULL || info->strsec == NULL)
946         {
947           /* No stabs debugging information.  Set *pinfo so that we
948              can return quickly in the info != NULL case above.  */
949           *pinfo = (PTR) info;
950           return true;
951         }
952
953       stabsize = info->stabsec->_raw_size;
954       strsize = info->strsec->_raw_size;
955
956       info->stabs = (bfd_byte *) bfd_alloc (abfd, stabsize);
957       info->strs = (bfd_byte *) bfd_alloc (abfd, strsize);
958       if (info->stabs == NULL || info->strs == NULL)
959         return false;
960
961       if (! bfd_get_section_contents (abfd, info->stabsec, info->stabs,
962                                       (bfd_vma) 0, stabsize)
963           || ! bfd_get_section_contents (abfd, info->strsec, info->strs,
964                                          (bfd_vma) 0, strsize))
965         return false;
966
967       /* If this is a relocateable object file, we have to relocate
968          the entries in .stab.  This should always be simple 32 bit
969          relocations against symbols defined in this object file, so
970          this should be no big deal.  */
971       reloc_size = bfd_get_reloc_upper_bound (abfd, info->stabsec);
972       if (reloc_size < 0)
973         return false;
974       reloc_vector = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
975       if (reloc_vector == NULL && reloc_size != 0)
976         return false;
977       reloc_count = bfd_canonicalize_reloc (abfd, info->stabsec, reloc_vector,
978                                             symbols);
979       if (reloc_count < 0)
980         {
981           if (reloc_vector != NULL)
982             free (reloc_vector);
983           return false;
984         }
985       if (reloc_count > 0)
986         {
987           arelent **pr;
988
989           for (pr = reloc_vector; *pr != NULL; pr++)
990             {
991               arelent *r;
992               unsigned long val;
993               asymbol *sym;
994
995               r = *pr;
996               if (r->howto->rightshift != 0
997                   || r->howto->size != 2
998                   || r->howto->bitsize != 32
999                   || r->howto->pc_relative
1000                   || r->howto->bitpos != 0
1001                   || r->howto->dst_mask != 0xffffffff)
1002                 {
1003                   (*_bfd_error_handler)
1004                     (_("Unsupported .stab relocation"));
1005                   bfd_set_error (bfd_error_invalid_operation);
1006                   if (reloc_vector != NULL)
1007                     free (reloc_vector);
1008                   return false;
1009                 }
1010
1011               val = bfd_get_32 (abfd, info->stabs + r->address);
1012               val &= r->howto->src_mask;
1013               sym = *r->sym_ptr_ptr;
1014               val += sym->value + sym->section->vma + r->addend;
1015               bfd_put_32 (abfd, (bfd_vma) val, info->stabs + r->address);
1016             }
1017         }
1018
1019       if (reloc_vector != NULL)
1020         free (reloc_vector);
1021
1022       /* First time through this function, build a table matching
1023          function VM addresses to stabs, then sort based on starting
1024          VM address.  Do this in two passes: once to count how many
1025          table entries we'll need, and a second to actually build the
1026          table.  */
1027
1028       info->indextablesize = 0;
1029       saw_fun = 1;
1030       for (stab = info->stabs; stab < info->stabs + stabsize; stab += STABSIZE)
1031         {
1032           if (stab[TYPEOFF] == N_SO)
1033             {
1034               /* N_SO with null name indicates EOF */
1035               if (bfd_get_32 (abfd, stab + STRDXOFF) == 0)
1036                 continue;
1037
1038               /* if we did not see a function def, leave space for one.  */
1039               if (saw_fun == 0)
1040                 ++info->indextablesize;
1041
1042               saw_fun = 0;
1043
1044               /* two N_SO's in a row is a filename and directory. Skip */
1045               if (stab + STABSIZE < info->stabs + stabsize
1046                   && *(stab + STABSIZE + TYPEOFF) == N_SO)
1047                 {
1048                   stab += STABSIZE;
1049                 }
1050             }
1051           else if (stab[TYPEOFF] == N_FUN)
1052             {
1053               saw_fun = 1;
1054               ++info->indextablesize;
1055             }
1056         }
1057
1058       if (saw_fun == 0)
1059         ++info->indextablesize;
1060
1061       if (info->indextablesize == 0)
1062         return true;
1063       ++info->indextablesize;
1064
1065       amt = info->indextablesize;
1066       amt *= sizeof (struct indexentry);
1067       info->indextable = (struct indexentry *) bfd_alloc (abfd, amt);
1068       if (info->indextable == NULL)
1069         return false;
1070
1071       file_name = NULL;
1072       directory_name = NULL;
1073       saw_fun = 1;
1074
1075       for (i = 0, stroff = 0, stab = info->stabs, str = info->strs;
1076            i < info->indextablesize && stab < info->stabs + stabsize;
1077            stab += STABSIZE)
1078         {
1079           switch (stab[TYPEOFF])
1080             {
1081             case 0:
1082               /* This is the first entry in a compilation unit.  */
1083               if ((bfd_size_type) ((info->strs + strsize) - str) < stroff)
1084                 break;
1085               str += stroff;
1086               stroff = bfd_get_32 (abfd, stab + VALOFF);
1087               break;
1088
1089             case N_SO:
1090               /* The main file name.  */
1091
1092               /* The following code creates a new indextable entry with
1093                  a NULL function name if there were no N_FUNs in a file.
1094                  Note that a N_SO without a file name is an EOF and
1095                  there could be 2 N_SO following it with the new filename
1096                  and directory.  */
1097               if (saw_fun == 0)
1098                 {
1099                   info->indextable[i].val = bfd_get_32 (abfd, last_stab + VALOFF);
1100                   info->indextable[i].stab = last_stab;
1101                   info->indextable[i].str = str;
1102                   info->indextable[i].directory_name = directory_name;
1103                   info->indextable[i].file_name = file_name;
1104                   info->indextable[i].function_name = NULL;
1105                   ++i;
1106                 }
1107               saw_fun = 0;
1108
1109               file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
1110               if (*file_name == '\0')
1111                 {
1112                   directory_name = NULL;
1113                   file_name = NULL;
1114                   saw_fun = 1;
1115                 }
1116               else
1117                 {
1118                   last_stab = stab;
1119                   if (stab + STABSIZE >= info->stabs + stabsize
1120                       || *(stab + STABSIZE + TYPEOFF) != N_SO)
1121                     {
1122                       directory_name = NULL;
1123                     }
1124                   else
1125                     {
1126                       /* Two consecutive N_SOs are a directory and a
1127                          file name.  */
1128                       stab += STABSIZE;
1129                       directory_name = file_name;
1130                       file_name = ((char *) str
1131                                    + bfd_get_32 (abfd, stab + STRDXOFF));
1132                     }
1133                 }
1134               break;
1135
1136             case N_SOL:
1137               /* The name of an include file.  */
1138               file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
1139               break;
1140
1141             case N_FUN:
1142               /* A function name.  */
1143               saw_fun = 1;
1144               name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
1145
1146               if (*name == '\0')
1147                 name = NULL;
1148
1149               function_name = name;
1150
1151               if (name == NULL)
1152                 continue;
1153
1154               info->indextable[i].val = bfd_get_32 (abfd, stab + VALOFF);
1155               info->indextable[i].stab = stab;
1156               info->indextable[i].str = str;
1157               info->indextable[i].directory_name = directory_name;
1158               info->indextable[i].file_name = file_name;
1159               info->indextable[i].function_name = function_name;
1160               ++i;
1161               break;
1162             }
1163         }
1164
1165       if (saw_fun == 0)
1166         {
1167           info->indextable[i].val = bfd_get_32 (abfd, last_stab + VALOFF);
1168           info->indextable[i].stab = last_stab;
1169           info->indextable[i].str = str;
1170           info->indextable[i].directory_name = directory_name;
1171           info->indextable[i].file_name = file_name;
1172           info->indextable[i].function_name = NULL;
1173           ++i;
1174         }
1175
1176       info->indextable[i].val = (bfd_vma) -1;
1177       info->indextable[i].stab = info->stabs + stabsize;
1178       info->indextable[i].str = str;
1179       info->indextable[i].directory_name = NULL;
1180       info->indextable[i].file_name = NULL;
1181       info->indextable[i].function_name = NULL;
1182       ++i;
1183
1184       info->indextablesize = i;
1185       qsort (info->indextable, (size_t) i, sizeof (struct indexentry),
1186              cmpindexentry);
1187
1188       *pinfo = (PTR) info;
1189     }
1190
1191   /* We are passed a section relative offset.  The offsets in the
1192      stabs information are absolute.  */
1193   offset += bfd_get_section_vma (abfd, section);
1194
1195 #ifdef ENABLE_CACHING
1196   if (info->cached_indexentry != NULL
1197       && offset >= info->cached_offset
1198       && offset < (info->cached_indexentry + 1)->val)
1199     {
1200       stab = info->cached_stab;
1201       indexentry = info->cached_indexentry;
1202       file_name = info->cached_file_name;
1203     }
1204   else
1205 #endif
1206     {
1207       /* Cache non-existant or invalid.  Do binary search on
1208          indextable.  */
1209
1210       long low, high;
1211       long mid = -1;
1212
1213       indexentry = NULL;
1214
1215       low = 0;
1216       high = info->indextablesize - 1;
1217       while (low != high)
1218         {
1219           mid = (high + low) / 2;
1220           if (offset >= info->indextable[mid].val
1221               && offset < info->indextable[mid + 1].val)
1222             {
1223               indexentry = &info->indextable[mid];
1224               break;
1225             }
1226
1227           if (info->indextable[mid].val > offset)
1228             high = mid;
1229           else
1230             low = mid + 1;
1231         }
1232
1233       if (indexentry == NULL)
1234         return true;
1235
1236       stab = indexentry->stab + STABSIZE;
1237       file_name = indexentry->file_name;
1238     }
1239
1240   directory_name = indexentry->directory_name;
1241   str = indexentry->str;
1242
1243   saw_line = false;
1244   saw_func = false;
1245   for (; stab < (indexentry+1)->stab; stab += STABSIZE)
1246     {
1247       boolean done;
1248       bfd_vma val;
1249
1250       done = false;
1251
1252       switch (stab[TYPEOFF])
1253         {
1254         case N_SOL:
1255           /* The name of an include file.  */
1256           val = bfd_get_32 (abfd, stab + VALOFF);
1257           if (val <= offset)
1258             {
1259               file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
1260               *pline = 0;
1261             }
1262           break;
1263
1264         case N_SLINE:
1265         case N_DSLINE:
1266         case N_BSLINE:
1267           /* A line number.  The value is relative to the start of the
1268              current function.  */
1269           val = indexentry->val + bfd_get_32 (abfd, stab + VALOFF);
1270           /* If this line starts before our desired offset, or if it's
1271              the first line we've been able to find, use it.  The
1272              !saw_line check works around a bug in GCC 2.95.3, which emits
1273              the first N_SLINE late.  */
1274           if (!saw_line || val <= offset)
1275             {
1276               *pline = bfd_get_16 (abfd, stab + DESCOFF);
1277
1278 #ifdef ENABLE_CACHING
1279               info->cached_stab = stab;
1280               info->cached_offset = val;
1281               info->cached_file_name = file_name;
1282               info->cached_indexentry = indexentry;
1283 #endif
1284             }
1285           if (val > offset)
1286             done = true;
1287           saw_line = true;
1288           break;
1289
1290         case N_FUN:
1291         case N_SO:
1292           if (saw_func || saw_line)
1293             done = true;
1294           saw_func = true;
1295           break;
1296         }
1297
1298       if (done)
1299         break;
1300     }
1301
1302   *pfound = true;
1303
1304   if (file_name == NULL || IS_ABSOLUTE_PATH (file_name)
1305       || directory_name == NULL)
1306     *pfilename = file_name;
1307   else
1308     {
1309       size_t dirlen;
1310
1311       dirlen = strlen (directory_name);
1312       if (info->filename == NULL
1313           || strncmp (info->filename, directory_name, dirlen) != 0
1314           || strcmp (info->filename + dirlen, file_name) != 0)
1315         {
1316           size_t len;
1317
1318           if (info->filename != NULL)
1319             free (info->filename);
1320           len = strlen (file_name) + 1;
1321           info->filename = (char *) bfd_malloc ((bfd_size_type) dirlen + len);
1322           if (info->filename == NULL)
1323             return false;
1324           memcpy (info->filename, directory_name, dirlen);
1325           memcpy (info->filename + dirlen, file_name, len);
1326         }
1327
1328       *pfilename = info->filename;
1329     }
1330
1331   if (indexentry->function_name != NULL)
1332     {
1333       char *s;
1334
1335       /* This will typically be something like main:F(0,1), so we want
1336          to clobber the colon.  It's OK to change the name, since the
1337          string is in our own local storage anyhow.  */
1338
1339       s = strchr (indexentry->function_name, ':');
1340       if (s != NULL)
1341         *s = '\0';
1342
1343       *pfnname = indexentry->function_name;
1344     }
1345
1346   return true;
1347 }