* dwarf2.c (read_abbrevs): If bfd_realloc fails, free currently allocated memory
[deliverable/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 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 2 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, MA 02110-1301, USA. */
31
32 #include "bfd.h"
33 #include "sysdep.h"
34 #include "libiberty.h"
35 #include "libbfd.h"
36 #include "elf-bfd.h"
37 #include "elf/dwarf2.h"
38
39 /* The data in the .debug_line statement prologue looks like this. */
40
41 struct line_head
42 {
43 bfd_vma total_length;
44 unsigned short version;
45 bfd_vma prologue_length;
46 unsigned char minimum_instruction_length;
47 unsigned char default_is_stmt;
48 int line_base;
49 unsigned char line_range;
50 unsigned char opcode_base;
51 unsigned char *standard_opcode_lengths;
52 };
53
54 /* Attributes have a name and a value. */
55
56 struct attribute
57 {
58 enum dwarf_attribute name;
59 enum dwarf_form form;
60 union
61 {
62 char *str;
63 struct dwarf_block *blk;
64 bfd_uint64_t val;
65 bfd_int64_t sval;
66 }
67 u;
68 };
69
70 /* Blocks are a bunch of untyped bytes. */
71 struct dwarf_block
72 {
73 unsigned int size;
74 bfd_byte *data;
75 };
76
77 struct dwarf2_debug
78 {
79 /* A list of all previously read comp_units. */
80 struct comp_unit *all_comp_units;
81
82 /* The next unread compilation unit within the .debug_info section.
83 Zero indicates that the .debug_info section has not been loaded
84 into a buffer yet. */
85 bfd_byte *info_ptr;
86
87 /* Pointer to the end of the .debug_info section memory buffer. */
88 bfd_byte *info_ptr_end;
89
90 /* Pointer to the section and address of the beginning of the
91 section. */
92 asection *sec;
93 bfd_byte *sec_info_ptr;
94
95 /* Pointer to the symbol table. */
96 asymbol **syms;
97
98 /* Pointer to the .debug_abbrev section loaded into memory. */
99 bfd_byte *dwarf_abbrev_buffer;
100
101 /* Length of the loaded .debug_abbrev section. */
102 unsigned long dwarf_abbrev_size;
103
104 /* Buffer for decode_line_info. */
105 bfd_byte *dwarf_line_buffer;
106
107 /* Length of the loaded .debug_line section. */
108 unsigned long dwarf_line_size;
109
110 /* Pointer to the .debug_str section loaded into memory. */
111 bfd_byte *dwarf_str_buffer;
112
113 /* Length of the loaded .debug_str section. */
114 unsigned long dwarf_str_size;
115
116 /* Pointer to the .debug_ranges section loaded into memory. */
117 bfd_byte *dwarf_ranges_buffer;
118
119 /* Length of the loaded .debug_ranges section. */
120 unsigned long dwarf_ranges_size;
121 };
122
123 struct arange
124 {
125 struct arange *next;
126 bfd_vma low;
127 bfd_vma high;
128 };
129
130 /* A minimal decoding of DWARF2 compilation units. We only decode
131 what's needed to get to the line number information. */
132
133 struct comp_unit
134 {
135 /* Chain the previously read compilation units. */
136 struct comp_unit *next_unit;
137
138 /* Keep the bdf convenient (for memory allocation). */
139 bfd *abfd;
140
141 /* The lowest and highest addresses contained in this compilation
142 unit as specified in the compilation unit header. */
143 struct arange arange;
144
145 /* The DW_AT_name attribute (for error messages). */
146 char *name;
147
148 /* The abbrev hash table. */
149 struct abbrev_info **abbrevs;
150
151 /* Note that an error was found by comp_unit_find_nearest_line. */
152 int error;
153
154 /* The DW_AT_comp_dir attribute. */
155 char *comp_dir;
156
157 /* TRUE if there is a line number table associated with this comp. unit. */
158 int stmtlist;
159
160 /* Pointer to the current comp_unit so that we can find a given entry
161 by its reference. */
162 bfd_byte *info_ptr_unit;
163
164 /* The offset into .debug_line of the line number table. */
165 unsigned long line_offset;
166
167 /* Pointer to the first child die for the comp unit. */
168 bfd_byte *first_child_die_ptr;
169
170 /* The end of the comp unit. */
171 bfd_byte *end_ptr;
172
173 /* The decoded line number, NULL if not yet decoded. */
174 struct line_info_table *line_table;
175
176 /* A list of the functions found in this comp. unit. */
177 struct funcinfo *function_table;
178
179 /* Pointer to dwarf2_debug structure. */
180 struct dwarf2_debug *stash;
181
182 /* Address size for this unit - from unit header. */
183 unsigned char addr_size;
184
185 /* Offset size for this unit - from unit header. */
186 unsigned char offset_size;
187
188 /* Base address for this unit - from DW_AT_low_pc attribute of
189 DW_TAG_compile_unit DIE */
190 bfd_vma base_address;
191 };
192
193 /* This data structure holds the information of an abbrev. */
194 struct abbrev_info
195 {
196 unsigned int number; /* Number identifying abbrev. */
197 enum dwarf_tag tag; /* DWARF tag. */
198 int has_children; /* Boolean. */
199 unsigned int num_attrs; /* Number of attributes. */
200 struct attr_abbrev *attrs; /* An array of attribute descriptions. */
201 struct abbrev_info *next; /* Next in chain. */
202 };
203
204 struct attr_abbrev
205 {
206 enum dwarf_attribute name;
207 enum dwarf_form form;
208 };
209
210 #ifndef ABBREV_HASH_SIZE
211 #define ABBREV_HASH_SIZE 121
212 #endif
213 #ifndef ATTR_ALLOC_CHUNK
214 #define ATTR_ALLOC_CHUNK 4
215 #endif
216
217 /* VERBATIM
218 The following function up to the END VERBATIM mark are
219 copied directly from dwarf2read.c. */
220
221 /* Read dwarf information from a buffer. */
222
223 static unsigned int
224 read_1_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
225 {
226 return bfd_get_8 (abfd, buf);
227 }
228
229 static int
230 read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
231 {
232 return bfd_get_signed_8 (abfd, buf);
233 }
234
235 static unsigned int
236 read_2_bytes (bfd *abfd, bfd_byte *buf)
237 {
238 return bfd_get_16 (abfd, buf);
239 }
240
241 static unsigned int
242 read_4_bytes (bfd *abfd, bfd_byte *buf)
243 {
244 return bfd_get_32 (abfd, buf);
245 }
246
247 static bfd_uint64_t
248 read_8_bytes (bfd *abfd, bfd_byte *buf)
249 {
250 return bfd_get_64 (abfd, buf);
251 }
252
253 static bfd_byte *
254 read_n_bytes (bfd *abfd ATTRIBUTE_UNUSED,
255 bfd_byte *buf,
256 unsigned int size ATTRIBUTE_UNUSED)
257 {
258 /* If the size of a host char is 8 bits, we can return a pointer
259 to the buffer, otherwise we have to copy the data to a buffer
260 allocated on the temporary obstack. */
261 return buf;
262 }
263
264 static char *
265 read_string (bfd *abfd ATTRIBUTE_UNUSED,
266 bfd_byte *buf,
267 unsigned int *bytes_read_ptr)
268 {
269 /* Return a pointer to the embedded string. */
270 char *str = (char *) buf;
271 if (*str == '\0')
272 {
273 *bytes_read_ptr = 1;
274 return NULL;
275 }
276
277 *bytes_read_ptr = strlen (str) + 1;
278 return str;
279 }
280
281 static char *
282 read_indirect_string (struct comp_unit* unit,
283 bfd_byte *buf,
284 unsigned int *bytes_read_ptr)
285 {
286 bfd_uint64_t offset;
287 struct dwarf2_debug *stash = unit->stash;
288 char *str;
289
290 if (unit->offset_size == 4)
291 offset = read_4_bytes (unit->abfd, buf);
292 else
293 offset = read_8_bytes (unit->abfd, buf);
294 *bytes_read_ptr = unit->offset_size;
295
296 if (! stash->dwarf_str_buffer)
297 {
298 asection *msec;
299 bfd *abfd = unit->abfd;
300 bfd_size_type sz;
301
302 msec = bfd_get_section_by_name (abfd, ".debug_str");
303 if (! msec)
304 {
305 (*_bfd_error_handler)
306 (_("Dwarf Error: Can't find .debug_str section."));
307 bfd_set_error (bfd_error_bad_value);
308 return NULL;
309 }
310
311 sz = msec->rawsize ? msec->rawsize : msec->size;
312 stash->dwarf_str_size = sz;
313 stash->dwarf_str_buffer = bfd_alloc (abfd, sz);
314 if (! stash->dwarf_str_buffer)
315 return NULL;
316
317 if (! bfd_get_section_contents (abfd, msec, stash->dwarf_str_buffer,
318 0, sz))
319 return NULL;
320 }
321
322 if (offset >= stash->dwarf_str_size)
323 {
324 (*_bfd_error_handler) (_("Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."),
325 (unsigned long) offset, stash->dwarf_str_size);
326 bfd_set_error (bfd_error_bad_value);
327 return NULL;
328 }
329
330 str = (char *) stash->dwarf_str_buffer + offset;
331 if (*str == '\0')
332 return NULL;
333 return str;
334 }
335
336 /* END VERBATIM */
337
338 static bfd_uint64_t
339 read_address (struct comp_unit *unit, bfd_byte *buf)
340 {
341 switch (unit->addr_size)
342 {
343 case 8:
344 return bfd_get_64 (unit->abfd, buf);
345 case 4:
346 return bfd_get_32 (unit->abfd, buf);
347 case 2:
348 return bfd_get_16 (unit->abfd, buf);
349 default:
350 abort ();
351 }
352 }
353
354 /* Lookup an abbrev_info structure in the abbrev hash table. */
355
356 static struct abbrev_info *
357 lookup_abbrev (unsigned int number, struct abbrev_info **abbrevs)
358 {
359 unsigned int hash_number;
360 struct abbrev_info *abbrev;
361
362 hash_number = number % ABBREV_HASH_SIZE;
363 abbrev = abbrevs[hash_number];
364
365 while (abbrev)
366 {
367 if (abbrev->number == number)
368 return abbrev;
369 else
370 abbrev = abbrev->next;
371 }
372
373 return NULL;
374 }
375
376 /* In DWARF version 2, the description of the debugging information is
377 stored in a separate .debug_abbrev section. Before we read any
378 dies from a section we read in all abbreviations and install them
379 in a hash table. */
380
381 static struct abbrev_info**
382 read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash)
383 {
384 struct abbrev_info **abbrevs;
385 bfd_byte *abbrev_ptr;
386 struct abbrev_info *cur_abbrev;
387 unsigned int abbrev_number, bytes_read, abbrev_name;
388 unsigned int abbrev_form, hash_number;
389 bfd_size_type amt;
390
391 if (! stash->dwarf_abbrev_buffer)
392 {
393 asection *msec;
394
395 msec = bfd_get_section_by_name (abfd, ".debug_abbrev");
396 if (! msec)
397 {
398 (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_abbrev section."));
399 bfd_set_error (bfd_error_bad_value);
400 return 0;
401 }
402
403 stash->dwarf_abbrev_size = msec->size;
404 stash->dwarf_abbrev_buffer
405 = bfd_simple_get_relocated_section_contents (abfd, msec, NULL,
406 stash->syms);
407 if (! stash->dwarf_abbrev_buffer)
408 return 0;
409 }
410
411 if (offset >= stash->dwarf_abbrev_size)
412 {
413 (*_bfd_error_handler) (_("Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."),
414 (unsigned long) offset, stash->dwarf_abbrev_size);
415 bfd_set_error (bfd_error_bad_value);
416 return 0;
417 }
418
419 amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
420 abbrevs = bfd_zalloc (abfd, amt);
421
422 abbrev_ptr = stash->dwarf_abbrev_buffer + offset;
423 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
424 abbrev_ptr += bytes_read;
425
426 /* Loop until we reach an abbrev number of 0. */
427 while (abbrev_number)
428 {
429 amt = sizeof (struct abbrev_info);
430 cur_abbrev = bfd_zalloc (abfd, amt);
431
432 /* Read in abbrev header. */
433 cur_abbrev->number = abbrev_number;
434 cur_abbrev->tag = (enum dwarf_tag)
435 read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
436 abbrev_ptr += bytes_read;
437 cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
438 abbrev_ptr += 1;
439
440 /* Now read in declarations. */
441 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
442 abbrev_ptr += bytes_read;
443 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
444 abbrev_ptr += bytes_read;
445
446 while (abbrev_name)
447 {
448 if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
449 {
450 struct attr_abbrev *tmp;
451
452 amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
453 amt *= sizeof (struct attr_abbrev);
454 tmp = bfd_realloc (cur_abbrev->attrs, amt);
455 if (tmp == NULL)
456 {
457 size_t i;
458
459 for (i = 0; i < ABBREV_HASH_SIZE; i++)
460 {
461 struct abbrev_info *abbrev = abbrevs[i];
462
463 while (abbrev)
464 {
465 free (abbrev->attrs);
466 abbrev = abbrev->next;
467 }
468 }
469 return NULL;
470 }
471 cur_abbrev->attrs = tmp;
472 }
473
474 cur_abbrev->attrs[cur_abbrev->num_attrs].name
475 = (enum dwarf_attribute) abbrev_name;
476 cur_abbrev->attrs[cur_abbrev->num_attrs++].form
477 = (enum dwarf_form) abbrev_form;
478 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
479 abbrev_ptr += bytes_read;
480 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
481 abbrev_ptr += bytes_read;
482 }
483
484 hash_number = abbrev_number % ABBREV_HASH_SIZE;
485 cur_abbrev->next = abbrevs[hash_number];
486 abbrevs[hash_number] = cur_abbrev;
487
488 /* Get next abbreviation.
489 Under Irix6 the abbreviations for a compilation unit are not
490 always properly terminated with an abbrev number of 0.
491 Exit loop if we encounter an abbreviation which we have
492 already read (which means we are about to read the abbreviations
493 for the next compile unit) or if the end of the abbreviation
494 table is reached. */
495 if ((unsigned int) (abbrev_ptr - stash->dwarf_abbrev_buffer)
496 >= stash->dwarf_abbrev_size)
497 break;
498 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
499 abbrev_ptr += bytes_read;
500 if (lookup_abbrev (abbrev_number,abbrevs) != NULL)
501 break;
502 }
503
504 return abbrevs;
505 }
506
507 /* Read an attribute value described by an attribute form. */
508
509 static bfd_byte *
510 read_attribute_value (struct attribute *attr,
511 unsigned form,
512 struct comp_unit *unit,
513 bfd_byte *info_ptr)
514 {
515 bfd *abfd = unit->abfd;
516 unsigned int bytes_read;
517 struct dwarf_block *blk;
518 bfd_size_type amt;
519
520 attr->form = (enum dwarf_form) form;
521
522 switch (form)
523 {
524 case DW_FORM_addr:
525 /* FIXME: DWARF3 draft says DW_FORM_ref_addr is offset_size. */
526 case DW_FORM_ref_addr:
527 attr->u.val = read_address (unit, info_ptr);
528 info_ptr += unit->addr_size;
529 break;
530 case DW_FORM_block2:
531 amt = sizeof (struct dwarf_block);
532 blk = bfd_alloc (abfd, amt);
533 blk->size = read_2_bytes (abfd, info_ptr);
534 info_ptr += 2;
535 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
536 info_ptr += blk->size;
537 attr->u.blk = blk;
538 break;
539 case DW_FORM_block4:
540 amt = sizeof (struct dwarf_block);
541 blk = bfd_alloc (abfd, amt);
542 blk->size = read_4_bytes (abfd, info_ptr);
543 info_ptr += 4;
544 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
545 info_ptr += blk->size;
546 attr->u.blk = blk;
547 break;
548 case DW_FORM_data2:
549 attr->u.val = read_2_bytes (abfd, info_ptr);
550 info_ptr += 2;
551 break;
552 case DW_FORM_data4:
553 attr->u.val = read_4_bytes (abfd, info_ptr);
554 info_ptr += 4;
555 break;
556 case DW_FORM_data8:
557 attr->u.val = read_8_bytes (abfd, info_ptr);
558 info_ptr += 8;
559 break;
560 case DW_FORM_string:
561 attr->u.str = read_string (abfd, info_ptr, &bytes_read);
562 info_ptr += bytes_read;
563 break;
564 case DW_FORM_strp:
565 attr->u.str = read_indirect_string (unit, info_ptr, &bytes_read);
566 info_ptr += bytes_read;
567 break;
568 case DW_FORM_block:
569 amt = sizeof (struct dwarf_block);
570 blk = bfd_alloc (abfd, amt);
571 blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
572 info_ptr += bytes_read;
573 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
574 info_ptr += blk->size;
575 attr->u.blk = blk;
576 break;
577 case DW_FORM_block1:
578 amt = sizeof (struct dwarf_block);
579 blk = bfd_alloc (abfd, amt);
580 blk->size = read_1_byte (abfd, info_ptr);
581 info_ptr += 1;
582 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
583 info_ptr += blk->size;
584 attr->u.blk = blk;
585 break;
586 case DW_FORM_data1:
587 attr->u.val = read_1_byte (abfd, info_ptr);
588 info_ptr += 1;
589 break;
590 case DW_FORM_flag:
591 attr->u.val = read_1_byte (abfd, info_ptr);
592 info_ptr += 1;
593 break;
594 case DW_FORM_sdata:
595 attr->u.sval = read_signed_leb128 (abfd, info_ptr, &bytes_read);
596 info_ptr += bytes_read;
597 break;
598 case DW_FORM_udata:
599 attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
600 info_ptr += bytes_read;
601 break;
602 case DW_FORM_ref1:
603 attr->u.val = read_1_byte (abfd, info_ptr);
604 info_ptr += 1;
605 break;
606 case DW_FORM_ref2:
607 attr->u.val = read_2_bytes (abfd, info_ptr);
608 info_ptr += 2;
609 break;
610 case DW_FORM_ref4:
611 attr->u.val = read_4_bytes (abfd, info_ptr);
612 info_ptr += 4;
613 break;
614 case DW_FORM_ref8:
615 attr->u.val = read_8_bytes (abfd, info_ptr);
616 info_ptr += 8;
617 break;
618 case DW_FORM_ref_udata:
619 attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
620 info_ptr += bytes_read;
621 break;
622 case DW_FORM_indirect:
623 form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
624 info_ptr += bytes_read;
625 info_ptr = read_attribute_value (attr, form, unit, info_ptr);
626 break;
627 default:
628 (*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
629 form);
630 bfd_set_error (bfd_error_bad_value);
631 }
632 return info_ptr;
633 }
634
635 /* Read an attribute described by an abbreviated attribute. */
636
637 static bfd_byte *
638 read_attribute (struct attribute *attr,
639 struct attr_abbrev *abbrev,
640 struct comp_unit *unit,
641 bfd_byte *info_ptr)
642 {
643 attr->name = abbrev->name;
644 info_ptr = read_attribute_value (attr, abbrev->form, unit, info_ptr);
645 return info_ptr;
646 }
647
648 /* Source line information table routines. */
649
650 #define FILE_ALLOC_CHUNK 5
651 #define DIR_ALLOC_CHUNK 5
652
653 struct line_info
654 {
655 struct line_info* prev_line;
656 bfd_vma address;
657 char *filename;
658 unsigned int line;
659 unsigned int column;
660 int end_sequence; /* End of (sequential) code sequence. */
661 };
662
663 struct fileinfo
664 {
665 char *name;
666 unsigned int dir;
667 unsigned int time;
668 unsigned int size;
669 };
670
671 struct line_info_table
672 {
673 bfd* abfd;
674 unsigned int num_files;
675 unsigned int num_dirs;
676 char *comp_dir;
677 char **dirs;
678 struct fileinfo* files;
679 struct line_info* last_line; /* largest VMA */
680 struct line_info* lcl_head; /* local head; used in 'add_line_info' */
681 };
682
683 struct funcinfo
684 {
685 struct funcinfo *prev_func;
686 char *name;
687 struct arange arange;
688 };
689
690 /* Adds a new entry to the line_info list in the line_info_table, ensuring
691 that the list is sorted. Note that the line_info list is sorted from
692 highest to lowest VMA (with possible duplicates); that is,
693 line_info->prev_line always accesses an equal or smaller VMA. */
694
695 static void
696 add_line_info (struct line_info_table *table,
697 bfd_vma address,
698 char *filename,
699 unsigned int line,
700 unsigned int column,
701 int end_sequence)
702 {
703 bfd_size_type amt = sizeof (struct line_info);
704 struct line_info* info = bfd_alloc (table->abfd, amt);
705
706 /* Find the correct location for 'info'. Normally we will receive
707 new line_info data 1) in order and 2) with increasing VMAs.
708 However some compilers break the rules (cf. decode_line_info) and
709 so we include some heuristics for quickly finding the correct
710 location for 'info'. In particular, these heuristics optimize for
711 the common case in which the VMA sequence that we receive is a
712 list of locally sorted VMAs such as
713 p...z a...j (where a < j < p < z)
714
715 Note: table->lcl_head is used to head an *actual* or *possible*
716 sequence within the list (such as a...j) that is not directly
717 headed by table->last_line
718
719 Note: we may receive duplicate entries from 'decode_line_info'. */
720
721 while (1)
722 if (!table->last_line
723 || address >= table->last_line->address)
724 {
725 /* Normal case: add 'info' to the beginning of the list */
726 info->prev_line = table->last_line;
727 table->last_line = info;
728
729 /* lcl_head: initialize to head a *possible* sequence at the end. */
730 if (!table->lcl_head)
731 table->lcl_head = info;
732 break;
733 }
734 else if (!table->lcl_head->prev_line
735 && table->lcl_head->address > address)
736 {
737 /* Abnormal but easy: lcl_head is 1) at the *end* of the line
738 list and 2) the head of 'info'. */
739 info->prev_line = NULL;
740 table->lcl_head->prev_line = info;
741 break;
742 }
743 else if (table->lcl_head->prev_line
744 && table->lcl_head->address > address
745 && address >= table->lcl_head->prev_line->address)
746 {
747 /* Abnormal but easy: lcl_head is 1) in the *middle* of the line
748 list and 2) the head of 'info'. */
749 info->prev_line = table->lcl_head->prev_line;
750 table->lcl_head->prev_line = info;
751 break;
752 }
753 else
754 {
755 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head' are valid
756 heads for 'info'. Reset 'lcl_head' and repeat. */
757 struct line_info* li2 = table->last_line; /* always non-NULL */
758 struct line_info* li1 = li2->prev_line;
759
760 while (li1)
761 {
762 if (li2->address > address && address >= li1->address)
763 break;
764
765 li2 = li1; /* always non-NULL */
766 li1 = li1->prev_line;
767 }
768 table->lcl_head = li2;
769 }
770
771 /* Set member data of 'info'. */
772 info->address = address;
773 info->line = line;
774 info->column = column;
775 info->end_sequence = end_sequence;
776
777 if (filename && filename[0])
778 {
779 info->filename = bfd_alloc (table->abfd, strlen (filename) + 1);
780 if (info->filename)
781 strcpy (info->filename, filename);
782 }
783 else
784 info->filename = NULL;
785 }
786
787 /* Extract a fully qualified filename from a line info table.
788 The returned string has been malloc'ed and it is the caller's
789 responsibility to free it. */
790
791 static char *
792 concat_filename (struct line_info_table *table, unsigned int file)
793 {
794 char *filename;
795
796 if (file - 1 >= table->num_files)
797 {
798 (*_bfd_error_handler)
799 (_("Dwarf Error: mangled line number section (bad file number)."));
800 return strdup ("<unknown>");
801 }
802
803 filename = table->files[file - 1].name;
804
805 if (! IS_ABSOLUTE_PATH (filename))
806 {
807 char *dirname = (table->files[file - 1].dir
808 ? table->dirs[table->files[file - 1].dir - 1]
809 : table->comp_dir);
810
811 /* Not all tools set DW_AT_comp_dir, so dirname may be unknown.
812 The best we can do is return the filename part. */
813 if (dirname != NULL)
814 {
815 unsigned int len = strlen (dirname) + strlen (filename) + 2;
816 char * name;
817
818 name = bfd_malloc (len);
819 if (name)
820 sprintf (name, "%s/%s", dirname, filename);
821 return name;
822 }
823 }
824
825 return strdup (filename);
826 }
827
828 static void
829 arange_add (bfd *abfd, struct arange *first_arange, bfd_vma low_pc, bfd_vma high_pc)
830 {
831 struct arange *arange;
832
833 /* If the first arange is empty, use it. */
834 if (first_arange->high == 0)
835 {
836 first_arange->low = low_pc;
837 first_arange->high = high_pc;
838 return;
839 }
840
841 /* Next see if we can cheaply extend an existing range. */
842 arange = first_arange;
843 do
844 {
845 if (low_pc == arange->high)
846 {
847 arange->high = high_pc;
848 return;
849 }
850 if (high_pc == arange->low)
851 {
852 arange->low = low_pc;
853 return;
854 }
855 arange = arange->next;
856 }
857 while (arange);
858
859 /* Need to allocate a new arange and insert it into the arange list.
860 Order isn't significant, so just insert after the first arange. */
861 arange = bfd_zalloc (abfd, sizeof (*arange));
862 arange->low = low_pc;
863 arange->high = high_pc;
864 arange->next = first_arange->next;
865 first_arange->next = arange;
866 }
867
868 /* Decode the line number information for UNIT. */
869
870 static struct line_info_table*
871 decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
872 {
873 bfd *abfd = unit->abfd;
874 struct line_info_table* table;
875 bfd_byte *line_ptr;
876 bfd_byte *line_end;
877 struct line_head lh;
878 unsigned int i, bytes_read, offset_size;
879 char *cur_file, *cur_dir;
880 unsigned char op_code, extended_op, adj_opcode;
881 bfd_size_type amt;
882
883 if (! stash->dwarf_line_buffer)
884 {
885 asection *msec;
886
887 msec = bfd_get_section_by_name (abfd, ".debug_line");
888 if (! msec)
889 {
890 (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_line section."));
891 bfd_set_error (bfd_error_bad_value);
892 return 0;
893 }
894
895 stash->dwarf_line_size = msec->size;
896 stash->dwarf_line_buffer
897 = bfd_simple_get_relocated_section_contents (abfd, msec, NULL,
898 stash->syms);
899 if (! stash->dwarf_line_buffer)
900 return 0;
901 }
902
903 /* It is possible to get a bad value for the line_offset. Validate
904 it here so that we won't get a segfault below. */
905 if (unit->line_offset >= stash->dwarf_line_size)
906 {
907 (*_bfd_error_handler) (_("Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."),
908 unit->line_offset, stash->dwarf_line_size);
909 bfd_set_error (bfd_error_bad_value);
910 return 0;
911 }
912
913 amt = sizeof (struct line_info_table);
914 table = bfd_alloc (abfd, amt);
915 table->abfd = abfd;
916 table->comp_dir = unit->comp_dir;
917
918 table->num_files = 0;
919 table->files = NULL;
920
921 table->num_dirs = 0;
922 table->dirs = NULL;
923
924 table->files = NULL;
925 table->last_line = NULL;
926 table->lcl_head = NULL;
927
928 line_ptr = stash->dwarf_line_buffer + unit->line_offset;
929
930 /* Read in the prologue. */
931 lh.total_length = read_4_bytes (abfd, line_ptr);
932 line_ptr += 4;
933 offset_size = 4;
934 if (lh.total_length == 0xffffffff)
935 {
936 lh.total_length = read_8_bytes (abfd, line_ptr);
937 line_ptr += 8;
938 offset_size = 8;
939 }
940 else if (lh.total_length == 0 && unit->addr_size == 8)
941 {
942 /* Handle (non-standard) 64-bit DWARF2 formats. */
943 lh.total_length = read_4_bytes (abfd, line_ptr);
944 line_ptr += 4;
945 offset_size = 8;
946 }
947 line_end = line_ptr + lh.total_length;
948 lh.version = read_2_bytes (abfd, line_ptr);
949 line_ptr += 2;
950 if (offset_size == 4)
951 lh.prologue_length = read_4_bytes (abfd, line_ptr);
952 else
953 lh.prologue_length = read_8_bytes (abfd, line_ptr);
954 line_ptr += offset_size;
955 lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
956 line_ptr += 1;
957 lh.default_is_stmt = read_1_byte (abfd, line_ptr);
958 line_ptr += 1;
959 lh.line_base = read_1_signed_byte (abfd, line_ptr);
960 line_ptr += 1;
961 lh.line_range = read_1_byte (abfd, line_ptr);
962 line_ptr += 1;
963 lh.opcode_base = read_1_byte (abfd, line_ptr);
964 line_ptr += 1;
965 amt = lh.opcode_base * sizeof (unsigned char);
966 lh.standard_opcode_lengths = bfd_alloc (abfd, amt);
967
968 lh.standard_opcode_lengths[0] = 1;
969
970 for (i = 1; i < lh.opcode_base; ++i)
971 {
972 lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
973 line_ptr += 1;
974 }
975
976 /* Read directory table. */
977 while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
978 {
979 line_ptr += bytes_read;
980
981 if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
982 {
983 char **tmp;
984
985 amt = table->num_dirs + DIR_ALLOC_CHUNK;
986 amt *= sizeof (char *);
987
988 tmp = bfd_realloc (table->dirs, amt);
989 if (tmp == NULL)
990 {
991 free (table->dirs);
992 return NULL;
993 }
994 table->dirs = tmp;
995 }
996
997 table->dirs[table->num_dirs++] = cur_dir;
998 }
999
1000 line_ptr += bytes_read;
1001
1002 /* Read file name table. */
1003 while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1004 {
1005 line_ptr += bytes_read;
1006
1007 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1008 {
1009 struct fileinfo *tmp;
1010
1011 amt = table->num_files + FILE_ALLOC_CHUNK;
1012 amt *= sizeof (struct fileinfo);
1013
1014 tmp = bfd_realloc (table->files, amt);
1015 if (tmp == NULL)
1016 {
1017 free (table->files);
1018 free (table->dirs);
1019 return NULL;
1020 }
1021 table->files = tmp;
1022 }
1023
1024 table->files[table->num_files].name = cur_file;
1025 table->files[table->num_files].dir =
1026 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1027 line_ptr += bytes_read;
1028 table->files[table->num_files].time =
1029 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1030 line_ptr += bytes_read;
1031 table->files[table->num_files].size =
1032 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1033 line_ptr += bytes_read;
1034 table->num_files++;
1035 }
1036
1037 line_ptr += bytes_read;
1038
1039 /* Read the statement sequences until there's nothing left. */
1040 while (line_ptr < line_end)
1041 {
1042 /* State machine registers. */
1043 bfd_vma address = 0;
1044 char * filename = table->num_files ? concat_filename (table, 1) : NULL;
1045 unsigned int line = 1;
1046 unsigned int column = 0;
1047 int is_stmt = lh.default_is_stmt;
1048 int basic_block = 0;
1049 int end_sequence = 0;
1050 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1051 compilers generate address sequences that are wildly out of
1052 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1053 for ia64-Linux). Thus, to determine the low and high
1054 address, we must compare on every DW_LNS_copy, etc. */
1055 bfd_vma low_pc = 0;
1056 bfd_vma high_pc = 0;
1057
1058 /* Decode the table. */
1059 while (! end_sequence)
1060 {
1061 op_code = read_1_byte (abfd, line_ptr);
1062 line_ptr += 1;
1063
1064 if (op_code >= lh.opcode_base)
1065 {
1066 /* Special operand. */
1067 adj_opcode = op_code - lh.opcode_base;
1068 address += (adj_opcode / lh.line_range)
1069 * lh.minimum_instruction_length;
1070 line += lh.line_base + (adj_opcode % lh.line_range);
1071 /* Append row to matrix using current values. */
1072 add_line_info (table, address, filename, line, column, 0);
1073 basic_block = 1;
1074 if (low_pc == 0 || address < low_pc)
1075 low_pc = address;
1076 if (address > high_pc)
1077 high_pc = address;
1078 }
1079 else switch (op_code)
1080 {
1081 case DW_LNS_extended_op:
1082 /* Ignore length. */
1083 line_ptr += 1;
1084 extended_op = read_1_byte (abfd, line_ptr);
1085 line_ptr += 1;
1086
1087 switch (extended_op)
1088 {
1089 case DW_LNE_end_sequence:
1090 end_sequence = 1;
1091 add_line_info (table, address, filename, line, column,
1092 end_sequence);
1093 if (low_pc == 0 || address < low_pc)
1094 low_pc = address;
1095 if (address > high_pc)
1096 high_pc = address;
1097 arange_add (unit->abfd, &unit->arange, low_pc, high_pc);
1098 break;
1099 case DW_LNE_set_address:
1100 address = read_address (unit, line_ptr);
1101 line_ptr += unit->addr_size;
1102 break;
1103 case DW_LNE_define_file:
1104 cur_file = read_string (abfd, line_ptr, &bytes_read);
1105 line_ptr += bytes_read;
1106 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1107 {
1108 struct fileinfo *tmp;
1109
1110 amt = table->num_files + FILE_ALLOC_CHUNK;
1111 amt *= sizeof (struct fileinfo);
1112 tmp = bfd_realloc (table->files, amt);
1113 if (tmp == NULL)
1114 {
1115 free (table->files);
1116 free (table->dirs);
1117 free (filename);
1118 return NULL;
1119 }
1120 table->files = tmp;
1121 }
1122 table->files[table->num_files].name = cur_file;
1123 table->files[table->num_files].dir =
1124 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1125 line_ptr += bytes_read;
1126 table->files[table->num_files].time =
1127 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1128 line_ptr += bytes_read;
1129 table->files[table->num_files].size =
1130 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1131 line_ptr += bytes_read;
1132 table->num_files++;
1133 break;
1134 default:
1135 (*_bfd_error_handler) (_("Dwarf Error: mangled line number section."));
1136 bfd_set_error (bfd_error_bad_value);
1137 free (filename);
1138 free (table->files);
1139 free (table->dirs);
1140 return NULL;
1141 }
1142 break;
1143 case DW_LNS_copy:
1144 add_line_info (table, address, filename, line, column, 0);
1145 basic_block = 0;
1146 if (low_pc == 0 || address < low_pc)
1147 low_pc = address;
1148 if (address > high_pc)
1149 high_pc = address;
1150 break;
1151 case DW_LNS_advance_pc:
1152 address += lh.minimum_instruction_length
1153 * read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1154 line_ptr += bytes_read;
1155 break;
1156 case DW_LNS_advance_line:
1157 line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
1158 line_ptr += bytes_read;
1159 break;
1160 case DW_LNS_set_file:
1161 {
1162 unsigned int file;
1163
1164 /* The file and directory tables are 0
1165 based, the references are 1 based. */
1166 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1167 line_ptr += bytes_read;
1168 if (filename)
1169 free (filename);
1170 filename = concat_filename (table, file);
1171 break;
1172 }
1173 case DW_LNS_set_column:
1174 column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1175 line_ptr += bytes_read;
1176 break;
1177 case DW_LNS_negate_stmt:
1178 is_stmt = (!is_stmt);
1179 break;
1180 case DW_LNS_set_basic_block:
1181 basic_block = 1;
1182 break;
1183 case DW_LNS_const_add_pc:
1184 address += lh.minimum_instruction_length
1185 * ((255 - lh.opcode_base) / lh.line_range);
1186 break;
1187 case DW_LNS_fixed_advance_pc:
1188 address += read_2_bytes (abfd, line_ptr);
1189 line_ptr += 2;
1190 break;
1191 default:
1192 {
1193 int i;
1194
1195 /* Unknown standard opcode, ignore it. */
1196 for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
1197 {
1198 (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1199 line_ptr += bytes_read;
1200 }
1201 }
1202 }
1203 }
1204
1205 if (filename)
1206 free (filename);
1207 }
1208
1209 return table;
1210 }
1211
1212 /* If ADDR is within TABLE set the output parameters and return TRUE,
1213 otherwise return FALSE. The output parameters, FILENAME_PTR and
1214 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1215
1216 static bfd_boolean
1217 lookup_address_in_line_info_table (struct line_info_table *table,
1218 bfd_vma addr,
1219 struct funcinfo *function,
1220 const char **filename_ptr,
1221 unsigned int *linenumber_ptr)
1222 {
1223 /* Note: table->last_line should be a descendingly sorted list. */
1224 struct line_info* next_line = table->last_line;
1225 struct line_info* each_line = NULL;
1226 *filename_ptr = NULL;
1227
1228 if (!next_line)
1229 return FALSE;
1230
1231 each_line = next_line->prev_line;
1232
1233 /* Check for large addresses */
1234 if (addr > next_line->address)
1235 each_line = NULL; /* ensure we skip over the normal case */
1236
1237 /* Normal case: search the list; save */
1238 while (each_line && next_line)
1239 {
1240 /* If we have an address match, save this info. This allows us
1241 to return as good as results as possible for strange debugging
1242 info. */
1243 bfd_boolean addr_match = FALSE;
1244 if (each_line->address <= addr && addr < next_line->address)
1245 {
1246 addr_match = TRUE;
1247
1248 /* If this line appears to span functions, and addr is in the
1249 later function, return the first line of that function instead
1250 of the last line of the earlier one. This check is for GCC
1251 2.95, which emits the first line number for a function late. */
1252
1253 if (function != NULL)
1254 {
1255 bfd_vma lowest_pc;
1256 struct arange *arange;
1257
1258 /* Find the lowest address in the function's range list */
1259 lowest_pc = function->arange.low;
1260 for (arange = &function->arange;
1261 arange;
1262 arange = arange->next)
1263 {
1264 if (function->arange.low < lowest_pc)
1265 lowest_pc = function->arange.low;
1266 }
1267 /* Check for spanning function and set outgoing line info */
1268 if (addr >= lowest_pc
1269 && each_line->address < lowest_pc
1270 && next_line->address > lowest_pc)
1271 {
1272 *filename_ptr = next_line->filename;
1273 *linenumber_ptr = next_line->line;
1274 }
1275 else
1276 {
1277 *filename_ptr = each_line->filename;
1278 *linenumber_ptr = each_line->line;
1279 }
1280 }
1281 }
1282
1283 if (addr_match && !each_line->end_sequence)
1284 return TRUE; /* we have definitely found what we want */
1285
1286 next_line = each_line;
1287 each_line = each_line->prev_line;
1288 }
1289
1290 /* At this point each_line is NULL but next_line is not. If we found
1291 a candidate end-of-sequence point in the loop above, we can return
1292 that (compatibility with a bug in the Intel compiler); otherwise,
1293 assuming that we found the containing function for this address in
1294 this compilation unit, return the first line we have a number for
1295 (compatibility with GCC 2.95). */
1296 if (*filename_ptr == NULL && function != NULL)
1297 {
1298 *filename_ptr = next_line->filename;
1299 *linenumber_ptr = next_line->line;
1300 return TRUE;
1301 }
1302
1303 return FALSE;
1304 }
1305
1306 /* Read in the .debug_ranges section for future reference */
1307
1308 static bfd_boolean
1309 read_debug_ranges (struct comp_unit *unit)
1310 {
1311 struct dwarf2_debug *stash = unit->stash;
1312 if (! stash->dwarf_ranges_buffer)
1313 {
1314 bfd *abfd = unit->abfd;
1315 asection *msec;
1316
1317 msec = bfd_get_section_by_name (abfd, ".debug_ranges");
1318 if (! msec)
1319 {
1320 (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_ranges section."));
1321 bfd_set_error (bfd_error_bad_value);
1322 return FALSE;
1323 }
1324
1325 stash->dwarf_ranges_size = msec->size;
1326 stash->dwarf_ranges_buffer
1327 = bfd_simple_get_relocated_section_contents (abfd, msec, NULL,
1328 stash->syms);
1329 if (! stash->dwarf_ranges_buffer)
1330 return FALSE;
1331 }
1332 return TRUE;
1333 }
1334
1335 /* Function table functions. */
1336
1337 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return TRUE.
1338 Note that we need to find the function that has the smallest
1339 range that contains ADDR, to handle inlined functions without
1340 depending upon them being ordered in TABLE by increasing range. */
1341
1342 static bfd_boolean
1343 lookup_address_in_function_table (struct funcinfo *table,
1344 bfd_vma addr,
1345 struct funcinfo **function_ptr,
1346 const char **functionname_ptr)
1347 {
1348 struct funcinfo* each_func;
1349 struct funcinfo* best_fit = NULL;
1350 struct arange *arange;
1351
1352 for (each_func = table;
1353 each_func;
1354 each_func = each_func->prev_func)
1355 {
1356 for (arange = &each_func->arange;
1357 arange;
1358 arange = arange->next)
1359 {
1360 if (addr >= arange->low && addr < arange->high)
1361 {
1362 if (!best_fit ||
1363 ((arange->high - arange->low) < (best_fit->arange.high - best_fit->arange.low)))
1364 best_fit = each_func;
1365 }
1366 }
1367 }
1368
1369 if (best_fit)
1370 {
1371 *functionname_ptr = best_fit->name;
1372 *function_ptr = best_fit;
1373 return TRUE;
1374 }
1375 else
1376 {
1377 return FALSE;
1378 }
1379 }
1380
1381 static char *
1382 find_abstract_instance_name (struct comp_unit *unit, bfd_uint64_t die_ref)
1383 {
1384 bfd *abfd = unit->abfd;
1385 bfd_byte *info_ptr;
1386 unsigned int abbrev_number, bytes_read, i;
1387 struct abbrev_info *abbrev;
1388 struct attribute attr;
1389 char *name = 0;
1390
1391 info_ptr = unit->info_ptr_unit + die_ref;
1392 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1393 info_ptr += bytes_read;
1394
1395 if (abbrev_number)
1396 {
1397 abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
1398 if (! abbrev)
1399 {
1400 (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1401 abbrev_number);
1402 bfd_set_error (bfd_error_bad_value);
1403 }
1404 else
1405 {
1406 for (i = 0; i < abbrev->num_attrs && !name; ++i)
1407 {
1408 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1409 switch (attr.name)
1410 {
1411 case DW_AT_name:
1412 name = attr.u.str;
1413 break;
1414 case DW_AT_specification:
1415 name = find_abstract_instance_name (unit, attr.u.val);
1416 break;
1417 default:
1418 break;
1419 }
1420 }
1421 }
1422 }
1423 return (name);
1424 }
1425
1426 static void
1427 read_rangelist (struct comp_unit *unit, struct arange *arange, bfd_uint64_t offset)
1428 {
1429 bfd_byte *ranges_ptr;
1430 bfd_vma base_address = unit->base_address;
1431
1432 if (! unit->stash->dwarf_ranges_buffer)
1433 {
1434 if (! read_debug_ranges (unit))
1435 return;
1436 }
1437 ranges_ptr = unit->stash->dwarf_ranges_buffer + offset;
1438
1439 for (;;)
1440 {
1441 bfd_vma low_pc;
1442 bfd_vma high_pc;
1443
1444 if (unit->offset_size == 4)
1445 {
1446 low_pc = read_4_bytes (unit->abfd, ranges_ptr);
1447 ranges_ptr += 4;
1448 high_pc = read_4_bytes (unit->abfd, ranges_ptr);
1449 ranges_ptr += 4;
1450 }
1451 else
1452 {
1453 low_pc = read_8_bytes (unit->abfd, ranges_ptr);
1454 ranges_ptr += 8;
1455 high_pc = read_8_bytes (unit->abfd, ranges_ptr);
1456 ranges_ptr += 8;
1457 }
1458 if (low_pc == 0 && high_pc == 0)
1459 break;
1460 if (low_pc == -1UL && high_pc != -1UL)
1461 base_address = high_pc;
1462 else
1463 arange_add (unit->abfd, arange, base_address + low_pc, base_address + high_pc);
1464 }
1465 }
1466
1467 /* DWARF2 Compilation unit functions. */
1468
1469 /* Scan over each die in a comp. unit looking for functions to add
1470 to the function table. */
1471
1472 static bfd_boolean
1473 scan_unit_for_functions (struct comp_unit *unit)
1474 {
1475 bfd *abfd = unit->abfd;
1476 bfd_byte *info_ptr = unit->first_child_die_ptr;
1477 int nesting_level = 1;
1478
1479 while (nesting_level)
1480 {
1481 unsigned int abbrev_number, bytes_read, i;
1482 struct abbrev_info *abbrev;
1483 struct attribute attr;
1484 struct funcinfo *func;
1485 bfd_vma low_pc = 0;
1486 bfd_vma high_pc = 0;
1487
1488 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1489 info_ptr += bytes_read;
1490
1491 if (! abbrev_number)
1492 {
1493 nesting_level--;
1494 continue;
1495 }
1496
1497 abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
1498 if (! abbrev)
1499 {
1500 (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1501 abbrev_number);
1502 bfd_set_error (bfd_error_bad_value);
1503 return FALSE;
1504 }
1505
1506 if (abbrev->tag == DW_TAG_subprogram
1507 || abbrev->tag == DW_TAG_inlined_subroutine)
1508 {
1509 bfd_size_type amt = sizeof (struct funcinfo);
1510 func = bfd_zalloc (abfd, amt);
1511 func->prev_func = unit->function_table;
1512 unit->function_table = func;
1513 }
1514 else
1515 func = NULL;
1516
1517 for (i = 0; i < abbrev->num_attrs; ++i)
1518 {
1519 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1520
1521 if (func)
1522 {
1523 switch (attr.name)
1524 {
1525 case DW_AT_abstract_origin:
1526 func->name = find_abstract_instance_name (unit, attr.u.val);
1527 break;
1528
1529 case DW_AT_name:
1530 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1531 if (func->name == NULL)
1532 func->name = attr.u.str;
1533 break;
1534
1535 case DW_AT_MIPS_linkage_name:
1536 func->name = attr.u.str;
1537 break;
1538
1539 case DW_AT_low_pc:
1540 low_pc = attr.u.val;
1541 break;
1542
1543 case DW_AT_high_pc:
1544 high_pc = attr.u.val;
1545 break;
1546
1547 case DW_AT_ranges:
1548 read_rangelist (unit, &func->arange, attr.u.val);
1549 break;
1550
1551 default:
1552 break;
1553 }
1554 }
1555 }
1556
1557 if (func && high_pc != 0)
1558 {
1559 arange_add (unit->abfd, &func->arange, low_pc, high_pc);
1560 }
1561
1562 if (abbrev->has_children)
1563 nesting_level++;
1564 }
1565
1566 return TRUE;
1567 }
1568
1569 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This
1570 includes the compilation unit header that proceeds the DIE's, but
1571 does not include the length field that precedes each compilation
1572 unit header. END_PTR points one past the end of this comp unit.
1573 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
1574
1575 This routine does not read the whole compilation unit; only enough
1576 to get to the line number information for the compilation unit. */
1577
1578 static struct comp_unit *
1579 parse_comp_unit (bfd *abfd,
1580 struct dwarf2_debug *stash,
1581 bfd_vma unit_length,
1582 bfd_byte *info_ptr_unit,
1583 unsigned int offset_size)
1584 {
1585 struct comp_unit* unit;
1586 unsigned int version;
1587 bfd_uint64_t abbrev_offset = 0;
1588 unsigned int addr_size;
1589 struct abbrev_info** abbrevs;
1590 unsigned int abbrev_number, bytes_read, i;
1591 struct abbrev_info *abbrev;
1592 struct attribute attr;
1593 bfd_byte *info_ptr = stash->info_ptr;
1594 bfd_byte *end_ptr = info_ptr + unit_length;
1595 bfd_size_type amt;
1596 bfd_vma low_pc = 0;
1597 bfd_vma high_pc = 0;
1598
1599 version = read_2_bytes (abfd, info_ptr);
1600 info_ptr += 2;
1601 BFD_ASSERT (offset_size == 4 || offset_size == 8);
1602 if (offset_size == 4)
1603 abbrev_offset = read_4_bytes (abfd, info_ptr);
1604 else
1605 abbrev_offset = read_8_bytes (abfd, info_ptr);
1606 info_ptr += offset_size;
1607 addr_size = read_1_byte (abfd, info_ptr);
1608 info_ptr += 1;
1609
1610 if (version != 2)
1611 {
1612 (*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version);
1613 bfd_set_error (bfd_error_bad_value);
1614 return 0;
1615 }
1616
1617 if (addr_size > sizeof (bfd_vma))
1618 {
1619 (*_bfd_error_handler) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1620 addr_size,
1621 (unsigned int) sizeof (bfd_vma));
1622 bfd_set_error (bfd_error_bad_value);
1623 return 0;
1624 }
1625
1626 if (addr_size != 2 && addr_size != 4 && addr_size != 8)
1627 {
1628 (*_bfd_error_handler) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size);
1629 bfd_set_error (bfd_error_bad_value);
1630 return 0;
1631 }
1632
1633 /* Read the abbrevs for this compilation unit into a table. */
1634 abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
1635 if (! abbrevs)
1636 return 0;
1637
1638 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1639 info_ptr += bytes_read;
1640 if (! abbrev_number)
1641 {
1642 (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
1643 abbrev_number);
1644 bfd_set_error (bfd_error_bad_value);
1645 return 0;
1646 }
1647
1648 abbrev = lookup_abbrev (abbrev_number, abbrevs);
1649 if (! abbrev)
1650 {
1651 (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1652 abbrev_number);
1653 bfd_set_error (bfd_error_bad_value);
1654 return 0;
1655 }
1656
1657 amt = sizeof (struct comp_unit);
1658 unit = bfd_zalloc (abfd, amt);
1659 unit->abfd = abfd;
1660 unit->addr_size = addr_size;
1661 unit->offset_size = offset_size;
1662 unit->abbrevs = abbrevs;
1663 unit->end_ptr = end_ptr;
1664 unit->stash = stash;
1665 unit->info_ptr_unit = info_ptr_unit;
1666
1667 for (i = 0; i < abbrev->num_attrs; ++i)
1668 {
1669 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1670
1671 /* Store the data if it is of an attribute we want to keep in a
1672 partial symbol table. */
1673 switch (attr.name)
1674 {
1675 case DW_AT_stmt_list:
1676 unit->stmtlist = 1;
1677 unit->line_offset = attr.u.val;
1678 break;
1679
1680 case DW_AT_name:
1681 unit->name = attr.u.str;
1682 break;
1683
1684 case DW_AT_low_pc:
1685 low_pc = attr.u.val;
1686 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
1687 this is the base address to use when reading location
1688 lists or range lists. */
1689 unit->base_address = low_pc;
1690 break;
1691
1692 case DW_AT_high_pc:
1693 high_pc = attr.u.val;
1694 break;
1695
1696 case DW_AT_ranges:
1697 read_rangelist (unit, &unit->arange, attr.u.val);
1698 break;
1699
1700 case DW_AT_comp_dir:
1701 {
1702 char *comp_dir = attr.u.str;
1703 if (comp_dir)
1704 {
1705 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1706 directory, get rid of it. */
1707 char *cp = strchr (comp_dir, ':');
1708
1709 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
1710 comp_dir = cp + 1;
1711 }
1712 unit->comp_dir = comp_dir;
1713 break;
1714 }
1715
1716 default:
1717 break;
1718 }
1719 }
1720 if (high_pc != 0)
1721 {
1722 arange_add (unit->abfd, &unit->arange, low_pc, high_pc);
1723 }
1724
1725 unit->first_child_die_ptr = info_ptr;
1726 return unit;
1727 }
1728
1729 /* Return TRUE if UNIT contains the address given by ADDR. */
1730
1731 static bfd_boolean
1732 comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
1733 {
1734 struct arange *arange;
1735
1736 if (unit->error)
1737 return FALSE;
1738
1739 arange = &unit->arange;
1740 do
1741 {
1742 if (addr >= arange->low && addr < arange->high)
1743 return TRUE;
1744 arange = arange->next;
1745 }
1746 while (arange);
1747
1748 return FALSE;
1749 }
1750
1751 /* If UNIT contains ADDR, set the output parameters to the values for
1752 the line containing ADDR. The output parameters, FILENAME_PTR,
1753 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
1754 to be filled in.
1755
1756 Return TRUE if UNIT contains ADDR, and no errors were encountered;
1757 FALSE otherwise. */
1758
1759 static bfd_boolean
1760 comp_unit_find_nearest_line (struct comp_unit *unit,
1761 bfd_vma addr,
1762 const char **filename_ptr,
1763 const char **functionname_ptr,
1764 unsigned int *linenumber_ptr,
1765 struct dwarf2_debug *stash)
1766 {
1767 bfd_boolean line_p;
1768 bfd_boolean func_p;
1769 struct funcinfo *function;
1770
1771 if (unit->error)
1772 return FALSE;
1773
1774 if (! unit->line_table)
1775 {
1776 if (! unit->stmtlist)
1777 {
1778 unit->error = 1;
1779 return FALSE;
1780 }
1781
1782 unit->line_table = decode_line_info (unit, stash);
1783
1784 if (! unit->line_table)
1785 {
1786 unit->error = 1;
1787 return FALSE;
1788 }
1789
1790 if (unit->first_child_die_ptr < unit->end_ptr
1791 && ! scan_unit_for_functions (unit))
1792 {
1793 unit->error = 1;
1794 return FALSE;
1795 }
1796 }
1797
1798 function = NULL;
1799 func_p = lookup_address_in_function_table (unit->function_table, addr,
1800 &function, functionname_ptr);
1801 line_p = lookup_address_in_line_info_table (unit->line_table, addr,
1802 function, filename_ptr,
1803 linenumber_ptr);
1804 return line_p || func_p;
1805 }
1806
1807 /* Locate a section in a BFD containing debugging info. The search starts
1808 from the section after AFTER_SEC, or from the first section in the BFD if
1809 AFTER_SEC is NULL. The search works by examining the names of the
1810 sections. There are two permissiable names. The first is .debug_info.
1811 This is the standard DWARF2 name. The second is a prefix .gnu.linkonce.wi.
1812 This is a variation on the .debug_info section which has a checksum
1813 describing the contents appended onto the name. This allows the linker to
1814 identify and discard duplicate debugging sections for different
1815 compilation units. */
1816 #define DWARF2_DEBUG_INFO ".debug_info"
1817 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
1818
1819 static asection *
1820 find_debug_info (bfd *abfd, asection *after_sec)
1821 {
1822 asection * msec;
1823
1824 if (after_sec)
1825 msec = after_sec->next;
1826 else
1827 msec = abfd->sections;
1828
1829 while (msec)
1830 {
1831 if (strcmp (msec->name, DWARF2_DEBUG_INFO) == 0)
1832 return msec;
1833
1834 if (strncmp (msec->name, GNU_LINKONCE_INFO, strlen (GNU_LINKONCE_INFO)) == 0)
1835 return msec;
1836
1837 msec = msec->next;
1838 }
1839
1840 return NULL;
1841 }
1842
1843 /* The DWARF2 version of find_nearest_line. Return TRUE if the line
1844 is found without error. ADDR_SIZE is the number of bytes in the
1845 initial .debug_info length field and in the abbreviation offset.
1846 You may use zero to indicate that the default value should be
1847 used. */
1848
1849 bfd_boolean
1850 _bfd_dwarf2_find_nearest_line (bfd *abfd,
1851 asection *section,
1852 asymbol **symbols,
1853 bfd_vma offset,
1854 const char **filename_ptr,
1855 const char **functionname_ptr,
1856 unsigned int *linenumber_ptr,
1857 unsigned int addr_size,
1858 void **pinfo)
1859 {
1860 /* Read each compilation unit from the section .debug_info, and check
1861 to see if it contains the address we are searching for. If yes,
1862 lookup the address, and return the line number info. If no, go
1863 on to the next compilation unit.
1864
1865 We keep a list of all the previously read compilation units, and
1866 a pointer to the next un-read compilation unit. Check the
1867 previously read units before reading more. */
1868 struct dwarf2_debug *stash;
1869
1870 /* What address are we looking for? */
1871 bfd_vma addr;
1872
1873 struct comp_unit* each;
1874
1875 stash = *pinfo;
1876 addr = offset;
1877 if (section->output_section)
1878 addr += section->output_section->vma + section->output_offset;
1879 else
1880 addr += section->vma;
1881 *filename_ptr = NULL;
1882 *functionname_ptr = NULL;
1883 *linenumber_ptr = 0;
1884
1885 /* The DWARF2 spec says that the initial length field, and the
1886 offset of the abbreviation table, should both be 4-byte values.
1887 However, some compilers do things differently. */
1888 if (addr_size == 0)
1889 addr_size = 4;
1890 BFD_ASSERT (addr_size == 4 || addr_size == 8);
1891
1892 if (! stash)
1893 {
1894 bfd_size_type total_size;
1895 asection *msec;
1896 bfd_size_type amt = sizeof (struct dwarf2_debug);
1897
1898 stash = bfd_zalloc (abfd, amt);
1899 if (! stash)
1900 return FALSE;
1901
1902 *pinfo = stash;
1903
1904 msec = find_debug_info (abfd, NULL);
1905 if (! msec)
1906 /* No dwarf2 info. Note that at this point the stash
1907 has been allocated, but contains zeros, this lets
1908 future calls to this function fail quicker. */
1909 return FALSE;
1910
1911 /* There can be more than one DWARF2 info section in a BFD these days.
1912 Read them all in and produce one large stash. We do this in two
1913 passes - in the first pass we just accumulate the section sizes.
1914 In the second pass we read in the section's contents. The allows
1915 us to avoid reallocing the data as we add sections to the stash. */
1916 for (total_size = 0; msec; msec = find_debug_info (abfd, msec))
1917 total_size += msec->size;
1918
1919 stash->info_ptr = bfd_alloc (abfd, total_size);
1920 if (stash->info_ptr == NULL)
1921 return FALSE;
1922
1923 stash->info_ptr_end = stash->info_ptr;
1924
1925 for (msec = find_debug_info (abfd, NULL);
1926 msec;
1927 msec = find_debug_info (abfd, msec))
1928 {
1929 bfd_size_type size;
1930 bfd_size_type start;
1931
1932 size = msec->size;
1933 if (size == 0)
1934 continue;
1935
1936 start = stash->info_ptr_end - stash->info_ptr;
1937
1938 if ((bfd_simple_get_relocated_section_contents
1939 (abfd, msec, stash->info_ptr + start, symbols)) == NULL)
1940 continue;
1941
1942 stash->info_ptr_end = stash->info_ptr + start + size;
1943 }
1944
1945 BFD_ASSERT (stash->info_ptr_end == stash->info_ptr + total_size);
1946
1947 stash->sec = find_debug_info (abfd, NULL);
1948 stash->sec_info_ptr = stash->info_ptr;
1949 stash->syms = symbols;
1950 }
1951
1952 /* A null info_ptr indicates that there is no dwarf2 info
1953 (or that an error occured while setting up the stash). */
1954 if (! stash->info_ptr)
1955 return FALSE;
1956
1957 /* Check the previously read comp. units first. */
1958 for (each = stash->all_comp_units; each; each = each->next_unit)
1959 if (comp_unit_contains_address (each, addr))
1960 return comp_unit_find_nearest_line (each, addr, filename_ptr,
1961 functionname_ptr, linenumber_ptr,
1962 stash);
1963
1964 /* Read each remaining comp. units checking each as they are read. */
1965 while (stash->info_ptr < stash->info_ptr_end)
1966 {
1967 bfd_vma length;
1968 bfd_boolean found;
1969 unsigned int offset_size = addr_size;
1970 bfd_byte *info_ptr_unit = stash->info_ptr;
1971
1972 length = read_4_bytes (abfd, stash->info_ptr);
1973 /* A 0xffffff length is the DWARF3 way of indicating we use
1974 64-bit offsets, instead of 32-bit offsets. */
1975 if (length == 0xffffffff)
1976 {
1977 offset_size = 8;
1978 length = read_8_bytes (abfd, stash->info_ptr + 4);
1979 stash->info_ptr += 12;
1980 }
1981 /* A zero length is the IRIX way of indicating 64-bit offsets,
1982 mostly because the 64-bit length will generally fit in 32
1983 bits, and the endianness helps. */
1984 else if (length == 0)
1985 {
1986 offset_size = 8;
1987 length = read_4_bytes (abfd, stash->info_ptr + 4);
1988 stash->info_ptr += 8;
1989 }
1990 /* In the absence of the hints above, we assume addr_size-sized
1991 offsets, for backward-compatibility with pre-DWARF3 64-bit
1992 platforms. */
1993 else if (addr_size == 8)
1994 {
1995 length = read_8_bytes (abfd, stash->info_ptr);
1996 stash->info_ptr += 8;
1997 }
1998 else
1999 stash->info_ptr += 4;
2000
2001 if (length > 0)
2002 {
2003 each = parse_comp_unit (abfd, stash, length, info_ptr_unit,
2004 offset_size);
2005 stash->info_ptr += length;
2006
2007 if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
2008 == stash->sec->size)
2009 {
2010 stash->sec = find_debug_info (abfd, stash->sec);
2011 stash->sec_info_ptr = stash->info_ptr;
2012 }
2013
2014 if (each)
2015 {
2016 each->next_unit = stash->all_comp_units;
2017 stash->all_comp_units = each;
2018
2019 /* DW_AT_low_pc and DW_AT_high_pc are optional for
2020 compilation units. If we don't have them (i.e.,
2021 unit->high == 0), we need to consult the line info
2022 table to see if a compilation unit contains the given
2023 address. */
2024 if (each->arange.high > 0)
2025 {
2026 if (comp_unit_contains_address (each, addr))
2027 return comp_unit_find_nearest_line (each, addr,
2028 filename_ptr,
2029 functionname_ptr,
2030 linenumber_ptr,
2031 stash);
2032 }
2033 else
2034 {
2035 found = comp_unit_find_nearest_line (each, addr,
2036 filename_ptr,
2037 functionname_ptr,
2038 linenumber_ptr,
2039 stash);
2040 if (found)
2041 return TRUE;
2042 }
2043 }
2044 }
2045 }
2046
2047 return FALSE;
2048 }
2049
2050 void
2051 _bfd_dwarf2_cleanup_debug_info (bfd *abfd)
2052 {
2053 struct comp_unit *each;
2054 struct dwarf2_debug *stash;
2055
2056 if (abfd == NULL || elf_tdata (abfd) == NULL)
2057 return;
2058
2059 stash = elf_tdata (abfd)->dwarf2_find_line_info;
2060
2061 if (stash == NULL)
2062 return;
2063
2064 for (each = stash->all_comp_units; each; each = each->next_unit)
2065 {
2066 struct abbrev_info **abbrevs = each->abbrevs;
2067 size_t i;
2068
2069 for (i = 0; i < ABBREV_HASH_SIZE; i++)
2070 {
2071 struct abbrev_info *abbrev = abbrevs[i];
2072
2073 while (abbrev)
2074 {
2075 free (abbrev->attrs);
2076 abbrev = abbrev->next;
2077 }
2078 }
2079
2080 if (each->line_table)
2081 {
2082 free (each->line_table->dirs);
2083 free (each->line_table->files);
2084 }
2085 }
2086
2087 free (stash->dwarf_abbrev_buffer);
2088 free (stash->dwarf_line_buffer);
2089 free (stash->dwarf_ranges_buffer);
2090 }
This page took 0.071937 seconds and 5 git commands to generate.