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