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