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