* elf.c (_bfd_elf_make_section_from_shdr): Set SEC_THREAD_LOCAL
[platform/upstream/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
887   *pfound = false;
888   *pfilename = bfd_get_filename (abfd);
889   *pfnname = NULL;
890   *pline = 0;
891
892   /* Stabs entries use a 12 byte format:
893        4 byte string table index
894        1 byte stab type
895        1 byte stab other field
896        2 byte stab desc field
897        4 byte stab value
898      FIXME: This will have to change for a 64 bit object format.
899
900      The stabs symbols are divided into compilation units.  For the
901      first entry in each unit, the type of 0, the value is the length
902      of the string table for this unit, and the desc field is the
903      number of stabs symbols for this unit.  */
904
905 #define STRDXOFF (0)
906 #define TYPEOFF (4)
907 #define OTHEROFF (5)
908 #define DESCOFF (6)
909 #define VALOFF (8)
910 #define STABSIZE (12)
911
912   info = (struct stab_find_info *) *pinfo;
913   if (info != NULL)
914     {
915       if (info->stabsec == NULL || info->strsec == NULL)
916         {
917           /* No stabs debugging information.  */
918           return true;
919         }
920
921       stabsize = info->stabsec->_raw_size;
922       strsize = info->strsec->_raw_size;
923     }
924   else
925     {
926       long reloc_size, reloc_count;
927       arelent **reloc_vector;
928       int i;
929       char *name;
930       char *function_name;
931       bfd_size_type amt = sizeof *info;
932
933       info = (struct stab_find_info *) bfd_zalloc (abfd, amt);
934       if (info == NULL)
935         return false;
936
937       /* FIXME: When using the linker --split-by-file or
938          --split-by-reloc options, it is possible for the .stab and
939          .stabstr sections to be split.  We should handle that.  */
940
941       info->stabsec = bfd_get_section_by_name (abfd, ".stab");
942       info->strsec = bfd_get_section_by_name (abfd, ".stabstr");
943
944       if (info->stabsec == NULL || info->strsec == NULL)
945         {
946           /* No stabs debugging information.  Set *pinfo so that we
947              can return quickly in the info != NULL case above.  */
948           *pinfo = (PTR) info;
949           return true;
950         }
951
952       stabsize = info->stabsec->_raw_size;
953       strsize = info->strsec->_raw_size;
954
955       info->stabs = (bfd_byte *) bfd_alloc (abfd, stabsize);
956       info->strs = (bfd_byte *) bfd_alloc (abfd, strsize);
957       if (info->stabs == NULL || info->strs == NULL)
958         return false;
959
960       if (! bfd_get_section_contents (abfd, info->stabsec, info->stabs,
961                                       (bfd_vma) 0, stabsize)
962           || ! bfd_get_section_contents (abfd, info->strsec, info->strs,
963                                          (bfd_vma) 0, strsize))
964         return false;
965
966       /* If this is a relocateable object file, we have to relocate
967          the entries in .stab.  This should always be simple 32 bit
968          relocations against symbols defined in this object file, so
969          this should be no big deal.  */
970       reloc_size = bfd_get_reloc_upper_bound (abfd, info->stabsec);
971       if (reloc_size < 0)
972         return false;
973       reloc_vector = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
974       if (reloc_vector == NULL && reloc_size != 0)
975         return false;
976       reloc_count = bfd_canonicalize_reloc (abfd, info->stabsec, reloc_vector,
977                                             symbols);
978       if (reloc_count < 0)
979         {
980           if (reloc_vector != NULL)
981             free (reloc_vector);
982           return false;
983         }
984       if (reloc_count > 0)
985         {
986           arelent **pr;
987
988           for (pr = reloc_vector; *pr != NULL; pr++)
989             {
990               arelent *r;
991               unsigned long val;
992               asymbol *sym;
993
994               r = *pr;
995               if (r->howto->rightshift != 0
996                   || r->howto->size != 2
997                   || r->howto->bitsize != 32
998                   || r->howto->pc_relative
999                   || r->howto->bitpos != 0
1000                   || r->howto->dst_mask != 0xffffffff)
1001                 {
1002                   (*_bfd_error_handler)
1003                     (_("Unsupported .stab relocation"));
1004                   bfd_set_error (bfd_error_invalid_operation);
1005                   if (reloc_vector != NULL)
1006                     free (reloc_vector);
1007                   return false;
1008                 }
1009
1010               val = bfd_get_32 (abfd, info->stabs + r->address);
1011               val &= r->howto->src_mask;
1012               sym = *r->sym_ptr_ptr;
1013               val += sym->value + sym->section->vma + r->addend;
1014               bfd_put_32 (abfd, (bfd_vma) val, info->stabs + r->address);
1015             }
1016         }
1017
1018       if (reloc_vector != NULL)
1019         free (reloc_vector);
1020
1021       /* First time through this function, build a table matching
1022          function VM addresses to stabs, then sort based on starting
1023          VM address.  Do this in two passes: once to count how many
1024          table entries we'll need, and a second to actually build the
1025          table.  */
1026
1027       info->indextablesize = 0;
1028       saw_fun = 1;
1029       for (stab = info->stabs; stab < info->stabs + stabsize; stab += STABSIZE)
1030         {
1031           if (stab[TYPEOFF] == N_SO)
1032             {
1033               /* N_SO with null name indicates EOF */
1034               if (bfd_get_32 (abfd, stab + STRDXOFF) == 0)
1035                 continue;
1036
1037               /* if we did not see a function def, leave space for one.  */
1038               if (saw_fun == 0)
1039                 ++info->indextablesize;
1040
1041               saw_fun = 0;
1042
1043               /* two N_SO's in a row is a filename and directory. Skip */
1044               if (stab + STABSIZE < info->stabs + stabsize
1045                   && *(stab + STABSIZE + TYPEOFF) == N_SO)
1046                 {
1047                   stab += STABSIZE;
1048                 }
1049             }
1050           else if (stab[TYPEOFF] == N_FUN)
1051             {
1052               saw_fun = 1;
1053               ++info->indextablesize;
1054             }
1055         }
1056
1057       if (saw_fun == 0)
1058         ++info->indextablesize;
1059
1060       if (info->indextablesize == 0)
1061         return true;
1062       ++info->indextablesize;
1063
1064       amt = info->indextablesize;
1065       amt *= sizeof (struct indexentry);
1066       info->indextable = (struct indexentry *) bfd_alloc (abfd, amt);
1067       if (info->indextable == NULL)
1068         return false;
1069
1070       file_name = NULL;
1071       directory_name = NULL;
1072       saw_fun = 1;
1073
1074       for (i = 0, stroff = 0, stab = info->stabs, str = info->strs;
1075            i < info->indextablesize && stab < info->stabs + stabsize;
1076            stab += STABSIZE)
1077         {
1078           switch (stab[TYPEOFF])
1079             {
1080             case 0:
1081               /* This is the first entry in a compilation unit.  */
1082               if ((bfd_size_type) ((info->strs + strsize) - str) < stroff)
1083                 break;
1084               str += stroff;
1085               stroff = bfd_get_32 (abfd, stab + VALOFF);
1086               break;
1087
1088             case N_SO:
1089               /* The main file name.  */
1090
1091               /* The following code creates a new indextable entry with
1092                  a NULL function name if there were no N_FUNs in a file.
1093                  Note that a N_SO without a file name is an EOF and
1094                  there could be 2 N_SO following it with the new filename
1095                  and directory.  */
1096               if (saw_fun == 0)
1097                 {
1098                   info->indextable[i].val = bfd_get_32 (abfd, last_stab + VALOFF);
1099                   info->indextable[i].stab = last_stab;
1100                   info->indextable[i].str = str;
1101                   info->indextable[i].directory_name = directory_name;
1102                   info->indextable[i].file_name = file_name;
1103                   info->indextable[i].function_name = NULL;
1104                   ++i;
1105                 }
1106               saw_fun = 0;
1107
1108               file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
1109               if (*file_name == '\0')
1110                 {
1111                   directory_name = NULL;
1112                   file_name = NULL;
1113                   saw_fun = 1;
1114                 }
1115               else
1116                 {
1117                   last_stab = stab;
1118                   if (stab + STABSIZE >= info->stabs + stabsize
1119                       || *(stab + STABSIZE + TYPEOFF) != N_SO)
1120                     {
1121                       directory_name = NULL;
1122                     }
1123                   else
1124                     {
1125                       /* Two consecutive N_SOs are a directory and a
1126                          file name.  */
1127                       stab += STABSIZE;
1128                       directory_name = file_name;
1129                       file_name = ((char *) str
1130                                    + bfd_get_32 (abfd, stab + STRDXOFF));
1131                     }
1132                 }
1133               break;
1134
1135             case N_SOL:
1136               /* The name of an include file.  */
1137               file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
1138               break;
1139
1140             case N_FUN:
1141               /* A function name.  */
1142               saw_fun = 1;
1143               name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
1144
1145               if (*name == '\0')
1146                 name = NULL;
1147
1148               function_name = name;
1149
1150               if (name == NULL)
1151                 continue;
1152
1153               info->indextable[i].val = bfd_get_32 (abfd, stab + VALOFF);
1154               info->indextable[i].stab = stab;
1155               info->indextable[i].str = str;
1156               info->indextable[i].directory_name = directory_name;
1157               info->indextable[i].file_name = file_name;
1158               info->indextable[i].function_name = function_name;
1159               ++i;
1160               break;
1161             }
1162         }
1163
1164       if (saw_fun == 0)
1165         {
1166           info->indextable[i].val = bfd_get_32 (abfd, last_stab + VALOFF);
1167           info->indextable[i].stab = last_stab;
1168           info->indextable[i].str = str;
1169           info->indextable[i].directory_name = directory_name;
1170           info->indextable[i].file_name = file_name;
1171           info->indextable[i].function_name = NULL;
1172           ++i;
1173         }
1174
1175       info->indextable[i].val = (bfd_vma) -1;
1176       info->indextable[i].stab = info->stabs + stabsize;
1177       info->indextable[i].str = str;
1178       info->indextable[i].directory_name = NULL;
1179       info->indextable[i].file_name = NULL;
1180       info->indextable[i].function_name = NULL;
1181       ++i;
1182
1183       info->indextablesize = i;
1184       qsort (info->indextable, (size_t) i, sizeof (struct indexentry),
1185              cmpindexentry);
1186
1187       *pinfo = (PTR) info;
1188     }
1189
1190   /* We are passed a section relative offset.  The offsets in the
1191      stabs information are absolute.  */
1192   offset += bfd_get_section_vma (abfd, section);
1193
1194 #ifdef ENABLE_CACHING
1195   if (info->cached_indexentry != NULL
1196       && offset >= info->cached_offset
1197       && offset < (info->cached_indexentry + 1)->val)
1198     {
1199       stab = info->cached_stab;
1200       indexentry = info->cached_indexentry;
1201       file_name = info->cached_file_name;
1202     }
1203   else
1204 #endif
1205     {
1206       /* Cache non-existant or invalid.  Do binary search on
1207          indextable.  */
1208
1209       long low, high;
1210       long mid = -1;
1211
1212       indexentry = NULL;
1213
1214       low = 0;
1215       high = info->indextablesize - 1;
1216       while (low != high)
1217         {
1218           mid = (high + low) / 2;
1219           if (offset >= info->indextable[mid].val
1220               && offset < info->indextable[mid + 1].val)
1221             {
1222               indexentry = &info->indextable[mid];
1223               break;
1224             }
1225
1226           if (info->indextable[mid].val > offset)
1227             high = mid;
1228           else
1229             low = mid + 1;
1230         }
1231
1232       if (indexentry == NULL)
1233         return true;
1234
1235       stab = indexentry->stab + STABSIZE;
1236       file_name = indexentry->file_name;
1237     }
1238
1239   directory_name = indexentry->directory_name;
1240   str = indexentry->str;
1241
1242   for (; stab < (indexentry+1)->stab; stab += STABSIZE)
1243     {
1244       boolean done, saw_line, saw_func;
1245       bfd_vma val;
1246
1247       saw_line = false;
1248       saw_func = false;
1249       done = false;
1250
1251       switch (stab[TYPEOFF])
1252         {
1253         case N_SOL:
1254           /* The name of an include file.  */
1255           val = bfd_get_32 (abfd, stab + VALOFF);
1256           if (val <= offset)
1257             {
1258               file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
1259               *pline = 0;
1260             }
1261           break;
1262
1263         case N_SLINE:
1264         case N_DSLINE:
1265         case N_BSLINE:
1266           /* A line number.  The value is relative to the start of the
1267              current function.  */
1268           val = indexentry->val + bfd_get_32 (abfd, stab + VALOFF);
1269           /* If this line starts before our desired offset, or if it's
1270              the first line we've been able to find, use it.  The
1271              !saw_line check works around a bug in GCC 2.95.3, which emits
1272              the first N_SLINE late.  */
1273           if (!saw_line || val <= offset)
1274             {
1275               *pline = bfd_get_16 (abfd, stab + DESCOFF);
1276
1277 #ifdef ENABLE_CACHING
1278               info->cached_stab = stab;
1279               info->cached_offset = val;
1280               info->cached_file_name = file_name;
1281               info->cached_indexentry = indexentry;
1282 #endif
1283             }
1284           if (val > offset)
1285             done = true;
1286           saw_line = true;
1287           break;
1288
1289         case N_FUN:
1290         case N_SO:
1291           if (saw_func || saw_line)
1292             done = true;
1293           saw_func = true;
1294           break;
1295         }
1296
1297       if (done)
1298         break;
1299     }
1300
1301   *pfound = true;
1302
1303   if (file_name == NULL || IS_ABSOLUTE_PATH (file_name)
1304       || directory_name == NULL)
1305     *pfilename = file_name;
1306   else
1307     {
1308       size_t dirlen;
1309
1310       dirlen = strlen (directory_name);
1311       if (info->filename == NULL
1312           || strncmp (info->filename, directory_name, dirlen) != 0
1313           || strcmp (info->filename + dirlen, file_name) != 0)
1314         {
1315           if (info->filename != NULL)
1316             free (info->filename);
1317           info->filename = (char *) bfd_malloc ((bfd_size_type) dirlen
1318                                                 + strlen (file_name) + 1);
1319           if (info->filename == NULL)
1320             return false;
1321           strcpy (info->filename, directory_name);
1322           strcpy (info->filename + dirlen, file_name);
1323         }
1324
1325       *pfilename = info->filename;
1326     }
1327
1328   if (indexentry->function_name != NULL)
1329     {
1330       char *s;
1331
1332       /* This will typically be something like main:F(0,1), so we want
1333          to clobber the colon.  It's OK to change the name, since the
1334          string is in our own local storage anyhow.  */
1335
1336       s = strchr (indexentry->function_name, ':');
1337       if (s != NULL)
1338         *s = '\0';
1339
1340       *pfnname = indexentry->function_name;
1341     }
1342
1343   return true;
1344 }