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