Mention PR ld/4701.
[deliverable/binutils-gdb.git] / bfd / dwarf2.c
... / ...
CommitLineData
1/* DWARF 2 support.
2 Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3 2004, 2005, 2006, 2007 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 "sysdep.h"
33#include "bfd.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
41struct 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
56struct 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. */
71struct dwarf_block
72{
73 unsigned int size;
74 bfd_byte *data;
75};
76
77struct loadable_section
78{
79 asection *section;
80 bfd_vma adj_vma;
81};
82
83struct dwarf2_debug
84{
85 /* A list of all previously read comp_units. */
86 struct comp_unit *all_comp_units;
87
88 /* The next unread compilation unit within the .debug_info section.
89 Zero indicates that the .debug_info section has not been loaded
90 into a buffer yet. */
91 bfd_byte *info_ptr;
92
93 /* Pointer to the end of the .debug_info section memory buffer. */
94 bfd_byte *info_ptr_end;
95
96 /* Pointer to the bfd, section and address of the beginning of the
97 section. The bfd might be different than expected because of
98 gnu_debuglink sections. */
99 bfd * bfd;
100 asection *sec;
101 bfd_byte *sec_info_ptr;
102
103 /* Pointer to the symbol table. */
104 asymbol **syms;
105
106 /* Pointer to the .debug_abbrev section loaded into memory. */
107 bfd_byte *dwarf_abbrev_buffer;
108
109 /* Length of the loaded .debug_abbrev section. */
110 unsigned long dwarf_abbrev_size;
111
112 /* Buffer for decode_line_info. */
113 bfd_byte *dwarf_line_buffer;
114
115 /* Length of the loaded .debug_line section. */
116 unsigned long dwarf_line_size;
117
118 /* Pointer to the .debug_str section loaded into memory. */
119 bfd_byte *dwarf_str_buffer;
120
121 /* Length of the loaded .debug_str section. */
122 unsigned long dwarf_str_size;
123
124 /* Pointer to the .debug_ranges section loaded into memory. */
125 bfd_byte *dwarf_ranges_buffer;
126
127 /* Length of the loaded .debug_ranges section. */
128 unsigned long dwarf_ranges_size;
129
130 /* If the most recent call to bfd_find_nearest_line was given an
131 address in an inlined function, preserve a pointer into the
132 calling chain for subsequent calls to bfd_find_inliner_info to
133 use. */
134 struct funcinfo *inliner_chain;
135
136 /* Number of loadable sections. */
137 unsigned int loadable_section_count;
138
139 /* Array of loadable sections. */
140 struct loadable_section *loadable_sections;
141};
142
143struct arange
144{
145 struct arange *next;
146 bfd_vma low;
147 bfd_vma high;
148};
149
150/* A minimal decoding of DWARF2 compilation units. We only decode
151 what's needed to get to the line number information. */
152
153struct comp_unit
154{
155 /* Chain the previously read compilation units. */
156 struct comp_unit *next_unit;
157
158 /* Keep the bfd convenient (for memory allocation). */
159 bfd *abfd;
160
161 /* The lowest and highest addresses contained in this compilation
162 unit as specified in the compilation unit header. */
163 struct arange arange;
164
165 /* The DW_AT_name attribute (for error messages). */
166 char *name;
167
168 /* The abbrev hash table. */
169 struct abbrev_info **abbrevs;
170
171 /* Note that an error was found by comp_unit_find_nearest_line. */
172 int error;
173
174 /* The DW_AT_comp_dir attribute. */
175 char *comp_dir;
176
177 /* TRUE if there is a line number table associated with this comp. unit. */
178 int stmtlist;
179
180 /* Pointer to the current comp_unit so that we can find a given entry
181 by its reference. */
182 bfd_byte *info_ptr_unit;
183
184 /* The offset into .debug_line of the line number table. */
185 unsigned long line_offset;
186
187 /* Pointer to the first child die for the comp unit. */
188 bfd_byte *first_child_die_ptr;
189
190 /* The end of the comp unit. */
191 bfd_byte *end_ptr;
192
193 /* The decoded line number, NULL if not yet decoded. */
194 struct line_info_table *line_table;
195
196 /* A list of the functions found in this comp. unit. */
197 struct funcinfo *function_table;
198
199 /* A list of the variables found in this comp. unit. */
200 struct varinfo *variable_table;
201
202 /* Pointer to dwarf2_debug structure. */
203 struct dwarf2_debug *stash;
204
205 /* Address size for this unit - from unit header. */
206 unsigned char addr_size;
207
208 /* Offset size for this unit - from unit header. */
209 unsigned char offset_size;
210
211 /* Base address for this unit - from DW_AT_low_pc attribute of
212 DW_TAG_compile_unit DIE */
213 bfd_vma base_address;
214};
215
216/* This data structure holds the information of an abbrev. */
217struct abbrev_info
218{
219 unsigned int number; /* Number identifying abbrev. */
220 enum dwarf_tag tag; /* DWARF tag. */
221 int has_children; /* Boolean. */
222 unsigned int num_attrs; /* Number of attributes. */
223 struct attr_abbrev *attrs; /* An array of attribute descriptions. */
224 struct abbrev_info *next; /* Next in chain. */
225};
226
227struct attr_abbrev
228{
229 enum dwarf_attribute name;
230 enum dwarf_form form;
231};
232
233#ifndef ABBREV_HASH_SIZE
234#define ABBREV_HASH_SIZE 121
235#endif
236#ifndef ATTR_ALLOC_CHUNK
237#define ATTR_ALLOC_CHUNK 4
238#endif
239
240/* VERBATIM
241 The following function up to the END VERBATIM mark are
242 copied directly from dwarf2read.c. */
243
244/* Read dwarf information from a buffer. */
245
246static unsigned int
247read_1_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
248{
249 return bfd_get_8 (abfd, buf);
250}
251
252static int
253read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
254{
255 return bfd_get_signed_8 (abfd, buf);
256}
257
258static unsigned int
259read_2_bytes (bfd *abfd, bfd_byte *buf)
260{
261 return bfd_get_16 (abfd, buf);
262}
263
264static unsigned int
265read_4_bytes (bfd *abfd, bfd_byte *buf)
266{
267 return bfd_get_32 (abfd, buf);
268}
269
270static bfd_uint64_t
271read_8_bytes (bfd *abfd, bfd_byte *buf)
272{
273 return bfd_get_64 (abfd, buf);
274}
275
276static bfd_byte *
277read_n_bytes (bfd *abfd ATTRIBUTE_UNUSED,
278 bfd_byte *buf,
279 unsigned int size ATTRIBUTE_UNUSED)
280{
281 /* If the size of a host char is 8 bits, we can return a pointer
282 to the buffer, otherwise we have to copy the data to a buffer
283 allocated on the temporary obstack. */
284 return buf;
285}
286
287static char *
288read_string (bfd *abfd ATTRIBUTE_UNUSED,
289 bfd_byte *buf,
290 unsigned int *bytes_read_ptr)
291{
292 /* Return a pointer to the embedded string. */
293 char *str = (char *) buf;
294 if (*str == '\0')
295 {
296 *bytes_read_ptr = 1;
297 return NULL;
298 }
299
300 *bytes_read_ptr = strlen (str) + 1;
301 return str;
302}
303
304static char *
305read_indirect_string (struct comp_unit* unit,
306 bfd_byte *buf,
307 unsigned int *bytes_read_ptr)
308{
309 bfd_uint64_t offset;
310 struct dwarf2_debug *stash = unit->stash;
311 char *str;
312
313 if (unit->offset_size == 4)
314 offset = read_4_bytes (unit->abfd, buf);
315 else
316 offset = read_8_bytes (unit->abfd, buf);
317 *bytes_read_ptr = unit->offset_size;
318
319 if (! stash->dwarf_str_buffer)
320 {
321 asection *msec;
322 bfd *abfd = unit->abfd;
323 bfd_size_type sz;
324
325 msec = bfd_get_section_by_name (abfd, ".debug_str");
326 if (! msec)
327 {
328 (*_bfd_error_handler)
329 (_("Dwarf Error: Can't find .debug_str section."));
330 bfd_set_error (bfd_error_bad_value);
331 return NULL;
332 }
333
334 sz = msec->rawsize ? msec->rawsize : msec->size;
335 stash->dwarf_str_size = sz;
336 stash->dwarf_str_buffer = bfd_alloc (abfd, sz);
337 if (! stash->dwarf_str_buffer)
338 return NULL;
339
340 if (! bfd_get_section_contents (abfd, msec, stash->dwarf_str_buffer,
341 0, sz))
342 return NULL;
343 }
344
345 if (offset >= stash->dwarf_str_size)
346 {
347 (*_bfd_error_handler) (_("Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."),
348 (unsigned long) offset, stash->dwarf_str_size);
349 bfd_set_error (bfd_error_bad_value);
350 return NULL;
351 }
352
353 str = (char *) stash->dwarf_str_buffer + offset;
354 if (*str == '\0')
355 return NULL;
356 return str;
357}
358
359/* END VERBATIM */
360
361static bfd_uint64_t
362read_address (struct comp_unit *unit, bfd_byte *buf)
363{
364 int signed_vma = get_elf_backend_data (unit->abfd)->sign_extend_vma;
365
366 if (signed_vma)
367 {
368 switch (unit->addr_size)
369 {
370 case 8:
371 return bfd_get_signed_64 (unit->abfd, buf);
372 case 4:
373 return bfd_get_signed_32 (unit->abfd, buf);
374 case 2:
375 return bfd_get_signed_16 (unit->abfd, buf);
376 default:
377 abort ();
378 }
379 }
380 else
381 {
382 switch (unit->addr_size)
383 {
384 case 8:
385 return bfd_get_64 (unit->abfd, buf);
386 case 4:
387 return bfd_get_32 (unit->abfd, buf);
388 case 2:
389 return bfd_get_16 (unit->abfd, buf);
390 default:
391 abort ();
392 }
393 }
394}
395
396/* Lookup an abbrev_info structure in the abbrev hash table. */
397
398static struct abbrev_info *
399lookup_abbrev (unsigned int number, struct abbrev_info **abbrevs)
400{
401 unsigned int hash_number;
402 struct abbrev_info *abbrev;
403
404 hash_number = number % ABBREV_HASH_SIZE;
405 abbrev = abbrevs[hash_number];
406
407 while (abbrev)
408 {
409 if (abbrev->number == number)
410 return abbrev;
411 else
412 abbrev = abbrev->next;
413 }
414
415 return NULL;
416}
417
418/* In DWARF version 2, the description of the debugging information is
419 stored in a separate .debug_abbrev section. Before we read any
420 dies from a section we read in all abbreviations and install them
421 in a hash table. */
422
423static struct abbrev_info**
424read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash)
425{
426 struct abbrev_info **abbrevs;
427 bfd_byte *abbrev_ptr;
428 struct abbrev_info *cur_abbrev;
429 unsigned int abbrev_number, bytes_read, abbrev_name;
430 unsigned int abbrev_form, hash_number;
431 bfd_size_type amt;
432
433 if (! stash->dwarf_abbrev_buffer)
434 {
435 asection *msec;
436
437 msec = bfd_get_section_by_name (abfd, ".debug_abbrev");
438 if (! msec)
439 {
440 (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_abbrev section."));
441 bfd_set_error (bfd_error_bad_value);
442 return 0;
443 }
444
445 stash->dwarf_abbrev_size = msec->size;
446 stash->dwarf_abbrev_buffer
447 = bfd_simple_get_relocated_section_contents (abfd, msec, NULL,
448 stash->syms);
449 if (! stash->dwarf_abbrev_buffer)
450 return 0;
451 }
452
453 if (offset >= stash->dwarf_abbrev_size)
454 {
455 (*_bfd_error_handler) (_("Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."),
456 (unsigned long) offset, stash->dwarf_abbrev_size);
457 bfd_set_error (bfd_error_bad_value);
458 return 0;
459 }
460
461 amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
462 abbrevs = bfd_zalloc (abfd, amt);
463
464 abbrev_ptr = stash->dwarf_abbrev_buffer + offset;
465 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
466 abbrev_ptr += bytes_read;
467
468 /* Loop until we reach an abbrev number of 0. */
469 while (abbrev_number)
470 {
471 amt = sizeof (struct abbrev_info);
472 cur_abbrev = bfd_zalloc (abfd, amt);
473
474 /* Read in abbrev header. */
475 cur_abbrev->number = abbrev_number;
476 cur_abbrev->tag = (enum dwarf_tag)
477 read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
478 abbrev_ptr += bytes_read;
479 cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
480 abbrev_ptr += 1;
481
482 /* Now read in declarations. */
483 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
484 abbrev_ptr += bytes_read;
485 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
486 abbrev_ptr += bytes_read;
487
488 while (abbrev_name)
489 {
490 if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
491 {
492 struct attr_abbrev *tmp;
493
494 amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
495 amt *= sizeof (struct attr_abbrev);
496 tmp = bfd_realloc (cur_abbrev->attrs, amt);
497 if (tmp == NULL)
498 {
499 size_t i;
500
501 for (i = 0; i < ABBREV_HASH_SIZE; i++)
502 {
503 struct abbrev_info *abbrev = abbrevs[i];
504
505 while (abbrev)
506 {
507 free (abbrev->attrs);
508 abbrev = abbrev->next;
509 }
510 }
511 return NULL;
512 }
513 cur_abbrev->attrs = tmp;
514 }
515
516 cur_abbrev->attrs[cur_abbrev->num_attrs].name
517 = (enum dwarf_attribute) abbrev_name;
518 cur_abbrev->attrs[cur_abbrev->num_attrs++].form
519 = (enum dwarf_form) abbrev_form;
520 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
521 abbrev_ptr += bytes_read;
522 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
523 abbrev_ptr += bytes_read;
524 }
525
526 hash_number = abbrev_number % ABBREV_HASH_SIZE;
527 cur_abbrev->next = abbrevs[hash_number];
528 abbrevs[hash_number] = cur_abbrev;
529
530 /* Get next abbreviation.
531 Under Irix6 the abbreviations for a compilation unit are not
532 always properly terminated with an abbrev number of 0.
533 Exit loop if we encounter an abbreviation which we have
534 already read (which means we are about to read the abbreviations
535 for the next compile unit) or if the end of the abbreviation
536 table is reached. */
537 if ((unsigned int) (abbrev_ptr - stash->dwarf_abbrev_buffer)
538 >= stash->dwarf_abbrev_size)
539 break;
540 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
541 abbrev_ptr += bytes_read;
542 if (lookup_abbrev (abbrev_number,abbrevs) != NULL)
543 break;
544 }
545
546 return abbrevs;
547}
548
549/* Read an attribute value described by an attribute form. */
550
551static bfd_byte *
552read_attribute_value (struct attribute *attr,
553 unsigned form,
554 struct comp_unit *unit,
555 bfd_byte *info_ptr)
556{
557 bfd *abfd = unit->abfd;
558 unsigned int bytes_read;
559 struct dwarf_block *blk;
560 bfd_size_type amt;
561
562 attr->form = (enum dwarf_form) form;
563
564 switch (form)
565 {
566 case DW_FORM_addr:
567 /* FIXME: DWARF3 draft says DW_FORM_ref_addr is offset_size. */
568 case DW_FORM_ref_addr:
569 attr->u.val = read_address (unit, info_ptr);
570 info_ptr += unit->addr_size;
571 break;
572 case DW_FORM_block2:
573 amt = sizeof (struct dwarf_block);
574 blk = bfd_alloc (abfd, amt);
575 blk->size = read_2_bytes (abfd, info_ptr);
576 info_ptr += 2;
577 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
578 info_ptr += blk->size;
579 attr->u.blk = blk;
580 break;
581 case DW_FORM_block4:
582 amt = sizeof (struct dwarf_block);
583 blk = bfd_alloc (abfd, amt);
584 blk->size = read_4_bytes (abfd, info_ptr);
585 info_ptr += 4;
586 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
587 info_ptr += blk->size;
588 attr->u.blk = blk;
589 break;
590 case DW_FORM_data2:
591 attr->u.val = read_2_bytes (abfd, info_ptr);
592 info_ptr += 2;
593 break;
594 case DW_FORM_data4:
595 attr->u.val = read_4_bytes (abfd, info_ptr);
596 info_ptr += 4;
597 break;
598 case DW_FORM_data8:
599 attr->u.val = read_8_bytes (abfd, info_ptr);
600 info_ptr += 8;
601 break;
602 case DW_FORM_string:
603 attr->u.str = read_string (abfd, info_ptr, &bytes_read);
604 info_ptr += bytes_read;
605 break;
606 case DW_FORM_strp:
607 attr->u.str = read_indirect_string (unit, info_ptr, &bytes_read);
608 info_ptr += bytes_read;
609 break;
610 case DW_FORM_block:
611 amt = sizeof (struct dwarf_block);
612 blk = bfd_alloc (abfd, amt);
613 blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
614 info_ptr += bytes_read;
615 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
616 info_ptr += blk->size;
617 attr->u.blk = blk;
618 break;
619 case DW_FORM_block1:
620 amt = sizeof (struct dwarf_block);
621 blk = bfd_alloc (abfd, amt);
622 blk->size = read_1_byte (abfd, info_ptr);
623 info_ptr += 1;
624 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
625 info_ptr += blk->size;
626 attr->u.blk = blk;
627 break;
628 case DW_FORM_data1:
629 attr->u.val = read_1_byte (abfd, info_ptr);
630 info_ptr += 1;
631 break;
632 case DW_FORM_flag:
633 attr->u.val = read_1_byte (abfd, info_ptr);
634 info_ptr += 1;
635 break;
636 case DW_FORM_sdata:
637 attr->u.sval = read_signed_leb128 (abfd, info_ptr, &bytes_read);
638 info_ptr += bytes_read;
639 break;
640 case DW_FORM_udata:
641 attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
642 info_ptr += bytes_read;
643 break;
644 case DW_FORM_ref1:
645 attr->u.val = read_1_byte (abfd, info_ptr);
646 info_ptr += 1;
647 break;
648 case DW_FORM_ref2:
649 attr->u.val = read_2_bytes (abfd, info_ptr);
650 info_ptr += 2;
651 break;
652 case DW_FORM_ref4:
653 attr->u.val = read_4_bytes (abfd, info_ptr);
654 info_ptr += 4;
655 break;
656 case DW_FORM_ref8:
657 attr->u.val = read_8_bytes (abfd, info_ptr);
658 info_ptr += 8;
659 break;
660 case DW_FORM_ref_udata:
661 attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
662 info_ptr += bytes_read;
663 break;
664 case DW_FORM_indirect:
665 form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
666 info_ptr += bytes_read;
667 info_ptr = read_attribute_value (attr, form, unit, info_ptr);
668 break;
669 default:
670 (*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
671 form);
672 bfd_set_error (bfd_error_bad_value);
673 }
674 return info_ptr;
675}
676
677/* Read an attribute described by an abbreviated attribute. */
678
679static bfd_byte *
680read_attribute (struct attribute *attr,
681 struct attr_abbrev *abbrev,
682 struct comp_unit *unit,
683 bfd_byte *info_ptr)
684{
685 attr->name = abbrev->name;
686 info_ptr = read_attribute_value (attr, abbrev->form, unit, info_ptr);
687 return info_ptr;
688}
689
690/* Source line information table routines. */
691
692#define FILE_ALLOC_CHUNK 5
693#define DIR_ALLOC_CHUNK 5
694
695struct line_info
696{
697 struct line_info* prev_line;
698 bfd_vma address;
699 char *filename;
700 unsigned int line;
701 unsigned int column;
702 int end_sequence; /* End of (sequential) code sequence. */
703};
704
705struct fileinfo
706{
707 char *name;
708 unsigned int dir;
709 unsigned int time;
710 unsigned int size;
711};
712
713struct line_info_table
714{
715 bfd* abfd;
716 unsigned int num_files;
717 unsigned int num_dirs;
718 char *comp_dir;
719 char **dirs;
720 struct fileinfo* files;
721 struct line_info* last_line; /* largest VMA */
722 struct line_info* lcl_head; /* local head; used in 'add_line_info' */
723};
724
725/* Remember some information about each function. If the function is
726 inlined (DW_TAG_inlined_subroutine) it may have two additional
727 attributes, DW_AT_call_file and DW_AT_call_line, which specify the
728 source code location where this function was inlined. */
729
730struct funcinfo
731{
732 struct funcinfo *prev_func; /* Pointer to previous function in list of all functions */
733 struct funcinfo *caller_func; /* Pointer to function one scope higher */
734 char *caller_file; /* Source location file name where caller_func inlines this func */
735 int caller_line; /* Source location line number where caller_func inlines this func */
736 char *file; /* Source location file name */
737 int line; /* Source location line number */
738 int tag;
739 char *name;
740 struct arange arange;
741 asection *sec; /* Where the symbol is defined */
742};
743
744struct varinfo
745{
746 /* Pointer to previous variable in list of all variables */
747 struct varinfo *prev_var;
748 /* Source location file name */
749 char *file;
750 /* Source location line number */
751 int line;
752 int tag;
753 char *name;
754 bfd_vma addr;
755 /* Where the symbol is defined */
756 asection *sec;
757 /* Is this a stack variable? */
758 unsigned int stack: 1;
759};
760
761/* Return TRUE if NEW_LINE should sort after LINE. */
762
763static inline bfd_boolean
764new_line_sorts_after (struct line_info *new_line, struct line_info *line)
765{
766 return (new_line->address > line->address
767 || (new_line->address == line->address
768 && new_line->end_sequence < line->end_sequence));
769}
770
771
772/* Adds a new entry to the line_info list in the line_info_table, ensuring
773 that the list is sorted. Note that the line_info list is sorted from
774 highest to lowest VMA (with possible duplicates); that is,
775 line_info->prev_line always accesses an equal or smaller VMA. */
776
777static void
778add_line_info (struct line_info_table *table,
779 bfd_vma address,
780 char *filename,
781 unsigned int line,
782 unsigned int column,
783 int end_sequence)
784{
785 bfd_size_type amt = sizeof (struct line_info);
786 struct line_info* info = bfd_alloc (table->abfd, amt);
787
788 /* Set member data of 'info'. */
789 info->address = address;
790 info->line = line;
791 info->column = column;
792 info->end_sequence = end_sequence;
793
794 if (filename && filename[0])
795 {
796 info->filename = bfd_alloc (table->abfd, strlen (filename) + 1);
797 if (info->filename)
798 strcpy (info->filename, filename);
799 }
800 else
801 info->filename = NULL;
802
803 /* Find the correct location for 'info'. Normally we will receive
804 new line_info data 1) in order and 2) with increasing VMAs.
805 However some compilers break the rules (cf. decode_line_info) and
806 so we include some heuristics for quickly finding the correct
807 location for 'info'. In particular, these heuristics optimize for
808 the common case in which the VMA sequence that we receive is a
809 list of locally sorted VMAs such as
810 p...z a...j (where a < j < p < z)
811
812 Note: table->lcl_head is used to head an *actual* or *possible*
813 sequence within the list (such as a...j) that is not directly
814 headed by table->last_line
815
816 Note: we may receive duplicate entries from 'decode_line_info'. */
817
818 if (!table->last_line
819 || new_line_sorts_after (info, table->last_line))
820 {
821 /* Normal case: add 'info' to the beginning of the list */
822 info->prev_line = table->last_line;
823 table->last_line = info;
824
825 /* lcl_head: initialize to head a *possible* sequence at the end. */
826 if (!table->lcl_head)
827 table->lcl_head = info;
828 }
829 else if (!new_line_sorts_after (info, table->lcl_head)
830 && (!table->lcl_head->prev_line
831 || new_line_sorts_after (info, table->lcl_head->prev_line)))
832 {
833 /* Abnormal but easy: lcl_head is the head of 'info'. */
834 info->prev_line = table->lcl_head->prev_line;
835 table->lcl_head->prev_line = info;
836 }
837 else
838 {
839 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head' are valid
840 heads for 'info'. Reset 'lcl_head'. */
841 struct line_info* li2 = table->last_line; /* always non-NULL */
842 struct line_info* li1 = li2->prev_line;
843
844 while (li1)
845 {
846 if (!new_line_sorts_after (info, li2)
847 && new_line_sorts_after (info, li1))
848 break;
849
850 li2 = li1; /* always non-NULL */
851 li1 = li1->prev_line;
852 }
853 table->lcl_head = li2;
854 info->prev_line = table->lcl_head->prev_line;
855 table->lcl_head->prev_line = info;
856 }
857}
858
859/* Extract a fully qualified filename from a line info table.
860 The returned string has been malloc'ed and it is the caller's
861 responsibility to free it. */
862
863static char *
864concat_filename (struct line_info_table *table, unsigned int file)
865{
866 char *filename;
867
868 if (file - 1 >= table->num_files)
869 {
870 /* FILE == 0 means unknown. */
871 if (file)
872 (*_bfd_error_handler)
873 (_("Dwarf Error: mangled line number section (bad file number)."));
874 return strdup ("<unknown>");
875 }
876
877 filename = table->files[file - 1].name;
878
879 if (!IS_ABSOLUTE_PATH (filename))
880 {
881 char *dirname = NULL;
882 char *subdirname = NULL;
883 char *name;
884 size_t len;
885
886 if (table->files[file - 1].dir)
887 subdirname = table->dirs[table->files[file - 1].dir - 1];
888
889 if (!subdirname || !IS_ABSOLUTE_PATH (subdirname))
890 dirname = table->comp_dir;
891
892 if (!dirname)
893 {
894 dirname = subdirname;
895 subdirname = NULL;
896 }
897
898 if (!dirname)
899 return strdup (filename);
900
901 len = strlen (dirname) + strlen (filename) + 2;
902
903 if (subdirname)
904 {
905 len += strlen (subdirname) + 1;
906 name = bfd_malloc (len);
907 if (name)
908 sprintf (name, "%s/%s/%s", dirname, subdirname, filename);
909 }
910 else
911 {
912 name = bfd_malloc (len);
913 if (name)
914 sprintf (name, "%s/%s", dirname, filename);
915 }
916
917 return name;
918 }
919
920 return strdup (filename);
921}
922
923static void
924arange_add (bfd *abfd, struct arange *first_arange, bfd_vma low_pc, bfd_vma high_pc)
925{
926 struct arange *arange;
927
928 /* If the first arange is empty, use it. */
929 if (first_arange->high == 0)
930 {
931 first_arange->low = low_pc;
932 first_arange->high = high_pc;
933 return;
934 }
935
936 /* Next see if we can cheaply extend an existing range. */
937 arange = first_arange;
938 do
939 {
940 if (low_pc == arange->high)
941 {
942 arange->high = high_pc;
943 return;
944 }
945 if (high_pc == arange->low)
946 {
947 arange->low = low_pc;
948 return;
949 }
950 arange = arange->next;
951 }
952 while (arange);
953
954 /* Need to allocate a new arange and insert it into the arange list.
955 Order isn't significant, so just insert after the first arange. */
956 arange = bfd_zalloc (abfd, sizeof (*arange));
957 arange->low = low_pc;
958 arange->high = high_pc;
959 arange->next = first_arange->next;
960 first_arange->next = arange;
961}
962
963/* Decode the line number information for UNIT. */
964
965static struct line_info_table*
966decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
967{
968 bfd *abfd = unit->abfd;
969 struct line_info_table* table;
970 bfd_byte *line_ptr;
971 bfd_byte *line_end;
972 struct line_head lh;
973 unsigned int i, bytes_read, offset_size;
974 char *cur_file, *cur_dir;
975 unsigned char op_code, extended_op, adj_opcode;
976 bfd_size_type amt;
977
978 if (! stash->dwarf_line_buffer)
979 {
980 asection *msec;
981
982 msec = bfd_get_section_by_name (abfd, ".debug_line");
983 if (! msec)
984 {
985 (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_line section."));
986 bfd_set_error (bfd_error_bad_value);
987 return 0;
988 }
989
990 stash->dwarf_line_size = msec->size;
991 stash->dwarf_line_buffer
992 = bfd_simple_get_relocated_section_contents (abfd, msec, NULL,
993 stash->syms);
994 if (! stash->dwarf_line_buffer)
995 return 0;
996 }
997
998 /* It is possible to get a bad value for the line_offset. Validate
999 it here so that we won't get a segfault below. */
1000 if (unit->line_offset >= stash->dwarf_line_size)
1001 {
1002 (*_bfd_error_handler) (_("Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."),
1003 unit->line_offset, stash->dwarf_line_size);
1004 bfd_set_error (bfd_error_bad_value);
1005 return 0;
1006 }
1007
1008 amt = sizeof (struct line_info_table);
1009 table = bfd_alloc (abfd, amt);
1010 table->abfd = abfd;
1011 table->comp_dir = unit->comp_dir;
1012
1013 table->num_files = 0;
1014 table->files = NULL;
1015
1016 table->num_dirs = 0;
1017 table->dirs = NULL;
1018
1019 table->files = NULL;
1020 table->last_line = NULL;
1021 table->lcl_head = NULL;
1022
1023 line_ptr = stash->dwarf_line_buffer + unit->line_offset;
1024
1025 /* Read in the prologue. */
1026 lh.total_length = read_4_bytes (abfd, line_ptr);
1027 line_ptr += 4;
1028 offset_size = 4;
1029 if (lh.total_length == 0xffffffff)
1030 {
1031 lh.total_length = read_8_bytes (abfd, line_ptr);
1032 line_ptr += 8;
1033 offset_size = 8;
1034 }
1035 else if (lh.total_length == 0 && unit->addr_size == 8)
1036 {
1037 /* Handle (non-standard) 64-bit DWARF2 formats. */
1038 lh.total_length = read_4_bytes (abfd, line_ptr);
1039 line_ptr += 4;
1040 offset_size = 8;
1041 }
1042 line_end = line_ptr + lh.total_length;
1043 lh.version = read_2_bytes (abfd, line_ptr);
1044 line_ptr += 2;
1045 if (offset_size == 4)
1046 lh.prologue_length = read_4_bytes (abfd, line_ptr);
1047 else
1048 lh.prologue_length = read_8_bytes (abfd, line_ptr);
1049 line_ptr += offset_size;
1050 lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
1051 line_ptr += 1;
1052 lh.default_is_stmt = read_1_byte (abfd, line_ptr);
1053 line_ptr += 1;
1054 lh.line_base = read_1_signed_byte (abfd, line_ptr);
1055 line_ptr += 1;
1056 lh.line_range = read_1_byte (abfd, line_ptr);
1057 line_ptr += 1;
1058 lh.opcode_base = read_1_byte (abfd, line_ptr);
1059 line_ptr += 1;
1060 amt = lh.opcode_base * sizeof (unsigned char);
1061 lh.standard_opcode_lengths = bfd_alloc (abfd, amt);
1062
1063 lh.standard_opcode_lengths[0] = 1;
1064
1065 for (i = 1; i < lh.opcode_base; ++i)
1066 {
1067 lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
1068 line_ptr += 1;
1069 }
1070
1071 /* Read directory table. */
1072 while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1073 {
1074 line_ptr += bytes_read;
1075
1076 if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
1077 {
1078 char **tmp;
1079
1080 amt = table->num_dirs + DIR_ALLOC_CHUNK;
1081 amt *= sizeof (char *);
1082
1083 tmp = bfd_realloc (table->dirs, amt);
1084 if (tmp == NULL)
1085 {
1086 free (table->dirs);
1087 return NULL;
1088 }
1089 table->dirs = tmp;
1090 }
1091
1092 table->dirs[table->num_dirs++] = cur_dir;
1093 }
1094
1095 line_ptr += bytes_read;
1096
1097 /* Read file name table. */
1098 while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1099 {
1100 line_ptr += bytes_read;
1101
1102 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1103 {
1104 struct fileinfo *tmp;
1105
1106 amt = table->num_files + FILE_ALLOC_CHUNK;
1107 amt *= sizeof (struct fileinfo);
1108
1109 tmp = bfd_realloc (table->files, amt);
1110 if (tmp == NULL)
1111 {
1112 free (table->files);
1113 free (table->dirs);
1114 return NULL;
1115 }
1116 table->files = tmp;
1117 }
1118
1119 table->files[table->num_files].name = cur_file;
1120 table->files[table->num_files].dir =
1121 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1122 line_ptr += bytes_read;
1123 table->files[table->num_files].time =
1124 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1125 line_ptr += bytes_read;
1126 table->files[table->num_files].size =
1127 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1128 line_ptr += bytes_read;
1129 table->num_files++;
1130 }
1131
1132 line_ptr += bytes_read;
1133
1134 /* Read the statement sequences until there's nothing left. */
1135 while (line_ptr < line_end)
1136 {
1137 /* State machine registers. */
1138 bfd_vma address = 0;
1139 char * filename = table->num_files ? concat_filename (table, 1) : NULL;
1140 unsigned int line = 1;
1141 unsigned int column = 0;
1142 int is_stmt = lh.default_is_stmt;
1143 int end_sequence = 0;
1144 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1145 compilers generate address sequences that are wildly out of
1146 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1147 for ia64-Linux). Thus, to determine the low and high
1148 address, we must compare on every DW_LNS_copy, etc. */
1149 bfd_vma low_pc = (bfd_vma) -1;
1150 bfd_vma high_pc = 0;
1151
1152 /* Decode the table. */
1153 while (! end_sequence)
1154 {
1155 op_code = read_1_byte (abfd, line_ptr);
1156 line_ptr += 1;
1157
1158 if (op_code >= lh.opcode_base)
1159 {
1160 /* Special operand. */
1161 adj_opcode = op_code - lh.opcode_base;
1162 address += (adj_opcode / lh.line_range)
1163 * lh.minimum_instruction_length;
1164 line += lh.line_base + (adj_opcode % lh.line_range);
1165 /* Append row to matrix using current values. */
1166 add_line_info (table, address, filename, line, column, 0);
1167 if (address < low_pc)
1168 low_pc = address;
1169 if (address > high_pc)
1170 high_pc = address;
1171 }
1172 else switch (op_code)
1173 {
1174 case DW_LNS_extended_op:
1175 /* Ignore length. */
1176 line_ptr += 1;
1177 extended_op = read_1_byte (abfd, line_ptr);
1178 line_ptr += 1;
1179
1180 switch (extended_op)
1181 {
1182 case DW_LNE_end_sequence:
1183 end_sequence = 1;
1184 add_line_info (table, address, filename, line, column,
1185 end_sequence);
1186 if (address < low_pc)
1187 low_pc = address;
1188 if (address > high_pc)
1189 high_pc = address;
1190 arange_add (unit->abfd, &unit->arange, low_pc, high_pc);
1191 break;
1192 case DW_LNE_set_address:
1193 address = read_address (unit, line_ptr);
1194 line_ptr += unit->addr_size;
1195 break;
1196 case DW_LNE_define_file:
1197 cur_file = read_string (abfd, line_ptr, &bytes_read);
1198 line_ptr += bytes_read;
1199 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1200 {
1201 struct fileinfo *tmp;
1202
1203 amt = table->num_files + FILE_ALLOC_CHUNK;
1204 amt *= sizeof (struct fileinfo);
1205 tmp = bfd_realloc (table->files, amt);
1206 if (tmp == NULL)
1207 {
1208 free (table->files);
1209 free (table->dirs);
1210 free (filename);
1211 return NULL;
1212 }
1213 table->files = tmp;
1214 }
1215 table->files[table->num_files].name = cur_file;
1216 table->files[table->num_files].dir =
1217 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1218 line_ptr += bytes_read;
1219 table->files[table->num_files].time =
1220 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1221 line_ptr += bytes_read;
1222 table->files[table->num_files].size =
1223 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1224 line_ptr += bytes_read;
1225 table->num_files++;
1226 break;
1227 default:
1228 (*_bfd_error_handler) (_("Dwarf Error: mangled line number section."));
1229 bfd_set_error (bfd_error_bad_value);
1230 free (filename);
1231 free (table->files);
1232 free (table->dirs);
1233 return NULL;
1234 }
1235 break;
1236 case DW_LNS_copy:
1237 add_line_info (table, address, filename, line, column, 0);
1238 if (address < low_pc)
1239 low_pc = address;
1240 if (address > high_pc)
1241 high_pc = address;
1242 break;
1243 case DW_LNS_advance_pc:
1244 address += lh.minimum_instruction_length
1245 * read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1246 line_ptr += bytes_read;
1247 break;
1248 case DW_LNS_advance_line:
1249 line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
1250 line_ptr += bytes_read;
1251 break;
1252 case DW_LNS_set_file:
1253 {
1254 unsigned int file;
1255
1256 /* The file and directory tables are 0
1257 based, the references are 1 based. */
1258 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1259 line_ptr += bytes_read;
1260 if (filename)
1261 free (filename);
1262 filename = concat_filename (table, file);
1263 break;
1264 }
1265 case DW_LNS_set_column:
1266 column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1267 line_ptr += bytes_read;
1268 break;
1269 case DW_LNS_negate_stmt:
1270 is_stmt = (!is_stmt);
1271 break;
1272 case DW_LNS_set_basic_block:
1273 break;
1274 case DW_LNS_const_add_pc:
1275 address += lh.minimum_instruction_length
1276 * ((255 - lh.opcode_base) / lh.line_range);
1277 break;
1278 case DW_LNS_fixed_advance_pc:
1279 address += read_2_bytes (abfd, line_ptr);
1280 line_ptr += 2;
1281 break;
1282 default:
1283 {
1284 int i;
1285
1286 /* Unknown standard opcode, ignore it. */
1287 for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
1288 {
1289 (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1290 line_ptr += bytes_read;
1291 }
1292 }
1293 }
1294 }
1295
1296 if (filename)
1297 free (filename);
1298 }
1299
1300 return table;
1301}
1302
1303/* If ADDR is within TABLE set the output parameters and return TRUE,
1304 otherwise return FALSE. The output parameters, FILENAME_PTR and
1305 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1306
1307static bfd_boolean
1308lookup_address_in_line_info_table (struct line_info_table *table,
1309 bfd_vma addr,
1310 struct funcinfo *function,
1311 const char **filename_ptr,
1312 unsigned int *linenumber_ptr)
1313{
1314 /* Note: table->last_line should be a descendingly sorted list. */
1315 struct line_info* next_line = table->last_line;
1316 struct line_info* each_line = NULL;
1317 *filename_ptr = NULL;
1318
1319 if (!next_line)
1320 return FALSE;
1321
1322 each_line = next_line->prev_line;
1323
1324 /* Check for large addresses */
1325 if (addr > next_line->address)
1326 each_line = NULL; /* ensure we skip over the normal case */
1327
1328 /* Normal case: search the list; save */
1329 while (each_line && next_line)
1330 {
1331 /* If we have an address match, save this info. This allows us
1332 to return as good as results as possible for strange debugging
1333 info. */
1334 bfd_boolean addr_match = FALSE;
1335 if (each_line->address <= addr && addr < next_line->address)
1336 {
1337 addr_match = TRUE;
1338
1339 /* If this line appears to span functions, and addr is in the
1340 later function, return the first line of that function instead
1341 of the last line of the earlier one. This check is for GCC
1342 2.95, which emits the first line number for a function late. */
1343
1344 if (function != NULL)
1345 {
1346 bfd_vma lowest_pc;
1347 struct arange *arange;
1348
1349 /* Find the lowest address in the function's range list */
1350 lowest_pc = function->arange.low;
1351 for (arange = &function->arange;
1352 arange;
1353 arange = arange->next)
1354 {
1355 if (function->arange.low < lowest_pc)
1356 lowest_pc = function->arange.low;
1357 }
1358 /* Check for spanning function and set outgoing line info */
1359 if (addr >= lowest_pc
1360 && each_line->address < lowest_pc
1361 && next_line->address > lowest_pc)
1362 {
1363 *filename_ptr = next_line->filename;
1364 *linenumber_ptr = next_line->line;
1365 }
1366 else
1367 {
1368 *filename_ptr = each_line->filename;
1369 *linenumber_ptr = each_line->line;
1370 }
1371 }
1372 else
1373 {
1374 *filename_ptr = each_line->filename;
1375 *linenumber_ptr = each_line->line;
1376 }
1377 }
1378
1379 if (addr_match && !each_line->end_sequence)
1380 return TRUE; /* we have definitely found what we want */
1381
1382 next_line = each_line;
1383 each_line = each_line->prev_line;
1384 }
1385
1386 /* At this point each_line is NULL but next_line is not. If we found
1387 a candidate end-of-sequence point in the loop above, we can return
1388 that (compatibility with a bug in the Intel compiler); otherwise,
1389 assuming that we found the containing function for this address in
1390 this compilation unit, return the first line we have a number for
1391 (compatibility with GCC 2.95). */
1392 if (*filename_ptr == NULL && function != NULL)
1393 {
1394 *filename_ptr = next_line->filename;
1395 *linenumber_ptr = next_line->line;
1396 return TRUE;
1397 }
1398
1399 return FALSE;
1400}
1401
1402/* Read in the .debug_ranges section for future reference */
1403
1404static bfd_boolean
1405read_debug_ranges (struct comp_unit *unit)
1406{
1407 struct dwarf2_debug *stash = unit->stash;
1408 if (! stash->dwarf_ranges_buffer)
1409 {
1410 bfd *abfd = unit->abfd;
1411 asection *msec;
1412
1413 msec = bfd_get_section_by_name (abfd, ".debug_ranges");
1414 if (! msec)
1415 {
1416 (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_ranges section."));
1417 bfd_set_error (bfd_error_bad_value);
1418 return FALSE;
1419 }
1420
1421 stash->dwarf_ranges_size = msec->size;
1422 stash->dwarf_ranges_buffer
1423 = bfd_simple_get_relocated_section_contents (abfd, msec, NULL,
1424 stash->syms);
1425 if (! stash->dwarf_ranges_buffer)
1426 return FALSE;
1427 }
1428 return TRUE;
1429}
1430
1431/* Function table functions. */
1432
1433/* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return TRUE.
1434 Note that we need to find the function that has the smallest
1435 range that contains ADDR, to handle inlined functions without
1436 depending upon them being ordered in TABLE by increasing range. */
1437
1438static bfd_boolean
1439lookup_address_in_function_table (struct comp_unit *unit,
1440 bfd_vma addr,
1441 struct funcinfo **function_ptr,
1442 const char **functionname_ptr)
1443{
1444 struct funcinfo* each_func;
1445 struct funcinfo* best_fit = NULL;
1446 struct arange *arange;
1447
1448 for (each_func = unit->function_table;
1449 each_func;
1450 each_func = each_func->prev_func)
1451 {
1452 for (arange = &each_func->arange;
1453 arange;
1454 arange = arange->next)
1455 {
1456 if (addr >= arange->low && addr < arange->high)
1457 {
1458 if (!best_fit ||
1459 ((arange->high - arange->low) < (best_fit->arange.high - best_fit->arange.low)))
1460 best_fit = each_func;
1461 }
1462 }
1463 }
1464
1465 if (best_fit)
1466 {
1467 *functionname_ptr = best_fit->name;
1468 *function_ptr = best_fit;
1469 return TRUE;
1470 }
1471 else
1472 {
1473 return FALSE;
1474 }
1475}
1476
1477/* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
1478 and LINENUMBER_PTR, and return TRUE. */
1479
1480static bfd_boolean
1481lookup_symbol_in_function_table (struct comp_unit *unit,
1482 asymbol *sym,
1483 bfd_vma addr,
1484 const char **filename_ptr,
1485 unsigned int *linenumber_ptr)
1486{
1487 struct funcinfo* each_func;
1488 struct funcinfo* best_fit = NULL;
1489 struct arange *arange;
1490 const char *name = bfd_asymbol_name (sym);
1491 asection *sec = bfd_get_section (sym);
1492
1493 for (each_func = unit->function_table;
1494 each_func;
1495 each_func = each_func->prev_func)
1496 {
1497 for (arange = &each_func->arange;
1498 arange;
1499 arange = arange->next)
1500 {
1501 if ((!each_func->sec || each_func->sec == sec)
1502 && addr >= arange->low
1503 && addr < arange->high
1504 && each_func->name
1505 && strcmp (name, each_func->name) == 0
1506 && (!best_fit
1507 || ((arange->high - arange->low)
1508 < (best_fit->arange.high - best_fit->arange.low))))
1509 best_fit = each_func;
1510 }
1511 }
1512
1513 if (best_fit)
1514 {
1515 best_fit->sec = sec;
1516 *filename_ptr = best_fit->file;
1517 *linenumber_ptr = best_fit->line;
1518 return TRUE;
1519 }
1520 else
1521 return FALSE;
1522}
1523
1524/* Variable table functions. */
1525
1526/* If SYM is within variable table of UNIT, set FILENAME_PTR and
1527 LINENUMBER_PTR, and return TRUE. */
1528
1529static bfd_boolean
1530lookup_symbol_in_variable_table (struct comp_unit *unit,
1531 asymbol *sym,
1532 bfd_vma addr,
1533 const char **filename_ptr,
1534 unsigned int *linenumber_ptr)
1535{
1536 const char *name = bfd_asymbol_name (sym);
1537 asection *sec = bfd_get_section (sym);
1538 struct varinfo* each;
1539
1540 for (each = unit->variable_table; each; each = each->prev_var)
1541 if (each->stack == 0
1542 && each->file != NULL
1543 && each->name != NULL
1544 && each->addr == addr
1545 && (!each->sec || each->sec == sec)
1546 && strcmp (name, each->name) == 0)
1547 break;
1548
1549 if (each)
1550 {
1551 each->sec = sec;
1552 *filename_ptr = each->file;
1553 *linenumber_ptr = each->line;
1554 return TRUE;
1555 }
1556 else
1557 return FALSE;
1558}
1559
1560static char *
1561find_abstract_instance_name (struct comp_unit *unit, bfd_uint64_t die_ref)
1562{
1563 bfd *abfd = unit->abfd;
1564 bfd_byte *info_ptr;
1565 unsigned int abbrev_number, bytes_read, i;
1566 struct abbrev_info *abbrev;
1567 struct attribute attr;
1568 char *name = 0;
1569
1570 info_ptr = unit->info_ptr_unit + die_ref;
1571 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1572 info_ptr += bytes_read;
1573
1574 if (abbrev_number)
1575 {
1576 abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
1577 if (! abbrev)
1578 {
1579 (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1580 abbrev_number);
1581 bfd_set_error (bfd_error_bad_value);
1582 }
1583 else
1584 {
1585 for (i = 0; i < abbrev->num_attrs; ++i)
1586 {
1587 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1588 switch (attr.name)
1589 {
1590 case DW_AT_name:
1591 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1592 if (name == NULL)
1593 name = attr.u.str;
1594 break;
1595 case DW_AT_specification:
1596 name = find_abstract_instance_name (unit, attr.u.val);
1597 break;
1598 case DW_AT_MIPS_linkage_name:
1599 name = attr.u.str;
1600 break;
1601 default:
1602 break;
1603 }
1604 }
1605 }
1606 }
1607 return (name);
1608}
1609
1610static void
1611read_rangelist (struct comp_unit *unit, struct arange *arange, bfd_uint64_t offset)
1612{
1613 bfd_byte *ranges_ptr;
1614 bfd_vma base_address = unit->base_address;
1615
1616 if (! unit->stash->dwarf_ranges_buffer)
1617 {
1618 if (! read_debug_ranges (unit))
1619 return;
1620 }
1621 ranges_ptr = unit->stash->dwarf_ranges_buffer + offset;
1622
1623 for (;;)
1624 {
1625 bfd_vma low_pc;
1626 bfd_vma high_pc;
1627
1628 if (unit->addr_size == 4)
1629 {
1630 low_pc = read_4_bytes (unit->abfd, ranges_ptr);
1631 ranges_ptr += 4;
1632 high_pc = read_4_bytes (unit->abfd, ranges_ptr);
1633 ranges_ptr += 4;
1634 }
1635 else
1636 {
1637 low_pc = read_8_bytes (unit->abfd, ranges_ptr);
1638 ranges_ptr += 8;
1639 high_pc = read_8_bytes (unit->abfd, ranges_ptr);
1640 ranges_ptr += 8;
1641 }
1642 if (low_pc == 0 && high_pc == 0)
1643 break;
1644 if (low_pc == -1UL && high_pc != -1UL)
1645 base_address = high_pc;
1646 else
1647 arange_add (unit->abfd, arange, base_address + low_pc, base_address + high_pc);
1648 }
1649}
1650
1651/* DWARF2 Compilation unit functions. */
1652
1653/* Scan over each die in a comp. unit looking for functions to add
1654 to the function table and variables to the variable table. */
1655
1656static bfd_boolean
1657scan_unit_for_symbols (struct comp_unit *unit)
1658{
1659 bfd *abfd = unit->abfd;
1660 bfd_byte *info_ptr = unit->first_child_die_ptr;
1661 int nesting_level = 1;
1662 struct funcinfo **nested_funcs;
1663 int nested_funcs_size;
1664
1665 /* Maintain a stack of in-scope functions and inlined functions, which we
1666 can use to set the caller_func field. */
1667 nested_funcs_size = 32;
1668 nested_funcs = bfd_malloc (nested_funcs_size * sizeof (struct funcinfo *));
1669 if (nested_funcs == NULL)
1670 return FALSE;
1671 nested_funcs[nesting_level] = 0;
1672
1673 while (nesting_level)
1674 {
1675 unsigned int abbrev_number, bytes_read, i;
1676 struct abbrev_info *abbrev;
1677 struct attribute attr;
1678 struct funcinfo *func;
1679 struct varinfo *var;
1680 bfd_vma low_pc = 0;
1681 bfd_vma high_pc = 0;
1682
1683 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1684 info_ptr += bytes_read;
1685
1686 if (! abbrev_number)
1687 {
1688 nesting_level--;
1689 continue;
1690 }
1691
1692 abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
1693 if (! abbrev)
1694 {
1695 (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1696 abbrev_number);
1697 bfd_set_error (bfd_error_bad_value);
1698 free (nested_funcs);
1699 return FALSE;
1700 }
1701
1702 var = NULL;
1703 if (abbrev->tag == DW_TAG_subprogram
1704 || abbrev->tag == DW_TAG_entry_point
1705 || abbrev->tag == DW_TAG_inlined_subroutine)
1706 {
1707 bfd_size_type amt = sizeof (struct funcinfo);
1708 func = bfd_zalloc (abfd, amt);
1709 func->tag = abbrev->tag;
1710 func->prev_func = unit->function_table;
1711 unit->function_table = func;
1712
1713 if (func->tag == DW_TAG_inlined_subroutine)
1714 for (i = nesting_level - 1; i >= 1; i--)
1715 if (nested_funcs[i])
1716 {
1717 func->caller_func = nested_funcs[i];
1718 break;
1719 }
1720 nested_funcs[nesting_level] = func;
1721 }
1722 else
1723 {
1724 func = NULL;
1725 if (abbrev->tag == DW_TAG_variable)
1726 {
1727 bfd_size_type amt = sizeof (struct varinfo);
1728 var = bfd_zalloc (abfd, amt);
1729 var->tag = abbrev->tag;
1730 var->stack = 1;
1731 var->prev_var = unit->variable_table;
1732 unit->variable_table = var;
1733 }
1734
1735 /* No inline function in scope at this nesting level. */
1736 nested_funcs[nesting_level] = 0;
1737 }
1738
1739 for (i = 0; i < abbrev->num_attrs; ++i)
1740 {
1741 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1742
1743 if (func)
1744 {
1745 switch (attr.name)
1746 {
1747 case DW_AT_call_file:
1748 func->caller_file = concat_filename (unit->line_table, attr.u.val);
1749 break;
1750
1751 case DW_AT_call_line:
1752 func->caller_line = attr.u.val;
1753 break;
1754
1755 case DW_AT_abstract_origin:
1756 func->name = find_abstract_instance_name (unit, attr.u.val);
1757 break;
1758
1759 case DW_AT_name:
1760 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1761 if (func->name == NULL)
1762 func->name = attr.u.str;
1763 break;
1764
1765 case DW_AT_MIPS_linkage_name:
1766 func->name = attr.u.str;
1767 break;
1768
1769 case DW_AT_low_pc:
1770 low_pc = attr.u.val;
1771 break;
1772
1773 case DW_AT_high_pc:
1774 high_pc = attr.u.val;
1775 break;
1776
1777 case DW_AT_ranges:
1778 read_rangelist (unit, &func->arange, attr.u.val);
1779 break;
1780
1781 case DW_AT_decl_file:
1782 func->file = concat_filename (unit->line_table,
1783 attr.u.val);
1784 break;
1785
1786 case DW_AT_decl_line:
1787 func->line = attr.u.val;
1788 break;
1789
1790 default:
1791 break;
1792 }
1793 }
1794 else if (var)
1795 {
1796 switch (attr.name)
1797 {
1798 case DW_AT_name:
1799 var->name = attr.u.str;
1800 break;
1801
1802 case DW_AT_decl_file:
1803 var->file = concat_filename (unit->line_table,
1804 attr.u.val);
1805 break;
1806
1807 case DW_AT_decl_line:
1808 var->line = attr.u.val;
1809 break;
1810
1811 case DW_AT_external:
1812 if (attr.u.val != 0)
1813 var->stack = 0;
1814 break;
1815
1816 case DW_AT_location:
1817 switch (attr.form)
1818 {
1819 case DW_FORM_block:
1820 case DW_FORM_block1:
1821 case DW_FORM_block2:
1822 case DW_FORM_block4:
1823 if (*attr.u.blk->data == DW_OP_addr)
1824 {
1825 var->stack = 0;
1826
1827 /* Verify that DW_OP_addr is the only opcode in the
1828 location, in which case the block size will be 1
1829 plus the address size. */
1830 /* ??? For TLS variables, gcc can emit
1831 DW_OP_addr <addr> DW_OP_GNU_push_tls_address
1832 which we don't handle here yet. */
1833 if (attr.u.blk->size == unit->addr_size + 1U)
1834 var->addr = bfd_get (unit->addr_size * 8,
1835 unit->abfd,
1836 attr.u.blk->data + 1);
1837 }
1838 break;
1839
1840 default:
1841 break;
1842 }
1843 break;
1844
1845 default:
1846 break;
1847 }
1848 }
1849 }
1850
1851 if (func && high_pc != 0)
1852 {
1853 arange_add (unit->abfd, &func->arange, low_pc, high_pc);
1854 }
1855
1856 if (abbrev->has_children)
1857 {
1858 nesting_level++;
1859
1860 if (nesting_level >= nested_funcs_size)
1861 {
1862 struct funcinfo **tmp;
1863
1864 nested_funcs_size *= 2;
1865 tmp = bfd_realloc (nested_funcs,
1866 (nested_funcs_size
1867 * sizeof (struct funcinfo *)));
1868 if (tmp == NULL)
1869 {
1870 free (nested_funcs);
1871 return FALSE;
1872 }
1873 nested_funcs = tmp;
1874 }
1875 nested_funcs[nesting_level] = 0;
1876 }
1877 }
1878
1879 free (nested_funcs);
1880 return TRUE;
1881}
1882
1883/* Parse a DWARF2 compilation unit starting at INFO_PTR. This
1884 includes the compilation unit header that proceeds the DIE's, but
1885 does not include the length field that precedes each compilation
1886 unit header. END_PTR points one past the end of this comp unit.
1887 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
1888
1889 This routine does not read the whole compilation unit; only enough
1890 to get to the line number information for the compilation unit. */
1891
1892static struct comp_unit *
1893parse_comp_unit (struct dwarf2_debug *stash,
1894 bfd_vma unit_length,
1895 bfd_byte *info_ptr_unit,
1896 unsigned int offset_size)
1897{
1898 struct comp_unit* unit;
1899 unsigned int version;
1900 bfd_uint64_t abbrev_offset = 0;
1901 unsigned int addr_size;
1902 struct abbrev_info** abbrevs;
1903 unsigned int abbrev_number, bytes_read, i;
1904 struct abbrev_info *abbrev;
1905 struct attribute attr;
1906 bfd_byte *info_ptr = stash->info_ptr;
1907 bfd_byte *end_ptr = info_ptr + unit_length;
1908 bfd_size_type amt;
1909 bfd_vma low_pc = 0;
1910 bfd_vma high_pc = 0;
1911 bfd *abfd = stash->bfd;
1912
1913 version = read_2_bytes (abfd, info_ptr);
1914 info_ptr += 2;
1915 BFD_ASSERT (offset_size == 4 || offset_size == 8);
1916 if (offset_size == 4)
1917 abbrev_offset = read_4_bytes (abfd, info_ptr);
1918 else
1919 abbrev_offset = read_8_bytes (abfd, info_ptr);
1920 info_ptr += offset_size;
1921 addr_size = read_1_byte (abfd, info_ptr);
1922 info_ptr += 1;
1923
1924 if (version != 2)
1925 {
1926 (*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version);
1927 bfd_set_error (bfd_error_bad_value);
1928 return 0;
1929 }
1930
1931 if (addr_size > sizeof (bfd_vma))
1932 {
1933 (*_bfd_error_handler) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1934 addr_size,
1935 (unsigned int) sizeof (bfd_vma));
1936 bfd_set_error (bfd_error_bad_value);
1937 return 0;
1938 }
1939
1940 if (addr_size != 2 && addr_size != 4 && addr_size != 8)
1941 {
1942 (*_bfd_error_handler) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size);
1943 bfd_set_error (bfd_error_bad_value);
1944 return 0;
1945 }
1946
1947 /* Read the abbrevs for this compilation unit into a table. */
1948 abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
1949 if (! abbrevs)
1950 return 0;
1951
1952 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1953 info_ptr += bytes_read;
1954 if (! abbrev_number)
1955 {
1956 (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
1957 abbrev_number);
1958 bfd_set_error (bfd_error_bad_value);
1959 return 0;
1960 }
1961
1962 abbrev = lookup_abbrev (abbrev_number, abbrevs);
1963 if (! abbrev)
1964 {
1965 (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1966 abbrev_number);
1967 bfd_set_error (bfd_error_bad_value);
1968 return 0;
1969 }
1970
1971 amt = sizeof (struct comp_unit);
1972 unit = bfd_zalloc (abfd, amt);
1973 unit->abfd = abfd;
1974 unit->addr_size = addr_size;
1975 unit->offset_size = offset_size;
1976 unit->abbrevs = abbrevs;
1977 unit->end_ptr = end_ptr;
1978 unit->stash = stash;
1979 unit->info_ptr_unit = info_ptr_unit;
1980
1981 for (i = 0; i < abbrev->num_attrs; ++i)
1982 {
1983 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1984
1985 /* Store the data if it is of an attribute we want to keep in a
1986 partial symbol table. */
1987 switch (attr.name)
1988 {
1989 case DW_AT_stmt_list:
1990 unit->stmtlist = 1;
1991 unit->line_offset = attr.u.val;
1992 break;
1993
1994 case DW_AT_name:
1995 unit->name = attr.u.str;
1996 break;
1997
1998 case DW_AT_low_pc:
1999 low_pc = attr.u.val;
2000 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
2001 this is the base address to use when reading location
2002 lists or range lists. */
2003 unit->base_address = low_pc;
2004 break;
2005
2006 case DW_AT_high_pc:
2007 high_pc = attr.u.val;
2008 break;
2009
2010 case DW_AT_ranges:
2011 read_rangelist (unit, &unit->arange, attr.u.val);
2012 break;
2013
2014 case DW_AT_comp_dir:
2015 {
2016 char *comp_dir = attr.u.str;
2017 if (comp_dir)
2018 {
2019 /* Irix 6.2 native cc prepends <machine>.: to the compilation
2020 directory, get rid of it. */
2021 char *cp = strchr (comp_dir, ':');
2022
2023 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
2024 comp_dir = cp + 1;
2025 }
2026 unit->comp_dir = comp_dir;
2027 break;
2028 }
2029
2030 default:
2031 break;
2032 }
2033 }
2034 if (high_pc != 0)
2035 {
2036 arange_add (unit->abfd, &unit->arange, low_pc, high_pc);
2037 }
2038
2039 unit->first_child_die_ptr = info_ptr;
2040 return unit;
2041}
2042
2043/* Return TRUE if UNIT may contain the address given by ADDR. When
2044 there are functions written entirely with inline asm statements, the
2045 range info in the compilation unit header may not be correct. We
2046 need to consult the line info table to see if a compilation unit
2047 really contains the given address. */
2048
2049static bfd_boolean
2050comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
2051{
2052 struct arange *arange;
2053
2054 if (unit->error)
2055 return FALSE;
2056
2057 arange = &unit->arange;
2058 do
2059 {
2060 if (addr >= arange->low && addr < arange->high)
2061 return TRUE;
2062 arange = arange->next;
2063 }
2064 while (arange);
2065
2066 return FALSE;
2067}
2068
2069/* If UNIT contains ADDR, set the output parameters to the values for
2070 the line containing ADDR. The output parameters, FILENAME_PTR,
2071 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
2072 to be filled in.
2073
2074 Return TRUE if UNIT contains ADDR, and no errors were encountered;
2075 FALSE otherwise. */
2076
2077static bfd_boolean
2078comp_unit_find_nearest_line (struct comp_unit *unit,
2079 bfd_vma addr,
2080 const char **filename_ptr,
2081 const char **functionname_ptr,
2082 unsigned int *linenumber_ptr,
2083 struct dwarf2_debug *stash)
2084{
2085 bfd_boolean line_p;
2086 bfd_boolean func_p;
2087 struct funcinfo *function;
2088
2089 if (unit->error)
2090 return FALSE;
2091
2092 if (! unit->line_table)
2093 {
2094 if (! unit->stmtlist)
2095 {
2096 unit->error = 1;
2097 return FALSE;
2098 }
2099
2100 unit->line_table = decode_line_info (unit, stash);
2101
2102 if (! unit->line_table)
2103 {
2104 unit->error = 1;
2105 return FALSE;
2106 }
2107
2108 if (unit->first_child_die_ptr < unit->end_ptr
2109 && ! scan_unit_for_symbols (unit))
2110 {
2111 unit->error = 1;
2112 return FALSE;
2113 }
2114 }
2115
2116 function = NULL;
2117 func_p = lookup_address_in_function_table (unit, addr,
2118 &function, functionname_ptr);
2119 if (func_p && (function->tag == DW_TAG_inlined_subroutine))
2120 stash->inliner_chain = function;
2121 line_p = lookup_address_in_line_info_table (unit->line_table, addr,
2122 function, filename_ptr,
2123 linenumber_ptr);
2124 return line_p || func_p;
2125}
2126
2127/* If UNIT contains SYM at ADDR, set the output parameters to the
2128 values for the line containing SYM. The output parameters,
2129 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
2130 filled in.
2131
2132 Return TRUE if UNIT contains SYM, and no errors were encountered;
2133 FALSE otherwise. */
2134
2135static bfd_boolean
2136comp_unit_find_line (struct comp_unit *unit,
2137 asymbol *sym,
2138 bfd_vma addr,
2139 const char **filename_ptr,
2140 unsigned int *linenumber_ptr,
2141 struct dwarf2_debug *stash)
2142{
2143 if (unit->error)
2144 return FALSE;
2145
2146 if (! unit->line_table)
2147 {
2148 if (! unit->stmtlist)
2149 {
2150 unit->error = 1;
2151 return FALSE;
2152 }
2153
2154 unit->line_table = decode_line_info (unit, stash);
2155
2156 if (! unit->line_table)
2157 {
2158 unit->error = 1;
2159 return FALSE;
2160 }
2161
2162 if (unit->first_child_die_ptr < unit->end_ptr
2163 && ! scan_unit_for_symbols (unit))
2164 {
2165 unit->error = 1;
2166 return FALSE;
2167 }
2168 }
2169
2170 if (sym->flags & BSF_FUNCTION)
2171 return lookup_symbol_in_function_table (unit, sym, addr,
2172 filename_ptr,
2173 linenumber_ptr);
2174 else
2175 return lookup_symbol_in_variable_table (unit, sym, addr,
2176 filename_ptr,
2177 linenumber_ptr);
2178}
2179
2180/* Locate a section in a BFD containing debugging info. The search starts
2181 from the section after AFTER_SEC, or from the first section in the BFD if
2182 AFTER_SEC is NULL. The search works by examining the names of the
2183 sections. There are two permissiable names. The first is .debug_info.
2184 This is the standard DWARF2 name. The second is a prefix .gnu.linkonce.wi.
2185 This is a variation on the .debug_info section which has a checksum
2186 describing the contents appended onto the name. This allows the linker to
2187 identify and discard duplicate debugging sections for different
2188 compilation units. */
2189#define DWARF2_DEBUG_INFO ".debug_info"
2190#define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
2191
2192static asection *
2193find_debug_info (bfd *abfd, asection *after_sec)
2194{
2195 asection * msec;
2196
2197 msec = after_sec != NULL ? after_sec->next : abfd->sections;
2198
2199 while (msec)
2200 {
2201 if (strcmp (msec->name, DWARF2_DEBUG_INFO) == 0)
2202 return msec;
2203
2204 if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
2205 return msec;
2206
2207 msec = msec->next;
2208 }
2209
2210 return NULL;
2211}
2212
2213/* Unset vmas for loadable sections in STASH. */
2214
2215static void
2216unset_sections (struct dwarf2_debug *stash)
2217{
2218 unsigned int i;
2219 struct loadable_section *p;
2220
2221 i = stash->loadable_section_count;
2222 p = stash->loadable_sections;
2223 for (; i > 0; i--, p++)
2224 p->section->vma = 0;
2225}
2226
2227/* Set unique vmas for loadable sections in ABFD and save vmas in
2228 STASH for unset_sections. */
2229
2230static bfd_boolean
2231place_sections (bfd *abfd, struct dwarf2_debug *stash)
2232{
2233 struct loadable_section *p;
2234 unsigned int i;
2235
2236 if (stash->loadable_section_count != 0)
2237 {
2238 i = stash->loadable_section_count;
2239 p = stash->loadable_sections;
2240 for (; i > 0; i--, p++)
2241 p->section->vma = p->adj_vma;
2242 }
2243 else
2244 {
2245 asection *sect;
2246 bfd_vma last_vma = 0;
2247 bfd_size_type amt;
2248 struct loadable_section *p;
2249
2250 i = 0;
2251 for (sect = abfd->sections; sect != NULL; sect = sect->next)
2252 {
2253 bfd_size_type sz;
2254
2255 if (sect->vma != 0 || (sect->flags & SEC_LOAD) == 0)
2256 continue;
2257
2258 sz = sect->rawsize ? sect->rawsize : sect->size;
2259 if (sz == 0)
2260 continue;
2261
2262 i++;
2263 }
2264
2265 amt = i * sizeof (struct loadable_section);
2266 p = (struct loadable_section *) bfd_zalloc (abfd, amt);
2267 if (! p)
2268 return FALSE;
2269
2270 stash->loadable_sections = p;
2271 stash->loadable_section_count = i;
2272
2273 for (sect = abfd->sections; sect != NULL; sect = sect->next)
2274 {
2275 bfd_size_type sz;
2276
2277 if (sect->vma != 0 || (sect->flags & SEC_LOAD) == 0)
2278 continue;
2279
2280 sz = sect->rawsize ? sect->rawsize : sect->size;
2281 if (sz == 0)
2282 continue;
2283
2284 p->section = sect;
2285 if (last_vma != 0)
2286 {
2287 /* Align the new address to the current section
2288 alignment. */
2289 last_vma = ((last_vma
2290 + ~((bfd_vma) -1 << sect->alignment_power))
2291 & ((bfd_vma) -1 << sect->alignment_power));
2292 sect->vma = last_vma;
2293 }
2294 p->adj_vma = sect->vma;
2295 last_vma += sect->vma + sz;
2296
2297 p++;
2298 }
2299 }
2300
2301 return TRUE;
2302}
2303
2304/* Find the source code location of SYMBOL. If SYMBOL is NULL
2305 then find the nearest source code location corresponding to
2306 the address SECTION + OFFSET.
2307 Returns TRUE if the line is found without error and fills in
2308 FILENAME_PTR and LINENUMBER_PTR. In the case where SYMBOL was
2309 NULL the FUNCTIONNAME_PTR is also filled in.
2310 SYMBOLS contains the symbol table for ABFD.
2311 ADDR_SIZE is the number of bytes in the initial .debug_info length
2312 field and in the abbreviation offset, or zero to indicate that the
2313 default value should be used. */
2314
2315static bfd_boolean
2316find_line (bfd *abfd,
2317 asection *section,
2318 bfd_vma offset,
2319 asymbol *symbol,
2320 asymbol **symbols,
2321 const char **filename_ptr,
2322 const char **functionname_ptr,
2323 unsigned int *linenumber_ptr,
2324 unsigned int addr_size,
2325 void **pinfo)
2326{
2327 /* Read each compilation unit from the section .debug_info, and check
2328 to see if it contains the address we are searching for. If yes,
2329 lookup the address, and return the line number info. If no, go
2330 on to the next compilation unit.
2331
2332 We keep a list of all the previously read compilation units, and
2333 a pointer to the next un-read compilation unit. Check the
2334 previously read units before reading more. */
2335 struct dwarf2_debug *stash;
2336 /* What address are we looking for? */
2337 bfd_vma addr;
2338 struct comp_unit* each;
2339 bfd_vma found = FALSE;
2340 bfd_boolean do_line;
2341
2342 stash = *pinfo;
2343
2344 if (! stash)
2345 {
2346 bfd_size_type amt = sizeof (struct dwarf2_debug);
2347
2348 stash = bfd_zalloc (abfd, amt);
2349 if (! stash)
2350 return FALSE;
2351 }
2352
2353 /* In a relocatable file, 2 functions may have the same address.
2354 We change the section vma so that they won't overlap. */
2355 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
2356 {
2357 if (! place_sections (abfd, stash))
2358 return FALSE;
2359 }
2360
2361 do_line = (section == NULL
2362 && offset == 0
2363 && functionname_ptr == NULL
2364 && symbol != NULL);
2365 if (do_line)
2366 {
2367 addr = symbol->value;
2368 section = bfd_get_section (symbol);
2369 }
2370 else if (section != NULL
2371 && functionname_ptr != NULL
2372 && symbol == NULL)
2373 addr = offset;
2374 else
2375 abort ();
2376
2377 if (section->output_section)
2378 addr += section->output_section->vma + section->output_offset;
2379 else
2380 addr += section->vma;
2381 *filename_ptr = NULL;
2382 *functionname_ptr = NULL;
2383 *linenumber_ptr = 0;
2384
2385 if (! *pinfo)
2386 {
2387 bfd *debug_bfd;
2388 bfd_size_type total_size;
2389 asection *msec;
2390
2391 *pinfo = stash;
2392
2393 msec = find_debug_info (abfd, NULL);
2394 if (msec == NULL)
2395 {
2396 char * debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
2397
2398 if (debug_filename == NULL)
2399 /* No dwarf2 info, and no gnu_debuglink to follow.
2400 Note that at this point the stash has been allocated, but
2401 contains zeros. This lets future calls to this function
2402 fail more quickly. */
2403 goto done;
2404
2405 if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
2406 || ! bfd_check_format (debug_bfd, bfd_object)
2407 || (msec = find_debug_info (debug_bfd, NULL)) == NULL)
2408 {
2409 if (debug_bfd)
2410 bfd_close (debug_bfd);
2411 /* FIXME: Should we report our failure to follow the debuglink ? */
2412 free (debug_filename);
2413 goto done;
2414 }
2415 }
2416 else
2417 debug_bfd = abfd;
2418
2419 /* There can be more than one DWARF2 info section in a BFD these days.
2420 Read them all in and produce one large stash. We do this in two
2421 passes - in the first pass we just accumulate the section sizes.
2422 In the second pass we read in the section's contents. The allows
2423 us to avoid reallocing the data as we add sections to the stash. */
2424 for (total_size = 0; msec; msec = find_debug_info (debug_bfd, msec))
2425 total_size += msec->size;
2426
2427 stash->info_ptr = bfd_alloc (debug_bfd, total_size);
2428 if (stash->info_ptr == NULL)
2429 goto done;
2430
2431 stash->info_ptr_end = stash->info_ptr;
2432
2433 for (msec = find_debug_info (debug_bfd, NULL);
2434 msec;
2435 msec = find_debug_info (debug_bfd, msec))
2436 {
2437 bfd_size_type size;
2438 bfd_size_type start;
2439
2440 size = msec->size;
2441 if (size == 0)
2442 continue;
2443
2444 start = stash->info_ptr_end - stash->info_ptr;
2445
2446 if ((bfd_simple_get_relocated_section_contents
2447 (debug_bfd, msec, stash->info_ptr + start, symbols)) == NULL)
2448 continue;
2449
2450 stash->info_ptr_end = stash->info_ptr + start + size;
2451 }
2452
2453 BFD_ASSERT (stash->info_ptr_end == stash->info_ptr + total_size);
2454
2455 stash->sec = find_debug_info (debug_bfd, NULL);
2456 stash->sec_info_ptr = stash->info_ptr;
2457 stash->syms = symbols;
2458 stash->bfd = debug_bfd;
2459 }
2460
2461 /* A null info_ptr indicates that there is no dwarf2 info
2462 (or that an error occured while setting up the stash). */
2463 if (! stash->info_ptr)
2464 goto done;
2465
2466 stash->inliner_chain = NULL;
2467
2468 /* Check the previously read comp. units first. */
2469 for (each = stash->all_comp_units; each; each = each->next_unit)
2470 {
2471 if (do_line)
2472 found = (((symbol->flags & BSF_FUNCTION) == 0
2473 || comp_unit_contains_address (each, addr))
2474 && comp_unit_find_line (each, symbol, addr,
2475 filename_ptr, linenumber_ptr,
2476 stash));
2477 else
2478 found = (comp_unit_contains_address (each, addr)
2479 && comp_unit_find_nearest_line (each, addr,
2480 filename_ptr,
2481 functionname_ptr,
2482 linenumber_ptr,
2483 stash));
2484 if (found)
2485 goto done;
2486 }
2487
2488 /* The DWARF2 spec says that the initial length field, and the
2489 offset of the abbreviation table, should both be 4-byte values.
2490 However, some compilers do things differently. */
2491 if (addr_size == 0)
2492 addr_size = 4;
2493 BFD_ASSERT (addr_size == 4 || addr_size == 8);
2494
2495 /* Read each remaining comp. units checking each as they are read. */
2496 while (stash->info_ptr < stash->info_ptr_end)
2497 {
2498 bfd_vma length;
2499 unsigned int offset_size = addr_size;
2500 bfd_byte *info_ptr_unit = stash->info_ptr;
2501
2502 length = read_4_bytes (stash->bfd, stash->info_ptr);
2503 /* A 0xffffff length is the DWARF3 way of indicating
2504 we use 64-bit offsets, instead of 32-bit offsets. */
2505 if (length == 0xffffffff)
2506 {
2507 offset_size = 8;
2508 length = read_8_bytes (stash->bfd, stash->info_ptr + 4);
2509 stash->info_ptr += 12;
2510 }
2511 /* A zero length is the IRIX way of indicating 64-bit offsets,
2512 mostly because the 64-bit length will generally fit in 32
2513 bits, and the endianness helps. */
2514 else if (length == 0)
2515 {
2516 offset_size = 8;
2517 length = read_4_bytes (stash->bfd, stash->info_ptr + 4);
2518 stash->info_ptr += 8;
2519 }
2520 /* In the absence of the hints above, we assume 32-bit DWARF2
2521 offsets even for targets with 64-bit addresses, because:
2522 a) most of the time these targets will not have generated
2523 more than 2Gb of debug info and so will not need 64-bit
2524 offsets,
2525 and
2526 b) if they do use 64-bit offsets but they are not using
2527 the size hints that are tested for above then they are
2528 not conforming to the DWARF3 standard anyway. */
2529 else if (addr_size == 8)
2530 {
2531 offset_size = 4;
2532 stash->info_ptr += 4;
2533 }
2534 else
2535 stash->info_ptr += 4;
2536
2537 if (length > 0)
2538 {
2539 each = parse_comp_unit (stash, length, info_ptr_unit,
2540 offset_size);
2541 stash->info_ptr += length;
2542
2543 if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
2544 == stash->sec->size)
2545 {
2546 stash->sec = find_debug_info (stash->bfd, stash->sec);
2547 stash->sec_info_ptr = stash->info_ptr;
2548 }
2549
2550 if (each)
2551 {
2552 each->next_unit = stash->all_comp_units;
2553 stash->all_comp_units = each;
2554
2555 /* DW_AT_low_pc and DW_AT_high_pc are optional for
2556 compilation units. If we don't have them (i.e.,
2557 unit->high == 0), we need to consult the line info
2558 table to see if a compilation unit contains the given
2559 address. */
2560 if (do_line)
2561 found = (((symbol->flags & BSF_FUNCTION) == 0
2562 || each->arange.high == 0
2563 || comp_unit_contains_address (each, addr))
2564 && comp_unit_find_line (each, symbol, addr,
2565 filename_ptr,
2566 linenumber_ptr,
2567 stash));
2568 else
2569 found = ((each->arange.high == 0
2570 || comp_unit_contains_address (each, addr))
2571 && comp_unit_find_nearest_line (each, addr,
2572 filename_ptr,
2573 functionname_ptr,
2574 linenumber_ptr,
2575 stash));
2576 if (found)
2577 goto done;
2578 }
2579 }
2580 }
2581
2582done:
2583 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
2584 unset_sections (stash);
2585
2586 return found;
2587}
2588
2589/* The DWARF2 version of find_nearest_line.
2590 Return TRUE if the line is found without error. */
2591
2592bfd_boolean
2593_bfd_dwarf2_find_nearest_line (bfd *abfd,
2594 asection *section,
2595 asymbol **symbols,
2596 bfd_vma offset,
2597 const char **filename_ptr,
2598 const char **functionname_ptr,
2599 unsigned int *linenumber_ptr,
2600 unsigned int addr_size,
2601 void **pinfo)
2602{
2603 return find_line (abfd, section, offset, NULL, symbols, filename_ptr,
2604 functionname_ptr, linenumber_ptr, addr_size,
2605 pinfo);
2606}
2607
2608/* The DWARF2 version of find_line.
2609 Return TRUE if the line is found without error. */
2610
2611bfd_boolean
2612_bfd_dwarf2_find_line (bfd *abfd,
2613 asymbol **symbols,
2614 asymbol *symbol,
2615 const char **filename_ptr,
2616 unsigned int *linenumber_ptr,
2617 unsigned int addr_size,
2618 void **pinfo)
2619{
2620 return find_line (abfd, NULL, 0, symbol, symbols, filename_ptr,
2621 NULL, linenumber_ptr, addr_size,
2622 pinfo);
2623}
2624
2625bfd_boolean
2626_bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
2627 const char **filename_ptr,
2628 const char **functionname_ptr,
2629 unsigned int *linenumber_ptr,
2630 void **pinfo)
2631{
2632 struct dwarf2_debug *stash;
2633
2634 stash = *pinfo;
2635 if (stash)
2636 {
2637 struct funcinfo *func = stash->inliner_chain;
2638
2639 if (func && func->caller_func)
2640 {
2641 *filename_ptr = func->caller_file;
2642 *functionname_ptr = func->caller_func->name;
2643 *linenumber_ptr = func->caller_line;
2644 stash->inliner_chain = func->caller_func;
2645 return TRUE;
2646 }
2647 }
2648
2649 return FALSE;
2650}
2651
2652void
2653_bfd_dwarf2_cleanup_debug_info (bfd *abfd)
2654{
2655 struct comp_unit *each;
2656 struct dwarf2_debug *stash;
2657
2658 if (abfd == NULL || elf_tdata (abfd) == NULL)
2659 return;
2660
2661 stash = elf_tdata (abfd)->dwarf2_find_line_info;
2662
2663 if (stash == NULL)
2664 return;
2665
2666 for (each = stash->all_comp_units; each; each = each->next_unit)
2667 {
2668 struct abbrev_info **abbrevs = each->abbrevs;
2669 size_t i;
2670
2671 for (i = 0; i < ABBREV_HASH_SIZE; i++)
2672 {
2673 struct abbrev_info *abbrev = abbrevs[i];
2674
2675 while (abbrev)
2676 {
2677 free (abbrev->attrs);
2678 abbrev = abbrev->next;
2679 }
2680 }
2681
2682 if (each->line_table)
2683 {
2684 free (each->line_table->dirs);
2685 free (each->line_table->files);
2686 }
2687 }
2688
2689 free (stash->dwarf_abbrev_buffer);
2690 free (stash->dwarf_line_buffer);
2691 free (stash->dwarf_ranges_buffer);
2692}
This page took 0.032084 seconds and 4 git commands to generate.