2
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
3
Free Software Foundation, Inc.
5
Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
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
16
This file is part of BFD.
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.
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.
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. */
34
#include "libiberty.h"
37
#include "elf/dwarf2.h"
39
/* The data in the .debug_line statement prologue looks like this. */
44
unsigned short version;
45
bfd_vma prologue_length;
46
unsigned char minimum_instruction_length;
47
unsigned char default_is_stmt;
49
unsigned char line_range;
50
unsigned char opcode_base;
51
unsigned char *standard_opcode_lengths;
54
/* Attributes have a name and a value. */
58
enum dwarf_attribute name;
63
struct dwarf_block *blk;
71
/* Get at parts of an attribute structure. */
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)
79
/* Blocks are a bunch of untyped bytes. */
88
/* A list of all previously read comp_units. */
89
struct comp_unit* all_comp_units;
91
/* The next unread compilation unit within the .debug_info section.
92
Zero indicates that the .debug_info section has not been loaded
96
/* Pointer to the end of the .debug_info section memory buffer. */
99
/* Pointer to the section and address of the beginning of the
104
/* Pointer to the symbol table. */
107
/* Pointer to the .debug_abbrev section loaded into memory. */
108
char* dwarf_abbrev_buffer;
110
/* Length of the loaded .debug_abbrev section. */
111
unsigned long dwarf_abbrev_size;
113
/* Buffer for decode_line_info. */
114
char *dwarf_line_buffer;
116
/* Length of the loaded .debug_line section. */
117
unsigned long dwarf_line_size;
119
/* Pointer to the .debug_str section loaded into memory. */
120
char* dwarf_str_buffer;
122
/* Length of the loaded .debug_str section. */
123
unsigned long dwarf_str_size;
133
/* A minimal decoding of DWARF2 compilation units. We only decode
134
what's needed to get to the line number information. */
138
/* Chain the previously read compilation units. */
139
struct comp_unit* next_unit;
141
/* Keep the bdf convenient (for memory allocation). */
144
/* The lowest and higest addresses contained in this compilation
145
unit as specified in the compilation unit header. */
146
struct arange arange;
148
/* The DW_AT_name attribute (for error messages). */
151
/* The abbrev hash table. */
152
struct abbrev_info** abbrevs;
154
/* Note that an error was found by comp_unit_find_nearest_line. */
157
/* The DW_AT_comp_dir attribute. */
160
/* True if there is a line number table associated with this comp. unit. */
163
/* The offset into .debug_line of the line number table. */
164
unsigned long line_offset;
166
/* Pointer to the first child die for the comp unit. */
167
char *first_child_die_ptr;
169
/* The end of the comp unit. */
172
/* The decoded line number, NULL if not yet decoded. */
173
struct line_info_table* line_table;
175
/* A list of the functions found in this comp. unit. */
176
struct funcinfo* function_table;
178
/* Pointer to dwarf2_debug structure. */
179
struct dwarf2_debug *stash;
181
/* Address size for this unit - from unit header. */
182
unsigned char addr_size;
184
/* Offset size for this unit - from unit header. */
185
unsigned char offset_size;
188
/* This data structure holds the information of an abbrev. */
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. */
201
enum dwarf_attribute name;
202
enum dwarf_form form;
205
#ifndef ABBREV_HASH_SIZE
206
#define ABBREV_HASH_SIZE 121
208
#ifndef ATTR_ALLOC_CHUNK
209
#define ATTR_ALLOC_CHUNK 4
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 *));
260
The following function up to the END VERBATIM mark are
261
copied directly from dwarf2read.c. */
263
/* Read dwarf information from a buffer. */
266
read_1_byte (abfd, buf)
267
bfd *abfd ATTRIBUTE_UNUSED;
270
return bfd_get_8 (abfd, (bfd_byte *) buf);
274
read_1_signed_byte (abfd, buf)
275
bfd *abfd ATTRIBUTE_UNUSED;
278
return bfd_get_signed_8 (abfd, (bfd_byte *) buf);
282
read_2_bytes (abfd, buf)
286
return bfd_get_16 (abfd, (bfd_byte *) buf);
289
#if 0 /* This is not used. */
292
read_2_signed_bytes (abfd, buf)
296
return bfd_get_signed_16 (abfd, (bfd_byte *) buf);
302
read_4_bytes (abfd, buf)
306
return bfd_get_32 (abfd, (bfd_byte *) buf);
309
#if 0 /* This is not used. */
312
read_4_signed_bytes (abfd, buf)
316
return bfd_get_signed_32 (abfd, (bfd_byte *) buf);
322
read_8_bytes (abfd, buf)
326
return bfd_get_64 (abfd, (bfd_byte *) buf);
330
read_n_bytes (abfd, buf, size)
331
bfd *abfd ATTRIBUTE_UNUSED;
333
unsigned int size ATTRIBUTE_UNUSED;
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. */
342
read_string (abfd, buf, bytes_read_ptr)
343
bfd *abfd ATTRIBUTE_UNUSED;
345
unsigned int *bytes_read_ptr;
347
/* Return a pointer to the embedded string. */
354
*bytes_read_ptr = strlen (buf) + 1;
359
read_indirect_string (unit, buf, bytes_read_ptr)
360
struct comp_unit* unit;
362
unsigned int *bytes_read_ptr;
365
struct dwarf2_debug *stash = unit->stash;
367
if (unit->offset_size == 4)
368
offset = read_4_bytes (unit->abfd, buf);
370
offset = read_8_bytes (unit->abfd, buf);
371
*bytes_read_ptr = unit->offset_size;
373
if (! stash->dwarf_str_buffer)
376
bfd *abfd = unit->abfd;
378
msec = bfd_get_section_by_name (abfd, ".debug_str");
381
(*_bfd_error_handler)
382
(_("Dwarf Error: Can't find .debug_str section."));
383
bfd_set_error (bfd_error_bad_value);
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)
392
if (! bfd_get_section_contents (abfd, msec, stash->dwarf_str_buffer,
393
(bfd_vma) 0, msec->_raw_size))
397
if (offset >= stash->dwarf_str_size)
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);
405
buf = stash->dwarf_str_buffer + offset;
412
read_unsigned_leb128 (abfd, buf, bytes_read_ptr)
413
bfd *abfd ATTRIBUTE_UNUSED;
415
unsigned int *bytes_read_ptr;
418
unsigned int num_read;
428
byte = bfd_get_8 (abfd, (bfd_byte *) buf);
431
result |= ((byte & 0x7f) << shift);
436
* bytes_read_ptr = num_read;
442
read_signed_leb128 (abfd, buf, bytes_read_ptr)
443
bfd *abfd ATTRIBUTE_UNUSED;
445
unsigned int * bytes_read_ptr;
458
byte = bfd_get_8 (abfd, (bfd_byte *) buf);
461
result |= ((byte & 0x7f) << shift);
466
if ((shift < 32) && (byte & 0x40))
467
result |= -(1 << shift);
469
* bytes_read_ptr = num_read;
477
read_address (unit, buf)
478
struct comp_unit* unit;
481
switch (unit->addr_size)
484
return bfd_get_64 (unit->abfd, (bfd_byte *) buf);
486
return bfd_get_32 (unit->abfd, (bfd_byte *) buf);
488
return bfd_get_16 (unit->abfd, (bfd_byte *) buf);
494
/* Lookup an abbrev_info structure in the abbrev hash table. */
496
static struct abbrev_info *
497
lookup_abbrev (number,abbrevs)
499
struct abbrev_info **abbrevs;
501
unsigned int hash_number;
502
struct abbrev_info *abbrev;
504
hash_number = number % ABBREV_HASH_SIZE;
505
abbrev = abbrevs[hash_number];
509
if (abbrev->number == number)
512
abbrev = abbrev->next;
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
523
static struct abbrev_info**
524
read_abbrevs (abfd, offset, stash)
527
struct dwarf2_debug *stash;
529
struct abbrev_info **abbrevs;
531
struct abbrev_info *cur_abbrev;
532
unsigned int abbrev_number, bytes_read, abbrev_name;
533
unsigned int abbrev_form, hash_number;
536
if (! stash->dwarf_abbrev_buffer)
540
msec = bfd_get_section_by_name (abfd, ".debug_abbrev");
543
(*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_abbrev section."));
544
bfd_set_error (bfd_error_bad_value);
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)
553
if (! bfd_get_section_contents (abfd, msec, stash->dwarf_abbrev_buffer,
554
(bfd_vma) 0, msec->_raw_size))
558
if (offset >= stash->dwarf_abbrev_size)
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);
566
amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
567
abbrevs = (struct abbrev_info**) bfd_zalloc (abfd, amt);
569
abbrev_ptr = stash->dwarf_abbrev_buffer + offset;
570
abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
571
abbrev_ptr += bytes_read;
573
/* Loop until we reach an abbrev number of 0. */
574
while (abbrev_number)
576
amt = sizeof (struct abbrev_info);
577
cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt);
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);
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;
594
if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
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)
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;
612
hash_number = abbrev_number % ABBREV_HASH_SIZE;
613
cur_abbrev->next = abbrevs[hash_number];
614
abbrevs[hash_number] = cur_abbrev;
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
623
if ((unsigned int) (abbrev_ptr - stash->dwarf_abbrev_buffer)
624
>= stash->dwarf_abbrev_size)
626
abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
627
abbrev_ptr += bytes_read;
628
if (lookup_abbrev (abbrev_number,abbrevs) != NULL)
635
/* Read an attribute value described by an attribute form. */
638
read_attribute_value (attr, form, unit, info_ptr)
639
struct attribute *attr;
641
struct comp_unit *unit;
644
bfd *abfd = unit->abfd;
645
unsigned int bytes_read;
646
struct dwarf_block *blk;
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;
660
amt = sizeof (struct dwarf_block);
661
blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
662
blk->size = read_2_bytes (abfd, info_ptr);
664
blk->data = read_n_bytes (abfd, info_ptr, blk->size);
665
info_ptr += blk->size;
666
DW_BLOCK (attr) = blk;
669
amt = sizeof (struct dwarf_block);
670
blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
671
blk->size = read_4_bytes (abfd, info_ptr);
673
blk->data = read_n_bytes (abfd, info_ptr, blk->size);
674
info_ptr += blk->size;
675
DW_BLOCK (attr) = blk;
678
DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
682
DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
686
DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
690
DW_STRING (attr) = read_string (abfd, info_ptr, &bytes_read);
691
info_ptr += bytes_read;
694
DW_STRING (attr) = read_indirect_string (unit, info_ptr, &bytes_read);
695
info_ptr += bytes_read;
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;
707
amt = sizeof (struct dwarf_block);
708
blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
709
blk->size = read_1_byte (abfd, info_ptr);
711
blk->data = read_n_bytes (abfd, info_ptr, blk->size);
712
info_ptr += blk->size;
713
DW_BLOCK (attr) = blk;
716
DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
720
DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
724
DW_SND (attr) = read_signed_leb128 (abfd, info_ptr, &bytes_read);
725
info_ptr += bytes_read;
728
DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
729
info_ptr += bytes_read;
732
DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
736
DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
740
DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
744
DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
747
case DW_FORM_ref_udata:
748
DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
749
info_ptr += bytes_read;
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);
757
(*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
759
bfd_set_error (bfd_error_bad_value);
764
/* Read an attribute described by an abbreviated attribute. */
767
read_attribute (attr, abbrev, unit, info_ptr)
768
struct attribute *attr;
769
struct attr_abbrev *abbrev;
770
struct comp_unit *unit;
773
attr->name = abbrev->name;
774
info_ptr = read_attribute_value (attr, abbrev->form, unit, info_ptr);
778
/* Source line information table routines. */
780
#define FILE_ALLOC_CHUNK 5
781
#define DIR_ALLOC_CHUNK 5
785
struct line_info* prev_line;
790
int end_sequence; /* End of (sequential) code sequence. */
801
struct line_info_table
804
unsigned int num_files;
805
unsigned int num_dirs;
808
struct fileinfo* files;
809
struct line_info* last_line;
814
struct funcinfo *prev_func;
821
add_line_info (table, address, filename, line, column, end_sequence)
822
struct line_info_table* table;
829
bfd_size_type amt = sizeof (struct line_info);
830
struct line_info* info = (struct line_info*) bfd_alloc (table->abfd, amt);
832
info->prev_line = table->last_line;
833
table->last_line = info;
835
info->address = address;
836
info->filename = filename;
838
info->column = column;
839
info->end_sequence = end_sequence;
843
concat_filename (table, file)
844
struct line_info_table* table;
849
if (file - 1 >= table->num_files)
851
(*_bfd_error_handler)
852
(_("Dwarf Error: mangled line number section (bad file number)."));
856
filename = table->files[file - 1].name;
857
if (IS_ABSOLUTE_PATH(filename))
861
char* dirname = (table->files[file - 1].dir
862
? table->dirs[table->files[file - 1].dir - 1]
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. */
870
return (char*) concat (dirname, "/", filename, NULL);
875
arange_add (unit, low_pc, high_pc)
876
struct comp_unit *unit;
880
struct arange *arange;
882
/* First see if we can cheaply extend an existing range. */
883
arange = &unit->arange;
887
if (low_pc == arange->high)
889
arange->high = high_pc;
892
if (high_pc == arange->low)
894
arange->low = low_pc;
897
arange = arange->next;
901
if (unit->arange.high == 0)
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;
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;
915
arange->next = unit->arange.next;
916
unit->arange.next = arange;
919
/* Decode the line number information for UNIT. */
921
static struct line_info_table*
922
decode_line_info (unit, stash)
923
struct comp_unit *unit;
924
struct dwarf2_debug *stash;
926
bfd *abfd = unit->abfd;
927
struct line_info_table* table;
931
unsigned int i, bytes_read, offset_size;
932
char *cur_file, *cur_dir;
933
unsigned char op_code, extended_op, adj_opcode;
936
if (! stash->dwarf_line_buffer)
940
msec = bfd_get_section_by_name (abfd, ".debug_line");
943
(*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_line section."));
944
bfd_set_error (bfd_error_bad_value);
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)
953
if (! bfd_get_section_contents (abfd, msec, stash->dwarf_line_buffer,
954
(bfd_vma) 0, msec->_raw_size))
957
/* FIXME: We ought to apply the relocs against this section before
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
964
if (unit->line_offset >= stash->dwarf_line_size)
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);
972
amt = sizeof (struct line_info_table);
973
table = (struct line_info_table*) bfd_alloc (abfd, amt);
975
table->comp_dir = unit->comp_dir;
977
table->num_files = 0;
984
table->last_line = NULL;
986
line_ptr = stash->dwarf_line_buffer + unit->line_offset;
988
/* Read in the prologue. */
989
lh.total_length = read_4_bytes (abfd, line_ptr);
992
if (lh.total_length == 0xffffffff)
994
lh.total_length = read_8_bytes (abfd, line_ptr);
998
else if (lh.total_length == 0 && unit->addr_size == 8)
1000
/* Handle (non-standard) 64-bit DWARF2 formats. */
1001
lh.total_length = read_4_bytes (abfd, line_ptr);
1005
line_end = line_ptr + lh.total_length;
1006
lh.version = read_2_bytes (abfd, line_ptr);
1008
if (offset_size == 4)
1009
lh.prologue_length = read_4_bytes (abfd, line_ptr);
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);
1015
lh.default_is_stmt = read_1_byte (abfd, line_ptr);
1017
lh.line_base = read_1_signed_byte (abfd, line_ptr);
1019
lh.line_range = read_1_byte (abfd, line_ptr);
1021
lh.opcode_base = read_1_byte (abfd, line_ptr);
1023
amt = lh.opcode_base * sizeof (unsigned char);
1024
lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt);
1026
lh.standard_opcode_lengths[0] = 1;
1028
for (i = 1; i < lh.opcode_base; ++i)
1030
lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
1034
/* Read directory table. */
1035
while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1037
line_ptr += bytes_read;
1039
if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
1041
amt = table->num_dirs + DIR_ALLOC_CHUNK;
1042
amt *= sizeof (char *);
1043
table->dirs = (char **) bfd_realloc (table->dirs, amt);
1048
table->dirs[table->num_dirs++] = cur_dir;
1051
line_ptr += bytes_read;
1053
/* Read file name table. */
1054
while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1056
line_ptr += bytes_read;
1058
if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1060
amt = table->num_files + FILE_ALLOC_CHUNK;
1061
amt *= sizeof (struct fileinfo);
1062
table->files = (struct fileinfo *) bfd_realloc (table->files, amt);
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;
1080
line_ptr += bytes_read;
1082
/* Read the statement sequences until there's nothing left. */
1083
while (line_ptr < line_end)
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, need_low_pc = 1;
1095
/* Decode the table. */
1096
while (! end_sequence)
1098
op_code = read_1_byte (abfd, line_ptr);
1101
if (op_code >= lh.opcode_base)
1102
{ /* Special operand. */
1103
adj_opcode = op_code - lh.opcode_base;
1104
address += (adj_opcode / lh.line_range)
1105
* lh.minimum_instruction_length;
1106
line += lh.line_base + (adj_opcode % lh.line_range);
1107
/* Append row to matrix using current values. */
1108
add_line_info (table, address, filename, line, column, 0);
1116
else switch (op_code)
1118
case DW_LNS_extended_op:
1119
line_ptr += 1; /* Ignore length. */
1120
extended_op = read_1_byte (abfd, line_ptr);
1122
switch (extended_op)
1124
case DW_LNE_end_sequence:
1126
add_line_info (table, address, filename, line, column,
1133
arange_add (unit, low_pc, address);
1135
case DW_LNE_set_address:
1136
address = read_address (unit, line_ptr);
1137
line_ptr += unit->addr_size;
1139
case DW_LNE_define_file:
1140
cur_file = read_string (abfd, line_ptr, &bytes_read);
1141
line_ptr += bytes_read;
1142
if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1144
amt = table->num_files + FILE_ALLOC_CHUNK;
1145
amt *= sizeof (struct fileinfo);
1147
(struct fileinfo *) bfd_realloc (table->files, amt);
1151
table->files[table->num_files].name = cur_file;
1152
table->files[table->num_files].dir =
1153
read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1154
line_ptr += bytes_read;
1155
table->files[table->num_files].time =
1156
read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1157
line_ptr += bytes_read;
1158
table->files[table->num_files].size =
1159
read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1160
line_ptr += bytes_read;
1164
(*_bfd_error_handler) (_("Dwarf Error: mangled line number section."));
1165
bfd_set_error (bfd_error_bad_value);
1170
add_line_info (table, address, filename, line, column, 0);
1178
case DW_LNS_advance_pc:
1179
address += lh.minimum_instruction_length
1180
* read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1181
line_ptr += bytes_read;
1183
case DW_LNS_advance_line:
1184
line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
1185
line_ptr += bytes_read;
1187
case DW_LNS_set_file:
1191
/* The file and directory tables are 0 based, the references
1193
file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1194
line_ptr += bytes_read;
1195
filename = concat_filename (table, file);
1198
case DW_LNS_set_column:
1199
column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1200
line_ptr += bytes_read;
1202
case DW_LNS_negate_stmt:
1203
is_stmt = (!is_stmt);
1205
case DW_LNS_set_basic_block:
1208
case DW_LNS_const_add_pc:
1209
address += lh.minimum_instruction_length
1210
* ((255 - lh.opcode_base) / lh.line_range);
1212
case DW_LNS_fixed_advance_pc:
1213
address += read_2_bytes (abfd, line_ptr);
1217
{ /* Unknown standard opcode, ignore it. */
1219
for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
1221
(void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1222
line_ptr += bytes_read;
1232
/* If ADDR is within TABLE set the output parameters and return true,
1233
otherwise return false. The output parameters, FILENAME_PTR and
1234
LINENUMBER_PTR, are pointers to the objects to be filled in. */
1237
lookup_address_in_line_info_table (table,
1242
struct line_info_table* table;
1244
struct funcinfo *function;
1245
const char **filename_ptr;
1246
unsigned int *linenumber_ptr;
1248
struct line_info* next_line = table->last_line;
1249
struct line_info* each_line;
1254
each_line = next_line->prev_line;
1256
while (each_line && next_line)
1258
if (!each_line->end_sequence
1259
&& addr >= each_line->address && addr < next_line->address)
1261
/* If this line appears to span functions, and addr is in the
1262
later function, return the first line of that function instead
1263
of the last line of the earlier one. This check is for GCC
1264
2.95, which emits the first line number for a function late. */
1265
if (function != NULL
1266
&& each_line->address < function->low
1267
&& next_line->address > function->low)
1269
*filename_ptr = next_line->filename;
1270
*linenumber_ptr = next_line->line;
1274
*filename_ptr = each_line->filename;
1275
*linenumber_ptr = each_line->line;
1279
next_line = each_line;
1280
each_line = each_line->prev_line;
1283
/* At this point each_line is NULL but next_line is not. If we found the
1284
containing function in this compilation unit, return the first line we
1285
have a number for. This is also for compatibility with GCC 2.95. */
1286
if (function != NULL)
1288
*filename_ptr = next_line->filename;
1289
*linenumber_ptr = next_line->line;
1296
/* Function table functions. */
1298
/* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return true. */
1301
lookup_address_in_function_table (table,
1305
struct funcinfo* table;
1307
struct funcinfo** function_ptr;
1308
const char **functionname_ptr;
1310
struct funcinfo* each_func;
1312
for (each_func = table;
1314
each_func = each_func->prev_func)
1316
if (addr >= each_func->low && addr < each_func->high)
1318
*functionname_ptr = each_func->name;
1319
*function_ptr = each_func;
1327
/* DWARF2 Compilation unit functions. */
1329
/* Scan over each die in a comp. unit looking for functions to add
1330
to the function table. */
1333
scan_unit_for_functions (unit)
1334
struct comp_unit *unit;
1336
bfd *abfd = unit->abfd;
1337
char *info_ptr = unit->first_child_die_ptr;
1338
int nesting_level = 1;
1340
while (nesting_level)
1342
unsigned int abbrev_number, bytes_read, i;
1343
struct abbrev_info *abbrev;
1344
struct attribute attr;
1345
struct funcinfo *func;
1348
abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1349
info_ptr += bytes_read;
1351
if (! abbrev_number)
1357
abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
1360
(*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1362
bfd_set_error (bfd_error_bad_value);
1366
if (abbrev->tag == DW_TAG_subprogram)
1368
bfd_size_type amt = sizeof (struct funcinfo);
1369
func = (struct funcinfo *) bfd_zalloc (abfd, amt);
1370
func->prev_func = unit->function_table;
1371
unit->function_table = func;
1376
for (i = 0; i < abbrev->num_attrs; ++i)
1378
info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1386
name = DW_STRING (&attr);
1388
/* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1389
if (func->name == NULL)
1390
func->name = DW_STRING (&attr);
1393
case DW_AT_MIPS_linkage_name:
1394
func->name = DW_STRING (&attr);
1398
func->low = DW_ADDR (&attr);
1402
func->high = DW_ADDR (&attr);
1414
name = DW_STRING (&attr);
1423
if (abbrev->has_children)
1430
/* Look for a RELA relocation to be applied on OFFSET of section SEC,
1431
and return the addend if such a relocation is found. Since this is
1432
only used to find relocations referring to the .debug_abbrev
1433
section, we make sure the relocation refers to this section, but
1434
this is not strictly necessary, and it can probably be safely
1435
removed if needed. However, it is important to note that this
1436
function only returns the addend, it doesn't serve the purpose of
1437
applying a generic relocation.
1439
If no suitable relocation is found, or if it is not a real RELA
1440
relocation, this function returns 0. */
1443
find_rela_addend (abfd, sec, offset, syms)
1446
bfd_size_type offset;
1449
long reloc_size = bfd_get_reloc_upper_bound (abfd, sec);
1450
arelent **relocs = NULL;
1451
long reloc_count, relc;
1453
if (reloc_size <= 0)
1456
relocs = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
1460
reloc_count = bfd_canonicalize_reloc (abfd, sec, relocs, syms);
1462
if (reloc_count <= 0)
1468
for (relc = 0; relc < reloc_count; relc++)
1469
if (relocs[relc]->address == offset
1470
&& (*relocs[relc]->sym_ptr_ptr)->flags & BSF_SECTION_SYM
1471
&& strcmp ((*relocs[relc]->sym_ptr_ptr)->name,
1472
".debug_abbrev") == 0)
1474
bfd_vma addend = (relocs[relc]->howto->partial_inplace
1475
? 0 : relocs[relc]->addend);
1484
/* Parse a DWARF2 compilation unit starting at INFO_PTR. This
1485
includes the compilation unit header that proceeds the DIE's, but
1486
does not include the length field that preceeds each compilation
1487
unit header. END_PTR points one past the end of this comp unit.
1488
OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
1490
This routine does not read the whole compilation unit; only enough
1491
to get to the line number information for the compilation unit. */
1493
static struct comp_unit *
1494
parse_comp_unit (abfd, stash, unit_length, offset_size)
1496
struct dwarf2_debug *stash;
1497
bfd_vma unit_length;
1498
unsigned int offset_size;
1500
struct comp_unit* unit;
1501
unsigned int version;
1502
bfd_vma abbrev_offset = 0;
1503
unsigned int addr_size;
1504
struct abbrev_info** abbrevs;
1505
unsigned int abbrev_number, bytes_read, i;
1506
struct abbrev_info *abbrev;
1507
struct attribute attr;
1508
char *info_ptr = stash->info_ptr;
1509
char *end_ptr = info_ptr + unit_length;
1513
version = read_2_bytes (abfd, info_ptr);
1515
BFD_ASSERT (offset_size == 4 || offset_size == 8);
1516
if (offset_size == 4)
1517
abbrev_offset = read_4_bytes (abfd, info_ptr);
1519
abbrev_offset = read_8_bytes (abfd, info_ptr);
1520
/* The abbrev offset is generally a relocation pointing to
1521
.debug_abbrev+offset. On RELA targets, we have to find the
1522
relocation and extract the addend to obtain the actual
1523
abbrev_offset, so do it here. */
1524
off = info_ptr - stash->sec_info_ptr;
1525
abbrev_offset += find_rela_addend (abfd, stash->sec, off, stash->syms);
1526
info_ptr += offset_size;
1527
addr_size = read_1_byte (abfd, info_ptr);
1532
(*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version);
1533
bfd_set_error (bfd_error_bad_value);
1537
if (addr_size > sizeof (bfd_vma))
1539
(*_bfd_error_handler) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1541
(unsigned int) sizeof (bfd_vma));
1542
bfd_set_error (bfd_error_bad_value);
1546
if (addr_size != 2 && addr_size != 4 && addr_size != 8)
1548
(*_bfd_error_handler) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size);
1549
bfd_set_error (bfd_error_bad_value);
1553
/* Read the abbrevs for this compilation unit into a table. */
1554
abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
1558
abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1559
info_ptr += bytes_read;
1560
if (! abbrev_number)
1562
(*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
1564
bfd_set_error (bfd_error_bad_value);
1568
abbrev = lookup_abbrev (abbrev_number, abbrevs);
1571
(*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1573
bfd_set_error (bfd_error_bad_value);
1577
amt = sizeof (struct comp_unit);
1578
unit = (struct comp_unit*) bfd_zalloc (abfd, amt);
1580
unit->addr_size = addr_size;
1581
unit->offset_size = offset_size;
1582
unit->abbrevs = abbrevs;
1583
unit->end_ptr = end_ptr;
1584
unit->stash = stash;
1586
for (i = 0; i < abbrev->num_attrs; ++i)
1588
info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1590
/* Store the data if it is of an attribute we want to keep in a
1591
partial symbol table. */
1594
case DW_AT_stmt_list:
1596
unit->line_offset = DW_UNSND (&attr);
1600
unit->name = DW_STRING (&attr);
1604
unit->arange.low = DW_ADDR (&attr);
1608
unit->arange.high = DW_ADDR (&attr);
1611
case DW_AT_comp_dir:
1613
char* comp_dir = DW_STRING (&attr);
1616
/* Irix 6.2 native cc prepends <machine>.: to the compilation
1617
directory, get rid of it. */
1618
char *cp = (char*) strchr (comp_dir, ':');
1620
if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
1623
unit->comp_dir = comp_dir;
1632
unit->first_child_die_ptr = info_ptr;
1636
/* Return true if UNIT contains the address given by ADDR. */
1639
comp_unit_contains_address (unit, addr)
1640
struct comp_unit* unit;
1643
struct arange *arange;
1648
arange = &unit->arange;
1651
if (addr >= arange->low && addr < arange->high)
1653
arange = arange->next;
1660
/* If UNIT contains ADDR, set the output parameters to the values for
1661
the line containing ADDR. The output parameters, FILENAME_PTR,
1662
FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
1665
Return true of UNIT contains ADDR, and no errors were encountered;
1669
comp_unit_find_nearest_line (unit, addr,
1670
filename_ptr, functionname_ptr, linenumber_ptr,
1672
struct comp_unit* unit;
1674
const char **filename_ptr;
1675
const char **functionname_ptr;
1676
unsigned int *linenumber_ptr;
1677
struct dwarf2_debug *stash;
1681
struct funcinfo *function;
1686
if (! unit->line_table)
1688
if (! unit->stmtlist)
1694
unit->line_table = decode_line_info (unit, stash);
1696
if (! unit->line_table)
1702
if (unit->first_child_die_ptr < unit->end_ptr
1703
&& ! scan_unit_for_functions (unit))
1711
func_p = lookup_address_in_function_table (unit->function_table,
1715
line_p = lookup_address_in_line_info_table (unit->line_table,
1720
return line_p || func_p;
1723
/* Locate a section in a BFD containing debugging info. The search starts from the
1724
section after AFTER_SEC, or from the first section in the BFD if AFTER_SEC is
1725
NULL. The search works by examining the names of the sections. There are two
1726
permissiable names. The first is .debug_info. This is the standard DWARF2 name.
1727
The second is a prefix .gnu.linkonce.wi. This is a variation on the .debug_info
1728
section which has a checksum describing the contents appended onto the name. This
1729
allows the linker to identify and discard duplicate debugging sections for
1730
different compilation units. */
1731
#define DWARF2_DEBUG_INFO ".debug_info"
1732
#define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
1735
find_debug_info (abfd, after_sec)
1737
asection * after_sec;
1742
msec = after_sec->next;
1744
msec = abfd->sections;
1748
if (strcmp (msec->name, DWARF2_DEBUG_INFO) == 0)
1751
if (strncmp (msec->name, GNU_LINKONCE_INFO, strlen (GNU_LINKONCE_INFO)) == 0)
1760
/* The DWARF2 version of find_nearest line. Return true if the line
1761
is found without error. ADDR_SIZE is the number of bytes in the
1762
initial .debug_info length field and in the abbreviation offset.
1763
You may use zero to indicate that the default value should be
1767
_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
1768
filename_ptr, functionname_ptr,
1775
const char **filename_ptr;
1776
const char **functionname_ptr;
1777
unsigned int *linenumber_ptr;
1778
unsigned int addr_size;
1781
/* Read each compilation unit from the section .debug_info, and check
1782
to see if it contains the address we are searching for. If yes,
1783
lookup the address, and return the line number info. If no, go
1784
on to the next compilation unit.
1786
We keep a list of all the previously read compilation units, and
1787
a pointer to the next un-read compilation unit. Check the
1788
previously read units before reading more. */
1789
struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
1791
/* What address are we looking for? */
1792
bfd_vma addr = offset + section->vma;
1794
struct comp_unit* each;
1796
*filename_ptr = NULL;
1797
*functionname_ptr = NULL;
1798
*linenumber_ptr = 0;
1800
/* The DWARF2 spec says that the initial length field, and the
1801
offset of the abbreviation table, should both be 4-byte values.
1802
However, some compilers do things differently. */
1805
BFD_ASSERT (addr_size == 4 || addr_size == 8);
1809
bfd_size_type total_size;
1811
bfd_size_type amt = sizeof (struct dwarf2_debug);
1813
stash = (struct dwarf2_debug*) bfd_zalloc (abfd, amt);
1817
*pinfo = (PTR) stash;
1819
msec = find_debug_info (abfd, NULL);
1821
/* No dwarf2 info. Note that at this point the stash
1822
has been allocated, but contains zeros, this lets
1823
future calls to this function fail quicker. */
1826
/* There can be more than one DWARF2 info section in a BFD these days.
1827
Read them all in and produce one large stash. We do this in two
1828
passes - in the first pass we just accumulate the section sizes.
1829
In the second pass we read in the section's contents. The allows
1830
us to avoid reallocing the data as we add sections to the stash. */
1831
for (total_size = 0; msec; msec = find_debug_info (abfd, msec))
1832
total_size += msec->_raw_size;
1834
stash->info_ptr = (char *) bfd_alloc (abfd, total_size);
1835
if (stash->info_ptr == NULL)
1838
stash->info_ptr_end = stash->info_ptr;
1840
for (msec = find_debug_info (abfd, NULL);
1842
msec = find_debug_info (abfd, msec))
1845
bfd_size_type start;
1847
size = msec->_raw_size;
1851
start = stash->info_ptr_end - stash->info_ptr;
1853
if (! bfd_get_section_contents (abfd, msec, stash->info_ptr + start,
1857
stash->info_ptr_end = stash->info_ptr + start + size;
1860
BFD_ASSERT (stash->info_ptr_end == stash->info_ptr + total_size);
1862
stash->sec = find_debug_info (abfd, NULL);
1863
stash->sec_info_ptr = stash->info_ptr;
1864
stash->syms = symbols;
1867
/* FIXME: There is a problem with the contents of the
1868
.debug_info section. The 'low' and 'high' addresses of the
1869
comp_units are computed by relocs against symbols in the
1870
.text segment. We need these addresses in order to determine
1871
the nearest line number, and so we have to resolve the
1872
relocs. There is a similar problem when the .debug_line
1873
section is processed as well (e.g., there may be relocs
1874
against the operand of the DW_LNE_set_address operator).
1876
Unfortunately getting hold of the reloc information is hard...
1878
For now, this means that disassembling object files (as
1879
opposed to fully executables) does not always work as well as
1882
/* A null info_ptr indicates that there is no dwarf2 info
1883
(or that an error occured while setting up the stash). */
1884
if (! stash->info_ptr)
1887
/* Check the previously read comp. units first. */
1888
for (each = stash->all_comp_units; each; each = each->next_unit)
1889
if (comp_unit_contains_address (each, addr))
1890
return comp_unit_find_nearest_line (each, addr, filename_ptr,
1891
functionname_ptr, linenumber_ptr,
1894
/* Read each remaining comp. units checking each as they are read. */
1895
while (stash->info_ptr < stash->info_ptr_end)
1899
unsigned int offset_size = addr_size;
1903
length = read_4_bytes (abfd, stash->info_ptr);
1904
if (length == 0xffffffff)
1907
length = read_8_bytes (abfd, stash->info_ptr + 4);
1908
stash->info_ptr += 8;
1912
length = read_8_bytes (abfd, stash->info_ptr);
1913
stash->info_ptr += addr_size;
1917
each = parse_comp_unit (abfd, stash, length, offset_size);
1918
stash->info_ptr += length;
1920
if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
1921
== stash->sec->_raw_size)
1923
stash->sec = find_debug_info (abfd, stash->sec);
1924
stash->sec_info_ptr = stash->info_ptr;
1929
each->next_unit = stash->all_comp_units;
1930
stash->all_comp_units = each;
1932
/* DW_AT_low_pc and DW_AT_high_pc are optional for
1933
compilation units. If we don't have them (i.e.,
1934
unit->high == 0), we need to consult the line info
1935
table to see if a compilation unit contains the given
1937
if (each->arange.high > 0)
1939
if (comp_unit_contains_address (each, addr))
1940
return comp_unit_find_nearest_line (each, addr,
1948
found = comp_unit_find_nearest_line (each, addr,