* dwarf2.c: Formatting.
[binutils-gdb.git] / bfd / dwarf2.c
1 /* DWARF 2 support.
2 Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
4
5 Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
6 (gavin@cygnus.com).
7
8 From the dwarf2read.c header:
9 Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
10 Inc. with support from Florida State University (under contract
11 with the Ada Joint Program Office), and Silicon Graphics, Inc.
12 Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
13 based on Fred Fish's (Cygnus Support) implementation of DWARF 1
14 support in dwarfread.c
15
16 This file is part of BFD.
17
18 This program is free software; you can redistribute it and/or modify
19 it under the terms of the GNU General Public License as published by
20 the Free Software Foundation; either version 3 of the License, or (at
21 your option) any later version.
22
23 This program is distributed in the hope that it will be useful, but
24 WITHOUT ANY WARRANTY; without even the implied warranty of
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26 General Public License for more details.
27
28 You should have received a copy of the GNU General Public License
29 along with this program; if not, write to the Free Software
30 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
31 MA 02110-1301, USA. */
32
33 #include "sysdep.h"
34 #include "bfd.h"
35 #include "libiberty.h"
36 #include "libbfd.h"
37 #include "elf-bfd.h"
38 #include "dwarf2.h"
39
40 /* The data in the .debug_line statement prologue looks like this. */
41
42 struct line_head
43 {
44 bfd_vma total_length;
45 unsigned short version;
46 bfd_vma prologue_length;
47 unsigned char minimum_instruction_length;
48 unsigned char maximum_ops_per_insn;
49 unsigned char default_is_stmt;
50 int line_base;
51 unsigned char line_range;
52 unsigned char opcode_base;
53 unsigned char *standard_opcode_lengths;
54 };
55
56 /* Attributes have a name and a value. */
57
58 struct attribute
59 {
60 enum dwarf_attribute name;
61 enum dwarf_form form;
62 union
63 {
64 char *str;
65 struct dwarf_block *blk;
66 bfd_uint64_t val;
67 bfd_int64_t sval;
68 }
69 u;
70 };
71
72 /* Blocks are a bunch of untyped bytes. */
73 struct dwarf_block
74 {
75 unsigned int size;
76 bfd_byte *data;
77 };
78
79 struct adjusted_section
80 {
81 asection *section;
82 bfd_vma adj_vma;
83 };
84
85 struct dwarf2_debug
86 {
87 /* A list of all previously read comp_units. */
88 struct comp_unit *all_comp_units;
89
90 /* Last comp unit in list above. */
91 struct comp_unit *last_comp_unit;
92
93 /* Names of the debug sections. */
94 const struct dwarf_debug_section *debug_sections;
95
96 /* The next unread compilation unit within the .debug_info section.
97 Zero indicates that the .debug_info section has not been loaded
98 into a buffer yet. */
99 bfd_byte *info_ptr;
100
101 /* Pointer to the end of the .debug_info section memory buffer. */
102 bfd_byte *info_ptr_end;
103
104 /* Pointer to the bfd, section and address of the beginning of the
105 section. The bfd might be different than expected because of
106 gnu_debuglink sections. */
107 bfd *bfd_ptr;
108 asection *sec;
109 bfd_byte *sec_info_ptr;
110
111 /* A pointer to the memory block allocated for info_ptr. Neither
112 info_ptr nor sec_info_ptr are guaranteed to stay pointing to the
113 beginning of the malloc block. This is used only to free the
114 memory later. */
115 bfd_byte *info_ptr_memory;
116
117 /* Pointer to the symbol table. */
118 asymbol **syms;
119
120 /* Pointer to the .debug_abbrev section loaded into memory. */
121 bfd_byte *dwarf_abbrev_buffer;
122
123 /* Length of the loaded .debug_abbrev section. */
124 bfd_size_type dwarf_abbrev_size;
125
126 /* Buffer for decode_line_info. */
127 bfd_byte *dwarf_line_buffer;
128
129 /* Length of the loaded .debug_line section. */
130 bfd_size_type dwarf_line_size;
131
132 /* Pointer to the .debug_str section loaded into memory. */
133 bfd_byte *dwarf_str_buffer;
134
135 /* Length of the loaded .debug_str section. */
136 bfd_size_type dwarf_str_size;
137
138 /* Pointer to the .debug_ranges section loaded into memory. */
139 bfd_byte *dwarf_ranges_buffer;
140
141 /* Length of the loaded .debug_ranges section. */
142 bfd_size_type dwarf_ranges_size;
143
144 /* If the most recent call to bfd_find_nearest_line was given an
145 address in an inlined function, preserve a pointer into the
146 calling chain for subsequent calls to bfd_find_inliner_info to
147 use. */
148 struct funcinfo *inliner_chain;
149
150 /* Number of sections whose VMA we must adjust. */
151 unsigned int adjusted_section_count;
152
153 /* Array of sections with adjusted VMA. */
154 struct adjusted_section *adjusted_sections;
155
156 /* Number of times find_line is called. This is used in
157 the heuristic for enabling the info hash tables. */
158 int info_hash_count;
159
160 #define STASH_INFO_HASH_TRIGGER 100
161
162 /* Hash table mapping symbol names to function infos. */
163 struct info_hash_table *funcinfo_hash_table;
164
165 /* Hash table mapping symbol names to variable infos. */
166 struct info_hash_table *varinfo_hash_table;
167
168 /* Head of comp_unit list in the last hash table update. */
169 struct comp_unit *hash_units_head;
170
171 /* Status of info hash. */
172 int info_hash_status;
173 #define STASH_INFO_HASH_OFF 0
174 #define STASH_INFO_HASH_ON 1
175 #define STASH_INFO_HASH_DISABLED 2
176 };
177
178 struct arange
179 {
180 struct arange *next;
181 bfd_vma low;
182 bfd_vma high;
183 };
184
185 /* A minimal decoding of DWARF2 compilation units. We only decode
186 what's needed to get to the line number information. */
187
188 struct comp_unit
189 {
190 /* Chain the previously read compilation units. */
191 struct comp_unit *next_unit;
192
193 /* Likewise, chain the compilation unit read after this one.
194 The comp units are stored in reversed reading order. */
195 struct comp_unit *prev_unit;
196
197 /* Keep the bfd convenient (for memory allocation). */
198 bfd *abfd;
199
200 /* The lowest and highest addresses contained in this compilation
201 unit as specified in the compilation unit header. */
202 struct arange arange;
203
204 /* The DW_AT_name attribute (for error messages). */
205 char *name;
206
207 /* The abbrev hash table. */
208 struct abbrev_info **abbrevs;
209
210 /* Note that an error was found by comp_unit_find_nearest_line. */
211 int error;
212
213 /* The DW_AT_comp_dir attribute. */
214 char *comp_dir;
215
216 /* TRUE if there is a line number table associated with this comp. unit. */
217 int stmtlist;
218
219 /* Pointer to the current comp_unit so that we can find a given entry
220 by its reference. */
221 bfd_byte *info_ptr_unit;
222
223 /* Pointer to the start of the debug section, for DW_FORM_ref_addr. */
224 bfd_byte *sec_info_ptr;
225
226 /* The offset into .debug_line of the line number table. */
227 unsigned long line_offset;
228
229 /* Pointer to the first child die for the comp unit. */
230 bfd_byte *first_child_die_ptr;
231
232 /* The end of the comp unit. */
233 bfd_byte *end_ptr;
234
235 /* The decoded line number, NULL if not yet decoded. */
236 struct line_info_table *line_table;
237
238 /* A list of the functions found in this comp. unit. */
239 struct funcinfo *function_table;
240
241 /* A list of the variables found in this comp. unit. */
242 struct varinfo *variable_table;
243
244 /* Pointer to dwarf2_debug structure. */
245 struct dwarf2_debug *stash;
246
247 /* DWARF format version for this unit - from unit header. */
248 int version;
249
250 /* Address size for this unit - from unit header. */
251 unsigned char addr_size;
252
253 /* Offset size for this unit - from unit header. */
254 unsigned char offset_size;
255
256 /* Base address for this unit - from DW_AT_low_pc attribute of
257 DW_TAG_compile_unit DIE */
258 bfd_vma base_address;
259
260 /* TRUE if symbols are cached in hash table for faster lookup by name. */
261 bfd_boolean cached;
262 };
263
264 /* This data structure holds the information of an abbrev. */
265 struct abbrev_info
266 {
267 unsigned int number; /* Number identifying abbrev. */
268 enum dwarf_tag tag; /* DWARF tag. */
269 int has_children; /* Boolean. */
270 unsigned int num_attrs; /* Number of attributes. */
271 struct attr_abbrev *attrs; /* An array of attribute descriptions. */
272 struct abbrev_info *next; /* Next in chain. */
273 };
274
275 struct attr_abbrev
276 {
277 enum dwarf_attribute name;
278 enum dwarf_form form;
279 };
280
281 /* Map of uncompressed DWARF debug section name to compressed one. It
282 is terminated by NULL uncompressed_name. */
283
284 const struct dwarf_debug_section dwarf_debug_sections[] =
285 {
286 { ".debug_abbrev", ".zdebug_abbrev" },
287 { ".debug_aranges", ".zdebug_aranges" },
288 { ".debug_frame", ".zdebug_frame" },
289 { ".debug_info", ".zdebug_info" },
290 { ".debug_line", ".zdebug_line" },
291 { ".debug_loc", ".zdebug_loc" },
292 { ".debug_macinfo", ".zdebug_macinfo" },
293 { ".debug_macro", ".zdebug_macro" },
294 { ".debug_pubnames", ".zdebug_pubnames" },
295 { ".debug_pubtypes", ".zdebug_pubtypes" },
296 { ".debug_ranges", ".zdebug_ranges" },
297 { ".debug_static_func", ".zdebug_static_func" },
298 { ".debug_static_vars", ".zdebug_static_vars" },
299 { ".debug_str", ".zdebug_str", },
300 { ".debug_types", ".zdebug_types" },
301 /* GNU DWARF 1 extensions */
302 { ".debug_sfnames", ".zdebug_sfnames" },
303 { ".debug_srcinfo", ".zebug_srcinfo" },
304 /* SGI/MIPS DWARF 2 extensions */
305 { ".debug_funcnames", ".zdebug_funcnames" },
306 { ".debug_typenames", ".zdebug_typenames" },
307 { ".debug_varnames", ".zdebug_varnames" },
308 { ".debug_weaknames", ".zdebug_weaknames" },
309 { NULL, NULL },
310 };
311
312 enum dwarf_debug_section_enum
313 {
314 debug_abbrev = 0,
315 debug_aranges,
316 debug_frame,
317 debug_info,
318 debug_line,
319 debug_loc,
320 debug_macinfo,
321 debug_macro,
322 debug_pubnames,
323 debug_pubtypes,
324 debug_ranges,
325 debug_static_func,
326 debug_static_vars,
327 debug_str,
328 debug_types,
329 debug_sfnames,
330 debug_srcinfo,
331 debug_funcnames,
332 debug_typenames,
333 debug_varnames,
334 debug_weaknames
335 };
336
337 #ifndef ABBREV_HASH_SIZE
338 #define ABBREV_HASH_SIZE 121
339 #endif
340 #ifndef ATTR_ALLOC_CHUNK
341 #define ATTR_ALLOC_CHUNK 4
342 #endif
343
344 /* Variable and function hash tables. This is used to speed up look-up
345 in lookup_symbol_in_var_table() and lookup_symbol_in_function_table().
346 In order to share code between variable and function infos, we use
347 a list of untyped pointer for all variable/function info associated with
348 a symbol. We waste a bit of memory for list with one node but that
349 simplifies the code. */
350
351 struct info_list_node
352 {
353 struct info_list_node *next;
354 void *info;
355 };
356
357 /* Info hash entry. */
358 struct info_hash_entry
359 {
360 struct bfd_hash_entry root;
361 struct info_list_node *head;
362 };
363
364 struct info_hash_table
365 {
366 struct bfd_hash_table base;
367 };
368
369 /* Function to create a new entry in info hash table. */
370
371 static struct bfd_hash_entry *
372 info_hash_table_newfunc (struct bfd_hash_entry *entry,
373 struct bfd_hash_table *table,
374 const char *string)
375 {
376 struct info_hash_entry *ret = (struct info_hash_entry *) entry;
377
378 /* Allocate the structure if it has not already been allocated by a
379 derived class. */
380 if (ret == NULL)
381 {
382 ret = (struct info_hash_entry *) bfd_hash_allocate (table,
383 sizeof (* ret));
384 if (ret == NULL)
385 return NULL;
386 }
387
388 /* Call the allocation method of the base class. */
389 ret = ((struct info_hash_entry *)
390 bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
391
392 /* Initialize the local fields here. */
393 if (ret)
394 ret->head = NULL;
395
396 return (struct bfd_hash_entry *) ret;
397 }
398
399 /* Function to create a new info hash table. It returns a pointer to the
400 newly created table or NULL if there is any error. We need abfd
401 solely for memory allocation. */
402
403 static struct info_hash_table *
404 create_info_hash_table (bfd *abfd)
405 {
406 struct info_hash_table *hash_table;
407
408 hash_table = ((struct info_hash_table *)
409 bfd_alloc (abfd, sizeof (struct info_hash_table)));
410 if (!hash_table)
411 return hash_table;
412
413 if (!bfd_hash_table_init (&hash_table->base, info_hash_table_newfunc,
414 sizeof (struct info_hash_entry)))
415 {
416 bfd_release (abfd, hash_table);
417 return NULL;
418 }
419
420 return hash_table;
421 }
422
423 /* Insert an info entry into an info hash table. We do not check of
424 duplicate entries. Also, the caller need to guarantee that the
425 right type of info in inserted as info is passed as a void* pointer.
426 This function returns true if there is no error. */
427
428 static bfd_boolean
429 insert_info_hash_table (struct info_hash_table *hash_table,
430 const char *key,
431 void *info,
432 bfd_boolean copy_p)
433 {
434 struct info_hash_entry *entry;
435 struct info_list_node *node;
436
437 entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base,
438 key, TRUE, copy_p);
439 if (!entry)
440 return FALSE;
441
442 node = (struct info_list_node *) bfd_hash_allocate (&hash_table->base,
443 sizeof (*node));
444 if (!node)
445 return FALSE;
446
447 node->info = info;
448 node->next = entry->head;
449 entry->head = node;
450
451 return TRUE;
452 }
453
454 /* Look up an info entry list from an info hash table. Return NULL
455 if there is none. */
456
457 static struct info_list_node *
458 lookup_info_hash_table (struct info_hash_table *hash_table, const char *key)
459 {
460 struct info_hash_entry *entry;
461
462 entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base, key,
463 FALSE, FALSE);
464 return entry ? entry->head : NULL;
465 }
466
467 /* Read a section into its appropriate place in the dwarf2_debug
468 struct (indicated by SECTION_BUFFER and SECTION_SIZE). If SYMS is
469 not NULL, use bfd_simple_get_relocated_section_contents to read the
470 section contents, otherwise use bfd_get_section_contents. Fail if
471 the located section does not contain at least OFFSET bytes. */
472
473 static bfd_boolean
474 read_section (bfd * abfd,
475 const struct dwarf_debug_section *sec,
476 asymbol ** syms,
477 bfd_uint64_t offset,
478 bfd_byte ** section_buffer,
479 bfd_size_type * section_size)
480 {
481 asection *msec;
482 const char *section_name = sec->uncompressed_name;
483
484 /* read_section is a noop if the section has already been read. */
485 if (!*section_buffer)
486 {
487 msec = bfd_get_section_by_name (abfd, section_name);
488 if (! msec)
489 {
490 section_name = sec->compressed_name;
491 if (section_name != NULL)
492 msec = bfd_get_section_by_name (abfd, section_name);
493 }
494 if (! msec)
495 {
496 (*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."),
497 sec->uncompressed_name);
498 bfd_set_error (bfd_error_bad_value);
499 return FALSE;
500 }
501
502 *section_size = msec->rawsize ? msec->rawsize : msec->size;
503 if (syms)
504 {
505 *section_buffer
506 = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, syms);
507 if (! *section_buffer)
508 return FALSE;
509 }
510 else
511 {
512 *section_buffer = (bfd_byte *) bfd_malloc (*section_size);
513 if (! *section_buffer)
514 return FALSE;
515 if (! bfd_get_section_contents (abfd, msec, *section_buffer,
516 0, *section_size))
517 return FALSE;
518 }
519 }
520
521 /* It is possible to get a bad value for the offset into the section
522 that the client wants. Validate it here to avoid trouble later. */
523 if (offset != 0 && offset >= *section_size)
524 {
525 (*_bfd_error_handler) (_("Dwarf Error: Offset (%lu)"
526 " greater than or equal to %s size (%lu)."),
527 (long) offset, section_name, *section_size);
528 bfd_set_error (bfd_error_bad_value);
529 return FALSE;
530 }
531
532 return TRUE;
533 }
534
535 /* VERBATIM
536 The following function up to the END VERBATIM mark are
537 copied directly from dwarf2read.c. */
538
539 /* Read dwarf information from a buffer. */
540
541 static unsigned int
542 read_1_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
543 {
544 return bfd_get_8 (abfd, buf);
545 }
546
547 static int
548 read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
549 {
550 return bfd_get_signed_8 (abfd, buf);
551 }
552
553 static unsigned int
554 read_2_bytes (bfd *abfd, bfd_byte *buf)
555 {
556 return bfd_get_16 (abfd, buf);
557 }
558
559 static unsigned int
560 read_4_bytes (bfd *abfd, bfd_byte *buf)
561 {
562 return bfd_get_32 (abfd, buf);
563 }
564
565 static bfd_uint64_t
566 read_8_bytes (bfd *abfd, bfd_byte *buf)
567 {
568 return bfd_get_64 (abfd, buf);
569 }
570
571 static bfd_byte *
572 read_n_bytes (bfd *abfd ATTRIBUTE_UNUSED,
573 bfd_byte *buf,
574 unsigned int size ATTRIBUTE_UNUSED)
575 {
576 return buf;
577 }
578
579 static char *
580 read_string (bfd *abfd ATTRIBUTE_UNUSED,
581 bfd_byte *buf,
582 unsigned int *bytes_read_ptr)
583 {
584 /* Return a pointer to the embedded string. */
585 char *str = (char *) buf;
586
587 if (*str == '\0')
588 {
589 *bytes_read_ptr = 1;
590 return NULL;
591 }
592
593 *bytes_read_ptr = strlen (str) + 1;
594 return str;
595 }
596
597 /* END VERBATIM */
598
599 static char *
600 read_indirect_string (struct comp_unit * unit,
601 bfd_byte * buf,
602 unsigned int * bytes_read_ptr)
603 {
604 bfd_uint64_t offset;
605 struct dwarf2_debug *stash = unit->stash;
606 char *str;
607
608 if (unit->offset_size == 4)
609 offset = read_4_bytes (unit->abfd, buf);
610 else
611 offset = read_8_bytes (unit->abfd, buf);
612
613 *bytes_read_ptr = unit->offset_size;
614
615 if (! read_section (unit->abfd, &stash->debug_sections[debug_str],
616 stash->syms, offset,
617 &stash->dwarf_str_buffer, &stash->dwarf_str_size))
618 return NULL;
619
620 str = (char *) stash->dwarf_str_buffer + offset;
621 if (*str == '\0')
622 return NULL;
623 return str;
624 }
625
626 static bfd_uint64_t
627 read_address (struct comp_unit *unit, bfd_byte *buf)
628 {
629 int signed_vma = get_elf_backend_data (unit->abfd)->sign_extend_vma;
630
631 if (signed_vma)
632 {
633 switch (unit->addr_size)
634 {
635 case 8:
636 return bfd_get_signed_64 (unit->abfd, buf);
637 case 4:
638 return bfd_get_signed_32 (unit->abfd, buf);
639 case 2:
640 return bfd_get_signed_16 (unit->abfd, buf);
641 default:
642 abort ();
643 }
644 }
645 else
646 {
647 switch (unit->addr_size)
648 {
649 case 8:
650 return bfd_get_64 (unit->abfd, buf);
651 case 4:
652 return bfd_get_32 (unit->abfd, buf);
653 case 2:
654 return bfd_get_16 (unit->abfd, buf);
655 default:
656 abort ();
657 }
658 }
659 }
660
661 /* Lookup an abbrev_info structure in the abbrev hash table. */
662
663 static struct abbrev_info *
664 lookup_abbrev (unsigned int number, struct abbrev_info **abbrevs)
665 {
666 unsigned int hash_number;
667 struct abbrev_info *abbrev;
668
669 hash_number = number % ABBREV_HASH_SIZE;
670 abbrev = abbrevs[hash_number];
671
672 while (abbrev)
673 {
674 if (abbrev->number == number)
675 return abbrev;
676 else
677 abbrev = abbrev->next;
678 }
679
680 return NULL;
681 }
682
683 /* In DWARF version 2, the description of the debugging information is
684 stored in a separate .debug_abbrev section. Before we read any
685 dies from a section we read in all abbreviations and install them
686 in a hash table. */
687
688 static struct abbrev_info**
689 read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash)
690 {
691 struct abbrev_info **abbrevs;
692 bfd_byte *abbrev_ptr;
693 struct abbrev_info *cur_abbrev;
694 unsigned int abbrev_number, bytes_read, abbrev_name;
695 unsigned int abbrev_form, hash_number;
696 bfd_size_type amt;
697
698 if (! read_section (abfd, &stash->debug_sections[debug_abbrev],
699 stash->syms, offset,
700 &stash->dwarf_abbrev_buffer, &stash->dwarf_abbrev_size))
701 return NULL;
702
703 amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
704 abbrevs = (struct abbrev_info **) bfd_zalloc (abfd, amt);
705 if (abbrevs == NULL)
706 return NULL;
707
708 abbrev_ptr = stash->dwarf_abbrev_buffer + offset;
709 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
710 abbrev_ptr += bytes_read;
711
712 /* Loop until we reach an abbrev number of 0. */
713 while (abbrev_number)
714 {
715 amt = sizeof (struct abbrev_info);
716 cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt);
717 if (cur_abbrev == NULL)
718 return NULL;
719
720 /* Read in abbrev header. */
721 cur_abbrev->number = abbrev_number;
722 cur_abbrev->tag = (enum dwarf_tag)
723 read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
724 abbrev_ptr += bytes_read;
725 cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
726 abbrev_ptr += 1;
727
728 /* Now read in declarations. */
729 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
730 abbrev_ptr += bytes_read;
731 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
732 abbrev_ptr += bytes_read;
733
734 while (abbrev_name)
735 {
736 if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
737 {
738 struct attr_abbrev *tmp;
739
740 amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
741 amt *= sizeof (struct attr_abbrev);
742 tmp = (struct attr_abbrev *) bfd_realloc (cur_abbrev->attrs, amt);
743 if (tmp == NULL)
744 {
745 size_t i;
746
747 for (i = 0; i < ABBREV_HASH_SIZE; i++)
748 {
749 struct abbrev_info *abbrev = abbrevs[i];
750
751 while (abbrev)
752 {
753 free (abbrev->attrs);
754 abbrev = abbrev->next;
755 }
756 }
757 return NULL;
758 }
759 cur_abbrev->attrs = tmp;
760 }
761
762 cur_abbrev->attrs[cur_abbrev->num_attrs].name
763 = (enum dwarf_attribute) abbrev_name;
764 cur_abbrev->attrs[cur_abbrev->num_attrs++].form
765 = (enum dwarf_form) abbrev_form;
766 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
767 abbrev_ptr += bytes_read;
768 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
769 abbrev_ptr += bytes_read;
770 }
771
772 hash_number = abbrev_number % ABBREV_HASH_SIZE;
773 cur_abbrev->next = abbrevs[hash_number];
774 abbrevs[hash_number] = cur_abbrev;
775
776 /* Get next abbreviation.
777 Under Irix6 the abbreviations for a compilation unit are not
778 always properly terminated with an abbrev number of 0.
779 Exit loop if we encounter an abbreviation which we have
780 already read (which means we are about to read the abbreviations
781 for the next compile unit) or if the end of the abbreviation
782 table is reached. */
783 if ((unsigned int) (abbrev_ptr - stash->dwarf_abbrev_buffer)
784 >= stash->dwarf_abbrev_size)
785 break;
786 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
787 abbrev_ptr += bytes_read;
788 if (lookup_abbrev (abbrev_number,abbrevs) != NULL)
789 break;
790 }
791
792 return abbrevs;
793 }
794
795 /* Read an attribute value described by an attribute form. */
796
797 static bfd_byte *
798 read_attribute_value (struct attribute *attr,
799 unsigned form,
800 struct comp_unit *unit,
801 bfd_byte *info_ptr)
802 {
803 bfd *abfd = unit->abfd;
804 unsigned int bytes_read;
805 struct dwarf_block *blk;
806 bfd_size_type amt;
807
808 attr->form = (enum dwarf_form) form;
809
810 switch (form)
811 {
812 case DW_FORM_ref_addr:
813 /* DW_FORM_ref_addr is an address in DWARF2, and an offset in
814 DWARF3. */
815 if (unit->version == 3 || unit->version == 4)
816 {
817 if (unit->offset_size == 4)
818 attr->u.val = read_4_bytes (unit->abfd, info_ptr);
819 else
820 attr->u.val = read_8_bytes (unit->abfd, info_ptr);
821 info_ptr += unit->offset_size;
822 break;
823 }
824 /* FALLTHROUGH */
825 case DW_FORM_addr:
826 attr->u.val = read_address (unit, info_ptr);
827 info_ptr += unit->addr_size;
828 break;
829 case DW_FORM_sec_offset:
830 if (unit->offset_size == 4)
831 attr->u.val = read_4_bytes (unit->abfd, info_ptr);
832 else
833 attr->u.val = read_8_bytes (unit->abfd, info_ptr);
834 info_ptr += unit->offset_size;
835 break;
836 case DW_FORM_block2:
837 amt = sizeof (struct dwarf_block);
838 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
839 if (blk == NULL)
840 return NULL;
841 blk->size = read_2_bytes (abfd, info_ptr);
842 info_ptr += 2;
843 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
844 info_ptr += blk->size;
845 attr->u.blk = blk;
846 break;
847 case DW_FORM_block4:
848 amt = sizeof (struct dwarf_block);
849 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
850 if (blk == NULL)
851 return NULL;
852 blk->size = read_4_bytes (abfd, info_ptr);
853 info_ptr += 4;
854 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
855 info_ptr += blk->size;
856 attr->u.blk = blk;
857 break;
858 case DW_FORM_data2:
859 attr->u.val = read_2_bytes (abfd, info_ptr);
860 info_ptr += 2;
861 break;
862 case DW_FORM_data4:
863 attr->u.val = read_4_bytes (abfd, info_ptr);
864 info_ptr += 4;
865 break;
866 case DW_FORM_data8:
867 attr->u.val = read_8_bytes (abfd, info_ptr);
868 info_ptr += 8;
869 break;
870 case DW_FORM_string:
871 attr->u.str = read_string (abfd, info_ptr, &bytes_read);
872 info_ptr += bytes_read;
873 break;
874 case DW_FORM_strp:
875 attr->u.str = read_indirect_string (unit, info_ptr, &bytes_read);
876 info_ptr += bytes_read;
877 break;
878 case DW_FORM_exprloc:
879 case DW_FORM_block:
880 amt = sizeof (struct dwarf_block);
881 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
882 if (blk == NULL)
883 return NULL;
884 blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
885 info_ptr += bytes_read;
886 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
887 info_ptr += blk->size;
888 attr->u.blk = blk;
889 break;
890 case DW_FORM_block1:
891 amt = sizeof (struct dwarf_block);
892 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
893 if (blk == NULL)
894 return NULL;
895 blk->size = read_1_byte (abfd, info_ptr);
896 info_ptr += 1;
897 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
898 info_ptr += blk->size;
899 attr->u.blk = blk;
900 break;
901 case DW_FORM_data1:
902 attr->u.val = read_1_byte (abfd, info_ptr);
903 info_ptr += 1;
904 break;
905 case DW_FORM_flag:
906 attr->u.val = read_1_byte (abfd, info_ptr);
907 info_ptr += 1;
908 break;
909 case DW_FORM_flag_present:
910 attr->u.val = 1;
911 break;
912 case DW_FORM_sdata:
913 attr->u.sval = read_signed_leb128 (abfd, info_ptr, &bytes_read);
914 info_ptr += bytes_read;
915 break;
916 case DW_FORM_udata:
917 attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
918 info_ptr += bytes_read;
919 break;
920 case DW_FORM_ref1:
921 attr->u.val = read_1_byte (abfd, info_ptr);
922 info_ptr += 1;
923 break;
924 case DW_FORM_ref2:
925 attr->u.val = read_2_bytes (abfd, info_ptr);
926 info_ptr += 2;
927 break;
928 case DW_FORM_ref4:
929 attr->u.val = read_4_bytes (abfd, info_ptr);
930 info_ptr += 4;
931 break;
932 case DW_FORM_ref8:
933 attr->u.val = read_8_bytes (abfd, info_ptr);
934 info_ptr += 8;
935 break;
936 case DW_FORM_ref_sig8:
937 attr->u.val = read_8_bytes (abfd, info_ptr);
938 info_ptr += 8;
939 break;
940 case DW_FORM_ref_udata:
941 attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
942 info_ptr += bytes_read;
943 break;
944 case DW_FORM_indirect:
945 form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
946 info_ptr += bytes_read;
947 info_ptr = read_attribute_value (attr, form, unit, info_ptr);
948 break;
949 default:
950 (*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
951 form);
952 bfd_set_error (bfd_error_bad_value);
953 return NULL;
954 }
955 return info_ptr;
956 }
957
958 /* Read an attribute described by an abbreviated attribute. */
959
960 static bfd_byte *
961 read_attribute (struct attribute *attr,
962 struct attr_abbrev *abbrev,
963 struct comp_unit *unit,
964 bfd_byte *info_ptr)
965 {
966 attr->name = abbrev->name;
967 info_ptr = read_attribute_value (attr, abbrev->form, unit, info_ptr);
968 return info_ptr;
969 }
970
971 /* Source line information table routines. */
972
973 #define FILE_ALLOC_CHUNK 5
974 #define DIR_ALLOC_CHUNK 5
975
976 struct line_info
977 {
978 struct line_info* prev_line;
979 bfd_vma address;
980 char *filename;
981 unsigned int line;
982 unsigned int column;
983 unsigned char op_index;
984 unsigned char end_sequence; /* End of (sequential) code sequence. */
985 };
986
987 struct fileinfo
988 {
989 char *name;
990 unsigned int dir;
991 unsigned int time;
992 unsigned int size;
993 };
994
995 struct line_sequence
996 {
997 bfd_vma low_pc;
998 struct line_sequence* prev_sequence;
999 struct line_info* last_line; /* Largest VMA. */
1000 };
1001
1002 struct line_info_table
1003 {
1004 bfd* abfd;
1005 unsigned int num_files;
1006 unsigned int num_dirs;
1007 unsigned int num_sequences;
1008 char * comp_dir;
1009 char ** dirs;
1010 struct fileinfo* files;
1011 struct line_sequence* sequences;
1012 struct line_info* lcl_head; /* Local head; used in 'add_line_info'. */
1013 };
1014
1015 /* Remember some information about each function. If the function is
1016 inlined (DW_TAG_inlined_subroutine) it may have two additional
1017 attributes, DW_AT_call_file and DW_AT_call_line, which specify the
1018 source code location where this function was inlined. */
1019
1020 struct funcinfo
1021 {
1022 /* Pointer to previous function in list of all functions. */
1023 struct funcinfo *prev_func;
1024 /* Pointer to function one scope higher. */
1025 struct funcinfo *caller_func;
1026 /* Source location file name where caller_func inlines this func. */
1027 char *caller_file;
1028 /* Source location line number where caller_func inlines this func. */
1029 int caller_line;
1030 /* Source location file name. */
1031 char *file;
1032 /* Source location line number. */
1033 int line;
1034 int tag;
1035 char *name;
1036 struct arange arange;
1037 /* Where the symbol is defined. */
1038 asection *sec;
1039 };
1040
1041 struct varinfo
1042 {
1043 /* Pointer to previous variable in list of all variables */
1044 struct varinfo *prev_var;
1045 /* Source location file name */
1046 char *file;
1047 /* Source location line number */
1048 int line;
1049 int tag;
1050 char *name;
1051 bfd_vma addr;
1052 /* Where the symbol is defined */
1053 asection *sec;
1054 /* Is this a stack variable? */
1055 unsigned int stack: 1;
1056 };
1057
1058 /* Return TRUE if NEW_LINE should sort after LINE. */
1059
1060 static inline bfd_boolean
1061 new_line_sorts_after (struct line_info *new_line, struct line_info *line)
1062 {
1063 return (new_line->address > line->address
1064 || (new_line->address == line->address
1065 && (new_line->op_index > line->op_index
1066 || (new_line->op_index == line->op_index
1067 && new_line->end_sequence < line->end_sequence))));
1068 }
1069
1070
1071 /* Adds a new entry to the line_info list in the line_info_table, ensuring
1072 that the list is sorted. Note that the line_info list is sorted from
1073 highest to lowest VMA (with possible duplicates); that is,
1074 line_info->prev_line always accesses an equal or smaller VMA. */
1075
1076 static bfd_boolean
1077 add_line_info (struct line_info_table *table,
1078 bfd_vma address,
1079 unsigned char op_index,
1080 char *filename,
1081 unsigned int line,
1082 unsigned int column,
1083 int end_sequence)
1084 {
1085 bfd_size_type amt = sizeof (struct line_info);
1086 struct line_sequence* seq = table->sequences;
1087 struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt);
1088
1089 if (info == NULL)
1090 return FALSE;
1091
1092 /* Set member data of 'info'. */
1093 info->prev_line = NULL;
1094 info->address = address;
1095 info->op_index = op_index;
1096 info->line = line;
1097 info->column = column;
1098 info->end_sequence = end_sequence;
1099
1100 if (filename && filename[0])
1101 {
1102 info->filename = (char *) bfd_alloc (table->abfd, strlen (filename) + 1);
1103 if (info->filename == NULL)
1104 return FALSE;
1105 strcpy (info->filename, filename);
1106 }
1107 else
1108 info->filename = NULL;
1109
1110 /* Find the correct location for 'info'. Normally we will receive
1111 new line_info data 1) in order and 2) with increasing VMAs.
1112 However some compilers break the rules (cf. decode_line_info) and
1113 so we include some heuristics for quickly finding the correct
1114 location for 'info'. In particular, these heuristics optimize for
1115 the common case in which the VMA sequence that we receive is a
1116 list of locally sorted VMAs such as
1117 p...z a...j (where a < j < p < z)
1118
1119 Note: table->lcl_head is used to head an *actual* or *possible*
1120 sub-sequence within the list (such as a...j) that is not directly
1121 headed by table->last_line
1122
1123 Note: we may receive duplicate entries from 'decode_line_info'. */
1124
1125 if (seq
1126 && seq->last_line->address == address
1127 && seq->last_line->op_index == op_index
1128 && seq->last_line->end_sequence == end_sequence)
1129 {
1130 /* We only keep the last entry with the same address and end
1131 sequence. See PR ld/4986. */
1132 if (table->lcl_head == seq->last_line)
1133 table->lcl_head = info;
1134 info->prev_line = seq->last_line->prev_line;
1135 seq->last_line = info;
1136 }
1137 else if (!seq || seq->last_line->end_sequence)
1138 {
1139 /* Start a new line sequence. */
1140 amt = sizeof (struct line_sequence);
1141 seq = (struct line_sequence *) bfd_malloc (amt);
1142 if (seq == NULL)
1143 return FALSE;
1144 seq->low_pc = address;
1145 seq->prev_sequence = table->sequences;
1146 seq->last_line = info;
1147 table->lcl_head = info;
1148 table->sequences = seq;
1149 table->num_sequences++;
1150 }
1151 else if (new_line_sorts_after (info, seq->last_line))
1152 {
1153 /* Normal case: add 'info' to the beginning of the current sequence. */
1154 info->prev_line = seq->last_line;
1155 seq->last_line = info;
1156
1157 /* lcl_head: initialize to head a *possible* sequence at the end. */
1158 if (!table->lcl_head)
1159 table->lcl_head = info;
1160 }
1161 else if (!new_line_sorts_after (info, table->lcl_head)
1162 && (!table->lcl_head->prev_line
1163 || new_line_sorts_after (info, table->lcl_head->prev_line)))
1164 {
1165 /* Abnormal but easy: lcl_head is the head of 'info'. */
1166 info->prev_line = table->lcl_head->prev_line;
1167 table->lcl_head->prev_line = info;
1168 }
1169 else
1170 {
1171 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head'
1172 are valid heads for 'info'. Reset 'lcl_head'. */
1173 struct line_info* li2 = seq->last_line; /* Always non-NULL. */
1174 struct line_info* li1 = li2->prev_line;
1175
1176 while (li1)
1177 {
1178 if (!new_line_sorts_after (info, li2)
1179 && new_line_sorts_after (info, li1))
1180 break;
1181
1182 li2 = li1; /* always non-NULL */
1183 li1 = li1->prev_line;
1184 }
1185 table->lcl_head = li2;
1186 info->prev_line = table->lcl_head->prev_line;
1187 table->lcl_head->prev_line = info;
1188 if (address < seq->low_pc)
1189 seq->low_pc = address;
1190 }
1191 return TRUE;
1192 }
1193
1194 /* Extract a fully qualified filename from a line info table.
1195 The returned string has been malloc'ed and it is the caller's
1196 responsibility to free it. */
1197
1198 static char *
1199 concat_filename (struct line_info_table *table, unsigned int file)
1200 {
1201 char *filename;
1202
1203 if (file - 1 >= table->num_files)
1204 {
1205 /* FILE == 0 means unknown. */
1206 if (file)
1207 (*_bfd_error_handler)
1208 (_("Dwarf Error: mangled line number section (bad file number)."));
1209 return strdup ("<unknown>");
1210 }
1211
1212 filename = table->files[file - 1].name;
1213
1214 if (!IS_ABSOLUTE_PATH (filename))
1215 {
1216 char *dir_name = NULL;
1217 char *subdir_name = NULL;
1218 char *name;
1219 size_t len;
1220
1221 if (table->files[file - 1].dir)
1222 subdir_name = table->dirs[table->files[file - 1].dir - 1];
1223
1224 if (!subdir_name || !IS_ABSOLUTE_PATH (subdir_name))
1225 dir_name = table->comp_dir;
1226
1227 if (!dir_name)
1228 {
1229 dir_name = subdir_name;
1230 subdir_name = NULL;
1231 }
1232
1233 if (!dir_name)
1234 return strdup (filename);
1235
1236 len = strlen (dir_name) + strlen (filename) + 2;
1237
1238 if (subdir_name)
1239 {
1240 len += strlen (subdir_name) + 1;
1241 name = (char *) bfd_malloc (len);
1242 if (name)
1243 sprintf (name, "%s/%s/%s", dir_name, subdir_name, filename);
1244 }
1245 else
1246 {
1247 name = (char *) bfd_malloc (len);
1248 if (name)
1249 sprintf (name, "%s/%s", dir_name, filename);
1250 }
1251
1252 return name;
1253 }
1254
1255 return strdup (filename);
1256 }
1257
1258 static bfd_boolean
1259 arange_add (const struct comp_unit *unit, struct arange *first_arange,
1260 bfd_vma low_pc, bfd_vma high_pc)
1261 {
1262 struct arange *arange;
1263
1264 /* Ignore empty ranges. */
1265 if (low_pc == high_pc)
1266 return TRUE;
1267
1268 /* If the first arange is empty, use it. */
1269 if (first_arange->high == 0)
1270 {
1271 first_arange->low = low_pc;
1272 first_arange->high = high_pc;
1273 return TRUE;
1274 }
1275
1276 /* Next see if we can cheaply extend an existing range. */
1277 arange = first_arange;
1278 do
1279 {
1280 if (low_pc == arange->high)
1281 {
1282 arange->high = high_pc;
1283 return TRUE;
1284 }
1285 if (high_pc == arange->low)
1286 {
1287 arange->low = low_pc;
1288 return TRUE;
1289 }
1290 arange = arange->next;
1291 }
1292 while (arange);
1293
1294 /* Need to allocate a new arange and insert it into the arange list.
1295 Order isn't significant, so just insert after the first arange. */
1296 arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange));
1297 if (arange == NULL)
1298 return FALSE;
1299 arange->low = low_pc;
1300 arange->high = high_pc;
1301 arange->next = first_arange->next;
1302 first_arange->next = arange;
1303 return TRUE;
1304 }
1305
1306 /* Compare function for line sequences. */
1307
1308 static int
1309 compare_sequences (const void* a, const void* b)
1310 {
1311 const struct line_sequence* seq1 = a;
1312 const struct line_sequence* seq2 = b;
1313
1314 /* Sort by low_pc as the primary key. */
1315 if (seq1->low_pc < seq2->low_pc)
1316 return -1;
1317 if (seq1->low_pc > seq2->low_pc)
1318 return 1;
1319
1320 /* If low_pc values are equal, sort in reverse order of
1321 high_pc, so that the largest region comes first. */
1322 if (seq1->last_line->address < seq2->last_line->address)
1323 return 1;
1324 if (seq1->last_line->address > seq2->last_line->address)
1325 return -1;
1326
1327 if (seq1->last_line->op_index < seq2->last_line->op_index)
1328 return 1;
1329 if (seq1->last_line->op_index > seq2->last_line->op_index)
1330 return -1;
1331
1332 return 0;
1333 }
1334
1335 /* Sort the line sequences for quick lookup. */
1336
1337 static bfd_boolean
1338 sort_line_sequences (struct line_info_table* table)
1339 {
1340 bfd_size_type amt;
1341 struct line_sequence* sequences;
1342 struct line_sequence* seq;
1343 unsigned int n = 0;
1344 unsigned int num_sequences = table->num_sequences;
1345 bfd_vma last_high_pc;
1346
1347 if (num_sequences == 0)
1348 return TRUE;
1349
1350 /* Allocate space for an array of sequences. */
1351 amt = sizeof (struct line_sequence) * num_sequences;
1352 sequences = (struct line_sequence *) bfd_alloc (table->abfd, amt);
1353 if (sequences == NULL)
1354 return FALSE;
1355
1356 /* Copy the linked list into the array, freeing the original nodes. */
1357 seq = table->sequences;
1358 for (n = 0; n < num_sequences; n++)
1359 {
1360 struct line_sequence* last_seq = seq;
1361
1362 BFD_ASSERT (seq);
1363 sequences[n].low_pc = seq->low_pc;
1364 sequences[n].prev_sequence = NULL;
1365 sequences[n].last_line = seq->last_line;
1366 seq = seq->prev_sequence;
1367 free (last_seq);
1368 }
1369 BFD_ASSERT (seq == NULL);
1370
1371 qsort (sequences, n, sizeof (struct line_sequence), compare_sequences);
1372
1373 /* Make the list binary-searchable by trimming overlapping entries
1374 and removing nested entries. */
1375 num_sequences = 1;
1376 last_high_pc = sequences[0].last_line->address;
1377 for (n = 1; n < table->num_sequences; n++)
1378 {
1379 if (sequences[n].low_pc < last_high_pc)
1380 {
1381 if (sequences[n].last_line->address <= last_high_pc)
1382 /* Skip nested entries. */
1383 continue;
1384
1385 /* Trim overlapping entries. */
1386 sequences[n].low_pc = last_high_pc;
1387 }
1388 last_high_pc = sequences[n].last_line->address;
1389 if (n > num_sequences)
1390 {
1391 /* Close up the gap. */
1392 sequences[num_sequences].low_pc = sequences[n].low_pc;
1393 sequences[num_sequences].last_line = sequences[n].last_line;
1394 }
1395 num_sequences++;
1396 }
1397
1398 table->sequences = sequences;
1399 table->num_sequences = num_sequences;
1400 return TRUE;
1401 }
1402
1403 /* Decode the line number information for UNIT. */
1404
1405 static struct line_info_table*
1406 decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
1407 {
1408 bfd *abfd = unit->abfd;
1409 struct line_info_table* table;
1410 bfd_byte *line_ptr;
1411 bfd_byte *line_end;
1412 struct line_head lh;
1413 unsigned int i, bytes_read, offset_size;
1414 char *cur_file, *cur_dir;
1415 unsigned char op_code, extended_op, adj_opcode;
1416 unsigned int exop_len;
1417 bfd_size_type amt;
1418
1419 if (! read_section (abfd, &stash->debug_sections[debug_line],
1420 stash->syms, unit->line_offset,
1421 &stash->dwarf_line_buffer, &stash->dwarf_line_size))
1422 return NULL;
1423
1424 amt = sizeof (struct line_info_table);
1425 table = (struct line_info_table *) bfd_alloc (abfd, amt);
1426 if (table == NULL)
1427 return NULL;
1428 table->abfd = abfd;
1429 table->comp_dir = unit->comp_dir;
1430
1431 table->num_files = 0;
1432 table->files = NULL;
1433
1434 table->num_dirs = 0;
1435 table->dirs = NULL;
1436
1437 table->num_sequences = 0;
1438 table->sequences = NULL;
1439
1440 table->lcl_head = NULL;
1441
1442 line_ptr = stash->dwarf_line_buffer + unit->line_offset;
1443
1444 /* Read in the prologue. */
1445 lh.total_length = read_4_bytes (abfd, line_ptr);
1446 line_ptr += 4;
1447 offset_size = 4;
1448 if (lh.total_length == 0xffffffff)
1449 {
1450 lh.total_length = read_8_bytes (abfd, line_ptr);
1451 line_ptr += 8;
1452 offset_size = 8;
1453 }
1454 else if (lh.total_length == 0 && unit->addr_size == 8)
1455 {
1456 /* Handle (non-standard) 64-bit DWARF2 formats. */
1457 lh.total_length = read_4_bytes (abfd, line_ptr);
1458 line_ptr += 4;
1459 offset_size = 8;
1460 }
1461 line_end = line_ptr + lh.total_length;
1462 lh.version = read_2_bytes (abfd, line_ptr);
1463 if (lh.version < 2 || lh.version > 4)
1464 {
1465 (*_bfd_error_handler)
1466 (_("Dwarf Error: Unhandled .debug_line version %d."), lh.version);
1467 bfd_set_error (bfd_error_bad_value);
1468 return NULL;
1469 }
1470 line_ptr += 2;
1471 if (offset_size == 4)
1472 lh.prologue_length = read_4_bytes (abfd, line_ptr);
1473 else
1474 lh.prologue_length = read_8_bytes (abfd, line_ptr);
1475 line_ptr += offset_size;
1476 lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
1477 line_ptr += 1;
1478 if (lh.version >= 4)
1479 {
1480 lh.maximum_ops_per_insn = read_1_byte (abfd, line_ptr);
1481 line_ptr += 1;
1482 }
1483 else
1484 lh.maximum_ops_per_insn = 1;
1485 if (lh.maximum_ops_per_insn == 0)
1486 {
1487 (*_bfd_error_handler)
1488 (_("Dwarf Error: Invalid maximum operations per instruction."));
1489 bfd_set_error (bfd_error_bad_value);
1490 return NULL;
1491 }
1492 lh.default_is_stmt = read_1_byte (abfd, line_ptr);
1493 line_ptr += 1;
1494 lh.line_base = read_1_signed_byte (abfd, line_ptr);
1495 line_ptr += 1;
1496 lh.line_range = read_1_byte (abfd, line_ptr);
1497 line_ptr += 1;
1498 lh.opcode_base = read_1_byte (abfd, line_ptr);
1499 line_ptr += 1;
1500 amt = lh.opcode_base * sizeof (unsigned char);
1501 lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt);
1502
1503 lh.standard_opcode_lengths[0] = 1;
1504
1505 for (i = 1; i < lh.opcode_base; ++i)
1506 {
1507 lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
1508 line_ptr += 1;
1509 }
1510
1511 /* Read directory table. */
1512 while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1513 {
1514 line_ptr += bytes_read;
1515
1516 if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
1517 {
1518 char **tmp;
1519
1520 amt = table->num_dirs + DIR_ALLOC_CHUNK;
1521 amt *= sizeof (char *);
1522
1523 tmp = (char **) bfd_realloc (table->dirs, amt);
1524 if (tmp == NULL)
1525 goto fail;
1526 table->dirs = tmp;
1527 }
1528
1529 table->dirs[table->num_dirs++] = cur_dir;
1530 }
1531
1532 line_ptr += bytes_read;
1533
1534 /* Read file name table. */
1535 while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1536 {
1537 line_ptr += bytes_read;
1538
1539 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1540 {
1541 struct fileinfo *tmp;
1542
1543 amt = table->num_files + FILE_ALLOC_CHUNK;
1544 amt *= sizeof (struct fileinfo);
1545
1546 tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
1547 if (tmp == NULL)
1548 goto fail;
1549 table->files = tmp;
1550 }
1551
1552 table->files[table->num_files].name = cur_file;
1553 table->files[table->num_files].dir =
1554 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1555 line_ptr += bytes_read;
1556 table->files[table->num_files].time =
1557 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1558 line_ptr += bytes_read;
1559 table->files[table->num_files].size =
1560 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1561 line_ptr += bytes_read;
1562 table->num_files++;
1563 }
1564
1565 line_ptr += bytes_read;
1566
1567 /* Read the statement sequences until there's nothing left. */
1568 while (line_ptr < line_end)
1569 {
1570 /* State machine registers. */
1571 bfd_vma address = 0;
1572 unsigned char op_index = 0;
1573 char * filename = table->num_files ? concat_filename (table, 1) : NULL;
1574 unsigned int line = 1;
1575 unsigned int column = 0;
1576 int is_stmt = lh.default_is_stmt;
1577 int end_sequence = 0;
1578 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1579 compilers generate address sequences that are wildly out of
1580 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1581 for ia64-Linux). Thus, to determine the low and high
1582 address, we must compare on every DW_LNS_copy, etc. */
1583 bfd_vma low_pc = (bfd_vma) -1;
1584 bfd_vma high_pc = 0;
1585
1586 /* Decode the table. */
1587 while (! end_sequence)
1588 {
1589 op_code = read_1_byte (abfd, line_ptr);
1590 line_ptr += 1;
1591
1592 if (op_code >= lh.opcode_base)
1593 {
1594 /* Special operand. */
1595 adj_opcode = op_code - lh.opcode_base;
1596 if (lh.maximum_ops_per_insn == 1)
1597 address += (adj_opcode / lh.line_range
1598 * lh.minimum_instruction_length);
1599 else
1600 {
1601 address += ((op_index + adj_opcode / lh.line_range)
1602 / lh.maximum_ops_per_insn
1603 * lh.minimum_instruction_length);
1604 op_index = ((op_index + adj_opcode / lh.line_range)
1605 % lh.maximum_ops_per_insn);
1606 }
1607 line += lh.line_base + (adj_opcode % lh.line_range);
1608 /* Append row to matrix using current values. */
1609 if (!add_line_info (table, address, op_index, filename,
1610 line, column, 0))
1611 goto line_fail;
1612 if (address < low_pc)
1613 low_pc = address;
1614 if (address > high_pc)
1615 high_pc = address;
1616 }
1617 else switch (op_code)
1618 {
1619 case DW_LNS_extended_op:
1620 exop_len = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1621 line_ptr += bytes_read;
1622 extended_op = read_1_byte (abfd, line_ptr);
1623 line_ptr += 1;
1624
1625 switch (extended_op)
1626 {
1627 case DW_LNE_end_sequence:
1628 end_sequence = 1;
1629 if (!add_line_info (table, address, op_index, filename,
1630 line, column, end_sequence))
1631 goto line_fail;
1632 if (address < low_pc)
1633 low_pc = address;
1634 if (address > high_pc)
1635 high_pc = address;
1636 if (!arange_add (unit, &unit->arange, low_pc, high_pc))
1637 goto line_fail;
1638 break;
1639 case DW_LNE_set_address:
1640 address = read_address (unit, line_ptr);
1641 op_index = 0;
1642 line_ptr += unit->addr_size;
1643 break;
1644 case DW_LNE_define_file:
1645 cur_file = read_string (abfd, line_ptr, &bytes_read);
1646 line_ptr += bytes_read;
1647 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1648 {
1649 struct fileinfo *tmp;
1650
1651 amt = table->num_files + FILE_ALLOC_CHUNK;
1652 amt *= sizeof (struct fileinfo);
1653 tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
1654 if (tmp == NULL)
1655 goto line_fail;
1656 table->files = tmp;
1657 }
1658 table->files[table->num_files].name = cur_file;
1659 table->files[table->num_files].dir =
1660 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1661 line_ptr += bytes_read;
1662 table->files[table->num_files].time =
1663 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1664 line_ptr += bytes_read;
1665 table->files[table->num_files].size =
1666 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1667 line_ptr += bytes_read;
1668 table->num_files++;
1669 break;
1670 case DW_LNE_set_discriminator:
1671 (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1672 line_ptr += bytes_read;
1673 break;
1674 case DW_LNE_HP_source_file_correlation:
1675 line_ptr += exop_len - 1;
1676 break;
1677 default:
1678 (*_bfd_error_handler)
1679 (_("Dwarf Error: mangled line number section."));
1680 bfd_set_error (bfd_error_bad_value);
1681 line_fail:
1682 if (filename != NULL)
1683 free (filename);
1684 goto fail;
1685 }
1686 break;
1687 case DW_LNS_copy:
1688 if (!add_line_info (table, address, op_index,
1689 filename, line, column, 0))
1690 goto line_fail;
1691 if (address < low_pc)
1692 low_pc = address;
1693 if (address > high_pc)
1694 high_pc = address;
1695 break;
1696 case DW_LNS_advance_pc:
1697 if (lh.maximum_ops_per_insn == 1)
1698 address += (lh.minimum_instruction_length
1699 * read_unsigned_leb128 (abfd, line_ptr,
1700 &bytes_read));
1701 else
1702 {
1703 bfd_vma adjust = read_unsigned_leb128 (abfd, line_ptr,
1704 &bytes_read);
1705 address = ((op_index + adjust) / lh.maximum_ops_per_insn
1706 * lh.minimum_instruction_length);
1707 op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
1708 }
1709 line_ptr += bytes_read;
1710 break;
1711 case DW_LNS_advance_line:
1712 line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
1713 line_ptr += bytes_read;
1714 break;
1715 case DW_LNS_set_file:
1716 {
1717 unsigned int file;
1718
1719 /* The file and directory tables are 0
1720 based, the references are 1 based. */
1721 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1722 line_ptr += bytes_read;
1723 if (filename)
1724 free (filename);
1725 filename = concat_filename (table, file);
1726 break;
1727 }
1728 case DW_LNS_set_column:
1729 column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1730 line_ptr += bytes_read;
1731 break;
1732 case DW_LNS_negate_stmt:
1733 is_stmt = (!is_stmt);
1734 break;
1735 case DW_LNS_set_basic_block:
1736 break;
1737 case DW_LNS_const_add_pc:
1738 if (lh.maximum_ops_per_insn == 1)
1739 address += (lh.minimum_instruction_length
1740 * ((255 - lh.opcode_base) / lh.line_range));
1741 else
1742 {
1743 bfd_vma adjust = ((255 - lh.opcode_base) / lh.line_range);
1744 address += (lh.minimum_instruction_length
1745 * ((op_index + adjust)
1746 / lh.maximum_ops_per_insn));
1747 op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
1748 }
1749 break;
1750 case DW_LNS_fixed_advance_pc:
1751 address += read_2_bytes (abfd, line_ptr);
1752 op_index = 0;
1753 line_ptr += 2;
1754 break;
1755 default:
1756 /* Unknown standard opcode, ignore it. */
1757 for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
1758 {
1759 (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1760 line_ptr += bytes_read;
1761 }
1762 break;
1763 }
1764 }
1765
1766 if (filename)
1767 free (filename);
1768 }
1769
1770 if (sort_line_sequences (table))
1771 return table;
1772
1773 fail:
1774 if (table->sequences != NULL)
1775 free (table->sequences);
1776 if (table->files != NULL)
1777 free (table->files);
1778 if (table->dirs != NULL)
1779 free (table->dirs);
1780 return NULL;
1781 }
1782
1783 /* If ADDR is within TABLE set the output parameters and return TRUE,
1784 otherwise return FALSE. The output parameters, FILENAME_PTR and
1785 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1786
1787 static bfd_boolean
1788 lookup_address_in_line_info_table (struct line_info_table *table,
1789 bfd_vma addr,
1790 const char **filename_ptr,
1791 unsigned int *linenumber_ptr)
1792 {
1793 struct line_sequence *seq = NULL;
1794 struct line_info *each_line;
1795 int low, high, mid;
1796
1797 /* Binary search the array of sequences. */
1798 low = 0;
1799 high = table->num_sequences;
1800 while (low < high)
1801 {
1802 mid = (low + high) / 2;
1803 seq = &table->sequences[mid];
1804 if (addr < seq->low_pc)
1805 high = mid;
1806 else if (addr >= seq->last_line->address)
1807 low = mid + 1;
1808 else
1809 break;
1810 }
1811
1812 if (seq && addr >= seq->low_pc && addr < seq->last_line->address)
1813 {
1814 /* Note: seq->last_line should be a descendingly sorted list. */
1815 for (each_line = seq->last_line;
1816 each_line;
1817 each_line = each_line->prev_line)
1818 if (addr >= each_line->address)
1819 break;
1820
1821 if (each_line
1822 && !(each_line->end_sequence || each_line == seq->last_line))
1823 {
1824 *filename_ptr = each_line->filename;
1825 *linenumber_ptr = each_line->line;
1826 return TRUE;
1827 }
1828 }
1829
1830 *filename_ptr = NULL;
1831 return FALSE;
1832 }
1833
1834 /* Read in the .debug_ranges section for future reference. */
1835
1836 static bfd_boolean
1837 read_debug_ranges (struct comp_unit *unit)
1838 {
1839 struct dwarf2_debug *stash = unit->stash;
1840 return read_section (unit->abfd, &stash->debug_sections[debug_ranges],
1841 stash->syms, 0,
1842 &stash->dwarf_ranges_buffer, &stash->dwarf_ranges_size);
1843 }
1844
1845 /* Function table functions. */
1846
1847 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return TRUE.
1848 Note that we need to find the function that has the smallest
1849 range that contains ADDR, to handle inlined functions without
1850 depending upon them being ordered in TABLE by increasing range. */
1851
1852 static bfd_boolean
1853 lookup_address_in_function_table (struct comp_unit *unit,
1854 bfd_vma addr,
1855 struct funcinfo **function_ptr,
1856 const char **functionname_ptr)
1857 {
1858 struct funcinfo* each_func;
1859 struct funcinfo* best_fit = NULL;
1860 struct arange *arange;
1861
1862 for (each_func = unit->function_table;
1863 each_func;
1864 each_func = each_func->prev_func)
1865 {
1866 for (arange = &each_func->arange;
1867 arange;
1868 arange = arange->next)
1869 {
1870 if (addr >= arange->low && addr < arange->high)
1871 {
1872 if (!best_fit
1873 || (arange->high - arange->low
1874 < best_fit->arange.high - best_fit->arange.low))
1875 best_fit = each_func;
1876 }
1877 }
1878 }
1879
1880 if (best_fit)
1881 {
1882 *functionname_ptr = best_fit->name;
1883 *function_ptr = best_fit;
1884 return TRUE;
1885 }
1886 else
1887 {
1888 return FALSE;
1889 }
1890 }
1891
1892 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
1893 and LINENUMBER_PTR, and return TRUE. */
1894
1895 static bfd_boolean
1896 lookup_symbol_in_function_table (struct comp_unit *unit,
1897 asymbol *sym,
1898 bfd_vma addr,
1899 const char **filename_ptr,
1900 unsigned int *linenumber_ptr)
1901 {
1902 struct funcinfo* each_func;
1903 struct funcinfo* best_fit = NULL;
1904 struct arange *arange;
1905 const char *name = bfd_asymbol_name (sym);
1906 asection *sec = bfd_get_section (sym);
1907
1908 for (each_func = unit->function_table;
1909 each_func;
1910 each_func = each_func->prev_func)
1911 {
1912 for (arange = &each_func->arange;
1913 arange;
1914 arange = arange->next)
1915 {
1916 if ((!each_func->sec || each_func->sec == sec)
1917 && addr >= arange->low
1918 && addr < arange->high
1919 && each_func->name
1920 && strcmp (name, each_func->name) == 0
1921 && (!best_fit
1922 || (arange->high - arange->low
1923 < best_fit->arange.high - best_fit->arange.low)))
1924 best_fit = each_func;
1925 }
1926 }
1927
1928 if (best_fit)
1929 {
1930 best_fit->sec = sec;
1931 *filename_ptr = best_fit->file;
1932 *linenumber_ptr = best_fit->line;
1933 return TRUE;
1934 }
1935 else
1936 return FALSE;
1937 }
1938
1939 /* Variable table functions. */
1940
1941 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
1942 LINENUMBER_PTR, and return TRUE. */
1943
1944 static bfd_boolean
1945 lookup_symbol_in_variable_table (struct comp_unit *unit,
1946 asymbol *sym,
1947 bfd_vma addr,
1948 const char **filename_ptr,
1949 unsigned int *linenumber_ptr)
1950 {
1951 const char *name = bfd_asymbol_name (sym);
1952 asection *sec = bfd_get_section (sym);
1953 struct varinfo* each;
1954
1955 for (each = unit->variable_table; each; each = each->prev_var)
1956 if (each->stack == 0
1957 && each->file != NULL
1958 && each->name != NULL
1959 && each->addr == addr
1960 && (!each->sec || each->sec == sec)
1961 && strcmp (name, each->name) == 0)
1962 break;
1963
1964 if (each)
1965 {
1966 each->sec = sec;
1967 *filename_ptr = each->file;
1968 *linenumber_ptr = each->line;
1969 return TRUE;
1970 }
1971 else
1972 return FALSE;
1973 }
1974
1975 static char *
1976 find_abstract_instance_name (struct comp_unit *unit,
1977 struct attribute *attr_ptr)
1978 {
1979 bfd *abfd = unit->abfd;
1980 bfd_byte *info_ptr;
1981 unsigned int abbrev_number, bytes_read, i;
1982 struct abbrev_info *abbrev;
1983 bfd_uint64_t die_ref = attr_ptr->u.val;
1984 struct attribute attr;
1985 char *name = 0;
1986
1987 /* DW_FORM_ref_addr can reference an entry in a different CU. It
1988 is an offset from the .debug_info section, not the current CU. */
1989 if (attr_ptr->form == DW_FORM_ref_addr)
1990 {
1991 /* We only support DW_FORM_ref_addr within the same file, so
1992 any relocations should be resolved already. */
1993 if (!die_ref)
1994 abort ();
1995
1996 info_ptr = unit->sec_info_ptr + die_ref;
1997 }
1998 else
1999 info_ptr = unit->info_ptr_unit + die_ref;
2000 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2001 info_ptr += bytes_read;
2002
2003 if (abbrev_number)
2004 {
2005 abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
2006 if (! abbrev)
2007 {
2008 (*_bfd_error_handler)
2009 (_("Dwarf Error: Could not find abbrev number %u."), abbrev_number);
2010 bfd_set_error (bfd_error_bad_value);
2011 }
2012 else
2013 {
2014 for (i = 0; i < abbrev->num_attrs; ++i)
2015 {
2016 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit,
2017 info_ptr);
2018 if (info_ptr == NULL)
2019 break;
2020 switch (attr.name)
2021 {
2022 case DW_AT_name:
2023 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
2024 over DW_AT_name. */
2025 if (name == NULL)
2026 name = attr.u.str;
2027 break;
2028 case DW_AT_specification:
2029 name = find_abstract_instance_name (unit, &attr);
2030 break;
2031 case DW_AT_linkage_name:
2032 case DW_AT_MIPS_linkage_name:
2033 name = attr.u.str;
2034 break;
2035 default:
2036 break;
2037 }
2038 }
2039 }
2040 }
2041 return name;
2042 }
2043
2044 static bfd_boolean
2045 read_rangelist (struct comp_unit *unit, struct arange *arange,
2046 bfd_uint64_t offset)
2047 {
2048 bfd_byte *ranges_ptr;
2049 bfd_vma base_address = unit->base_address;
2050
2051 if (! unit->stash->dwarf_ranges_buffer)
2052 {
2053 if (! read_debug_ranges (unit))
2054 return FALSE;
2055 }
2056 ranges_ptr = unit->stash->dwarf_ranges_buffer + offset;
2057
2058 for (;;)
2059 {
2060 bfd_vma low_pc;
2061 bfd_vma high_pc;
2062
2063 low_pc = read_address (unit, ranges_ptr);
2064 ranges_ptr += unit->addr_size;
2065 high_pc = read_address (unit, ranges_ptr);
2066 ranges_ptr += unit->addr_size;
2067
2068 if (low_pc == 0 && high_pc == 0)
2069 break;
2070 if (low_pc == -1UL && high_pc != -1UL)
2071 base_address = high_pc;
2072 else
2073 {
2074 if (!arange_add (unit, arange,
2075 base_address + low_pc, base_address + high_pc))
2076 return FALSE;
2077 }
2078 }
2079 return TRUE;
2080 }
2081
2082 /* DWARF2 Compilation unit functions. */
2083
2084 /* Scan over each die in a comp. unit looking for functions to add
2085 to the function table and variables to the variable table. */
2086
2087 static bfd_boolean
2088 scan_unit_for_symbols (struct comp_unit *unit)
2089 {
2090 bfd *abfd = unit->abfd;
2091 bfd_byte *info_ptr = unit->first_child_die_ptr;
2092 int nesting_level = 1;
2093 struct funcinfo **nested_funcs;
2094 int nested_funcs_size;
2095
2096 /* Maintain a stack of in-scope functions and inlined functions, which we
2097 can use to set the caller_func field. */
2098 nested_funcs_size = 32;
2099 nested_funcs = (struct funcinfo **)
2100 bfd_malloc (nested_funcs_size * sizeof (struct funcinfo *));
2101 if (nested_funcs == NULL)
2102 return FALSE;
2103 nested_funcs[nesting_level] = 0;
2104
2105 while (nesting_level)
2106 {
2107 unsigned int abbrev_number, bytes_read, i;
2108 struct abbrev_info *abbrev;
2109 struct attribute attr;
2110 struct funcinfo *func;
2111 struct varinfo *var;
2112 bfd_vma low_pc = 0;
2113 bfd_vma high_pc = 0;
2114 bfd_boolean high_pc_relative = FALSE;
2115
2116 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2117 info_ptr += bytes_read;
2118
2119 if (! abbrev_number)
2120 {
2121 nesting_level--;
2122 continue;
2123 }
2124
2125 abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
2126 if (! abbrev)
2127 {
2128 (*_bfd_error_handler)
2129 (_("Dwarf Error: Could not find abbrev number %u."),
2130 abbrev_number);
2131 bfd_set_error (bfd_error_bad_value);
2132 goto fail;
2133 }
2134
2135 var = NULL;
2136 if (abbrev->tag == DW_TAG_subprogram
2137 || abbrev->tag == DW_TAG_entry_point
2138 || abbrev->tag == DW_TAG_inlined_subroutine)
2139 {
2140 bfd_size_type amt = sizeof (struct funcinfo);
2141 func = (struct funcinfo *) bfd_zalloc (abfd, amt);
2142 if (func == NULL)
2143 goto fail;
2144 func->tag = abbrev->tag;
2145 func->prev_func = unit->function_table;
2146 unit->function_table = func;
2147 BFD_ASSERT (!unit->cached);
2148
2149 if (func->tag == DW_TAG_inlined_subroutine)
2150 for (i = nesting_level - 1; i >= 1; i--)
2151 if (nested_funcs[i])
2152 {
2153 func->caller_func = nested_funcs[i];
2154 break;
2155 }
2156 nested_funcs[nesting_level] = func;
2157 }
2158 else
2159 {
2160 func = NULL;
2161 if (abbrev->tag == DW_TAG_variable)
2162 {
2163 bfd_size_type amt = sizeof (struct varinfo);
2164 var = (struct varinfo *) bfd_zalloc (abfd, amt);
2165 if (var == NULL)
2166 goto fail;
2167 var->tag = abbrev->tag;
2168 var->stack = 1;
2169 var->prev_var = unit->variable_table;
2170 unit->variable_table = var;
2171 BFD_ASSERT (!unit->cached);
2172 }
2173
2174 /* No inline function in scope at this nesting level. */
2175 nested_funcs[nesting_level] = 0;
2176 }
2177
2178 for (i = 0; i < abbrev->num_attrs; ++i)
2179 {
2180 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
2181 if (info_ptr == NULL)
2182 goto fail;
2183
2184 if (func)
2185 {
2186 switch (attr.name)
2187 {
2188 case DW_AT_call_file:
2189 func->caller_file = concat_filename (unit->line_table,
2190 attr.u.val);
2191 break;
2192
2193 case DW_AT_call_line:
2194 func->caller_line = attr.u.val;
2195 break;
2196
2197 case DW_AT_abstract_origin:
2198 case DW_AT_specification:
2199 func->name = find_abstract_instance_name (unit, &attr);
2200 break;
2201
2202 case DW_AT_name:
2203 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
2204 over DW_AT_name. */
2205 if (func->name == NULL)
2206 func->name = attr.u.str;
2207 break;
2208
2209 case DW_AT_linkage_name:
2210 case DW_AT_MIPS_linkage_name:
2211 func->name = attr.u.str;
2212 break;
2213
2214 case DW_AT_low_pc:
2215 low_pc = attr.u.val;
2216 break;
2217
2218 case DW_AT_high_pc:
2219 high_pc = attr.u.val;
2220 high_pc_relative = attr.form != DW_FORM_addr;
2221 break;
2222
2223 case DW_AT_ranges:
2224 if (!read_rangelist (unit, &func->arange, attr.u.val))
2225 goto fail;
2226 break;
2227
2228 case DW_AT_decl_file:
2229 func->file = concat_filename (unit->line_table,
2230 attr.u.val);
2231 break;
2232
2233 case DW_AT_decl_line:
2234 func->line = attr.u.val;
2235 break;
2236
2237 default:
2238 break;
2239 }
2240 }
2241 else if (var)
2242 {
2243 switch (attr.name)
2244 {
2245 case DW_AT_name:
2246 var->name = attr.u.str;
2247 break;
2248
2249 case DW_AT_decl_file:
2250 var->file = concat_filename (unit->line_table,
2251 attr.u.val);
2252 break;
2253
2254 case DW_AT_decl_line:
2255 var->line = attr.u.val;
2256 break;
2257
2258 case DW_AT_external:
2259 if (attr.u.val != 0)
2260 var->stack = 0;
2261 break;
2262
2263 case DW_AT_location:
2264 switch (attr.form)
2265 {
2266 case DW_FORM_block:
2267 case DW_FORM_block1:
2268 case DW_FORM_block2:
2269 case DW_FORM_block4:
2270 case DW_FORM_exprloc:
2271 if (*attr.u.blk->data == DW_OP_addr)
2272 {
2273 var->stack = 0;
2274
2275 /* Verify that DW_OP_addr is the only opcode in the
2276 location, in which case the block size will be 1
2277 plus the address size. */
2278 /* ??? For TLS variables, gcc can emit
2279 DW_OP_addr <addr> DW_OP_GNU_push_tls_address
2280 which we don't handle here yet. */
2281 if (attr.u.blk->size == unit->addr_size + 1U)
2282 var->addr = bfd_get (unit->addr_size * 8,
2283 unit->abfd,
2284 attr.u.blk->data + 1);
2285 }
2286 break;
2287
2288 default:
2289 break;
2290 }
2291 break;
2292
2293 default:
2294 break;
2295 }
2296 }
2297 }
2298
2299 if (high_pc_relative)
2300 high_pc += low_pc;
2301
2302 if (func && high_pc != 0)
2303 {
2304 if (!arange_add (unit, &func->arange, low_pc, high_pc))
2305 goto fail;
2306 }
2307
2308 if (abbrev->has_children)
2309 {
2310 nesting_level++;
2311
2312 if (nesting_level >= nested_funcs_size)
2313 {
2314 struct funcinfo **tmp;
2315
2316 nested_funcs_size *= 2;
2317 tmp = (struct funcinfo **)
2318 bfd_realloc (nested_funcs,
2319 nested_funcs_size * sizeof (struct funcinfo *));
2320 if (tmp == NULL)
2321 goto fail;
2322 nested_funcs = tmp;
2323 }
2324 nested_funcs[nesting_level] = 0;
2325 }
2326 }
2327
2328 free (nested_funcs);
2329 return TRUE;
2330
2331 fail:
2332 free (nested_funcs);
2333 return FALSE;
2334 }
2335
2336 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This
2337 includes the compilation unit header that proceeds the DIE's, but
2338 does not include the length field that precedes each compilation
2339 unit header. END_PTR points one past the end of this comp unit.
2340 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
2341
2342 This routine does not read the whole compilation unit; only enough
2343 to get to the line number information for the compilation unit. */
2344
2345 static struct comp_unit *
2346 parse_comp_unit (struct dwarf2_debug *stash,
2347 bfd_vma unit_length,
2348 bfd_byte *info_ptr_unit,
2349 unsigned int offset_size)
2350 {
2351 struct comp_unit* unit;
2352 unsigned int version;
2353 bfd_uint64_t abbrev_offset = 0;
2354 unsigned int addr_size;
2355 struct abbrev_info** abbrevs;
2356 unsigned int abbrev_number, bytes_read, i;
2357 struct abbrev_info *abbrev;
2358 struct attribute attr;
2359 bfd_byte *info_ptr = stash->info_ptr;
2360 bfd_byte *end_ptr = info_ptr + unit_length;
2361 bfd_size_type amt;
2362 bfd_vma low_pc = 0;
2363 bfd_vma high_pc = 0;
2364 bfd *abfd = stash->bfd_ptr;
2365 bfd_boolean high_pc_relative = FALSE;
2366
2367 version = read_2_bytes (abfd, info_ptr);
2368 info_ptr += 2;
2369 BFD_ASSERT (offset_size == 4 || offset_size == 8);
2370 if (offset_size == 4)
2371 abbrev_offset = read_4_bytes (abfd, info_ptr);
2372 else
2373 abbrev_offset = read_8_bytes (abfd, info_ptr);
2374 info_ptr += offset_size;
2375 addr_size = read_1_byte (abfd, info_ptr);
2376 info_ptr += 1;
2377
2378 if (version != 2 && version != 3 && version != 4)
2379 {
2380 (*_bfd_error_handler)
2381 (_("Dwarf Error: found dwarf version '%u', this reader"
2382 " only handles version 2, 3 and 4 information."), version);
2383 bfd_set_error (bfd_error_bad_value);
2384 return 0;
2385 }
2386
2387 if (addr_size > sizeof (bfd_vma))
2388 {
2389 (*_bfd_error_handler)
2390 (_("Dwarf Error: found address size '%u', this reader"
2391 " can not handle sizes greater than '%u'."),
2392 addr_size,
2393 (unsigned int) sizeof (bfd_vma));
2394 bfd_set_error (bfd_error_bad_value);
2395 return 0;
2396 }
2397
2398 if (addr_size != 2 && addr_size != 4 && addr_size != 8)
2399 {
2400 (*_bfd_error_handler)
2401 ("Dwarf Error: found address size '%u', this reader"
2402 " can only handle address sizes '2', '4' and '8'.", addr_size);
2403 bfd_set_error (bfd_error_bad_value);
2404 return 0;
2405 }
2406
2407 /* Read the abbrevs for this compilation unit into a table. */
2408 abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
2409 if (! abbrevs)
2410 return 0;
2411
2412 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2413 info_ptr += bytes_read;
2414 if (! abbrev_number)
2415 {
2416 (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
2417 abbrev_number);
2418 bfd_set_error (bfd_error_bad_value);
2419 return 0;
2420 }
2421
2422 abbrev = lookup_abbrev (abbrev_number, abbrevs);
2423 if (! abbrev)
2424 {
2425 (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
2426 abbrev_number);
2427 bfd_set_error (bfd_error_bad_value);
2428 return 0;
2429 }
2430
2431 amt = sizeof (struct comp_unit);
2432 unit = (struct comp_unit *) bfd_zalloc (abfd, amt);
2433 if (unit == NULL)
2434 return NULL;
2435 unit->abfd = abfd;
2436 unit->version = version;
2437 unit->addr_size = addr_size;
2438 unit->offset_size = offset_size;
2439 unit->abbrevs = abbrevs;
2440 unit->end_ptr = end_ptr;
2441 unit->stash = stash;
2442 unit->info_ptr_unit = info_ptr_unit;
2443 unit->sec_info_ptr = stash->sec_info_ptr;
2444
2445 for (i = 0; i < abbrev->num_attrs; ++i)
2446 {
2447 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
2448 if (info_ptr == NULL)
2449 return NULL;
2450
2451 /* Store the data if it is of an attribute we want to keep in a
2452 partial symbol table. */
2453 switch (attr.name)
2454 {
2455 case DW_AT_stmt_list:
2456 unit->stmtlist = 1;
2457 unit->line_offset = attr.u.val;
2458 break;
2459
2460 case DW_AT_name:
2461 unit->name = attr.u.str;
2462 break;
2463
2464 case DW_AT_low_pc:
2465 low_pc = attr.u.val;
2466 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
2467 this is the base address to use when reading location
2468 lists or range lists. */
2469 if (abbrev->tag == DW_TAG_compile_unit)
2470 unit->base_address = low_pc;
2471 break;
2472
2473 case DW_AT_high_pc:
2474 high_pc = attr.u.val;
2475 high_pc_relative = attr.form != DW_FORM_addr;
2476 break;
2477
2478 case DW_AT_ranges:
2479 if (!read_rangelist (unit, &unit->arange, attr.u.val))
2480 return NULL;
2481 break;
2482
2483 case DW_AT_comp_dir:
2484 {
2485 char *comp_dir = attr.u.str;
2486 if (comp_dir)
2487 {
2488 /* Irix 6.2 native cc prepends <machine>.: to the compilation
2489 directory, get rid of it. */
2490 char *cp = strchr (comp_dir, ':');
2491
2492 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
2493 comp_dir = cp + 1;
2494 }
2495 unit->comp_dir = comp_dir;
2496 break;
2497 }
2498
2499 default:
2500 break;
2501 }
2502 }
2503 if (high_pc_relative)
2504 high_pc += low_pc;
2505 if (high_pc != 0)
2506 {
2507 if (!arange_add (unit, &unit->arange, low_pc, high_pc))
2508 return NULL;
2509 }
2510
2511 unit->first_child_die_ptr = info_ptr;
2512 return unit;
2513 }
2514
2515 /* Return TRUE if UNIT may contain the address given by ADDR. When
2516 there are functions written entirely with inline asm statements, the
2517 range info in the compilation unit header may not be correct. We
2518 need to consult the line info table to see if a compilation unit
2519 really contains the given address. */
2520
2521 static bfd_boolean
2522 comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
2523 {
2524 struct arange *arange;
2525
2526 if (unit->error)
2527 return FALSE;
2528
2529 arange = &unit->arange;
2530 do
2531 {
2532 if (addr >= arange->low && addr < arange->high)
2533 return TRUE;
2534 arange = arange->next;
2535 }
2536 while (arange);
2537
2538 return FALSE;
2539 }
2540
2541 /* If UNIT contains ADDR, set the output parameters to the values for
2542 the line containing ADDR. The output parameters, FILENAME_PTR,
2543 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
2544 to be filled in.
2545
2546 Return TRUE if UNIT contains ADDR, and no errors were encountered;
2547 FALSE otherwise. */
2548
2549 static bfd_boolean
2550 comp_unit_find_nearest_line (struct comp_unit *unit,
2551 bfd_vma addr,
2552 const char **filename_ptr,
2553 const char **functionname_ptr,
2554 unsigned int *linenumber_ptr,
2555 struct dwarf2_debug *stash)
2556 {
2557 bfd_boolean line_p;
2558 bfd_boolean func_p;
2559 struct funcinfo *function;
2560
2561 if (unit->error)
2562 return FALSE;
2563
2564 if (! unit->line_table)
2565 {
2566 if (! unit->stmtlist)
2567 {
2568 unit->error = 1;
2569 return FALSE;
2570 }
2571
2572 unit->line_table = decode_line_info (unit, stash);
2573
2574 if (! unit->line_table)
2575 {
2576 unit->error = 1;
2577 return FALSE;
2578 }
2579
2580 if (unit->first_child_die_ptr < unit->end_ptr
2581 && ! scan_unit_for_symbols (unit))
2582 {
2583 unit->error = 1;
2584 return FALSE;
2585 }
2586 }
2587
2588 function = NULL;
2589 func_p = lookup_address_in_function_table (unit, addr,
2590 &function, functionname_ptr);
2591 if (func_p && (function->tag == DW_TAG_inlined_subroutine))
2592 stash->inliner_chain = function;
2593 line_p = lookup_address_in_line_info_table (unit->line_table, addr,
2594 filename_ptr,
2595 linenumber_ptr);
2596 return line_p || func_p;
2597 }
2598
2599 /* Check to see if line info is already decoded in a comp_unit.
2600 If not, decode it. Returns TRUE if no errors were encountered;
2601 FALSE otherwise. */
2602
2603 static bfd_boolean
2604 comp_unit_maybe_decode_line_info (struct comp_unit *unit,
2605 struct dwarf2_debug *stash)
2606 {
2607 if (unit->error)
2608 return FALSE;
2609
2610 if (! unit->line_table)
2611 {
2612 if (! unit->stmtlist)
2613 {
2614 unit->error = 1;
2615 return FALSE;
2616 }
2617
2618 unit->line_table = decode_line_info (unit, stash);
2619
2620 if (! unit->line_table)
2621 {
2622 unit->error = 1;
2623 return FALSE;
2624 }
2625
2626 if (unit->first_child_die_ptr < unit->end_ptr
2627 && ! scan_unit_for_symbols (unit))
2628 {
2629 unit->error = 1;
2630 return FALSE;
2631 }
2632 }
2633
2634 return TRUE;
2635 }
2636
2637 /* If UNIT contains SYM at ADDR, set the output parameters to the
2638 values for the line containing SYM. The output parameters,
2639 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
2640 filled in.
2641
2642 Return TRUE if UNIT contains SYM, and no errors were encountered;
2643 FALSE otherwise. */
2644
2645 static bfd_boolean
2646 comp_unit_find_line (struct comp_unit *unit,
2647 asymbol *sym,
2648 bfd_vma addr,
2649 const char **filename_ptr,
2650 unsigned int *linenumber_ptr,
2651 struct dwarf2_debug *stash)
2652 {
2653 if (!comp_unit_maybe_decode_line_info (unit, stash))
2654 return FALSE;
2655
2656 if (sym->flags & BSF_FUNCTION)
2657 return lookup_symbol_in_function_table (unit, sym, addr,
2658 filename_ptr,
2659 linenumber_ptr);
2660
2661 return lookup_symbol_in_variable_table (unit, sym, addr,
2662 filename_ptr,
2663 linenumber_ptr);
2664 }
2665
2666 static struct funcinfo *
2667 reverse_funcinfo_list (struct funcinfo *head)
2668 {
2669 struct funcinfo *rhead;
2670 struct funcinfo *temp;
2671
2672 for (rhead = NULL; head; head = temp)
2673 {
2674 temp = head->prev_func;
2675 head->prev_func = rhead;
2676 rhead = head;
2677 }
2678 return rhead;
2679 }
2680
2681 static struct varinfo *
2682 reverse_varinfo_list (struct varinfo *head)
2683 {
2684 struct varinfo *rhead;
2685 struct varinfo *temp;
2686
2687 for (rhead = NULL; head; head = temp)
2688 {
2689 temp = head->prev_var;
2690 head->prev_var = rhead;
2691 rhead = head;
2692 }
2693 return rhead;
2694 }
2695
2696 /* Extract all interesting funcinfos and varinfos of a compilation
2697 unit into hash tables for faster lookup. Returns TRUE if no
2698 errors were enountered; FALSE otherwise. */
2699
2700 static bfd_boolean
2701 comp_unit_hash_info (struct dwarf2_debug *stash,
2702 struct comp_unit *unit,
2703 struct info_hash_table *funcinfo_hash_table,
2704 struct info_hash_table *varinfo_hash_table)
2705 {
2706 struct funcinfo* each_func;
2707 struct varinfo* each_var;
2708 bfd_boolean okay = TRUE;
2709
2710 BFD_ASSERT (stash->info_hash_status != STASH_INFO_HASH_DISABLED);
2711
2712 if (!comp_unit_maybe_decode_line_info (unit, stash))
2713 return FALSE;
2714
2715 BFD_ASSERT (!unit->cached);
2716
2717 /* To preserve the original search order, we went to visit the function
2718 infos in the reversed order of the list. However, making the list
2719 bi-directional use quite a bit of extra memory. So we reverse
2720 the list first, traverse the list in the now reversed order and
2721 finally reverse the list again to get back the original order. */
2722 unit->function_table = reverse_funcinfo_list (unit->function_table);
2723 for (each_func = unit->function_table;
2724 each_func && okay;
2725 each_func = each_func->prev_func)
2726 {
2727 /* Skip nameless functions. */
2728 if (each_func->name)
2729 /* There is no need to copy name string into hash table as
2730 name string is either in the dwarf string buffer or
2731 info in the stash. */
2732 okay = insert_info_hash_table (funcinfo_hash_table, each_func->name,
2733 (void*) each_func, FALSE);
2734 }
2735 unit->function_table = reverse_funcinfo_list (unit->function_table);
2736 if (!okay)
2737 return FALSE;
2738
2739 /* We do the same for variable infos. */
2740 unit->variable_table = reverse_varinfo_list (unit->variable_table);
2741 for (each_var = unit->variable_table;
2742 each_var && okay;
2743 each_var = each_var->prev_var)
2744 {
2745 /* Skip stack vars and vars with no files or names. */
2746 if (each_var->stack == 0
2747 && each_var->file != NULL
2748 && each_var->name != NULL)
2749 /* There is no need to copy name string into hash table as
2750 name string is either in the dwarf string buffer or
2751 info in the stash. */
2752 okay = insert_info_hash_table (varinfo_hash_table, each_var->name,
2753 (void*) each_var, FALSE);
2754 }
2755
2756 unit->variable_table = reverse_varinfo_list (unit->variable_table);
2757 unit->cached = TRUE;
2758 return okay;
2759 }
2760
2761 /* Locate a section in a BFD containing debugging info. The search starts
2762 from the section after AFTER_SEC, or from the first section in the BFD if
2763 AFTER_SEC is NULL. The search works by examining the names of the
2764 sections. There are three permissiable names. The first two are given
2765 by DEBUG_SECTIONS[debug_info] (whose standard DWARF2 names are .debug_info
2766 and .zdebug_info). The third is a prefix .gnu.linkonce.wi.
2767 This is a variation on the .debug_info section which has a checksum
2768 describing the contents appended onto the name. This allows the linker to
2769 identify and discard duplicate debugging sections for different
2770 compilation units. */
2771 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
2772
2773 static asection *
2774 find_debug_info (bfd *abfd, const struct dwarf_debug_section *debug_sections,
2775 asection *after_sec)
2776 {
2777 asection *msec;
2778 const char *look;
2779
2780 if (after_sec == NULL)
2781 {
2782 look = debug_sections[debug_info].uncompressed_name;
2783 msec = bfd_get_section_by_name (abfd, look);
2784 if (msec != NULL)
2785 return msec;
2786
2787 look = debug_sections[debug_info].compressed_name;
2788 if (look != NULL)
2789 {
2790 msec = bfd_get_section_by_name (abfd, look);
2791 if (msec != NULL)
2792 return msec;
2793 }
2794
2795 for (msec = abfd->sections; msec != NULL; msec = msec->next)
2796 if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
2797 return msec;
2798
2799 return NULL;
2800 }
2801
2802 for (msec = after_sec->next; msec != NULL; msec = msec->next)
2803 {
2804 look = debug_sections[debug_info].uncompressed_name;
2805 if (strcmp (msec->name, look) == 0)
2806 return msec;
2807
2808 look = debug_sections[debug_info].compressed_name;
2809 if (look != NULL && strcmp (msec->name, look) == 0)
2810 return msec;
2811
2812 if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
2813 return msec;
2814 }
2815
2816 return NULL;
2817 }
2818
2819 /* Unset vmas for adjusted sections in STASH. */
2820
2821 static void
2822 unset_sections (struct dwarf2_debug *stash)
2823 {
2824 unsigned int i;
2825 struct adjusted_section *p;
2826
2827 i = stash->adjusted_section_count;
2828 p = stash->adjusted_sections;
2829 for (; i > 0; i--, p++)
2830 p->section->vma = 0;
2831 }
2832
2833 /* Set unique VMAs for loadable and DWARF sections in ABFD and save
2834 VMAs in STASH for unset_sections. */
2835
2836 static bfd_boolean
2837 place_sections (bfd *abfd, struct dwarf2_debug *stash)
2838 {
2839 struct adjusted_section *p;
2840 unsigned int i;
2841
2842 if (stash->adjusted_section_count != 0)
2843 {
2844 i = stash->adjusted_section_count;
2845 p = stash->adjusted_sections;
2846 for (; i > 0; i--, p++)
2847 p->section->vma = p->adj_vma;
2848 }
2849 else
2850 {
2851 asection *sect;
2852 bfd_vma last_vma = 0, last_dwarf = 0;
2853 bfd_size_type amt;
2854 const char *debug_info_name;
2855
2856 debug_info_name = stash->debug_sections[debug_info].uncompressed_name;
2857 i = 0;
2858 for (sect = abfd->sections; sect != NULL; sect = sect->next)
2859 {
2860 bfd_size_type sz;
2861 int is_debug_info;
2862
2863 if (sect->vma != 0)
2864 continue;
2865
2866 /* We need to adjust the VMAs of any .debug_info sections.
2867 Skip compressed ones, since no relocations could target
2868 them - they should not appear in object files anyway. */
2869 if (strcmp (sect->name, debug_info_name) == 0)
2870 is_debug_info = 1;
2871 else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO))
2872 is_debug_info = 1;
2873 else
2874 is_debug_info = 0;
2875
2876 if (!is_debug_info && (sect->flags & SEC_LOAD) == 0)
2877 continue;
2878
2879 sz = sect->rawsize ? sect->rawsize : sect->size;
2880 if (sz == 0)
2881 continue;
2882
2883 i++;
2884 }
2885
2886 amt = i * sizeof (struct adjusted_section);
2887 p = (struct adjusted_section *) bfd_alloc (abfd, amt);
2888 if (! p)
2889 return FALSE;
2890
2891 stash->adjusted_sections = p;
2892 stash->adjusted_section_count = i;
2893
2894 for (sect = abfd->sections; sect != NULL; sect = sect->next)
2895 {
2896 bfd_size_type sz;
2897 int is_debug_info;
2898
2899 if (sect->vma != 0)
2900 continue;
2901
2902 /* We need to adjust the VMAs of any .debug_info sections.
2903 Skip compressed ones, since no relocations could target
2904 them - they should not appear in object files anyway. */
2905 if (strcmp (sect->name, debug_info_name) == 0)
2906 is_debug_info = 1;
2907 else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO))
2908 is_debug_info = 1;
2909 else
2910 is_debug_info = 0;
2911
2912 if (!is_debug_info && (sect->flags & SEC_LOAD) == 0)
2913 continue;
2914
2915 sz = sect->rawsize ? sect->rawsize : sect->size;
2916 if (sz == 0)
2917 continue;
2918
2919 p->section = sect;
2920 if (is_debug_info)
2921 {
2922 BFD_ASSERT (sect->alignment_power == 0);
2923 sect->vma = last_dwarf;
2924 last_dwarf += sz;
2925 }
2926 else if (last_vma != 0)
2927 {
2928 /* Align the new address to the current section
2929 alignment. */
2930 last_vma = ((last_vma
2931 + ~((bfd_vma) -1 << sect->alignment_power))
2932 & ((bfd_vma) -1 << sect->alignment_power));
2933 sect->vma = last_vma;
2934 last_vma += sect->vma + sz;
2935 }
2936 else
2937 last_vma += sect->vma + sz;
2938
2939 p->adj_vma = sect->vma;
2940
2941 p++;
2942 }
2943 }
2944
2945 return TRUE;
2946 }
2947
2948 /* Look up a funcinfo by name using the given info hash table. If found,
2949 also update the locations pointed to by filename_ptr and linenumber_ptr.
2950
2951 This function returns TRUE if a funcinfo that matches the given symbol
2952 and address is found with any error; otherwise it returns FALSE. */
2953
2954 static bfd_boolean
2955 info_hash_lookup_funcinfo (struct info_hash_table *hash_table,
2956 asymbol *sym,
2957 bfd_vma addr,
2958 const char **filename_ptr,
2959 unsigned int *linenumber_ptr)
2960 {
2961 struct funcinfo* each_func;
2962 struct funcinfo* best_fit = NULL;
2963 struct info_list_node *node;
2964 struct arange *arange;
2965 const char *name = bfd_asymbol_name (sym);
2966 asection *sec = bfd_get_section (sym);
2967
2968 for (node = lookup_info_hash_table (hash_table, name);
2969 node;
2970 node = node->next)
2971 {
2972 each_func = (struct funcinfo *) node->info;
2973 for (arange = &each_func->arange;
2974 arange;
2975 arange = arange->next)
2976 {
2977 if ((!each_func->sec || each_func->sec == sec)
2978 && addr >= arange->low
2979 && addr < arange->high
2980 && (!best_fit
2981 || (arange->high - arange->low
2982 < best_fit->arange.high - best_fit->arange.low)))
2983 best_fit = each_func;
2984 }
2985 }
2986
2987 if (best_fit)
2988 {
2989 best_fit->sec = sec;
2990 *filename_ptr = best_fit->file;
2991 *linenumber_ptr = best_fit->line;
2992 return TRUE;
2993 }
2994
2995 return FALSE;
2996 }
2997
2998 /* Look up a varinfo by name using the given info hash table. If found,
2999 also update the locations pointed to by filename_ptr and linenumber_ptr.
3000
3001 This function returns TRUE if a varinfo that matches the given symbol
3002 and address is found with any error; otherwise it returns FALSE. */
3003
3004 static bfd_boolean
3005 info_hash_lookup_varinfo (struct info_hash_table *hash_table,
3006 asymbol *sym,
3007 bfd_vma addr,
3008 const char **filename_ptr,
3009 unsigned int *linenumber_ptr)
3010 {
3011 const char *name = bfd_asymbol_name (sym);
3012 asection *sec = bfd_get_section (sym);
3013 struct varinfo* each;
3014 struct info_list_node *node;
3015
3016 for (node = lookup_info_hash_table (hash_table, name);
3017 node;
3018 node = node->next)
3019 {
3020 each = (struct varinfo *) node->info;
3021 if (each->addr == addr
3022 && (!each->sec || each->sec == sec))
3023 {
3024 each->sec = sec;
3025 *filename_ptr = each->file;
3026 *linenumber_ptr = each->line;
3027 return TRUE;
3028 }
3029 }
3030
3031 return FALSE;
3032 }
3033
3034 /* Update the funcinfo and varinfo info hash tables if they are
3035 not up to date. Returns TRUE if there is no error; otherwise
3036 returns FALSE and disable the info hash tables. */
3037
3038 static bfd_boolean
3039 stash_maybe_update_info_hash_tables (struct dwarf2_debug *stash)
3040 {
3041 struct comp_unit *each;
3042
3043 /* Exit if hash tables are up-to-date. */
3044 if (stash->all_comp_units == stash->hash_units_head)
3045 return TRUE;
3046
3047 if (stash->hash_units_head)
3048 each = stash->hash_units_head->prev_unit;
3049 else
3050 each = stash->last_comp_unit;
3051
3052 while (each)
3053 {
3054 if (!comp_unit_hash_info (stash, each, stash->funcinfo_hash_table,
3055 stash->varinfo_hash_table))
3056 {
3057 stash->info_hash_status = STASH_INFO_HASH_DISABLED;
3058 return FALSE;
3059 }
3060 each = each->prev_unit;
3061 }
3062
3063 stash->hash_units_head = stash->all_comp_units;
3064 return TRUE;
3065 }
3066
3067 /* Check consistency of info hash tables. This is for debugging only. */
3068
3069 static void ATTRIBUTE_UNUSED
3070 stash_verify_info_hash_table (struct dwarf2_debug *stash)
3071 {
3072 struct comp_unit *each_unit;
3073 struct funcinfo *each_func;
3074 struct varinfo *each_var;
3075 struct info_list_node *node;
3076 bfd_boolean found;
3077
3078 for (each_unit = stash->all_comp_units;
3079 each_unit;
3080 each_unit = each_unit->next_unit)
3081 {
3082 for (each_func = each_unit->function_table;
3083 each_func;
3084 each_func = each_func->prev_func)
3085 {
3086 if (!each_func->name)
3087 continue;
3088 node = lookup_info_hash_table (stash->funcinfo_hash_table,
3089 each_func->name);
3090 BFD_ASSERT (node);
3091 found = FALSE;
3092 while (node && !found)
3093 {
3094 found = node->info == each_func;
3095 node = node->next;
3096 }
3097 BFD_ASSERT (found);
3098 }
3099
3100 for (each_var = each_unit->variable_table;
3101 each_var;
3102 each_var = each_var->prev_var)
3103 {
3104 if (!each_var->name || !each_var->file || each_var->stack)
3105 continue;
3106 node = lookup_info_hash_table (stash->varinfo_hash_table,
3107 each_var->name);
3108 BFD_ASSERT (node);
3109 found = FALSE;
3110 while (node && !found)
3111 {
3112 found = node->info == each_var;
3113 node = node->next;
3114 }
3115 BFD_ASSERT (found);
3116 }
3117 }
3118 }
3119
3120 /* Check to see if we want to enable the info hash tables, which consume
3121 quite a bit of memory. Currently we only check the number times
3122 bfd_dwarf2_find_line is called. In the future, we may also want to
3123 take the number of symbols into account. */
3124
3125 static void
3126 stash_maybe_enable_info_hash_tables (bfd *abfd, struct dwarf2_debug *stash)
3127 {
3128 BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_OFF);
3129
3130 if (stash->info_hash_count++ < STASH_INFO_HASH_TRIGGER)
3131 return;
3132
3133 /* FIXME: Maybe we should check the reduce_memory_overheads
3134 and optimize fields in the bfd_link_info structure ? */
3135
3136 /* Create hash tables. */
3137 stash->funcinfo_hash_table = create_info_hash_table (abfd);
3138 stash->varinfo_hash_table = create_info_hash_table (abfd);
3139 if (!stash->funcinfo_hash_table || !stash->varinfo_hash_table)
3140 {
3141 /* Turn off info hashes if any allocation above fails. */
3142 stash->info_hash_status = STASH_INFO_HASH_DISABLED;
3143 return;
3144 }
3145 /* We need a forced update so that the info hash tables will
3146 be created even though there is no compilation unit. That
3147 happens if STASH_INFO_HASH_TRIGGER is 0. */
3148 stash_maybe_update_info_hash_tables (stash);
3149 stash->info_hash_status = STASH_INFO_HASH_ON;
3150 }
3151
3152 /* Find the file and line associated with a symbol and address using the
3153 info hash tables of a stash. If there is a match, the function returns
3154 TRUE and update the locations pointed to by filename_ptr and linenumber_ptr;
3155 otherwise it returns FALSE. */
3156
3157 static bfd_boolean
3158 stash_find_line_fast (struct dwarf2_debug *stash,
3159 asymbol *sym,
3160 bfd_vma addr,
3161 const char **filename_ptr,
3162 unsigned int *linenumber_ptr)
3163 {
3164 BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_ON);
3165
3166 if (sym->flags & BSF_FUNCTION)
3167 return info_hash_lookup_funcinfo (stash->funcinfo_hash_table, sym, addr,
3168 filename_ptr, linenumber_ptr);
3169 return info_hash_lookup_varinfo (stash->varinfo_hash_table, sym, addr,
3170 filename_ptr, linenumber_ptr);
3171 }
3172
3173 /* Read debug information from DEBUG_BFD when DEBUG_BFD is specified.
3174 If DEBUG_BFD is not specified, we read debug information from ABFD
3175 or its gnu_debuglink. The results will be stored in PINFO.
3176 The function returns TRUE iff debug information is ready. */
3177
3178 bfd_boolean
3179 _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
3180 const struct dwarf_debug_section *debug_sections,
3181 asymbol **symbols,
3182 void **pinfo)
3183 {
3184 bfd_size_type amt = sizeof (struct dwarf2_debug);
3185 bfd_size_type total_size;
3186 asection *msec;
3187 struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
3188
3189 if (stash != NULL)
3190 return TRUE;
3191
3192 stash = (struct dwarf2_debug *) bfd_zalloc (abfd, amt);
3193 if (! stash)
3194 return FALSE;
3195 stash->debug_sections = debug_sections;
3196
3197 *pinfo = stash;
3198
3199 if (debug_bfd == NULL)
3200 debug_bfd = abfd;
3201
3202 msec = find_debug_info (debug_bfd, debug_sections, NULL);
3203 if (msec == NULL && abfd == debug_bfd)
3204 {
3205 char * debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
3206
3207 if (debug_filename == NULL)
3208 /* No dwarf2 info, and no gnu_debuglink to follow.
3209 Note that at this point the stash has been allocated, but
3210 contains zeros. This lets future calls to this function
3211 fail more quickly. */
3212 return FALSE;
3213
3214 if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
3215 || ! bfd_check_format (debug_bfd, bfd_object)
3216 || (msec = find_debug_info (debug_bfd,
3217 debug_sections, NULL)) == NULL)
3218 {
3219 if (debug_bfd)
3220 bfd_close (debug_bfd);
3221 /* FIXME: Should we report our failure to follow the debuglink ? */
3222 free (debug_filename);
3223 return FALSE;
3224 }
3225 }
3226
3227 /* There can be more than one DWARF2 info section in a BFD these
3228 days. First handle the easy case when there's only one. If
3229 there's more than one, try case two: none of the sections is
3230 compressed. In that case, read them all in and produce one
3231 large stash. We do this in two passes - in the first pass we
3232 just accumulate the section sizes, and in the second pass we
3233 read in the section's contents. (The allows us to avoid
3234 reallocing the data as we add sections to the stash.) If
3235 some or all sections are compressed, then do things the slow
3236 way, with a bunch of reallocs. */
3237
3238 if (! find_debug_info (debug_bfd, debug_sections, msec))
3239 {
3240 /* Case 1: only one info section. */
3241 total_size = msec->size;
3242 if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
3243 symbols, 0,
3244 &stash->info_ptr_memory, &total_size))
3245 return FALSE;
3246 }
3247 else
3248 {
3249 /* Case 2: multiple sections. */
3250 for (total_size = 0;
3251 msec;
3252 msec = find_debug_info (debug_bfd, debug_sections, msec))
3253 total_size += msec->size;
3254
3255 stash->info_ptr_memory = (bfd_byte *) bfd_malloc (total_size);
3256 if (stash->info_ptr_memory == NULL)
3257 return FALSE;
3258
3259 total_size = 0;
3260 for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
3261 msec;
3262 msec = find_debug_info (debug_bfd, debug_sections, msec))
3263 {
3264 bfd_size_type size;
3265
3266 size = msec->size;
3267 if (size == 0)
3268 continue;
3269
3270 if (!(bfd_simple_get_relocated_section_contents
3271 (debug_bfd, msec, stash->info_ptr_memory + total_size,
3272 symbols)))
3273 return FALSE;
3274
3275 total_size += size;
3276 }
3277 }
3278
3279 stash->info_ptr = stash->info_ptr_memory;
3280 stash->info_ptr_end = stash->info_ptr + total_size;
3281 stash->sec = find_debug_info (debug_bfd, debug_sections, NULL);
3282 stash->sec_info_ptr = stash->info_ptr;
3283 stash->syms = symbols;
3284 stash->bfd_ptr = debug_bfd;
3285
3286 return TRUE;
3287 }
3288
3289 /* Find the source code location of SYMBOL. If SYMBOL is NULL
3290 then find the nearest source code location corresponding to
3291 the address SECTION + OFFSET.
3292 Returns TRUE if the line is found without error and fills in
3293 FILENAME_PTR and LINENUMBER_PTR. In the case where SYMBOL was
3294 NULL the FUNCTIONNAME_PTR is also filled in.
3295 SYMBOLS contains the symbol table for ABFD.
3296 DEBUG_SECTIONS contains the name of the dwarf debug sections.
3297 ADDR_SIZE is the number of bytes in the initial .debug_info length
3298 field and in the abbreviation offset, or zero to indicate that the
3299 default value should be used. */
3300
3301 static bfd_boolean
3302 find_line (bfd *abfd,
3303 const struct dwarf_debug_section *debug_sections,
3304 asection *section,
3305 bfd_vma offset,
3306 asymbol *symbol,
3307 asymbol **symbols,
3308 const char **filename_ptr,
3309 const char **functionname_ptr,
3310 unsigned int *linenumber_ptr,
3311 unsigned int addr_size,
3312 void **pinfo)
3313 {
3314 /* Read each compilation unit from the section .debug_info, and check
3315 to see if it contains the address we are searching for. If yes,
3316 lookup the address, and return the line number info. If no, go
3317 on to the next compilation unit.
3318
3319 We keep a list of all the previously read compilation units, and
3320 a pointer to the next un-read compilation unit. Check the
3321 previously read units before reading more. */
3322 struct dwarf2_debug *stash;
3323 /* What address are we looking for? */
3324 bfd_vma addr;
3325 struct comp_unit* each;
3326 bfd_vma found = FALSE;
3327 bfd_boolean do_line;
3328
3329 *filename_ptr = NULL;
3330 if (functionname_ptr != NULL)
3331 *functionname_ptr = NULL;
3332 *linenumber_ptr = 0;
3333
3334 if (! _bfd_dwarf2_slurp_debug_info (abfd, NULL,
3335 debug_sections, symbols, pinfo))
3336 return FALSE;
3337
3338 stash = (struct dwarf2_debug *) *pinfo;
3339
3340 /* In a relocatable file, 2 functions may have the same address.
3341 We change the section vma so that they won't overlap. */
3342 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
3343 {
3344 if (! place_sections (abfd, stash))
3345 return FALSE;
3346 }
3347
3348 do_line = (section == NULL
3349 && offset == 0
3350 && functionname_ptr == NULL
3351 && symbol != NULL);
3352 if (do_line)
3353 {
3354 addr = symbol->value;
3355 section = bfd_get_section (symbol);
3356 }
3357 else if (section != NULL
3358 && functionname_ptr != NULL
3359 && symbol == NULL)
3360 addr = offset;
3361 else
3362 abort ();
3363
3364 if (section->output_section)
3365 addr += section->output_section->vma + section->output_offset;
3366 else
3367 addr += section->vma;
3368
3369 /* A null info_ptr indicates that there is no dwarf2 info
3370 (or that an error occured while setting up the stash). */
3371 if (! stash->info_ptr)
3372 return FALSE;
3373
3374 stash->inliner_chain = NULL;
3375
3376 /* Check the previously read comp. units first. */
3377 if (do_line)
3378 {
3379 /* The info hash tables use quite a bit of memory. We may not want to
3380 always use them. We use some heuristics to decide if and when to
3381 turn it on. */
3382 if (stash->info_hash_status == STASH_INFO_HASH_OFF)
3383 stash_maybe_enable_info_hash_tables (abfd, stash);
3384
3385 /* Keep info hash table up to date if they are available. Note that we
3386 may disable the hash tables if there is any error duing update. */
3387 if (stash->info_hash_status == STASH_INFO_HASH_ON)
3388 stash_maybe_update_info_hash_tables (stash);
3389
3390 if (stash->info_hash_status == STASH_INFO_HASH_ON)
3391 {
3392 found = stash_find_line_fast (stash, symbol, addr, filename_ptr,
3393 linenumber_ptr);
3394 if (found)
3395 goto done;
3396 }
3397 else
3398 {
3399 /* Check the previously read comp. units first. */
3400 for (each = stash->all_comp_units; each; each = each->next_unit)
3401 if ((symbol->flags & BSF_FUNCTION) == 0
3402 || each->arange.high == 0
3403 || comp_unit_contains_address (each, addr))
3404 {
3405 found = comp_unit_find_line (each, symbol, addr, filename_ptr,
3406 linenumber_ptr, stash);
3407 if (found)
3408 goto done;
3409 }
3410 }
3411 }
3412 else
3413 {
3414 for (each = stash->all_comp_units; each; each = each->next_unit)
3415 {
3416 found = ((each->arange.high == 0
3417 || comp_unit_contains_address (each, addr))
3418 && comp_unit_find_nearest_line (each, addr,
3419 filename_ptr,
3420 functionname_ptr,
3421 linenumber_ptr,
3422 stash));
3423 if (found)
3424 goto done;
3425 }
3426 }
3427
3428 /* The DWARF2 spec says that the initial length field, and the
3429 offset of the abbreviation table, should both be 4-byte values.
3430 However, some compilers do things differently. */
3431 if (addr_size == 0)
3432 addr_size = 4;
3433 BFD_ASSERT (addr_size == 4 || addr_size == 8);
3434
3435 /* Read each remaining comp. units checking each as they are read. */
3436 while (stash->info_ptr < stash->info_ptr_end)
3437 {
3438 bfd_vma length;
3439 unsigned int offset_size = addr_size;
3440 bfd_byte *info_ptr_unit = stash->info_ptr;
3441
3442 length = read_4_bytes (stash->bfd_ptr, stash->info_ptr);
3443 /* A 0xffffff length is the DWARF3 way of indicating
3444 we use 64-bit offsets, instead of 32-bit offsets. */
3445 if (length == 0xffffffff)
3446 {
3447 offset_size = 8;
3448 length = read_8_bytes (stash->bfd_ptr, stash->info_ptr + 4);
3449 stash->info_ptr += 12;
3450 }
3451 /* A zero length is the IRIX way of indicating 64-bit offsets,
3452 mostly because the 64-bit length will generally fit in 32
3453 bits, and the endianness helps. */
3454 else if (length == 0)
3455 {
3456 offset_size = 8;
3457 length = read_4_bytes (stash->bfd_ptr, stash->info_ptr + 4);
3458 stash->info_ptr += 8;
3459 }
3460 /* In the absence of the hints above, we assume 32-bit DWARF2
3461 offsets even for targets with 64-bit addresses, because:
3462 a) most of the time these targets will not have generated
3463 more than 2Gb of debug info and so will not need 64-bit
3464 offsets,
3465 and
3466 b) if they do use 64-bit offsets but they are not using
3467 the size hints that are tested for above then they are
3468 not conforming to the DWARF3 standard anyway. */
3469 else if (addr_size == 8)
3470 {
3471 offset_size = 4;
3472 stash->info_ptr += 4;
3473 }
3474 else
3475 stash->info_ptr += 4;
3476
3477 if (length > 0)
3478 {
3479 each = parse_comp_unit (stash, length, info_ptr_unit,
3480 offset_size);
3481 if (!each)
3482 /* The dwarf information is damaged, don't trust it any
3483 more. */
3484 break;
3485 stash->info_ptr += length;
3486
3487 if (stash->all_comp_units)
3488 stash->all_comp_units->prev_unit = each;
3489 else
3490 stash->last_comp_unit = each;
3491
3492 each->next_unit = stash->all_comp_units;
3493 stash->all_comp_units = each;
3494
3495 /* DW_AT_low_pc and DW_AT_high_pc are optional for
3496 compilation units. If we don't have them (i.e.,
3497 unit->high == 0), we need to consult the line info table
3498 to see if a compilation unit contains the given
3499 address. */
3500 if (do_line)
3501 found = (((symbol->flags & BSF_FUNCTION) == 0
3502 || each->arange.high == 0
3503 || comp_unit_contains_address (each, addr))
3504 && comp_unit_find_line (each, symbol, addr,
3505 filename_ptr,
3506 linenumber_ptr,
3507 stash));
3508 else
3509 found = ((each->arange.high == 0
3510 || comp_unit_contains_address (each, addr))
3511 && comp_unit_find_nearest_line (each, addr,
3512 filename_ptr,
3513 functionname_ptr,
3514 linenumber_ptr,
3515 stash));
3516
3517 if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
3518 == stash->sec->size)
3519 {
3520 stash->sec = find_debug_info (stash->bfd_ptr, debug_sections,
3521 stash->sec);
3522 stash->sec_info_ptr = stash->info_ptr;
3523 }
3524
3525 if (found)
3526 goto done;
3527 }
3528 }
3529
3530 done:
3531 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
3532 unset_sections (stash);
3533
3534 return found;
3535 }
3536
3537 /* The DWARF2 version of find_nearest_line.
3538 Return TRUE if the line is found without error. */
3539
3540 bfd_boolean
3541 _bfd_dwarf2_find_nearest_line (bfd *abfd,
3542 const struct dwarf_debug_section *debug_sections,
3543 asection *section,
3544 asymbol **symbols,
3545 bfd_vma offset,
3546 const char **filename_ptr,
3547 const char **functionname_ptr,
3548 unsigned int *linenumber_ptr,
3549 unsigned int addr_size,
3550 void **pinfo)
3551 {
3552 return find_line (abfd, debug_sections, section, offset, NULL, symbols,
3553 filename_ptr, functionname_ptr, linenumber_ptr, addr_size,
3554 pinfo);
3555 }
3556
3557 /* The DWARF2 version of find_line.
3558 Return TRUE if the line is found without error. */
3559
3560 bfd_boolean
3561 _bfd_dwarf2_find_line (bfd *abfd,
3562 asymbol **symbols,
3563 asymbol *symbol,
3564 const char **filename_ptr,
3565 unsigned int *linenumber_ptr,
3566 unsigned int addr_size,
3567 void **pinfo)
3568 {
3569 return find_line (abfd, dwarf_debug_sections, NULL, 0, symbol, symbols,
3570 filename_ptr, NULL, linenumber_ptr, addr_size, pinfo);
3571 }
3572
3573 bfd_boolean
3574 _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
3575 const char **filename_ptr,
3576 const char **functionname_ptr,
3577 unsigned int *linenumber_ptr,
3578 void **pinfo)
3579 {
3580 struct dwarf2_debug *stash;
3581
3582 stash = (struct dwarf2_debug *) *pinfo;
3583 if (stash)
3584 {
3585 struct funcinfo *func = stash->inliner_chain;
3586
3587 if (func && func->caller_func)
3588 {
3589 *filename_ptr = func->caller_file;
3590 *functionname_ptr = func->caller_func->name;
3591 *linenumber_ptr = func->caller_line;
3592 stash->inliner_chain = func->caller_func;
3593 return TRUE;
3594 }
3595 }
3596
3597 return FALSE;
3598 }
3599
3600 void
3601 _bfd_dwarf2_cleanup_debug_info (bfd *abfd, void **pinfo)
3602 {
3603 struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;;
3604 struct comp_unit *each;
3605
3606 if (abfd == NULL || stash == NULL)
3607 return;
3608
3609 for (each = stash->all_comp_units; each; each = each->next_unit)
3610 {
3611 struct abbrev_info **abbrevs = each->abbrevs;
3612 struct funcinfo *function_table = each->function_table;
3613 struct varinfo *variable_table = each->variable_table;
3614 size_t i;
3615
3616 for (i = 0; i < ABBREV_HASH_SIZE; i++)
3617 {
3618 struct abbrev_info *abbrev = abbrevs[i];
3619
3620 while (abbrev)
3621 {
3622 free (abbrev->attrs);
3623 abbrev = abbrev->next;
3624 }
3625 }
3626
3627 if (each->line_table)
3628 {
3629 free (each->line_table->dirs);
3630 free (each->line_table->files);
3631 }
3632
3633 while (function_table)
3634 {
3635 if (function_table->file)
3636 {
3637 free (function_table->file);
3638 function_table->file = NULL;
3639 }
3640
3641 if (function_table->caller_file)
3642 {
3643 free (function_table->caller_file);
3644 function_table->caller_file = NULL;
3645 }
3646 function_table = function_table->prev_func;
3647 }
3648
3649 while (variable_table)
3650 {
3651 if (variable_table->file)
3652 {
3653 free (variable_table->file);
3654 variable_table->file = NULL;
3655 }
3656
3657 variable_table = variable_table->prev_var;
3658 }
3659 }
3660
3661 if (stash->dwarf_abbrev_buffer)
3662 free (stash->dwarf_abbrev_buffer);
3663 if (stash->dwarf_line_buffer)
3664 free (stash->dwarf_line_buffer);
3665 if (stash->dwarf_str_buffer)
3666 free (stash->dwarf_str_buffer);
3667 if (stash->dwarf_ranges_buffer)
3668 free (stash->dwarf_ranges_buffer);
3669 if (stash->info_ptr_memory)
3670 free (stash->info_ptr_memory);
3671 }