Coverage Report

Created: 2026-07-25 10:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/binutils-gdb/bfd/dwarf2.c
Line
Count
Source
1
/* DWARF 2 support.
2
   Copyright (C) 1994-2026 Free Software Foundation, Inc.
3
4
   Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
5
   (gavin@cygnus.com).
6
7
   From the dwarf2read.c header:
8
   Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
9
   Inc.  with support from Florida State University (under contract
10
   with the Ada Joint Program Office), and Silicon Graphics, Inc.
11
   Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
12
   based on Fred Fish's (Cygnus Support) implementation of DWARF 1
13
   support in dwarfread.c
14
15
   This file is part of BFD.
16
17
   This program is free software; you can redistribute it and/or modify
18
   it under the terms of the GNU General Public License as published by
19
   the Free Software Foundation; either version 3 of the License, or (at
20
   your option) any later version.
21
22
   This program is distributed in the hope that it will be useful, but
23
   WITHOUT ANY WARRANTY; without even the implied warranty of
24
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25
   General Public License for more details.
26
27
   You should have received a copy of the GNU General Public License
28
   along with this program; if not, write to the Free Software
29
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
30
   MA 02110-1301, USA.  */
31
32
#include "sysdep.h"
33
#include "bfd.h"
34
#include "libiberty.h"
35
#include "demangle.h"
36
#include "libbfd.h"
37
#include "elf-bfd.h"
38
#include "dwarf2.h"
39
#include "hashtab.h"
40
#include "splay-tree.h"
41
42
/* The data in the .debug_line statement prologue looks like this.  */
43
44
struct line_head
45
{
46
  bfd_vma total_length;
47
  unsigned short version;
48
  bfd_vma prologue_length;
49
  unsigned char minimum_instruction_length;
50
  unsigned char maximum_ops_per_insn;
51
  unsigned char default_is_stmt;
52
  int line_base;
53
  unsigned char line_range;
54
  unsigned char opcode_base;
55
  unsigned char *standard_opcode_lengths;
56
};
57
58
/* Attributes have a name and a value.  */
59
60
struct attribute
61
{
62
  enum dwarf_attribute name;
63
  enum dwarf_form form;
64
  union
65
  {
66
    char *str;
67
    struct dwarf_block *blk;
68
    uint64_t val;
69
    int64_t sval;
70
  }
71
  u;
72
};
73
74
/* Blocks are a bunch of untyped bytes.  */
75
struct dwarf_block
76
{
77
  unsigned int size;
78
  bfd_byte *data;
79
};
80
81
struct adjusted_section
82
{
83
  asection *section;
84
  bfd_vma adj_vma;
85
  bfd_vma orig_vma;
86
};
87
88
/* A trie to map quickly from address range to compilation unit.
89
90
   This is a fairly standard radix-256 trie, used to quickly locate which
91
   compilation unit any given address belongs to.  Given that each compilation
92
   unit may register hundreds of very small and unaligned ranges (which may
93
   potentially overlap, due to inlining and other concerns), and a large
94
   program may end up containing hundreds of thousands of such ranges, we cannot
95
   scan through them linearly without undue slowdown.
96
97
   We use a hybrid trie to avoid memory explosion: There are two types of trie
98
   nodes, leaves and interior nodes.  (Almost all nodes are leaves, so they
99
   take up the bulk of the memory usage.) Leaves contain a simple array of
100
   ranges (high/low address) and which compilation unit contains those ranges,
101
   and when we get to a leaf, we scan through it linearly.  Interior nodes
102
   contain pointers to 256 other nodes, keyed by the next byte of the address.
103
   So for a 64-bit address like 0x1234567abcd, we would start at the root and go
104
   down child[0x00]->child[0x00]->child[0x01]->child[0x23]->child[0x45] etc.,
105
   until we hit a leaf.  (Nodes are, in general, leaves until they exceed the
106
   default allocation of 16 elements, at which point they are converted to
107
   interior node if possible.) This gives us near-constant lookup times;
108
   the only thing that can be costly is if there are lots of overlapping ranges
109
   within a single 256-byte segment of the binary, in which case we have to
110
   scan through them all to find the best match.
111
112
   For a binary with few ranges, we will in practice only have a single leaf
113
   node at the root, containing a simple array.  Thus, the scheme is efficient
114
   for both small and large binaries.
115
 */
116
117
/* Experiments have shown 16 to be a memory-efficient default leaf size.
118
   The only case where a leaf will hold more memory than this, is at the
119
   bottomost level (covering 256 bytes in the binary), where we'll expand
120
   the leaf to be able to hold more ranges if needed.
121
 */
122
33.7k
#define TRIE_LEAF_SIZE 16
123
124
/* All trie_node pointers will really be trie_leaf or trie_interior,
125
   but they have this common head.  */
126
struct trie_node
127
{
128
  /* If zero, we are an interior node.
129
     Otherwise, how many ranges we have room for in this leaf.  */
130
  unsigned int num_room_in_leaf;
131
};
132
133
struct trie_leaf
134
{
135
  struct trie_node head;
136
  unsigned int num_stored_in_leaf;
137
  struct {
138
    struct comp_unit *unit;
139
    bfd_vma low_pc, high_pc;
140
  } ranges[];
141
};
142
143
struct trie_interior
144
{
145
  struct trie_node head;
146
  struct trie_node *children[256];
147
};
148
149
static struct trie_node *alloc_trie_leaf (bfd *abfd)
150
16.8k
{
151
16.8k
  struct trie_leaf *leaf;
152
16.8k
  size_t amt = sizeof (*leaf) + TRIE_LEAF_SIZE * sizeof (leaf->ranges[0]);
153
16.8k
  leaf = bfd_zalloc (abfd, amt);
154
16.8k
  if (leaf == NULL)
155
0
    return NULL;
156
16.8k
  leaf->head.num_room_in_leaf = TRIE_LEAF_SIZE;
157
16.8k
  return &leaf->head;
158
16.8k
}
159
160
struct addr_range
161
{
162
  bfd_byte *start;
163
  bfd_byte *end;
164
};
165
166
/* Return true if address range do intersect.  */
167
168
static bool
169
addr_range_intersects (struct addr_range *r1, struct addr_range *r2)
170
704
{
171
704
  return (r1->start <= r2->start && r2->start < r1->end)
172
704
    || (r1->start <= (r2->end - 1) && (r2->end - 1) < r1->end);
173
704
}
174
175
/* Compare function for splay tree of addr_ranges.  */
176
177
static int
178
splay_tree_compare_addr_range (splay_tree_key xa, splay_tree_key xb)
179
352
{
180
352
  struct addr_range *r1 = (struct addr_range *) xa;
181
352
  struct addr_range *r2 = (struct addr_range *) xb;
182
183
352
  if (addr_range_intersects (r1, r2) || addr_range_intersects (r2, r1))
184
0
    return 0;
185
352
  else if (r1->end <= r2->start)
186
176
    return -1;
187
176
  else
188
176
    return 1;
189
352
}
190
191
/* Splay tree release function for keys (addr_range).  */
192
193
static void
194
splay_tree_free_addr_range (splay_tree_key key)
195
1.36k
{
196
1.36k
  free ((struct addr_range *)key);
197
1.36k
}
198
199
struct dwarf2_debug_file
200
{
201
  /* The actual bfd from which debug info was loaded.  Might be
202
     different to orig_bfd because of gnu_debuglink sections.  */
203
  bfd *bfd_ptr;
204
205
  /* Pointer to the symbol table.  */
206
  asymbol **syms;
207
208
  /* The current info pointer for the .debug_info section being parsed.  */
209
  bfd_byte *info_ptr;
210
211
  /* A pointer to the memory block allocated for .debug_info sections.  */
212
  bfd_byte *dwarf_info_buffer;
213
214
  /* Length of the loaded .debug_info sections.  */
215
  bfd_size_type dwarf_info_size;
216
217
  /* Pointer to the .debug_abbrev section loaded into memory.  */
218
  bfd_byte *dwarf_abbrev_buffer;
219
220
  /* Length of the loaded .debug_abbrev section.  */
221
  bfd_size_type dwarf_abbrev_size;
222
223
  /* Buffer for decode_line_info.  */
224
  bfd_byte *dwarf_line_buffer;
225
226
  /* Length of the loaded .debug_line section.  */
227
  bfd_size_type dwarf_line_size;
228
229
  /* Pointer to the .debug_str section loaded into memory.  */
230
  bfd_byte *dwarf_str_buffer;
231
232
  /* Length of the loaded .debug_str section.  */
233
  bfd_size_type dwarf_str_size;
234
235
  /* Pointer to the .debug_str_offsets section loaded into memory.  */
236
  bfd_byte *dwarf_str_offsets_buffer;
237
238
  /* Length of the loaded .debug_str_offsets section.  */
239
  bfd_size_type dwarf_str_offsets_size;
240
241
  /* Pointer to the .debug_addr section loaded into memory.  */
242
  bfd_byte *dwarf_addr_buffer;
243
244
  /* Length of the loaded .debug_addr section.  */
245
  bfd_size_type dwarf_addr_size;
246
247
  /* Pointer to the .debug_line_str section loaded into memory.  */
248
  bfd_byte *dwarf_line_str_buffer;
249
250
  /* Length of the loaded .debug_line_str section.  */
251
  bfd_size_type dwarf_line_str_size;
252
253
  /* Pointer to the .debug_ranges section loaded into memory.  */
254
  bfd_byte *dwarf_ranges_buffer;
255
256
  /* Length of the loaded .debug_ranges section.  */
257
  bfd_size_type dwarf_ranges_size;
258
259
  /* Pointer to the .debug_rnglists section loaded into memory.  */
260
  bfd_byte *dwarf_rnglists_buffer;
261
262
  /* Length of the loaded .debug_rnglists section.  */
263
  bfd_size_type dwarf_rnglists_size;
264
265
  /* A list of all previously read comp_units.  */
266
  struct comp_unit *all_comp_units;
267
268
  /* A list of all previously read comp_units with no ranges (yet).  */
269
  struct comp_unit *all_comp_units_without_ranges;
270
271
  /* Last comp unit in list above.  */
272
  struct comp_unit *last_comp_unit;
273
274
  /* Line table at line_offset zero.  */
275
  struct line_info_table *line_table;
276
277
  /* Hash table to map offsets to decoded abbrevs.  */
278
  htab_t abbrev_offsets;
279
280
  /* Root of a trie to map addresses to compilation units.  */
281
  struct trie_node *trie_root;
282
283
  /* Splay tree to map info_ptr address to compilation units.  */
284
  splay_tree comp_unit_tree;
285
};
286
287
struct dwarf2_debug
288
{
289
  /* Names of the debug sections.  */
290
  const struct dwarf_debug_section *debug_sections;
291
292
  /* Per-file stuff.  */
293
  struct dwarf2_debug_file f, alt;
294
295
  /* If the most recent call to bfd_find_nearest_line was given an
296
     address in an inlined function, preserve a pointer into the
297
     calling chain for subsequent calls to bfd_find_inliner_info to
298
     use.  */
299
  struct funcinfo *inliner_chain;
300
301
  /* Section VMAs at the time the stash was built.  */
302
  bfd_vma *sec_vma;
303
  /* Number of sections in the SEC_VMA table.  */
304
  unsigned int sec_vma_count;
305
306
  /* Number of sections whose VMA we must adjust.  */
307
  int adjusted_section_count;
308
309
  /* Array of sections with adjusted VMA.  */
310
  struct adjusted_section *adjusted_sections;
311
312
  /* Used to validate the cached debug data.  */
313
  unsigned int orig_bfd_id;
314
315
  /* Number of times find_line is called.  This is used in
316
     the heuristic for enabling the info hash tables.  */
317
  int info_hash_count;
318
319
5.83k
#define STASH_INFO_HASH_TRIGGER    100
320
321
  /* Hash table mapping symbol names to function infos.  */
322
  struct info_hash_table *funcinfo_hash_table;
323
324
  /* Hash table mapping symbol names to variable infos.  */
325
  struct info_hash_table *varinfo_hash_table;
326
327
  /* Head of comp_unit list in the last hash table update.  */
328
  struct comp_unit *hash_units_head;
329
330
  /* Status of info hash.  */
331
  int info_hash_status;
332
5.83k
#define STASH_INFO_HASH_OFF    0
333
11.6k
#define STASH_INFO_HASH_ON     1
334
0
#define STASH_INFO_HASH_DISABLED   2
335
336
  /* True if we opened bfd_ptr.  */
337
  bool close_on_cleanup;
338
};
339
340
struct arange
341
{
342
  struct arange *next;
343
  bfd_vma low;
344
  bfd_vma high;
345
};
346
347
/* A minimal decoding of DWARF2 compilation units.  We only decode
348
   what's needed to get to the line number information.  */
349
350
struct comp_unit
351
{
352
  /* Chain the previously read compilation units.  */
353
  struct comp_unit *next_unit;
354
355
  /* Chain the previously read compilation units that have no ranges yet.
356
     We scan these separately when we have a trie over the ranges.
357
     Unused if arange.high != 0. */
358
  struct comp_unit *next_unit_without_ranges;
359
360
  /* Likewise, chain the compilation unit read after this one.
361
     The comp units are stored in reversed reading order.  */
362
  struct comp_unit *prev_unit;
363
364
  /* Keep the bfd convenient (for memory allocation).  */
365
  bfd *abfd;
366
367
  /* The lowest and highest addresses contained in this compilation
368
     unit as specified in the compilation unit header.  */
369
  struct arange arange;
370
371
  /* The DW_AT_name attribute (for error messages).  */
372
  char *name;
373
374
  /* The abbrev hash table.  */
375
  struct abbrev_info **abbrevs;
376
377
  /* DW_AT_language.  */
378
  int lang;
379
380
  /* Note that an error was found by comp_unit_find_nearest_line.  */
381
  int error;
382
383
  /* The DW_AT_comp_dir attribute.  */
384
  char *comp_dir;
385
386
  /* TRUE if there is a line number table associated with this comp. unit.  */
387
  int stmtlist;
388
389
  /* Pointer to the current comp_unit so that we can find a given entry
390
     by its reference.  */
391
  bfd_byte *info_ptr_unit;
392
393
  /* The offset into .debug_line of the line number table.  */
394
  unsigned long line_offset;
395
396
  /* Pointer to the first child die for the comp unit.  */
397
  bfd_byte *first_child_die_ptr;
398
399
  /* The end of the comp unit.  */
400
  bfd_byte *end_ptr;
401
402
  /* The decoded line number, NULL if not yet decoded.  */
403
  struct line_info_table *line_table;
404
405
  /* A list of the functions found in this comp. unit.  */
406
  struct funcinfo *function_table;
407
408
  /* A table of function information references searchable by address.  */
409
  struct lookup_funcinfo *lookup_funcinfo_table;
410
411
  /* Number of functions in the function_table and sorted_function_table.  */
412
  bfd_size_type number_of_functions;
413
414
  /* A list of the variables found in this comp. unit.  */
415
  struct varinfo *variable_table;
416
417
  /* Pointers to dwarf2_debug structures.  */
418
  struct dwarf2_debug *stash;
419
  struct dwarf2_debug_file *file;
420
421
  /* DWARF format version for this unit - from unit header.  */
422
  int version;
423
424
  /* Address size for this unit - from unit header.  */
425
  unsigned char addr_size;
426
427
  /* Offset size for this unit - from unit header.  */
428
  unsigned char offset_size;
429
430
  /* Base address for this unit - from DW_AT_low_pc attribute of
431
     DW_TAG_compile_unit DIE */
432
  bfd_vma base_address;
433
434
  /* TRUE if symbols are cached in hash table for faster lookup by name.  */
435
  bool cached;
436
437
  /* Used when iterating over trie leaves to know which units we have
438
     already seen in this iteration.  */
439
  bool mark;
440
441
 /* Base address of debug_addr section.  */
442
  size_t dwarf_addr_offset;
443
444
  /* Base address of string offset table.  */
445
  size_t dwarf_str_offset;
446
};
447
448
/* This data structure holds the information of an abbrev.  */
449
struct abbrev_info
450
{
451
  unsigned int         number;    /* Number identifying abbrev.  */
452
  enum dwarf_tag       tag;   /* DWARF tag.  */
453
  bool                 has_children;  /* TRUE if the abbrev has children.  */
454
  unsigned int         num_attrs; /* Number of attributes.  */
455
  struct attr_abbrev * attrs;   /* An array of attribute descriptions.  */
456
  struct abbrev_info * next;    /* Next in chain.  */
457
};
458
459
struct attr_abbrev
460
{
461
  enum dwarf_attribute name;
462
  enum dwarf_form form;
463
  bfd_vma implicit_const;
464
};
465
466
/* Map of uncompressed DWARF debug section name to compressed one.  It
467
   is terminated by NULL uncompressed_name.  */
468
469
const struct dwarf_debug_section dwarf_debug_sections[] =
470
{
471
  { ".debug_abbrev",    ".zdebug_abbrev" },
472
  { ".debug_aranges",   ".zdebug_aranges" },
473
  { ".debug_frame",   ".zdebug_frame" },
474
  { ".debug_info",    ".zdebug_info" },
475
  { ".debug_info",    ".zdebug_info" },
476
  { ".debug_line",    ".zdebug_line" },
477
  { ".debug_loc",   ".zdebug_loc" },
478
  { ".debug_macinfo",   ".zdebug_macinfo" },
479
  { ".debug_macro",   ".zdebug_macro" },
480
  { ".debug_pubnames",    ".zdebug_pubnames" },
481
  { ".debug_pubtypes",    ".zdebug_pubtypes" },
482
  { ".debug_ranges",    ".zdebug_ranges" },
483
  { ".debug_rnglists",    ".zdebug_rnglist" },
484
  { ".debug_static_func", ".zdebug_static_func" },
485
  { ".debug_static_vars", ".zdebug_static_vars" },
486
  { ".debug_str",   ".zdebug_str", },
487
  { ".debug_str",   ".zdebug_str", },
488
  { ".debug_str_offsets", ".zdebug_str_offsets", },
489
  { ".debug_addr",    ".zdebug_addr", },
490
  { ".debug_line_str",    ".zdebug_line_str", },
491
  { ".debug_types",   ".zdebug_types" },
492
  /* GNU DWARF 1 extensions */
493
  { ".debug_sfnames",   ".zdebug_sfnames" },
494
  { ".debug_srcinfo",   ".zebug_srcinfo" },
495
  /* SGI/MIPS DWARF 2 extensions */
496
  { ".debug_funcnames",   ".zdebug_funcnames" },
497
  { ".debug_typenames",   ".zdebug_typenames" },
498
  { ".debug_varnames",    ".zdebug_varnames" },
499
  { ".debug_weaknames",   ".zdebug_weaknames" },
500
  { NULL,     NULL },
501
};
502
503
/* NB/ Numbers in this enum must match up with indices
504
   into the dwarf_debug_sections[] array above.  */
505
enum dwarf_debug_section_enum
506
{
507
  debug_abbrev = 0,
508
  debug_aranges,
509
  debug_frame,
510
  debug_info,
511
  debug_info_alt,
512
  debug_line,
513
  debug_loc,
514
  debug_macinfo,
515
  debug_macro,
516
  debug_pubnames,
517
  debug_pubtypes,
518
  debug_ranges,
519
  debug_rnglists,
520
  debug_static_func,
521
  debug_static_vars,
522
  debug_str,
523
  debug_str_alt,
524
  debug_str_offsets,
525
  debug_addr,
526
  debug_line_str,
527
  debug_types,
528
  debug_sfnames,
529
  debug_srcinfo,
530
  debug_funcnames,
531
  debug_typenames,
532
  debug_varnames,
533
  debug_weaknames,
534
  debug_max
535
};
536
537
/* A static assertion.  */
538
extern int dwarf_debug_section_assert[ARRAY_SIZE (dwarf_debug_sections)
539
              == debug_max + 1 ? 1 : -1];
540
541
#ifndef ABBREV_HASH_SIZE
542
215k
#define ABBREV_HASH_SIZE 121
543
#endif
544
#ifndef ATTR_ALLOC_CHUNK
545
50.9k
#define ATTR_ALLOC_CHUNK 4
546
#endif
547
548
/* Variable and function hash tables.  This is used to speed up look-up
549
   in lookup_symbol_in_var_table() and lookup_symbol_in_function_table().
550
   In order to share code between variable and function infos, we use
551
   a list of untyped pointer for all variable/function info associated with
552
   a symbol.  We waste a bit of memory for list with one node but that
553
   simplifies the code.  */
554
555
struct info_list_node
556
{
557
  struct info_list_node *next;
558
  void *info;
559
};
560
561
/* Info hash entry.  */
562
struct info_hash_entry
563
{
564
  struct bfd_hash_entry root;
565
  struct info_list_node *head;
566
};
567
568
struct info_hash_table
569
{
570
  struct bfd_hash_table base;
571
};
572
573
/* Function to create a new entry in info hash table.  */
574
575
static struct bfd_hash_entry *
576
info_hash_table_newfunc (struct bfd_hash_entry *entry,
577
       struct bfd_hash_table *table,
578
       const char *string)
579
0
{
580
0
  struct info_hash_entry *ret = (struct info_hash_entry *) entry;
581
582
  /* Allocate the structure if it has not already been allocated by a
583
     derived class.  */
584
0
  if (ret == NULL)
585
0
    {
586
0
      ret = (struct info_hash_entry *) bfd_hash_allocate (table,
587
0
                sizeof (* ret));
588
0
      if (ret == NULL)
589
0
  return NULL;
590
0
    }
591
592
  /* Call the allocation method of the base class.  */
593
0
  ret = ((struct info_hash_entry *)
594
0
   bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
595
596
  /* Initialize the local fields here.  */
597
0
  if (ret)
598
0
    ret->head = NULL;
599
600
0
  return (struct bfd_hash_entry *) ret;
601
0
}
602
603
/* Function to create a new info hash table.  It returns a pointer to the
604
   newly created table or NULL if there is any error.  We need abfd
605
   solely for memory allocation.  */
606
607
static struct info_hash_table *
608
create_info_hash_table (bfd *abfd)
609
0
{
610
0
  struct info_hash_table *hash_table;
611
612
0
  hash_table = ((struct info_hash_table *)
613
0
    bfd_alloc (abfd, sizeof (struct info_hash_table)));
614
0
  if (!hash_table)
615
0
    return hash_table;
616
617
0
  if (!bfd_hash_table_init (&hash_table->base, info_hash_table_newfunc,
618
0
          sizeof (struct info_hash_entry)))
619
0
    {
620
0
      bfd_release (abfd, hash_table);
621
0
      return NULL;
622
0
    }
623
624
0
  return hash_table;
625
0
}
626
627
/* Insert an info entry into an info hash table.  We do not check of
628
   duplicate entries.  Also, the caller need to guarantee that the
629
   right type of info in inserted as info is passed as a void* pointer.
630
   This function returns true if there is no error.  */
631
632
static bool
633
insert_info_hash_table (struct info_hash_table *hash_table,
634
      const char *key,
635
      void *info,
636
      bool copy_p)
637
0
{
638
0
  struct info_hash_entry *entry;
639
0
  struct info_list_node *node;
640
641
0
  entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base,
642
0
                 key, true, copy_p);
643
0
  if (!entry)
644
0
    return false;
645
646
0
  node = (struct info_list_node *) bfd_hash_allocate (&hash_table->base,
647
0
                  sizeof (*node));
648
0
  if (!node)
649
0
    return false;
650
651
0
  node->info = info;
652
0
  node->next = entry->head;
653
0
  entry->head = node;
654
655
0
  return true;
656
0
}
657
658
/* Look up an info entry list from an info hash table.  Return NULL
659
   if there is none.  */
660
661
static struct info_list_node *
662
lookup_info_hash_table (struct info_hash_table *hash_table, const char *key)
663
0
{
664
0
  struct info_hash_entry *entry;
665
666
0
  entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base, key,
667
0
                 false, false);
668
0
  return entry ? entry->head : NULL;
669
0
}
670
671
/* Read a section into its appropriate place in the dwarf2_debug
672
   struct (indicated by SECTION_BUFFER and SECTION_SIZE).  If SYMS is
673
   not NULL, use bfd_simple_get_relocated_section_contents to read the
674
   section contents, otherwise use bfd_get_section_contents.  Fail if
675
   the located section does not contain at least OFFSET bytes.  */
676
677
static bool
678
read_section (bfd *abfd,
679
        const struct dwarf_debug_section *sec,
680
        asymbol **syms,
681
        uint64_t offset,
682
        bfd_byte **section_buffer,
683
        bfd_size_type *section_size)
684
20.4k
{
685
20.4k
  const char *section_name = sec->uncompressed_name;
686
20.4k
  bfd_byte *contents = *section_buffer;
687
688
  /* The section may have already been read.  */
689
20.4k
  if (contents == NULL)
690
12.7k
    {
691
12.7k
      bfd_size_type amt;
692
12.7k
      asection *msec;
693
694
12.7k
      msec = bfd_get_section_by_name (abfd, section_name);
695
12.7k
      if (msec == NULL)
696
3.01k
  {
697
3.01k
    section_name = sec->compressed_name;
698
3.01k
          msec = bfd_get_section_by_name (abfd, section_name);
699
3.01k
  }
700
12.7k
      if (msec == NULL)
701
3.01k
  {
702
3.01k
    _bfd_error_handler (_("DWARF error: can't find %s section."),
703
3.01k
            sec->uncompressed_name);
704
3.01k
    bfd_set_error (bfd_error_bad_value);
705
3.01k
    return false;
706
3.01k
  }
707
708
9.76k
      if ((msec->flags & SEC_HAS_CONTENTS) == 0)
709
13
  {
710
13
    _bfd_error_handler (_("DWARF error: section %s has no contents"),
711
13
            section_name);
712
13
    bfd_set_error (bfd_error_no_contents);
713
13
    return false;
714
13
  }
715
716
9.74k
      if (bfd_section_size_insane (abfd, msec))
717
1.72k
  {
718
    /* PR 26946 */
719
1.72k
    _bfd_error_handler (_("DWARF error: section %s is too big"),
720
1.72k
            section_name);
721
1.72k
    return false;
722
1.72k
  }
723
8.02k
      amt = bfd_get_section_limit_octets (abfd, msec);
724
8.02k
      *section_size = amt;
725
      /* Paranoia - alloc one extra so that we can make sure a string
726
   section is NUL terminated.  */
727
8.02k
      amt += 1;
728
8.02k
      if (amt == 0)
729
0
  {
730
    /* Paranoia - this should never happen.  */
731
0
    bfd_set_error (bfd_error_no_memory);
732
0
    return false;
733
0
  }
734
8.02k
      contents = (bfd_byte *) bfd_malloc (amt);
735
8.02k
      if (contents == NULL)
736
0
  return false;
737
8.02k
      if (syms
738
8.02k
    ? !bfd_simple_get_relocated_section_contents (abfd, msec, contents,
739
6.01k
              syms)
740
8.02k
    : !bfd_get_section_contents (abfd, msec, contents, 0, *section_size))
741
2.59k
  {
742
2.59k
    free (contents);
743
2.59k
    return false;
744
2.59k
  }
745
5.43k
      contents[*section_size] = 0;
746
5.43k
      *section_buffer = contents;
747
5.43k
    }
748
749
  /* It is possible to get a bad value for the offset into the section
750
     that the client wants.  Validate it here to avoid trouble later.  */
751
13.1k
  if (offset != 0 && offset >= *section_size)
752
665
    {
753
      /* xgettext: c-format */
754
665
      _bfd_error_handler (_("DWARF error: offset (%" PRIu64 ")"
755
665
          " greater than or equal to %s size (%" PRIu64 ")"),
756
665
        (uint64_t) offset, section_name,
757
665
        (uint64_t) *section_size);
758
665
      bfd_set_error (bfd_error_bad_value);
759
665
      return false;
760
665
    }
761
762
12.4k
  return true;
763
13.1k
}
764
765
/* Read dwarf information from a buffer.  */
766
767
static inline uint64_t
768
read_n_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end, int n)
769
206k
{
770
206k
  bfd_byte *buf = *ptr;
771
206k
  if (end - buf < n)
772
122
    {
773
122
      *ptr = end;
774
122
      return 0;
775
122
    }
776
206k
  *ptr = buf + n;
777
206k
  return bfd_get (n * 8, abfd, buf);
778
206k
}
779
780
static unsigned int
781
read_1_byte (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
782
168k
{
783
168k
  return read_n_bytes (abfd, ptr, end, 1);
784
168k
}
785
786
static int
787
read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte **ptr, bfd_byte *end)
788
975
{
789
975
  bfd_byte *buf = *ptr;
790
975
  if (end - buf < 1)
791
0
    {
792
0
      *ptr = end;
793
0
      return 0;
794
0
    }
795
975
  *ptr = buf + 1;
796
975
  return bfd_get_signed_8 (abfd, buf);
797
975
}
798
799
static unsigned int
800
read_2_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
801
5.33k
{
802
5.33k
  return read_n_bytes (abfd, ptr, end, 2);
803
5.33k
}
804
805
static unsigned int
806
read_3_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
807
93
{
808
93
  unsigned int val = read_1_byte (abfd, ptr, end);
809
93
  val <<= 8;
810
93
  val |= read_1_byte (abfd, ptr, end);
811
93
  val <<= 8;
812
93
  val |= read_1_byte (abfd, ptr, end);
813
93
  if (bfd_little_endian (abfd))
814
93
    val = (((val >> 16) & 0xff)
815
93
     | (val & 0xff00)
816
93
     | ((val & 0xff) << 16));
817
93
  return val;
818
93
}
819
820
static unsigned int
821
read_4_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
822
31.6k
{
823
31.6k
  return read_n_bytes (abfd, ptr, end, 4);
824
31.6k
}
825
826
static uint64_t
827
read_8_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
828
1.30k
{
829
1.30k
  return read_n_bytes (abfd, ptr, end, 8);
830
1.30k
}
831
832
static struct dwarf_block *
833
read_blk (bfd *abfd, bfd_byte **ptr, bfd_byte *end, size_t size)
834
1.32k
{
835
1.32k
  bfd_byte *buf = *ptr;
836
1.32k
  struct dwarf_block *block;
837
838
1.32k
  block = (struct dwarf_block *) bfd_alloc (abfd, sizeof (*block));
839
1.32k
  if (block == NULL)
840
0
    return NULL;
841
842
1.32k
  if (size > (size_t) (end - buf))
843
41
    {
844
41
      *ptr = end;
845
41
      block->data = NULL;
846
41
      block->size = 0;
847
41
    }
848
1.27k
  else
849
1.27k
    {
850
1.27k
      *ptr = buf + size;
851
1.27k
      block->data = buf;
852
1.27k
      block->size = size;
853
1.27k
    }
854
1.32k
  return block;
855
1.32k
}
856
857
/* Scans a NUL terminated string starting at *PTR, returning a pointer to it.
858
   Bytes at or beyond BUF_END will not be read.  Returns NULL if the
859
   terminator is not found or if the string is empty.  *PTR is
860
   incremented over the bytes scanned, including the terminator.  */
861
862
static char *
863
read_string (bfd_byte **ptr,
864
       bfd_byte *buf_end)
865
6.67k
{
866
6.67k
  bfd_byte *buf = *ptr;
867
6.67k
  bfd_byte *str = buf;
868
869
53.5k
  while (buf < buf_end)
870
53.5k
    if (*buf++ == 0)
871
6.57k
      {
872
6.57k
  if (str == buf - 1)
873
1.89k
    break;
874
4.68k
  *ptr = buf;
875
4.68k
  return (char *) str;
876
6.57k
      }
877
878
1.99k
  *ptr = buf;
879
1.99k
  return NULL;
880
6.67k
}
881
882
/* Reads an offset from *PTR and then locates the string at this offset
883
   inside the debug string section.  Returns a pointer to the string.
884
   Increments *PTR by the number of bytes read for the offset.  This
885
   value is set even if the function fails.  Bytes at or beyond
886
   BUF_END will not be read.  Returns NULL if there was a problem, or
887
   if the string is empty.  Does not check for NUL termination of the
888
   string.  */
889
890
static char *
891
read_indirect_string (struct comp_unit *unit,
892
          bfd_byte **ptr,
893
          bfd_byte *buf_end)
894
13.7k
{
895
13.7k
  uint64_t offset;
896
13.7k
  struct dwarf2_debug *stash = unit->stash;
897
13.7k
  struct dwarf2_debug_file *file = unit->file;
898
13.7k
  char *str;
899
900
13.7k
  if (unit->offset_size > (size_t) (buf_end - *ptr))
901
8
    {
902
8
      *ptr = buf_end;
903
8
      return NULL;
904
8
    }
905
906
13.7k
  if (unit->offset_size == 4)
907
13.7k
    offset = read_4_bytes (unit->abfd, ptr, buf_end);
908
0
  else
909
0
    offset = read_8_bytes (unit->abfd, ptr, buf_end);
910
911
13.7k
  if (! read_section (unit->abfd, &stash->debug_sections[debug_str],
912
13.7k
          file->syms, offset,
913
13.7k
          &file->dwarf_str_buffer, &file->dwarf_str_size))
914
6.03k
    return NULL;
915
916
7.69k
  str = (char *) file->dwarf_str_buffer + offset;
917
7.69k
  if (*str == '\0')
918
619
    return NULL;
919
7.07k
  return str;
920
7.69k
}
921
922
/* Like read_indirect_string but from .debug_line_str section.  */
923
924
static char *
925
read_indirect_line_string (struct comp_unit *unit,
926
         bfd_byte **ptr,
927
         bfd_byte *buf_end)
928
24
{
929
24
  uint64_t offset;
930
24
  struct dwarf2_debug *stash = unit->stash;
931
24
  struct dwarf2_debug_file *file = unit->file;
932
24
  char *str;
933
934
24
  if (unit->offset_size > (size_t) (buf_end - *ptr))
935
1
    {
936
1
      *ptr = buf_end;
937
1
      return NULL;
938
1
    }
939
940
23
  if (unit->offset_size == 4)
941
23
    offset = read_4_bytes (unit->abfd, ptr, buf_end);
942
0
  else
943
0
    offset = read_8_bytes (unit->abfd, ptr, buf_end);
944
945
23
  if (! read_section (unit->abfd, &stash->debug_sections[debug_line_str],
946
23
          file->syms, offset,
947
23
          &file->dwarf_line_str_buffer,
948
23
          &file->dwarf_line_str_size))
949
23
    return NULL;
950
951
0
  str = (char *) file->dwarf_line_str_buffer + offset;
952
0
  if (*str == '\0')
953
0
    return NULL;
954
0
  return str;
955
0
}
956
957
/* Like read_indirect_string but uses a .debug_str located in
958
   an alternate file pointed to by the .gnu_debugaltlink section.
959
   Used to impement DW_FORM_GNU_strp_alt.  */
960
961
static char *
962
read_alt_indirect_string (struct comp_unit *unit,
963
        bfd_byte **ptr,
964
        bfd_byte *buf_end)
965
0
{
966
0
  uint64_t offset;
967
0
  struct dwarf2_debug *stash = unit->stash;
968
0
  char *str;
969
970
0
  if (unit->offset_size > (size_t) (buf_end - *ptr))
971
0
    {
972
0
      *ptr = buf_end;
973
0
      return NULL;
974
0
    }
975
976
0
  if (unit->offset_size == 4)
977
0
    offset = read_4_bytes (unit->abfd, ptr, buf_end);
978
0
  else
979
0
    offset = read_8_bytes (unit->abfd, ptr, buf_end);
980
981
0
  if (stash->alt.bfd_ptr == NULL)
982
0
    {
983
0
      bfd *debug_bfd;
984
0
      char *debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
985
986
0
      if (debug_filename == NULL)
987
0
  return NULL;
988
989
0
      debug_bfd = bfd_openr (debug_filename, NULL);
990
0
      free (debug_filename);
991
0
      if (debug_bfd == NULL)
992
  /* FIXME: Should we report our failure to follow the debuglink ?  */
993
0
  return NULL;
994
995
0
      if (!bfd_check_format (debug_bfd, bfd_object))
996
0
  {
997
0
    bfd_close (debug_bfd);
998
0
    return NULL;
999
0
  }
1000
0
      stash->alt.bfd_ptr = debug_bfd;
1001
0
    }
1002
1003
0
  if (! read_section (unit->stash->alt.bfd_ptr,
1004
0
          stash->debug_sections + debug_str_alt,
1005
0
          stash->alt.syms, offset,
1006
0
          &stash->alt.dwarf_str_buffer,
1007
0
          &stash->alt.dwarf_str_size))
1008
0
    return NULL;
1009
1010
0
  str = (char *) stash->alt.dwarf_str_buffer + offset;
1011
0
  if (*str == '\0')
1012
0
    return NULL;
1013
1014
0
  return str;
1015
0
}
1016
1017
/* Resolve an alternate reference from UNIT at OFFSET.
1018
   Returns a pointer into the loaded alternate CU upon success
1019
   or NULL upon failure.  */
1020
1021
static bfd_byte *
1022
read_alt_indirect_ref (struct comp_unit *unit, uint64_t offset)
1023
0
{
1024
0
  struct dwarf2_debug *stash = unit->stash;
1025
1026
0
  if (stash->alt.bfd_ptr == NULL)
1027
0
    {
1028
0
      bfd *debug_bfd;
1029
0
      char *debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
1030
1031
0
      if (debug_filename == NULL)
1032
0
  return NULL;
1033
1034
0
      debug_bfd = bfd_openr (debug_filename, NULL);
1035
0
      free (debug_filename);
1036
0
      if (debug_bfd == NULL)
1037
  /* FIXME: Should we report our failure to follow the debuglink ?  */
1038
0
  return NULL;
1039
1040
0
      if (!bfd_check_format (debug_bfd, bfd_object))
1041
0
  {
1042
0
    bfd_close (debug_bfd);
1043
0
    return NULL;
1044
0
  }
1045
0
      stash->alt.bfd_ptr = debug_bfd;
1046
0
    }
1047
1048
0
  if (! read_section (unit->stash->alt.bfd_ptr,
1049
0
          stash->debug_sections + debug_info_alt,
1050
0
          stash->alt.syms, offset,
1051
0
          &stash->alt.dwarf_info_buffer,
1052
0
          &stash->alt.dwarf_info_size))
1053
0
    return NULL;
1054
1055
0
  return stash->alt.dwarf_info_buffer + offset;
1056
0
}
1057
1058
static uint64_t
1059
read_address (struct comp_unit *unit, bfd_byte **ptr, bfd_byte *buf_end)
1060
20.3k
{
1061
20.3k
  bfd_byte *buf = *ptr;
1062
20.3k
  int signed_vma = 0;
1063
1064
20.3k
  if (bfd_get_flavour (unit->abfd) == bfd_target_elf_flavour)
1065
20.3k
    signed_vma = get_elf_backend_data (unit->abfd)->sign_extend_vma;
1066
1067
20.3k
  if (unit->addr_size > (size_t) (buf_end - buf))
1068
19
    {
1069
19
      *ptr = buf_end;
1070
19
      return 0;
1071
19
    }
1072
1073
20.3k
  *ptr = buf + unit->addr_size;
1074
20.3k
  if (signed_vma)
1075
39
    {
1076
39
      switch (unit->addr_size)
1077
39
  {
1078
39
  case 8:
1079
39
    return bfd_get_signed_64 (unit->abfd, buf);
1080
0
  case 4:
1081
0
    return bfd_get_signed_32 (unit->abfd, buf);
1082
0
  case 2:
1083
0
    return bfd_get_signed_16 (unit->abfd, buf);
1084
0
  default:
1085
0
    abort ();
1086
39
  }
1087
39
    }
1088
20.2k
  else
1089
20.2k
    {
1090
20.2k
      switch (unit->addr_size)
1091
20.2k
  {
1092
20.2k
  case 8:
1093
20.2k
    return bfd_get_64 (unit->abfd, buf);
1094
53
  case 4:
1095
53
    return bfd_get_32 (unit->abfd, buf);
1096
1
  case 2:
1097
1
    return bfd_get_16 (unit->abfd, buf);
1098
0
  default:
1099
0
    abort ();
1100
20.2k
  }
1101
20.2k
    }
1102
20.3k
}
1103
1104
/* Lookup an abbrev_info structure in the abbrev hash table.  */
1105
1106
static struct abbrev_info *
1107
lookup_abbrev (unsigned int number, struct abbrev_info **abbrevs)
1108
25.0k
{
1109
25.0k
  unsigned int hash_number;
1110
25.0k
  struct abbrev_info *abbrev;
1111
1112
25.0k
  hash_number = number % ABBREV_HASH_SIZE;
1113
25.0k
  abbrev = abbrevs[hash_number];
1114
1115
25.1k
  while (abbrev)
1116
17.3k
    {
1117
17.3k
      if (abbrev->number == number)
1118
17.1k
  return abbrev;
1119
146
      else
1120
146
  abbrev = abbrev->next;
1121
17.3k
    }
1122
1123
7.86k
  return NULL;
1124
25.0k
}
1125
1126
/* We keep a hash table to map .debug_abbrev section offsets to the
1127
   array of abbrevs, so that compilation units using the same set of
1128
   abbrevs do not waste memory.  */
1129
1130
struct abbrev_offset_entry
1131
{
1132
  size_t offset;
1133
  struct abbrev_info **abbrevs;
1134
};
1135
1136
static hashval_t
1137
hash_abbrev (const void *p)
1138
1.61k
{
1139
1.61k
  const struct abbrev_offset_entry *ent = p;
1140
1.61k
  return htab_hash_pointer ((void *) ent->offset);
1141
1.61k
}
1142
1143
static int
1144
eq_abbrev (const void *pa, const void *pb)
1145
62
{
1146
62
  const struct abbrev_offset_entry *a = pa;
1147
62
  const struct abbrev_offset_entry *b = pb;
1148
62
  return a->offset == b->offset;
1149
62
}
1150
1151
static void
1152
del_abbrev (void *p)
1153
1.48k
{
1154
1.48k
  struct abbrev_offset_entry *ent = p;
1155
1.48k
  struct abbrev_info **abbrevs = ent->abbrevs;
1156
1.48k
  size_t i;
1157
1158
180k
  for (i = 0; i < ABBREV_HASH_SIZE; i++)
1159
179k
    {
1160
179k
      struct abbrev_info *abbrev = abbrevs[i];
1161
1162
187k
      while (abbrev)
1163
8.02k
  {
1164
8.02k
    free (abbrev->attrs);
1165
8.02k
    abbrev = abbrev->next;
1166
8.02k
  }
1167
179k
    }
1168
1.48k
  free (ent);
1169
1.48k
}
1170
1171
/* In DWARF version 2, the description of the debugging information is
1172
   stored in a separate .debug_abbrev section.  Before we read any
1173
   dies from a section we read in all abbreviations and install them
1174
   in a hash table.  */
1175
1176
static struct abbrev_info**
1177
read_abbrevs (bfd *abfd, uint64_t offset, struct dwarf2_debug *stash,
1178
        struct dwarf2_debug_file *file)
1179
1.61k
{
1180
1.61k
  struct abbrev_info **abbrevs;
1181
1.61k
  bfd_byte *abbrev_ptr;
1182
1.61k
  bfd_byte *abbrev_end;
1183
1.61k
  struct abbrev_info *cur_abbrev;
1184
1.61k
  unsigned int abbrev_number, abbrev_name;
1185
1.61k
  unsigned int abbrev_form, hash_number;
1186
1.61k
  size_t amt;
1187
1.61k
  void **slot;
1188
1.61k
  struct abbrev_offset_entry ent = { offset, NULL };
1189
1190
1.61k
  if (ent.offset != offset)
1191
0
    return NULL;
1192
1193
1.61k
  slot = htab_find_slot (file->abbrev_offsets, &ent, INSERT);
1194
1.61k
  if (slot == NULL)
1195
0
    return NULL;
1196
1.61k
  if (*slot != NULL)
1197
57
    return ((struct abbrev_offset_entry *) (*slot))->abbrevs;
1198
1199
1.55k
  if (! read_section (abfd, &stash->debug_sections[debug_abbrev],
1200
1.55k
          file->syms, offset,
1201
1.55k
          &file->dwarf_abbrev_buffer,
1202
1.55k
          &file->dwarf_abbrev_size))
1203
75
    return NULL;
1204
1205
1.48k
  amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
1206
1.48k
  abbrevs = (struct abbrev_info **) bfd_zalloc (abfd, amt);
1207
1.48k
  if (abbrevs == NULL)
1208
0
    return NULL;
1209
1210
1.48k
  abbrev_ptr = file->dwarf_abbrev_buffer + offset;
1211
1.48k
  abbrev_end = file->dwarf_abbrev_buffer + file->dwarf_abbrev_size;
1212
1.48k
  abbrev_number = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1213
1.48k
           false, abbrev_end);
1214
1215
  /* Loop until we reach an abbrev number of 0.  */
1216
9.20k
  while (abbrev_number)
1217
8.02k
    {
1218
8.02k
      amt = sizeof (struct abbrev_info);
1219
8.02k
      cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt);
1220
8.02k
      if (cur_abbrev == NULL)
1221
0
  goto fail;
1222
1223
      /* Read in abbrev header.  */
1224
8.02k
      cur_abbrev->number = abbrev_number;
1225
8.02k
      cur_abbrev->tag = (enum dwarf_tag)
1226
8.02k
  _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1227
8.02k
             false, abbrev_end);
1228
8.02k
      cur_abbrev->has_children = read_1_byte (abfd, &abbrev_ptr, abbrev_end);
1229
1230
      /* Now read in declarations.  */
1231
8.02k
      for (;;)
1232
46.2k
  {
1233
    /* Initialize it just to avoid a GCC false warning.  */
1234
46.2k
    bfd_vma implicit_const = -1;
1235
1236
46.2k
    abbrev_name = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1237
46.2k
                 false, abbrev_end);
1238
46.2k
    abbrev_form = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1239
46.2k
                 false, abbrev_end);
1240
46.2k
    if (abbrev_form == DW_FORM_implicit_const)
1241
20
      implicit_const = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1242
20
                true, abbrev_end);
1243
46.2k
    if (abbrev_name == 0)
1244
8.02k
      break;
1245
1246
38.2k
    if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
1247
12.7k
      {
1248
12.7k
        struct attr_abbrev *tmp;
1249
1250
12.7k
        amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
1251
12.7k
        amt *= sizeof (struct attr_abbrev);
1252
12.7k
        tmp = (struct attr_abbrev *) bfd_realloc (cur_abbrev->attrs, amt);
1253
12.7k
        if (tmp == NULL)
1254
0
    goto fail;
1255
12.7k
        cur_abbrev->attrs = tmp;
1256
12.7k
      }
1257
1258
38.2k
    cur_abbrev->attrs[cur_abbrev->num_attrs].name
1259
38.2k
      = (enum dwarf_attribute) abbrev_name;
1260
38.2k
    cur_abbrev->attrs[cur_abbrev->num_attrs].form
1261
38.2k
      = (enum dwarf_form) abbrev_form;
1262
38.2k
    cur_abbrev->attrs[cur_abbrev->num_attrs].implicit_const
1263
38.2k
      = implicit_const;
1264
38.2k
    ++cur_abbrev->num_attrs;
1265
38.2k
  }
1266
1267
8.02k
      hash_number = abbrev_number % ABBREV_HASH_SIZE;
1268
8.02k
      cur_abbrev->next = abbrevs[hash_number];
1269
8.02k
      abbrevs[hash_number] = cur_abbrev;
1270
1271
      /* Get next abbreviation.
1272
   Under Irix6 the abbreviations for a compilation unit are not
1273
   always properly terminated with an abbrev number of 0.
1274
   Exit loop if we encounter an abbreviation which we have
1275
   already read (which means we are about to read the abbreviations
1276
   for the next compile unit) or if the end of the abbreviation
1277
   table is reached.  */
1278
8.02k
      if ((size_t) (abbrev_ptr - file->dwarf_abbrev_buffer)
1279
8.02k
    >= file->dwarf_abbrev_size)
1280
248
  break;
1281
7.77k
      abbrev_number = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1282
7.77k
               false, abbrev_end);
1283
7.77k
      if (lookup_abbrev (abbrev_number, abbrevs) != NULL)
1284
61
  break;
1285
7.77k
    }
1286
1287
1.48k
  *slot = bfd_malloc (sizeof ent);
1288
1.48k
  if (!*slot)
1289
0
    goto fail;
1290
1.48k
  ent.abbrevs = abbrevs;
1291
1.48k
  memcpy (*slot, &ent, sizeof ent);
1292
1.48k
  return abbrevs;
1293
1294
0
 fail:
1295
0
  if (abbrevs != NULL)
1296
0
    {
1297
0
      size_t i;
1298
1299
0
      for (i = 0; i < ABBREV_HASH_SIZE; i++)
1300
0
  {
1301
0
    struct abbrev_info *abbrev = abbrevs[i];
1302
1303
0
    while (abbrev)
1304
0
      {
1305
0
        free (abbrev->attrs);
1306
0
        abbrev = abbrev->next;
1307
0
      }
1308
0
  }
1309
0
      free (abbrevs);
1310
0
    }
1311
0
  return NULL;
1312
1.48k
}
1313
1314
/* Returns true if the form is one which has a string value.  */
1315
1316
static bool
1317
is_str_form (const struct attribute *attr)
1318
5.67k
{
1319
5.67k
  switch (attr->form)
1320
5.67k
    {
1321
61
    case DW_FORM_string:
1322
5.42k
    case DW_FORM_strp:
1323
5.42k
    case DW_FORM_strx:
1324
5.44k
    case DW_FORM_strx1:
1325
5.46k
    case DW_FORM_strx2:
1326
5.47k
    case DW_FORM_strx3:
1327
5.50k
    case DW_FORM_strx4:
1328
5.51k
    case DW_FORM_line_strp:
1329
5.51k
    case DW_FORM_GNU_strp_alt:
1330
5.51k
      return true;
1331
1332
162
    default:
1333
162
      return false;
1334
5.67k
    }
1335
5.67k
}
1336
1337
/* Returns true if the form is one which has an integer value.  */
1338
1339
static bool
1340
is_int_form (const struct attribute *attr)
1341
12.4k
{
1342
12.4k
  switch (attr->form)
1343
12.4k
    {
1344
1.98k
    case DW_FORM_addr:
1345
3.35k
    case DW_FORM_data2:
1346
4.19k
    case DW_FORM_data4:
1347
4.93k
    case DW_FORM_data8:
1348
8.62k
    case DW_FORM_data1:
1349
8.63k
    case DW_FORM_flag:
1350
8.64k
    case DW_FORM_sdata:
1351
8.65k
    case DW_FORM_udata:
1352
8.67k
    case DW_FORM_ref_addr:
1353
8.89k
    case DW_FORM_ref1:
1354
8.94k
    case DW_FORM_ref2:
1355
9.53k
    case DW_FORM_ref4:
1356
9.53k
    case DW_FORM_ref8:
1357
9.55k
    case DW_FORM_ref_udata:
1358
11.7k
    case DW_FORM_sec_offset:
1359
12.0k
    case DW_FORM_flag_present:
1360
12.0k
    case DW_FORM_ref_sig8:
1361
12.0k
    case DW_FORM_addrx:
1362
12.0k
    case DW_FORM_implicit_const:
1363
12.1k
    case DW_FORM_addrx1:
1364
12.2k
    case DW_FORM_addrx2:
1365
12.2k
    case DW_FORM_addrx3:
1366
12.2k
    case DW_FORM_addrx4:
1367
12.2k
    case DW_FORM_GNU_ref_alt:
1368
12.2k
      return true;
1369
1370
200
    default:
1371
200
      return false;
1372
12.4k
    }
1373
12.4k
}
1374
1375
/* Returns true if the form is strx[1-4].  */
1376
1377
static inline bool
1378
is_strx_form (enum dwarf_form form)
1379
10.2k
{
1380
10.2k
  return (form == DW_FORM_strx
1381
10.2k
    || form == DW_FORM_strx1
1382
10.1k
    || form == DW_FORM_strx2
1383
10.1k
    || form == DW_FORM_strx3
1384
10.0k
    || form == DW_FORM_strx4);
1385
10.2k
}
1386
1387
/* Return true if the form is addrx[1-4].  */
1388
1389
static inline bool
1390
is_addrx_form (enum dwarf_form form)
1391
10.0k
{
1392
10.0k
  return (form == DW_FORM_addrx
1393
10.0k
    || form == DW_FORM_addrx1
1394
9.99k
    || form == DW_FORM_addrx2
1395
9.98k
    || form == DW_FORM_addrx3
1396
9.96k
    || form == DW_FORM_addrx4);
1397
10.0k
}
1398
1399
/* Returns the address in .debug_addr section using DW_AT_addr_base.
1400
   Used to implement DW_FORM_addrx*.  */
1401
static uint64_t
1402
read_indexed_address (uint64_t idx, struct comp_unit *unit)
1403
56
{
1404
56
  struct dwarf2_debug *stash = unit->stash;
1405
56
  struct dwarf2_debug_file *file = unit->file;
1406
56
  bfd_byte *info_ptr;
1407
56
  size_t offset;
1408
1409
56
  if (stash == NULL)
1410
0
    return 0;
1411
1412
56
  if (!read_section (unit->abfd, &stash->debug_sections[debug_addr],
1413
56
         file->syms, 0,
1414
56
         &file->dwarf_addr_buffer, &file->dwarf_addr_size))
1415
56
    return 0;
1416
1417
0
  if (_bfd_mul_overflow (idx, unit->addr_size, &offset))
1418
0
    return 0;
1419
1420
0
  offset += unit->dwarf_addr_offset;
1421
0
  if (offset < unit->dwarf_addr_offset
1422
0
      || offset > file->dwarf_addr_size
1423
0
      || file->dwarf_addr_size - offset < unit->addr_size)
1424
0
    return 0;
1425
1426
0
  info_ptr = file->dwarf_addr_buffer + offset;
1427
1428
0
  if (unit->addr_size == 4)
1429
0
    return bfd_get_32 (unit->abfd, info_ptr);
1430
0
  else if (unit->addr_size == 8)
1431
0
    return bfd_get_64 (unit->abfd, info_ptr);
1432
0
  else
1433
0
    return 0;
1434
0
}
1435
1436
/* Returns the string using DW_AT_str_offsets_base.
1437
   Used to implement DW_FORM_strx*.  */
1438
static const char *
1439
read_indexed_string (uint64_t idx, struct comp_unit *unit)
1440
179
{
1441
179
  struct dwarf2_debug *stash = unit->stash;
1442
179
  struct dwarf2_debug_file *file = unit->file;
1443
179
  bfd_byte *info_ptr;
1444
179
  uint64_t str_offset;
1445
179
  size_t offset;
1446
1447
179
  if (stash == NULL)
1448
0
    return NULL;
1449
1450
179
  if (!read_section (unit->abfd, &stash->debug_sections[debug_str],
1451
179
         file->syms, 0,
1452
179
         &file->dwarf_str_buffer, &file->dwarf_str_size))
1453
129
    return NULL;
1454
1455
50
  if (!read_section (unit->abfd, &stash->debug_sections[debug_str_offsets],
1456
50
         file->syms, 0,
1457
50
         &file->dwarf_str_offsets_buffer,
1458
50
         &file->dwarf_str_offsets_size))
1459
50
    return NULL;
1460
1461
0
  if (_bfd_mul_overflow (idx, unit->offset_size, &offset))
1462
0
    return NULL;
1463
1464
0
  offset += unit->dwarf_str_offset;
1465
0
  if (offset < unit->dwarf_str_offset
1466
0
      || offset > file->dwarf_str_offsets_size
1467
0
      || file->dwarf_str_offsets_size - offset < unit->offset_size)
1468
0
    return NULL;
1469
1470
0
  info_ptr = file->dwarf_str_offsets_buffer + offset;
1471
1472
0
  if (unit->offset_size == 4)
1473
0
    str_offset = bfd_get_32 (unit->abfd, info_ptr);
1474
0
  else if (unit->offset_size == 8)
1475
0
    str_offset = bfd_get_64 (unit->abfd, info_ptr);
1476
0
  else
1477
0
    return NULL;
1478
1479
0
  if (str_offset >= file->dwarf_str_size)
1480
0
    return NULL;
1481
0
  return (const char *) file->dwarf_str_buffer + str_offset;
1482
0
}
1483
1484
/* Read and fill in the value of attribute ATTR as described by FORM.
1485
   Read data starting from INFO_PTR, but never at or beyond INFO_PTR_END.
1486
   Returns an updated INFO_PTR taking into account the amount of data read.  */
1487
1488
static bfd_byte *
1489
read_attribute_value (struct attribute *  attr,
1490
          unsigned      form,
1491
          bfd_vma     implicit_const,
1492
          struct comp_unit *  unit,
1493
          bfd_byte *    info_ptr,
1494
          bfd_byte *    info_ptr_end)
1495
67.1k
{
1496
67.1k
  bfd *abfd = unit->abfd;
1497
67.1k
  size_t amt;
1498
1499
67.1k
  if (info_ptr >= info_ptr_end && form != DW_FORM_flag_present)
1500
51
    {
1501
51
      _bfd_error_handler (_("DWARF error: info pointer extends beyond end of attributes"));
1502
51
      bfd_set_error (bfd_error_bad_value);
1503
51
      return NULL;
1504
51
    }
1505
1506
67.1k
  attr->form = (enum dwarf_form) form;
1507
1508
67.1k
  switch (form)
1509
67.1k
    {
1510
8.31k
    case DW_FORM_flag_present:
1511
8.31k
      attr->u.val = 1;
1512
8.31k
      break;
1513
75
    case DW_FORM_ref_addr:
1514
      /* DW_FORM_ref_addr is an address in DWARF2, and an offset in
1515
   DWARF3.  */
1516
75
      if (unit->version >= 3)
1517
74
  {
1518
74
    if (unit->offset_size == 4)
1519
74
      attr->u.val = read_4_bytes (unit->abfd, &info_ptr, info_ptr_end);
1520
0
    else
1521
0
      attr->u.val = read_8_bytes (unit->abfd, &info_ptr, info_ptr_end);
1522
74
    break;
1523
74
  }
1524
      /* FALLTHROUGH */
1525
7.05k
    case DW_FORM_addr:
1526
7.05k
      attr->u.val = read_address (unit, &info_ptr, info_ptr_end);
1527
7.05k
      break;
1528
0
    case DW_FORM_GNU_ref_alt:
1529
3.01k
    case DW_FORM_sec_offset:
1530
3.01k
      if (unit->offset_size == 4)
1531
3.01k
  attr->u.val = read_4_bytes (unit->abfd, &info_ptr, info_ptr_end);
1532
0
      else
1533
0
  attr->u.val = read_8_bytes (unit->abfd, &info_ptr, info_ptr_end);
1534
3.01k
      break;
1535
62
    case DW_FORM_block2:
1536
62
      amt = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1537
62
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1538
62
      if (attr->u.blk == NULL)
1539
0
  return NULL;
1540
62
      break;
1541
62
    case DW_FORM_block4:
1542
23
      amt = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1543
23
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1544
23
      if (attr->u.blk == NULL)
1545
0
  return NULL;
1546
23
      break;
1547
305
    case DW_FORM_ref1:
1548
350
    case DW_FORM_flag:
1549
19.2k
    case DW_FORM_data1:
1550
19.2k
      attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
1551
19.2k
      break;
1552
339
    case DW_FORM_addrx1:
1553
339
      attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
1554
      /* dwarf_addr_offset value 0 indicates the attribute DW_AT_addr_base
1555
   is not yet read.  */
1556
339
      if (unit->dwarf_addr_offset != 0)
1557
0
  attr->u.val = read_indexed_address (attr->u.val, unit);
1558
339
      break;
1559
2.19k
    case DW_FORM_data2:
1560
2.26k
    case DW_FORM_ref2:
1561
2.26k
      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1562
2.26k
      break;
1563
50
    case DW_FORM_addrx2:
1564
50
      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1565
50
      if (unit->dwarf_addr_offset != 0)
1566
0
  attr->u.val = read_indexed_address (attr->u.val, unit);
1567
50
      break;
1568
47
    case DW_FORM_addrx3:
1569
47
      attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
1570
47
      if (unit->dwarf_addr_offset != 0)
1571
1
  attr->u.val = read_indexed_address(attr->u.val, unit);
1572
47
      break;
1573
7.06k
    case DW_FORM_ref4:
1574
8.66k
    case DW_FORM_data4:
1575
8.66k
      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1576
8.66k
      break;
1577
90
    case DW_FORM_addrx4:
1578
90
      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1579
90
      if (unit->dwarf_addr_offset != 0)
1580
0
  attr->u.val = read_indexed_address (attr->u.val, unit);
1581
90
      break;
1582
1.13k
    case DW_FORM_data8:
1583
1.15k
    case DW_FORM_ref8:
1584
1.27k
    case DW_FORM_ref_sig8:
1585
1.27k
      attr->u.val = read_8_bytes (abfd, &info_ptr, info_ptr_end);
1586
1.27k
      break;
1587
563
    case DW_FORM_string:
1588
563
      attr->u.str = read_string (&info_ptr, info_ptr_end);
1589
563
      break;
1590
13.7k
    case DW_FORM_strp:
1591
13.7k
      attr->u.str = read_indirect_string (unit, &info_ptr, info_ptr_end);
1592
13.7k
      break;
1593
24
    case DW_FORM_line_strp:
1594
24
      attr->u.str = read_indirect_line_string (unit, &info_ptr, info_ptr_end);
1595
24
      break;
1596
0
    case DW_FORM_GNU_strp_alt:
1597
0
      attr->u.str = read_alt_indirect_string (unit, &info_ptr, info_ptr_end);
1598
0
      break;
1599
164
    case DW_FORM_strx1:
1600
164
      attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
1601
      /* dwarf_str_offset value 0 indicates the attribute DW_AT_str_offsets_base
1602
   is not yet read.  */
1603
164
      if (unit->dwarf_str_offset != 0)
1604
0
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1605
164
      else
1606
164
  attr->u.str = NULL;
1607
164
      break;
1608
81
    case DW_FORM_strx2:
1609
81
      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1610
81
      if (unit->dwarf_str_offset != 0)
1611
0
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1612
81
      else
1613
81
  attr->u.str = NULL;
1614
81
      break;
1615
46
    case DW_FORM_strx3:
1616
46
      attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
1617
46
      if (unit->dwarf_str_offset != 0)
1618
0
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1619
46
      else
1620
46
  attr->u.str = NULL;
1621
46
      break;
1622
142
    case DW_FORM_strx4:
1623
142
      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1624
142
      if (unit->dwarf_str_offset != 0)
1625
0
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1626
142
      else
1627
142
  attr->u.str = NULL;
1628
142
      break;
1629
36
    case DW_FORM_strx:
1630
36
      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1631
36
             false, info_ptr_end);
1632
36
      if (unit->dwarf_str_offset != 0)
1633
0
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1634
36
      else
1635
36
  attr->u.str = NULL;
1636
36
      break;
1637
1.04k
    case DW_FORM_exprloc:
1638
1.12k
    case DW_FORM_block:
1639
1.12k
      amt = _bfd_safe_read_leb128 (abfd, &info_ptr,
1640
1.12k
           false, info_ptr_end);
1641
1.12k
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1642
1.12k
      if (attr->u.blk == NULL)
1643
0
  return NULL;
1644
1.12k
      break;
1645
1.12k
    case DW_FORM_block1:
1646
82
      amt = read_1_byte (abfd, &info_ptr, info_ptr_end);
1647
82
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1648
82
      if (attr->u.blk == NULL)
1649
0
  return NULL;
1650
82
      break;
1651
82
    case DW_FORM_sdata:
1652
38
      attr->u.sval = _bfd_safe_read_leb128 (abfd, &info_ptr,
1653
38
              true, info_ptr_end);
1654
38
      break;
1655
1656
13
    case DW_FORM_rnglistx:
1657
106
    case DW_FORM_loclistx:
1658
      /* FIXME: Add support for these forms!  */
1659
      /* Fall through.  */
1660
194
    case DW_FORM_ref_udata:
1661
268
    case DW_FORM_udata:
1662
268
      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1663
268
             false, info_ptr_end);
1664
268
      break;
1665
145
    case DW_FORM_addrx:
1666
145
      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1667
145
             false, info_ptr_end);
1668
145
      if (unit->dwarf_addr_offset != 0)
1669
0
  attr->u.val = read_indexed_address (attr->u.val, unit);
1670
145
      break;
1671
6
    case DW_FORM_indirect:
1672
6
      form = _bfd_safe_read_leb128 (abfd, &info_ptr,
1673
6
            false, info_ptr_end);
1674
6
      if (form == DW_FORM_implicit_const)
1675
0
  implicit_const = _bfd_safe_read_leb128 (abfd, &info_ptr,
1676
0
            true, info_ptr_end);
1677
6
      info_ptr = read_attribute_value (attr, form, implicit_const, unit,
1678
6
               info_ptr, info_ptr_end);
1679
6
      break;
1680
7
    case DW_FORM_implicit_const:
1681
7
      attr->form = DW_FORM_sdata;
1682
7
      attr->u.sval = implicit_const;
1683
7
      break;
1684
32
    case DW_FORM_data16:
1685
      /* This is really a "constant", but there is no way to store that
1686
         so pretend it is a 16 byte block instead.  */
1687
32
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, 16);
1688
32
      if (attr->u.blk == NULL)
1689
0
  return NULL;
1690
32
      break;
1691
1692
90
    default:
1693
90
      _bfd_error_handler (_("DWARF error: invalid or unhandled FORM value: %#x"),
1694
90
        form);
1695
90
      bfd_set_error (bfd_error_bad_value);
1696
90
      return NULL;
1697
67.1k
    }
1698
67.0k
  return info_ptr;
1699
67.1k
}
1700
1701
/* Read an attribute described by an abbreviated attribute.  */
1702
1703
static bfd_byte *
1704
read_attribute (struct attribute *    attr,
1705
    struct attr_abbrev *  abbrev,
1706
    struct comp_unit *    unit,
1707
    bfd_byte *        info_ptr,
1708
    bfd_byte *        info_ptr_end)
1709
66.7k
{
1710
66.7k
  attr->name = abbrev->name;
1711
66.7k
  info_ptr = read_attribute_value (attr, abbrev->form, abbrev->implicit_const,
1712
66.7k
           unit, info_ptr, info_ptr_end);
1713
66.7k
  return info_ptr;
1714
66.7k
}
1715
1716
/* Return mangling style given LANG.  */
1717
1718
static int
1719
mangle_style (int lang)
1720
2.68k
{
1721
2.68k
  switch (lang)
1722
2.68k
    {
1723
2
    case DW_LANG_Ada83:
1724
38
    case DW_LANG_Ada95:
1725
101
    case DW_LANG_Ada2005:
1726
101
    case DW_LANG_Ada2012:
1727
101
      return DMGL_GNAT;
1728
1729
98
    case DW_LANG_C_plus_plus:
1730
98
    case DW_LANG_C_plus_plus_03:
1731
98
    case DW_LANG_C_plus_plus_11:
1732
98
    case DW_LANG_C_plus_plus_14:
1733
98
    case DW_LANG_C_plus_plus_17:
1734
98
    case DW_LANG_C_plus_plus_20:
1735
98
    case DW_LANG_C_plus_plus_23:
1736
98
      return DMGL_GNU_V3;
1737
1738
44
    case DW_LANG_Java:
1739
44
      return DMGL_JAVA;
1740
1741
79
    case DW_LANG_D:
1742
79
      return DMGL_DLANG;
1743
1744
59
    case DW_LANG_Rust:
1745
59
    case DW_LANG_Rust_old:
1746
59
      return DMGL_RUST;
1747
1748
398
    default:
1749
398
      return DMGL_AUTO;
1750
1751
127
    case DW_LANG_C89:
1752
351
    case DW_LANG_C:
1753
351
    case DW_LANG_Cobol74:
1754
351
    case DW_LANG_Cobol85:
1755
351
    case DW_LANG_Fortran77:
1756
351
    case DW_LANG_Fortran18:
1757
353
    case DW_LANG_Fortran23:
1758
370
    case DW_LANG_Pascal83:
1759
373
    case DW_LANG_PLI:
1760
1.89k
    case DW_LANG_C99:
1761
1.90k
    case DW_LANG_UPC:
1762
1.90k
    case DW_LANG_C11:
1763
1.90k
    case DW_LANG_C17:
1764
1.90k
    case DW_LANG_C23:
1765
1.90k
    case DW_LANG_Mips_Assembler:
1766
1.90k
    case DW_LANG_Assembly:
1767
1.90k
    case DW_LANG_Upc:
1768
1.90k
    case DW_LANG_HP_Basic91:
1769
1.90k
    case DW_LANG_HP_IMacro:
1770
1.90k
    case DW_LANG_HP_Assembler:
1771
1.90k
      return 0;
1772
2.68k
    }
1773
2.68k
}
1774
1775
/* Source line information table routines.  */
1776
1777
3.77k
#define FILE_ALLOC_CHUNK 5
1778
2.40k
#define DIR_ALLOC_CHUNK 5
1779
1780
struct line_info
1781
{
1782
  struct line_info *  prev_line;
1783
  bfd_vma   address;
1784
  char *    filename;
1785
  unsigned int    line;
1786
  unsigned int    column;
1787
  unsigned int    discriminator;
1788
  unsigned char   op_index;
1789
  unsigned char   end_sequence;   /* End of (sequential) code sequence.  */
1790
};
1791
1792
struct fileinfo
1793
{
1794
  char *    name;
1795
  unsigned int    dir;
1796
  unsigned int    time;
1797
  unsigned int    size;
1798
};
1799
1800
struct line_sequence
1801
{
1802
  bfd_vma   low_pc;
1803
  struct line_sequence* prev_sequence;
1804
  struct line_info* last_line;  /* Largest VMA.  */
1805
  struct line_info**  line_info_lookup;
1806
  bfd_size_type   num_lines;
1807
};
1808
1809
struct line_info_table
1810
{
1811
  bfd *     abfd;
1812
  unsigned int    num_files;
1813
  unsigned int    num_dirs;
1814
  unsigned int    num_sequences;
1815
  bool                  use_dir_and_file_0;
1816
  char *    comp_dir;
1817
  char **   dirs;
1818
  struct fileinfo*  files;
1819
  struct line_sequence* sequences;
1820
  struct line_info* lcl_head;   /* Local head; used in 'add_line_info'.  */
1821
};
1822
1823
/* Remember some information about each function.  If the function is
1824
   inlined (DW_TAG_inlined_subroutine) it may have two additional
1825
   attributes, DW_AT_call_file and DW_AT_call_line, which specify the
1826
   source code location where this function was inlined.  */
1827
1828
struct funcinfo
1829
{
1830
  /* Pointer to previous function in list of all functions.  */
1831
  struct funcinfo *prev_func;
1832
  /* Pointer to function one scope higher.  */
1833
  struct funcinfo *caller_func;
1834
  /* Source location file name where caller_func inlines this func.  */
1835
  char *caller_file;
1836
  /* Source location file name.  */
1837
  char *file;
1838
  /* Source location line number where caller_func inlines this func.  */
1839
  int caller_line;
1840
  /* Source location line number.  */
1841
  int line;
1842
  int tag;
1843
  bool is_linkage;
1844
  const char *name;
1845
  struct arange arange;
1846
  /* The offset of the funcinfo from the start of the unit.  */
1847
  uint64_t unit_offset;
1848
};
1849
1850
struct lookup_funcinfo
1851
{
1852
  /* Function information corresponding to this lookup table entry.  */
1853
  struct funcinfo *funcinfo;
1854
1855
  /* The lowest address for this specific function.  */
1856
  bfd_vma low_addr;
1857
1858
  /* The highest address of this function before the lookup table is sorted.
1859
     The highest address of all prior functions after the lookup table is
1860
     sorted, which is used for binary search.  */
1861
  bfd_vma high_addr;
1862
  /* Index of this function, used to ensure qsort is stable.  */
1863
  unsigned int idx;
1864
};
1865
1866
struct varinfo
1867
{
1868
  /* Pointer to previous variable in list of all variables.  */
1869
  struct varinfo *prev_var;
1870
  /* The offset of the varinfo from the start of the unit.  */
1871
  uint64_t unit_offset;
1872
  /* Source location file name.  */
1873
  char *file;
1874
  /* Source location line number.  */
1875
  int line;
1876
  /* The type of this variable.  */
1877
  int tag;
1878
  /* The name of the variable, if it has one.  */
1879
  const char *name;
1880
  /* The address of the variable.  */
1881
  bfd_vma addr;
1882
  /* Is this a stack variable?  */
1883
  bool stack;
1884
};
1885
1886
/* Return TRUE if NEW_LINE should sort after LINE.  */
1887
1888
static inline bool
1889
new_line_sorts_after (struct line_info *new_line, struct line_info *line)
1890
412k
{
1891
412k
  return (new_line->address > line->address
1892
382k
    || (new_line->address == line->address
1893
352k
        && new_line->op_index > line->op_index));
1894
412k
}
1895
1896
1897
/* Adds a new entry to the line_info list in the line_info_table, ensuring
1898
   that the list is sorted.  Note that the line_info list is sorted from
1899
   highest to lowest VMA (with possible duplicates); that is,
1900
   line_info->prev_line always accesses an equal or smaller VMA.  */
1901
1902
static bool
1903
add_line_info (struct line_info_table *table,
1904
         bfd_vma address,
1905
         unsigned char op_index,
1906
         char *filename,
1907
         unsigned int line,
1908
         unsigned int column,
1909
         unsigned int discriminator,
1910
         int end_sequence)
1911
43.0k
{
1912
43.0k
  size_t amt = sizeof (struct line_info);
1913
43.0k
  struct line_sequence* seq = table->sequences;
1914
43.0k
  struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt);
1915
1916
43.0k
  if (info == NULL)
1917
0
    return false;
1918
1919
  /* Set member data of 'info'.  */
1920
43.0k
  info->prev_line = NULL;
1921
43.0k
  info->address = address;
1922
43.0k
  info->op_index = op_index;
1923
43.0k
  info->line = line;
1924
43.0k
  info->column = column;
1925
43.0k
  info->discriminator = discriminator;
1926
43.0k
  info->end_sequence = end_sequence;
1927
1928
43.0k
  if (filename && filename[0])
1929
37.0k
    {
1930
37.0k
      info->filename = (char *) bfd_alloc (table->abfd, strlen (filename) + 1);
1931
37.0k
      if (info->filename == NULL)
1932
0
  return false;
1933
37.0k
      strcpy (info->filename, filename);
1934
37.0k
    }
1935
6.02k
  else
1936
6.02k
    info->filename = NULL;
1937
1938
  /* Find the correct location for 'info'.  Normally we will receive
1939
     new line_info data 1) in order and 2) with increasing VMAs.
1940
     However some compilers break the rules (cf. decode_line_info) and
1941
     so we include some heuristics for quickly finding the correct
1942
     location for 'info'. In particular, these heuristics optimize for
1943
     the common case in which the VMA sequence that we receive is a
1944
     list of locally sorted VMAs such as
1945
       p...z a...j  (where a < j < p < z)
1946
1947
     Note: table->lcl_head is used to head an *actual* or *possible*
1948
     sub-sequence within the list (such as a...j) that is not directly
1949
     headed by table->last_line
1950
1951
     Note: we may receive duplicate entries from 'decode_line_info'.  */
1952
1953
43.0k
  if (seq
1954
42.1k
      && seq->last_line->address == address
1955
10.1k
      && seq->last_line->op_index == op_index
1956
4.94k
      && seq->last_line->end_sequence == end_sequence)
1957
4.89k
    {
1958
      /* We only keep the last entry with the same address and end
1959
   sequence.  See PR ld/4986.  */
1960
4.89k
      if (table->lcl_head == seq->last_line)
1961
1.22k
  table->lcl_head = info;
1962
4.89k
      info->prev_line = seq->last_line->prev_line;
1963
4.89k
      seq->last_line = info;
1964
4.89k
    }
1965
38.1k
  else if (!seq || seq->last_line->end_sequence)
1966
1.10k
    {
1967
      /* Start a new line sequence.  */
1968
1.10k
      amt = sizeof (struct line_sequence);
1969
1.10k
      seq = (struct line_sequence *) bfd_malloc (amt);
1970
1.10k
      if (seq == NULL)
1971
0
  return false;
1972
1.10k
      seq->low_pc = address;
1973
1.10k
      seq->prev_sequence = table->sequences;
1974
1.10k
      seq->last_line = info;
1975
1.10k
      table->lcl_head = info;
1976
1.10k
      table->sequences = seq;
1977
1.10k
      table->num_sequences++;
1978
1.10k
    }
1979
37.0k
  else if (info->end_sequence
1980
36.2k
     || new_line_sorts_after (info, seq->last_line))
1981
31.0k
    {
1982
      /* Normal case: add 'info' to the beginning of the current sequence.  */
1983
31.0k
      info->prev_line = seq->last_line;
1984
31.0k
      seq->last_line = info;
1985
1986
      /* lcl_head: initialize to head a *possible* sequence at the end.  */
1987
31.0k
      if (!table->lcl_head)
1988
0
  table->lcl_head = info;
1989
31.0k
    }
1990
5.94k
  else if (!new_line_sorts_after (info, table->lcl_head)
1991
3.55k
     && (!table->lcl_head->prev_line
1992
3.46k
         || new_line_sorts_after (info, table->lcl_head->prev_line)))
1993
2.62k
    {
1994
      /* Abnormal but easy: lcl_head is the head of 'info'.  */
1995
2.62k
      info->prev_line = table->lcl_head->prev_line;
1996
2.62k
      table->lcl_head->prev_line = info;
1997
2.62k
    }
1998
3.32k
  else
1999
3.32k
    {
2000
      /* Abnormal and hard: Neither 'last_line' nor 'lcl_head'
2001
   are valid heads for 'info'.  Reset 'lcl_head'.  */
2002
3.32k
      struct line_info* li2 = seq->last_line; /* Always non-NULL.  */
2003
3.32k
      struct line_info* li1 = li2->prev_line;
2004
2005
183k
      while (li1)
2006
183k
  {
2007
183k
    if (!new_line_sorts_after (info, li2)
2008
183k
        && new_line_sorts_after (info, li1))
2009
3.16k
      break;
2010
2011
180k
    li2 = li1; /* always non-NULL */
2012
180k
    li1 = li1->prev_line;
2013
180k
  }
2014
3.32k
      table->lcl_head = li2;
2015
3.32k
      info->prev_line = table->lcl_head->prev_line;
2016
3.32k
      table->lcl_head->prev_line = info;
2017
3.32k
      if (address < seq->low_pc)
2018
38
  seq->low_pc = address;
2019
3.32k
    }
2020
43.0k
  return true;
2021
43.0k
}
2022
2023
/* Extract a fully qualified filename from a line info table.
2024
   The returned string has been malloc'ed and it is the caller's
2025
   responsibility to free it.  */
2026
2027
static char *
2028
concat_filename (struct line_info_table *table, unsigned int file)
2029
3.13k
{
2030
3.13k
  char *filename;
2031
2032
  /* Pre DWARF-5 entry 0 in the directory and filename tables was not used.
2033
     So in order to save space in the tables used here the info for, eg
2034
     directory 1 is stored in slot 0 of the directory table, directory 2
2035
     in slot 1 and so on.
2036
2037
     Starting with DWARF-5 the 0'th entry is used so there is a one to one
2038
     mapping between DWARF slots and internal table entries.  */
2039
3.13k
  if (! table->use_dir_and_file_0)
2040
3.13k
    {
2041
      /* Pre DWARF-5, FILE == 0 means unknown.  */
2042
3.13k
      if (file == 0)
2043
85
  return strdup ("<unknown>");
2044
3.05k
      -- file;
2045
3.05k
    }
2046
2047
3.05k
  if (table == NULL || file >= table->num_files)
2048
219
    {
2049
219
      _bfd_error_handler
2050
219
  (_("DWARF error: mangled line number section (bad file number)"));
2051
219
      return strdup ("<unknown>");
2052
219
    }
2053
2054
2.83k
  filename = table->files[file].name;
2055
2056
2.83k
  if (filename == NULL)
2057
0
    return strdup ("<unknown>");
2058
2059
2.83k
  if (!IS_ABSOLUTE_PATH (filename))
2060
2.82k
    {
2061
2.82k
      char *dir_name = NULL;
2062
2.82k
      char *subdir_name = NULL;
2063
2.82k
      char *name;
2064
2.82k
      size_t len;
2065
2.82k
      unsigned int dir = table->files[file].dir;
2066
2067
2.82k
      if (!table->use_dir_and_file_0)
2068
2.82k
  --dir;
2069
      /* Wrapping from 0 to -1u above gives the intended result with
2070
   the test below of leaving subdir_name NULL for pre-DWARF5 dir
2071
   of 0.  */
2072
      /* PR 17512: file: 0317e960, file: 7f3d2e4b.  */
2073
2.82k
      if (dir < table->num_dirs)
2074
851
  subdir_name = table->dirs[dir];
2075
2076
2.82k
      if (!subdir_name || !IS_ABSOLUTE_PATH (subdir_name))
2077
2.19k
  dir_name = table->comp_dir;
2078
2079
2.82k
      if (!dir_name)
2080
1.64k
  {
2081
1.64k
    dir_name = subdir_name;
2082
1.64k
    subdir_name = NULL;
2083
1.64k
  }
2084
2085
2.82k
      if (!dir_name)
2086
941
  return strdup (filename);
2087
2088
1.88k
      len = strlen (dir_name) + strlen (filename) + 2;
2089
2090
1.88k
      if (subdir_name)
2091
151
  {
2092
151
    len += strlen (subdir_name) + 1;
2093
151
    name = (char *) bfd_malloc (len);
2094
151
    if (name)
2095
151
      sprintf (name, "%s/%s/%s", dir_name, subdir_name, filename);
2096
151
  }
2097
1.73k
      else
2098
1.73k
  {
2099
1.73k
    name = (char *) bfd_malloc (len);
2100
1.73k
    if (name)
2101
1.73k
      sprintf (name, "%s/%s", dir_name, filename);
2102
1.73k
  }
2103
2104
1.88k
      return name;
2105
2.82k
    }
2106
2107
11
  return strdup (filename);
2108
2.83k
}
2109
2110
/* Number of bits in a bfd_vma.  */
2111
41.7k
#define VMA_BITS (8 * sizeof (bfd_vma))
2112
2113
/* Check whether [low1, high1) can be combined with [low2, high2),
2114
   i.e., they touch or overlap.  */
2115
2116
static bool
2117
ranges_overlap (bfd_vma low1,
2118
    bfd_vma high1,
2119
    bfd_vma low2,
2120
    bfd_vma high2)
2121
30.4k
{
2122
30.4k
  if (low1 == low2 || high1 == high2)
2123
12.7k
    return true;
2124
2125
  /* Sort so that low1 is below low2. */
2126
17.7k
  if (low1 > low2)
2127
14.8k
    {
2128
14.8k
      bfd_vma tmp;
2129
2130
14.8k
      tmp = low1;
2131
14.8k
      low1 = low2;
2132
14.8k
      low2 = tmp;
2133
2134
14.8k
      tmp = high1;
2135
14.8k
      high1 = high2;
2136
14.8k
      high2 = tmp;
2137
14.8k
    }
2138
2139
  /* We touch iff low2 == high1.
2140
     We overlap iff low2 is within [low1, high1). */
2141
17.7k
  return low2 <= high1;
2142
30.4k
}
2143
2144
/* Insert an address range in the trie mapping addresses to compilation units.
2145
   Will return the new trie node (usually the same as is being sent in, but
2146
   in case of a leaf-to-interior conversion, or expansion of a leaf, it may be
2147
   different), or NULL on failure.  */
2148
2149
static struct trie_node *
2150
insert_arange_in_trie (bfd *abfd,
2151
           struct trie_node *trie,
2152
           bfd_vma trie_pc,
2153
           unsigned int trie_pc_bits,
2154
           struct comp_unit *unit,
2155
           bfd_vma low_pc,
2156
           bfd_vma high_pc)
2157
27.7k
{
2158
27.7k
  bfd_vma clamped_low_pc, clamped_high_pc;
2159
27.7k
  int ch, from_ch, to_ch;
2160
27.7k
  bool is_full_leaf = false;
2161
27.7k
  bool splitting_leaf_will_help = false;
2162
2163
  /* See if we can extend any of the existing ranges.  This merging
2164
     isn't perfect (if merging opens up the possibility of merging two existing
2165
     ranges, we won't find them), but it takes the majority of the cases.  */
2166
27.7k
  if (trie->num_room_in_leaf > 0)
2167
27.2k
    {
2168
27.2k
      struct trie_leaf *leaf = (struct trie_leaf *) trie;
2169
27.2k
      unsigned int i;
2170
2171
34.9k
      for (i = 0; i < leaf->num_stored_in_leaf; ++i)
2172
30.5k
  {
2173
30.5k
    if (leaf->ranges[i].unit == unit
2174
30.4k
        && ranges_overlap (low_pc, high_pc,
2175
30.4k
         leaf->ranges[i].low_pc,
2176
30.4k
         leaf->ranges[i].high_pc))
2177
22.8k
      {
2178
22.8k
        if (low_pc < leaf->ranges[i].low_pc)
2179
1.99k
    leaf->ranges[i].low_pc = low_pc;
2180
22.8k
        if (high_pc > leaf->ranges[i].high_pc)
2181
3.18k
    leaf->ranges[i].high_pc = high_pc;
2182
22.8k
        return trie;
2183
22.8k
      }
2184
30.5k
  }
2185
2186
4.38k
      is_full_leaf = leaf->num_stored_in_leaf == trie->num_room_in_leaf;
2187
2188
4.38k
      if (is_full_leaf && trie_pc_bits < VMA_BITS)
2189
7
  {
2190
    /* See if we have at least one leaf that does _not_ cover the
2191
       entire bucket, so that splitting will actually reduce the number
2192
       of elements in at least one of the child nodes.  (For simplicity,
2193
       we don't test the range we're inserting, but it will be counted
2194
       on the next insertion where we're full, if any.)   */
2195
7
    bfd_vma bucket_high_pc =
2196
7
      trie_pc + ((bfd_vma) -1 >> trie_pc_bits);  /* Inclusive.  */
2197
7
    for (i = 0; i < leaf->num_stored_in_leaf; ++i)
2198
7
      {
2199
7
        if (leaf->ranges[i].low_pc > trie_pc
2200
0
      || leaf->ranges[i].high_pc <= bucket_high_pc)
2201
7
    {
2202
7
      splitting_leaf_will_help = true;
2203
7
      break;
2204
7
    }
2205
7
      }
2206
7
  }
2207
4.38k
    }
2208
2209
  /* If we're a leaf with no more room and we're _not_ at the bottom,
2210
     convert to an interior node.  */
2211
4.91k
  if (is_full_leaf && splitting_leaf_will_help)
2212
7
    {
2213
7
      const struct trie_leaf *leaf = (struct trie_leaf *) trie;
2214
7
      unsigned int i;
2215
2216
7
      trie = bfd_zalloc (abfd, sizeof (struct trie_interior));
2217
7
      if (!trie)
2218
0
  return NULL;
2219
7
      is_full_leaf = false;
2220
2221
      /* TODO: If we wanted to save a little more memory at the cost of
2222
   complexity, we could have reused the old leaf node as one of the
2223
   children of the new interior node, instead of throwing it away.  */
2224
119
      for (i = 0; i < leaf->num_stored_in_leaf; ++i)
2225
112
        {
2226
112
    if (!insert_arange_in_trie (abfd, trie, trie_pc, trie_pc_bits,
2227
112
              leaf->ranges[i].unit, leaf->ranges[i].low_pc,
2228
112
              leaf->ranges[i].high_pc))
2229
0
      return NULL;
2230
112
  }
2231
7
    }
2232
2233
  /* If we're a leaf with no more room and we _are_ at the bottom
2234
     (or splitting it won't help), we have no choice but to just
2235
     make it larger.  */
2236
4.91k
  if (is_full_leaf)
2237
0
    {
2238
0
      const struct trie_leaf *leaf = (struct trie_leaf *) trie;
2239
0
      unsigned int new_room_in_leaf = trie->num_room_in_leaf * 2;
2240
0
      struct trie_leaf *new_leaf;
2241
0
      size_t amt = sizeof (*leaf) + new_room_in_leaf * sizeof (leaf->ranges[0]);
2242
0
      new_leaf = bfd_zalloc (abfd, amt);
2243
0
      new_leaf->head.num_room_in_leaf = new_room_in_leaf;
2244
0
      new_leaf->num_stored_in_leaf = leaf->num_stored_in_leaf;
2245
2246
0
      memcpy (new_leaf->ranges,
2247
0
        leaf->ranges,
2248
0
        leaf->num_stored_in_leaf * sizeof (leaf->ranges[0]));
2249
0
      trie = &new_leaf->head;
2250
0
      is_full_leaf = false;
2251
2252
      /* Now the insert below will go through.  */
2253
0
    }
2254
2255
  /* If we're a leaf (now with room), we can just insert at the end.  */
2256
4.91k
  if (trie->num_room_in_leaf > 0)
2257
4.38k
    {
2258
4.38k
      struct trie_leaf *leaf = (struct trie_leaf *) trie;
2259
2260
4.38k
      unsigned int i = leaf->num_stored_in_leaf++;
2261
4.38k
      leaf->ranges[i].unit = unit;
2262
4.38k
      leaf->ranges[i].low_pc = low_pc;
2263
4.38k
      leaf->ranges[i].high_pc = high_pc;
2264
4.38k
      return trie;
2265
4.38k
    }
2266
2267
  /* Now we are definitely an interior node, so recurse into all
2268
     the relevant buckets.  */
2269
2270
  /* Clamp the range to the current trie bucket.  */
2271
533
  clamped_low_pc = low_pc;
2272
533
  clamped_high_pc = high_pc;
2273
533
  if (trie_pc_bits > 0)
2274
59
    {
2275
59
      bfd_vma bucket_high_pc =
2276
59
  trie_pc + ((bfd_vma) -1 >> trie_pc_bits);  /* Inclusive.  */
2277
59
      if (clamped_low_pc < trie_pc)
2278
0
  clamped_low_pc = trie_pc;
2279
59
      if (clamped_high_pc > bucket_high_pc)
2280
12
  clamped_high_pc = bucket_high_pc;
2281
59
    }
2282
2283
  /* Insert the ranges in all buckets that it spans.  */
2284
533
  from_ch = (clamped_low_pc >> (VMA_BITS - trie_pc_bits - 8)) & 0xff;
2285
533
  to_ch = ((clamped_high_pc - 1) >> (VMA_BITS - trie_pc_bits - 8)) & 0xff;
2286
20.9k
  for (ch = from_ch; ch <= to_ch; ++ch)
2287
20.4k
    {
2288
20.4k
      struct trie_interior *interior = (struct trie_interior *) trie;
2289
20.4k
      struct trie_node *child = interior->children[ch];
2290
2291
20.4k
      if (child == NULL)
2292
1.69k
        {
2293
1.69k
    child = alloc_trie_leaf (abfd);
2294
1.69k
    if (!child)
2295
0
      return NULL;
2296
1.69k
  }
2297
20.4k
      bfd_vma bucket = (bfd_vma) ch << (VMA_BITS - trie_pc_bits - 8);
2298
20.4k
      child = insert_arange_in_trie (abfd,
2299
20.4k
             child,
2300
20.4k
             trie_pc + bucket,
2301
20.4k
             trie_pc_bits + 8,
2302
20.4k
             unit,
2303
20.4k
             low_pc,
2304
20.4k
             high_pc);
2305
20.4k
      if (!child)
2306
0
  return NULL;
2307
2308
20.4k
      interior->children[ch] = child;
2309
20.4k
    }
2310
2311
533
    return trie;
2312
533
}
2313
2314
static bool
2315
arange_add (struct comp_unit *unit, struct arange *first_arange,
2316
      struct trie_node **trie_root, bfd_vma low_pc, bfd_vma high_pc)
2317
7.65k
{
2318
7.65k
  struct arange *arange;
2319
2320
  /* Ignore empty ranges.  */
2321
7.65k
  if (low_pc == high_pc)
2322
391
    return true;
2323
2324
7.26k
  if (trie_root != NULL)
2325
7.26k
    {
2326
7.26k
      *trie_root = insert_arange_in_trie (unit->file->bfd_ptr,
2327
7.26k
            *trie_root,
2328
7.26k
            0,
2329
7.26k
            0,
2330
7.26k
            unit,
2331
7.26k
            low_pc,
2332
7.26k
            high_pc);
2333
7.26k
      if (*trie_root == NULL)
2334
0
  return false;
2335
7.26k
    }
2336
2337
  /* If the first arange is empty, use it.  */
2338
7.26k
  if (first_arange->high == 0)
2339
2.39k
    {
2340
2.39k
      first_arange->low = low_pc;
2341
2.39k
      first_arange->high = high_pc;
2342
2.39k
      return true;
2343
2.39k
    }
2344
2345
  /* Next see if we can cheaply extend an existing range.  */
2346
4.87k
  arange = first_arange;
2347
4.87k
  do
2348
20.3k
    {
2349
20.3k
      if (low_pc == arange->high)
2350
126
  {
2351
126
    arange->high = high_pc;
2352
126
    return true;
2353
126
  }
2354
20.1k
      if (high_pc == arange->low)
2355
119
  {
2356
119
    arange->low = low_pc;
2357
119
    return true;
2358
119
  }
2359
20.0k
      arange = arange->next;
2360
20.0k
    }
2361
20.0k
  while (arange);
2362
2363
  /* Need to allocate a new arange and insert it into the arange list.
2364
     Order isn't significant, so just insert after the first arange.  */
2365
4.62k
  arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange));
2366
4.62k
  if (arange == NULL)
2367
0
    return false;
2368
4.62k
  arange->low = low_pc;
2369
4.62k
  arange->high = high_pc;
2370
4.62k
  arange->next = first_arange->next;
2371
4.62k
  first_arange->next = arange;
2372
4.62k
  return true;
2373
4.62k
}
2374
2375
/* Compare function for line sequences.  */
2376
2377
static int
2378
compare_sequences (const void* a, const void* b)
2379
276
{
2380
276
  const struct line_sequence* seq1 = a;
2381
276
  const struct line_sequence* seq2 = b;
2382
2383
  /* Sort by low_pc as the primary key.  */
2384
276
  if (seq1->low_pc < seq2->low_pc)
2385
36
    return -1;
2386
240
  if (seq1->low_pc > seq2->low_pc)
2387
81
    return 1;
2388
2389
  /* If low_pc values are equal, sort in reverse order of
2390
     high_pc, so that the largest region comes first.  */
2391
159
  if (seq1->last_line->address < seq2->last_line->address)
2392
34
    return 1;
2393
125
  if (seq1->last_line->address > seq2->last_line->address)
2394
62
    return -1;
2395
2396
63
  if (seq1->last_line->op_index < seq2->last_line->op_index)
2397
27
    return 1;
2398
36
  if (seq1->last_line->op_index > seq2->last_line->op_index)
2399
34
    return -1;
2400
2401
  /* num_lines is initially an index, to make the sort stable.  */
2402
2
  if (seq1->num_lines < seq2->num_lines)
2403
2
    return -1;
2404
0
  if (seq1->num_lines > seq2->num_lines)
2405
0
    return 1;
2406
0
  return 0;
2407
0
}
2408
2409
/* Construct the line information table for quick lookup.  */
2410
2411
static bool
2412
build_line_info_table (struct line_info_table *  table,
2413
           struct line_sequence *    seq)
2414
1.52k
{
2415
1.52k
  size_t amt;
2416
1.52k
  struct line_info **line_info_lookup;
2417
1.52k
  struct line_info *each_line;
2418
1.52k
  unsigned int num_lines;
2419
1.52k
  unsigned int line_index;
2420
2421
1.52k
  if (seq->line_info_lookup != NULL)
2422
1.30k
    return true;
2423
2424
  /* Count the number of line information entries.  We could do this while
2425
     scanning the debug information, but some entries may be added via
2426
     lcl_head without having a sequence handy to increment the number of
2427
     lines.  */
2428
222
  num_lines = 0;
2429
13.3k
  for (each_line = seq->last_line; each_line; each_line = each_line->prev_line)
2430
13.1k
    num_lines++;
2431
2432
222
  seq->num_lines = num_lines;
2433
222
  if (num_lines == 0)
2434
0
    return true;
2435
2436
  /* Allocate space for the line information lookup table.  */
2437
222
  amt = sizeof (struct line_info*) * num_lines;
2438
222
  line_info_lookup = (struct line_info**) bfd_alloc (table->abfd, amt);
2439
222
  seq->line_info_lookup = line_info_lookup;
2440
222
  if (line_info_lookup == NULL)
2441
0
    return false;
2442
2443
  /* Create the line information lookup table.  */
2444
222
  line_index = num_lines;
2445
13.3k
  for (each_line = seq->last_line; each_line; each_line = each_line->prev_line)
2446
13.1k
    line_info_lookup[--line_index] = each_line;
2447
2448
222
  BFD_ASSERT (line_index == 0);
2449
222
  return true;
2450
222
}
2451
2452
/* Sort the line sequences for quick lookup.  */
2453
2454
static bool
2455
sort_line_sequences (struct line_info_table* table)
2456
829
{
2457
829
  size_t amt;
2458
829
  struct line_sequence *sequences;
2459
829
  struct line_sequence *seq;
2460
829
  unsigned int n = 0;
2461
829
  unsigned int num_sequences = table->num_sequences;
2462
829
  bfd_vma last_high_pc;
2463
2464
829
  if (num_sequences == 0)
2465
79
    return true;
2466
2467
  /* Allocate space for an array of sequences.  */
2468
750
  amt = sizeof (struct line_sequence) * num_sequences;
2469
750
  sequences = (struct line_sequence *) bfd_alloc (table->abfd, amt);
2470
750
  if (sequences == NULL)
2471
0
    return false;
2472
2473
  /* Copy the linked list into the array, freeing the original nodes.  */
2474
750
  seq = table->sequences;
2475
1.74k
  for (n = 0; n < num_sequences; n++)
2476
992
    {
2477
992
      struct line_sequence* last_seq = seq;
2478
2479
992
      BFD_ASSERT (seq);
2480
992
      sequences[n].low_pc = seq->low_pc;
2481
992
      sequences[n].prev_sequence = NULL;
2482
992
      sequences[n].last_line = seq->last_line;
2483
992
      sequences[n].line_info_lookup = NULL;
2484
992
      sequences[n].num_lines = n;
2485
992
      seq = seq->prev_sequence;
2486
992
      free (last_seq);
2487
992
    }
2488
750
  BFD_ASSERT (seq == NULL);
2489
2490
750
  qsort (sequences, n, sizeof (struct line_sequence), compare_sequences);
2491
2492
  /* Make the list binary-searchable by trimming overlapping entries
2493
     and removing nested entries.  */
2494
750
  num_sequences = 1;
2495
750
  last_high_pc = sequences[0].last_line->address;
2496
992
  for (n = 1; n < table->num_sequences; n++)
2497
242
    {
2498
242
      if (sequences[n].low_pc < last_high_pc)
2499
117
  {
2500
117
    if (sequences[n].last_line->address <= last_high_pc)
2501
      /* Skip nested entries.  */
2502
107
      continue;
2503
2504
    /* Trim overlapping entries.  */
2505
10
    sequences[n].low_pc = last_high_pc;
2506
10
  }
2507
135
      last_high_pc = sequences[n].last_line->address;
2508
135
      if (n > num_sequences)
2509
6
  {
2510
    /* Close up the gap.  */
2511
6
    sequences[num_sequences].low_pc = sequences[n].low_pc;
2512
6
    sequences[num_sequences].last_line = sequences[n].last_line;
2513
6
  }
2514
135
      num_sequences++;
2515
135
    }
2516
2517
750
  table->sequences = sequences;
2518
750
  table->num_sequences = num_sequences;
2519
750
  return true;
2520
750
}
2521
2522
/* Add directory to TABLE.  CUR_DIR memory ownership is taken by TABLE.  */
2523
2524
static bool
2525
line_info_add_include_dir (struct line_info_table *table, char *cur_dir)
2526
1.59k
{
2527
1.59k
  if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
2528
803
    {
2529
803
      char **tmp;
2530
803
      size_t amt;
2531
2532
803
      amt = table->num_dirs + DIR_ALLOC_CHUNK;
2533
803
      amt *= sizeof (char *);
2534
2535
803
      tmp = (char **) bfd_realloc (table->dirs, amt);
2536
803
      if (tmp == NULL)
2537
0
  return false;
2538
803
      table->dirs = tmp;
2539
803
    }
2540
2541
1.59k
  table->dirs[table->num_dirs++] = cur_dir;
2542
1.59k
  return true;
2543
1.59k
}
2544
2545
static bool
2546
line_info_add_include_dir_stub (struct line_info_table *table, char *cur_dir,
2547
        unsigned int dir ATTRIBUTE_UNUSED,
2548
        unsigned int xtime ATTRIBUTE_UNUSED,
2549
        unsigned int size ATTRIBUTE_UNUSED)
2550
69
{
2551
69
  return line_info_add_include_dir (table, cur_dir);
2552
69
}
2553
2554
/* Add file to TABLE.  CUR_FILE memory ownership is taken by TABLE.  */
2555
2556
static bool
2557
line_info_add_file_name (struct line_info_table *table, char *cur_file,
2558
       unsigned int dir, unsigned int xtime,
2559
       unsigned int size)
2560
2.68k
{
2561
2.68k
  if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
2562
1.09k
    {
2563
1.09k
      struct fileinfo *tmp;
2564
1.09k
      size_t amt;
2565
2566
1.09k
      amt = table->num_files + FILE_ALLOC_CHUNK;
2567
1.09k
      amt *= sizeof (struct fileinfo);
2568
2569
1.09k
      tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
2570
1.09k
      if (tmp == NULL)
2571
0
  return false;
2572
1.09k
      table->files = tmp;
2573
1.09k
    }
2574
2575
2.68k
  table->files[table->num_files].name = cur_file;
2576
2.68k
  table->files[table->num_files].dir = dir;
2577
2.68k
  table->files[table->num_files].time = xtime;
2578
2.68k
  table->files[table->num_files].size = size;
2579
2.68k
  table->num_files++;
2580
2.68k
  return true;
2581
2.68k
}
2582
2583
/* Read directory or file name entry format, starting with byte of
2584
   format count entries, ULEB128 pairs of entry formats, ULEB128 of
2585
   entries count and the entries themselves in the described entry
2586
   format.  */
2587
2588
static bool
2589
read_formatted_entries (struct comp_unit *unit, bfd_byte **bufp,
2590
      bfd_byte *buf_end, struct line_info_table *table,
2591
      bool (*callback) (struct line_info_table *table,
2592
            char *cur_file,
2593
            unsigned int dir,
2594
            unsigned int time,
2595
            unsigned int size))
2596
29
{
2597
29
  bfd *abfd = unit->abfd;
2598
29
  bfd_byte format_count, formati;
2599
29
  bfd_vma data_count, datai;
2600
29
  bfd_byte *buf = *bufp;
2601
29
  bfd_byte *format_header_data;
2602
2603
29
  format_count = read_1_byte (abfd, &buf, buf_end);
2604
29
  format_header_data = buf;
2605
457
  for (formati = 0; formati < format_count; formati++)
2606
428
    {
2607
428
      _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
2608
428
      _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
2609
428
    }
2610
2611
29
  data_count = _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
2612
29
  if (format_count == 0 && data_count != 0)
2613
2
    {
2614
2
      _bfd_error_handler (_("DWARF error: zero format count"));
2615
2
      bfd_set_error (bfd_error_bad_value);
2616
2
      return false;
2617
2
    }
2618
2619
  /* PR 22210.  Paranoia check.  Don't bother running the loop
2620
     if we know that we are going to run out of buffer.  */
2621
27
  if (data_count > (bfd_vma) (buf_end - buf))
2622
2
    {
2623
2
      _bfd_error_handler
2624
2
  (_("DWARF error: data count (%" PRIx64 ") larger than buffer size"),
2625
2
   (uint64_t) data_count);
2626
2
      bfd_set_error (bfd_error_bad_value);
2627
2
      return false;
2628
2
    }
2629
2630
94
  for (datai = 0; datai < data_count; datai++)
2631
78
    {
2632
78
      bfd_byte *format = format_header_data;
2633
78
      struct fileinfo fe;
2634
2635
78
      memset (&fe, 0, sizeof fe);
2636
442
      for (formati = 0; formati < format_count; formati++)
2637
373
  {
2638
373
    bfd_vma content_type, form;
2639
373
    char *string_trash;
2640
373
    char **stringp = &string_trash;
2641
373
    unsigned int uint_trash, *uintp = &uint_trash;
2642
373
    struct attribute attr;
2643
2644
373
    content_type = _bfd_safe_read_leb128 (abfd, &format, false, buf_end);
2645
373
    switch (content_type)
2646
373
      {
2647
0
      case DW_LNCT_path:
2648
0
        stringp = &fe.name;
2649
0
        break;
2650
0
      case DW_LNCT_directory_index:
2651
0
        uintp = &fe.dir;
2652
0
        break;
2653
72
      case DW_LNCT_timestamp:
2654
72
        uintp = &fe.time;
2655
72
        break;
2656
76
      case DW_LNCT_size:
2657
76
        uintp = &fe.size;
2658
76
        break;
2659
223
      case DW_LNCT_MD5:
2660
223
        break;
2661
2
      default:
2662
2
        _bfd_error_handler
2663
2
    (_("DWARF error: unknown format content type %" PRIu64),
2664
2
     (uint64_t) content_type);
2665
2
        bfd_set_error (bfd_error_bad_value);
2666
2
        return false;
2667
373
      }
2668
2669
371
    form = _bfd_safe_read_leb128 (abfd, &format, false, buf_end);
2670
371
    buf = read_attribute_value (&attr, form, 0, unit, buf, buf_end);
2671
371
    if (buf == NULL)
2672
7
      return false;
2673
364
    switch (form)
2674
364
      {
2675
0
      case DW_FORM_string:
2676
0
      case DW_FORM_line_strp:
2677
0
      case DW_FORM_strx:
2678
0
      case DW_FORM_strx1:
2679
50
      case DW_FORM_strx2:
2680
50
      case DW_FORM_strx3:
2681
50
      case DW_FORM_strx4:
2682
50
        *stringp = attr.u.str;
2683
50
        break;
2684
2685
0
      case DW_FORM_data1:
2686
70
      case DW_FORM_data2:
2687
70
      case DW_FORM_data4:
2688
70
      case DW_FORM_data8:
2689
70
      case DW_FORM_udata:
2690
70
        *uintp = attr.u.val;
2691
70
        break;
2692
2693
0
      case DW_FORM_data16:
2694
        /* MD5 data is in the attr.blk, but we are ignoring those.  */
2695
0
        break;
2696
364
      }
2697
364
  }
2698
2699
69
      if (!callback (table, fe.name, fe.dir, fe.time, fe.size))
2700
0
  return false;
2701
69
    }
2702
2703
16
  *bufp = buf;
2704
16
  return true;
2705
25
}
2706
2707
/* Decode the line number information for UNIT.  */
2708
2709
static struct line_info_table*
2710
decode_line_info (struct comp_unit *unit)
2711
1.29k
{
2712
1.29k
  bfd *abfd = unit->abfd;
2713
1.29k
  struct dwarf2_debug *stash = unit->stash;
2714
1.29k
  struct dwarf2_debug_file *file = unit->file;
2715
1.29k
  struct line_info_table* table;
2716
1.29k
  bfd_byte *line_ptr;
2717
1.29k
  bfd_byte *line_end;
2718
1.29k
  struct line_head lh;
2719
1.29k
  unsigned int i, offset_size;
2720
1.29k
  char *cur_file, *cur_dir;
2721
1.29k
  unsigned char op_code, extended_op, adj_opcode;
2722
1.29k
  unsigned int exop_len;
2723
1.29k
  size_t amt;
2724
2725
1.29k
  if (unit->line_offset == 0 && file->line_table)
2726
13
    return file->line_table;
2727
2728
1.28k
  if (! read_section (abfd, &stash->debug_sections[debug_line],
2729
1.28k
          file->syms, unit->line_offset,
2730
1.28k
          &file->dwarf_line_buffer, &file->dwarf_line_size))
2731
225
    return NULL;
2732
2733
1.05k
  if (file->dwarf_line_size < 16)
2734
4
    {
2735
4
      _bfd_error_handler
2736
4
  (_("DWARF error: line info section is too small (%" PRId64 ")"),
2737
4
   (int64_t) file->dwarf_line_size);
2738
4
      bfd_set_error (bfd_error_bad_value);
2739
4
      return NULL;
2740
4
    }
2741
1.05k
  line_ptr = file->dwarf_line_buffer + unit->line_offset;
2742
1.05k
  line_end = file->dwarf_line_buffer + file->dwarf_line_size;
2743
2744
  /* Read in the prologue.  */
2745
1.05k
  lh.total_length = read_4_bytes (abfd, &line_ptr, line_end);
2746
1.05k
  offset_size = 4;
2747
1.05k
  if (lh.total_length == 0xffffffff)
2748
6
    {
2749
6
      lh.total_length = read_8_bytes (abfd, &line_ptr, line_end);
2750
6
      offset_size = 8;
2751
6
    }
2752
1.04k
  else if (lh.total_length == 0 && unit->addr_size == 8)
2753
20
    {
2754
      /* Handle (non-standard) 64-bit DWARF2 formats.  */
2755
20
      lh.total_length = read_4_bytes (abfd, &line_ptr, line_end);
2756
20
      offset_size = 8;
2757
20
    }
2758
2759
1.05k
  if (lh.total_length > (size_t) (line_end - line_ptr))
2760
48
    {
2761
48
      _bfd_error_handler
2762
  /* xgettext: c-format */
2763
48
  (_("DWARF error: line info data is bigger (%#" PRIx64 ")"
2764
48
     " than the space remaining in the section (%#lx)"),
2765
48
   (uint64_t) lh.total_length, (unsigned long) (line_end - line_ptr));
2766
48
      bfd_set_error (bfd_error_bad_value);
2767
48
      return NULL;
2768
48
    }
2769
2770
1.00k
  line_end = line_ptr + lh.total_length;
2771
2772
1.00k
  lh.version = read_2_bytes (abfd, &line_ptr, line_end);
2773
1.00k
  if (lh.version < 2 || lh.version > 5)
2774
24
    {
2775
24
      _bfd_error_handler
2776
24
  (_("DWARF error: unhandled .debug_line version %d"), lh.version);
2777
24
      bfd_set_error (bfd_error_bad_value);
2778
24
      return NULL;
2779
24
    }
2780
2781
983
  if (line_ptr + offset_size + (lh.version >= 5 ? 8 : (lh.version >= 4 ? 6 : 5))
2782
983
      >= line_end)
2783
1
    {
2784
1
      _bfd_error_handler
2785
1
  (_("DWARF error: ran out of room reading prologue"));
2786
1
      bfd_set_error (bfd_error_bad_value);
2787
1
      return NULL;
2788
1
    }
2789
2790
982
  if (lh.version >= 5)
2791
25
    {
2792
25
      unsigned int segment_selector_size;
2793
2794
      /* Skip address size.  */
2795
25
      read_1_byte (abfd, &line_ptr, line_end);
2796
2797
25
      segment_selector_size = read_1_byte (abfd, &line_ptr, line_end);
2798
25
      if (segment_selector_size != 0)
2799
2
  {
2800
2
    _bfd_error_handler
2801
2
      (_("DWARF error: line info unsupported segment selector size %u"),
2802
2
       segment_selector_size);
2803
2
    bfd_set_error (bfd_error_bad_value);
2804
2
    return NULL;
2805
2
  }
2806
25
    }
2807
2808
980
  if (offset_size == 4)
2809
976
    lh.prologue_length = read_4_bytes (abfd, &line_ptr, line_end);
2810
4
  else
2811
4
    lh.prologue_length = read_8_bytes (abfd, &line_ptr, line_end);
2812
2813
980
  lh.minimum_instruction_length = read_1_byte (abfd, &line_ptr, line_end);
2814
2815
980
  if (lh.version >= 4)
2816
572
    lh.maximum_ops_per_insn = read_1_byte (abfd, &line_ptr, line_end);
2817
408
  else
2818
408
    lh.maximum_ops_per_insn = 1;
2819
2820
980
  if (lh.maximum_ops_per_insn == 0)
2821
5
    {
2822
5
      _bfd_error_handler
2823
5
  (_("DWARF error: invalid maximum operations per instruction"));
2824
5
      bfd_set_error (bfd_error_bad_value);
2825
5
      return NULL;
2826
5
    }
2827
2828
975
  lh.default_is_stmt = read_1_byte (abfd, &line_ptr, line_end);
2829
975
  lh.line_base = read_1_signed_byte (abfd, &line_ptr, line_end);
2830
975
  lh.line_range = read_1_byte (abfd, &line_ptr, line_end);
2831
975
  lh.opcode_base = read_1_byte (abfd, &line_ptr, line_end);
2832
2833
975
  if (line_ptr + (lh.opcode_base - 1) >= line_end)
2834
4
    {
2835
4
      _bfd_error_handler (_("DWARF error: ran out of room reading opcodes"));
2836
4
      bfd_set_error (bfd_error_bad_value);
2837
4
      return NULL;
2838
4
    }
2839
2840
971
  amt = lh.opcode_base * sizeof (unsigned char);
2841
971
  lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt);
2842
2843
971
  lh.standard_opcode_lengths[0] = 1;
2844
2845
20.8k
  for (i = 1; i < lh.opcode_base; ++i)
2846
19.8k
    lh.standard_opcode_lengths[i] = read_1_byte (abfd, &line_ptr, line_end);
2847
2848
971
  amt = sizeof (struct line_info_table);
2849
971
  table = (struct line_info_table *) bfd_alloc (abfd, amt);
2850
971
  if (table == NULL)
2851
0
    return NULL;
2852
971
  table->abfd = abfd;
2853
971
  table->comp_dir = unit->comp_dir;
2854
2855
971
  table->num_files = 0;
2856
971
  table->files = NULL;
2857
2858
971
  table->num_dirs = 0;
2859
971
  table->dirs = NULL;
2860
2861
971
  table->num_sequences = 0;
2862
971
  table->sequences = NULL;
2863
2864
971
  table->lcl_head = NULL;
2865
2866
971
  if (lh.version >= 5)
2867
20
    {
2868
      /* Read directory table.  */
2869
20
      if (!read_formatted_entries (unit, &line_ptr, line_end, table,
2870
20
           line_info_add_include_dir_stub))
2871
11
  goto fail;
2872
2873
      /* Read file name table.  */
2874
9
      if (!read_formatted_entries (unit, &line_ptr, line_end, table,
2875
9
           line_info_add_file_name))
2876
2
  goto fail;
2877
7
      table->use_dir_and_file_0 = true;
2878
7
    }
2879
951
  else
2880
951
    {
2881
      /* Read directory table.  */
2882
2.47k
      while ((cur_dir = read_string (&line_ptr, line_end)) != NULL)
2883
1.52k
  {
2884
1.52k
    if (!line_info_add_include_dir (table, cur_dir))
2885
0
      goto fail;
2886
1.52k
  }
2887
2888
      /* Read file name table.  */
2889
3.59k
      while ((cur_file = read_string (&line_ptr, line_end)) != NULL)
2890
2.63k
  {
2891
2.63k
    unsigned int dir, xtime, size;
2892
2893
2.63k
    dir = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2894
2.63k
    xtime = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2895
2.63k
    size = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2896
2897
2.63k
    if (!line_info_add_file_name (table, cur_file, dir, xtime, size))
2898
0
      goto fail;
2899
2.63k
  }
2900
951
      table->use_dir_and_file_0 = false;
2901
951
    }
2902
2903
  /* Read the statement sequences until there's nothing left.  */
2904
1.99k
  while (line_ptr < line_end)
2905
1.17k
    {
2906
      /* State machine registers.  */
2907
1.17k
      bfd_vma address = 0;
2908
1.17k
      unsigned char op_index = 0;
2909
1.17k
      char * filename = NULL;
2910
1.17k
      unsigned int line = 1;
2911
1.17k
      unsigned int column = 0;
2912
1.17k
      unsigned int discriminator = 0;
2913
1.17k
      int is_stmt = lh.default_is_stmt;
2914
1.17k
      int end_sequence = 0;
2915
1.17k
      unsigned int dir, xtime, size;
2916
      /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
2917
   compilers generate address sequences that are wildly out of
2918
   order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
2919
   for ia64-Linux).  Thus, to determine the low and high
2920
   address, we must compare on every DW_LNS_copy, etc.  */
2921
1.17k
      bfd_vma low_pc  = (bfd_vma) -1;
2922
1.17k
      bfd_vma high_pc = 0;
2923
2924
1.17k
      if (table->num_files)
2925
1.06k
  {
2926
    /* PR 30783: Always start with a file index of 1, even
2927
       for DWARF-5.  */
2928
1.06k
    filename = concat_filename (table, 1);
2929
1.06k
  }
2930
2931
      /* Decode the table.  */
2932
113k
      while (!end_sequence && line_ptr < line_end)
2933
112k
  {
2934
112k
    op_code = read_1_byte (abfd, &line_ptr, line_end);
2935
2936
112k
    if (op_code >= lh.opcode_base)
2937
40.8k
      {
2938
        /* Special operand.  */
2939
40.8k
        adj_opcode = op_code - lh.opcode_base;
2940
40.8k
        if (lh.line_range == 0)
2941
4
    goto line_fail;
2942
40.8k
        if (lh.maximum_ops_per_insn == 1)
2943
30.1k
    address += (adj_opcode / lh.line_range
2944
30.1k
          * lh.minimum_instruction_length);
2945
10.7k
        else
2946
10.7k
    {
2947
10.7k
      address += ((op_index + adj_opcode / lh.line_range)
2948
10.7k
            / lh.maximum_ops_per_insn
2949
10.7k
            * lh.minimum_instruction_length);
2950
10.7k
      op_index = ((op_index + adj_opcode / lh.line_range)
2951
10.7k
            % lh.maximum_ops_per_insn);
2952
10.7k
    }
2953
40.8k
        line += lh.line_base + (adj_opcode % lh.line_range);
2954
        /* Append row to matrix using current values.  */
2955
40.8k
        if (!add_line_info (table, address, op_index, filename,
2956
40.8k
          line, column, discriminator, 0))
2957
0
    goto line_fail;
2958
40.8k
        discriminator = 0;
2959
40.8k
        if (address < low_pc)
2960
493
    low_pc = address;
2961
40.8k
        if (address > high_pc)
2962
27.9k
    high_pc = address;
2963
40.8k
      }
2964
71.1k
    else switch (op_code)
2965
71.1k
      {
2966
2.04k
      case DW_LNS_extended_op:
2967
2.04k
        exop_len = _bfd_safe_read_leb128 (abfd, &line_ptr,
2968
2.04k
            false, line_end);
2969
2.04k
        extended_op = read_1_byte (abfd, &line_ptr, line_end);
2970
2971
2.04k
        switch (extended_op)
2972
2.04k
    {
2973
861
    case DW_LNE_end_sequence:
2974
861
      end_sequence = 1;
2975
861
      if (!add_line_info (table, address, op_index, filename, line,
2976
861
              column, discriminator, end_sequence))
2977
0
        goto line_fail;
2978
861
      discriminator = 0;
2979
861
      if (address < low_pc)
2980
60
        low_pc = address;
2981
861
      if (address > high_pc)
2982
644
        high_pc = address;
2983
861
      if (!arange_add (unit, &unit->arange, &unit->file->trie_root,
2984
861
           low_pc, high_pc))
2985
0
        goto line_fail;
2986
861
      break;
2987
997
    case DW_LNE_set_address:
2988
997
      address = read_address (unit, &line_ptr, line_end);
2989
997
      op_index = 0;
2990
997
      break;
2991
41
    case DW_LNE_define_file:
2992
41
      cur_file = read_string (&line_ptr, line_end);
2993
41
      dir = _bfd_safe_read_leb128 (abfd, &line_ptr,
2994
41
                 false, line_end);
2995
41
      xtime = _bfd_safe_read_leb128 (abfd, &line_ptr,
2996
41
             false, line_end);
2997
41
      size = _bfd_safe_read_leb128 (abfd, &line_ptr,
2998
41
            false, line_end);
2999
41
      if (!line_info_add_file_name (table, cur_file, dir,
3000
41
            xtime, size))
3001
0
        goto line_fail;
3002
41
      break;
3003
41
    case DW_LNE_set_discriminator:
3004
6
      discriminator = _bfd_safe_read_leb128 (abfd, &line_ptr,
3005
6
               false, line_end);
3006
6
      break;
3007
20
    case DW_LNE_HP_source_file_correlation:
3008
20
      line_ptr += exop_len - 1;
3009
20
      break;
3010
124
    default:
3011
124
      _bfd_error_handler
3012
124
        (_("DWARF error: mangled line number section"));
3013
124
      bfd_set_error (bfd_error_bad_value);
3014
129
    line_fail:
3015
129
      free (filename);
3016
129
      goto fail;
3017
2.04k
    }
3018
1.92k
        break;
3019
1.92k
      case DW_LNS_copy:
3020
1.28k
        if (!add_line_info (table, address, op_index,
3021
1.28k
          filename, line, column, discriminator, 0))
3022
0
    goto line_fail;
3023
1.28k
        discriminator = 0;
3024
1.28k
        if (address < low_pc)
3025
609
    low_pc = address;
3026
1.28k
        if (address > high_pc)
3027
508
    high_pc = address;
3028
1.28k
        break;
3029
2.98k
      case DW_LNS_advance_pc:
3030
2.98k
        if (lh.maximum_ops_per_insn == 1)
3031
2.35k
    address += (lh.minimum_instruction_length
3032
2.35k
          * _bfd_safe_read_leb128 (abfd, &line_ptr,
3033
2.35k
                 false, line_end));
3034
624
        else
3035
624
    {
3036
624
      bfd_vma adjust = _bfd_safe_read_leb128 (abfd, &line_ptr,
3037
624
                false, line_end);
3038
624
      address = ((op_index + adjust) / lh.maximum_ops_per_insn
3039
624
           * lh.minimum_instruction_length);
3040
624
      op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
3041
624
    }
3042
2.98k
        break;
3043
15.5k
      case DW_LNS_advance_line:
3044
15.5k
        line += _bfd_safe_read_leb128 (abfd, &line_ptr,
3045
15.5k
               true, line_end);
3046
15.5k
        break;
3047
133
      case DW_LNS_set_file:
3048
133
        {
3049
133
    unsigned int filenum;
3050
3051
    /* The file and directory tables are 0
3052
       based, the references are 1 based.  */
3053
133
    filenum = _bfd_safe_read_leb128 (abfd, &line_ptr,
3054
133
             false, line_end);
3055
133
    free (filename);
3056
133
    filename = concat_filename (table, filenum);
3057
133
    break;
3058
1.28k
        }
3059
22.3k
      case DW_LNS_set_column:
3060
22.3k
        column = _bfd_safe_read_leb128 (abfd, &line_ptr,
3061
22.3k
                false, line_end);
3062
22.3k
        break;
3063
14.6k
      case DW_LNS_negate_stmt:
3064
14.6k
        is_stmt = (!is_stmt);
3065
14.6k
        break;
3066
57
      case DW_LNS_set_basic_block:
3067
57
        break;
3068
10.8k
      case DW_LNS_const_add_pc:
3069
10.8k
        if (lh.line_range == 0)
3070
1
    goto line_fail;
3071
10.8k
        if (lh.maximum_ops_per_insn == 1)
3072
9.19k
    address += (lh.minimum_instruction_length
3073
9.19k
          * ((255 - lh.opcode_base) / lh.line_range));
3074
1.63k
        else
3075
1.63k
    {
3076
1.63k
      bfd_vma adjust = ((255 - lh.opcode_base) / lh.line_range);
3077
1.63k
      address += (lh.minimum_instruction_length
3078
1.63k
            * ((op_index + adjust)
3079
1.63k
         / lh.maximum_ops_per_insn));
3080
1.63k
      op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
3081
1.63k
    }
3082
10.8k
        break;
3083
147
      case DW_LNS_fixed_advance_pc:
3084
147
        address += read_2_bytes (abfd, &line_ptr, line_end);
3085
147
        op_index = 0;
3086
147
        break;
3087
1.16k
      default:
3088
        /* Unknown standard opcode, ignore it.  */
3089
27.6k
        for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
3090
26.4k
    (void) _bfd_safe_read_leb128 (abfd, &line_ptr,
3091
26.4k
                false, line_end);
3092
1.16k
        break;
3093
71.1k
      }
3094
112k
  }
3095
3096
1.04k
      free (filename);
3097
1.04k
    }
3098
3099
829
  if (unit->line_offset == 0)
3100
811
    file->line_table = table;
3101
829
  if (sort_line_sequences (table))
3102
829
    return table;
3103
3104
142
 fail:
3105
253
  while (table->sequences != NULL)
3106
111
    {
3107
111
      struct line_sequence* seq = table->sequences;
3108
111
      table->sequences = table->sequences->prev_sequence;
3109
111
      free (seq);
3110
111
    }
3111
142
  free (table->files);
3112
142
  free (table->dirs);
3113
142
  return NULL;
3114
829
}
3115
3116
/* If ADDR is within TABLE set the output parameters and return TRUE,
3117
   otherwise set *FILENAME_PTR to NULL and return FALSE.
3118
   The parameters FILENAME_PTR, LINENUMBER_PTR and DISCRIMINATOR_PTR
3119
   are pointers to the objects to be filled in.  */
3120
3121
static bool
3122
lookup_address_in_line_info_table (struct line_info_table *table,
3123
           bfd_vma addr,
3124
           const char **filename_ptr,
3125
           unsigned int *linenumber_ptr,
3126
           unsigned int *discriminator_ptr)
3127
5.11k
{
3128
5.11k
  struct line_sequence *seq = NULL;
3129
5.11k
  struct line_info *info;
3130
5.11k
  int low, high, mid;
3131
3132
  /* Binary search the array of sequences.  */
3133
5.11k
  low = 0;
3134
5.11k
  high = table->num_sequences;
3135
8.87k
  while (low < high)
3136
5.27k
    {
3137
5.27k
      mid = (low + high) / 2;
3138
5.27k
      seq = &table->sequences[mid];
3139
5.27k
      if (addr < seq->low_pc)
3140
877
  high = mid;
3141
4.40k
      else if (addr >= seq->last_line->address)
3142
2.87k
  low = mid + 1;
3143
1.52k
      else
3144
1.52k
  break;
3145
5.27k
    }
3146
3147
  /* Check for a valid sequence.  */
3148
5.11k
  if (!seq || addr < seq->low_pc || addr >= seq->last_line->address)
3149
3.59k
    goto fail;
3150
3151
1.52k
  if (!build_line_info_table (table, seq))
3152
0
    goto fail;
3153
3154
  /* Binary search the array of line information.  */
3155
1.52k
  low = 0;
3156
1.52k
  high = seq->num_lines;
3157
1.52k
  info = NULL;
3158
8.33k
  while (low < high)
3159
8.33k
    {
3160
8.33k
      mid = (low + high) / 2;
3161
8.33k
      info = seq->line_info_lookup[mid];
3162
8.33k
      if (addr < info->address)
3163
4.78k
  high = mid;
3164
3.54k
      else if (addr >= seq->line_info_lookup[mid + 1]->address)
3165
2.02k
  low = mid + 1;
3166
1.52k
      else
3167
1.52k
  break;
3168
8.33k
    }
3169
3170
  /* Check for a valid line information entry.  */
3171
1.52k
  if (info
3172
1.52k
      && addr >= info->address
3173
1.52k
      && addr < seq->line_info_lookup[mid + 1]->address
3174
1.52k
      && !(info->end_sequence || info == seq->last_line))
3175
1.52k
    {
3176
1.52k
      *filename_ptr = info->filename;
3177
1.52k
      *linenumber_ptr = info->line;
3178
1.52k
      if (discriminator_ptr)
3179
91
  *discriminator_ptr = info->discriminator;
3180
1.52k
      return true;
3181
1.52k
    }
3182
3183
3.59k
 fail:
3184
3.59k
  *filename_ptr = NULL;
3185
3.59k
  return false;
3186
1.52k
}
3187
3188
/* Read in the .debug_ranges section for future reference.  */
3189
3190
static bool
3191
read_debug_ranges (struct comp_unit * unit)
3192
456
{
3193
456
  struct dwarf2_debug *stash = unit->stash;
3194
456
  struct dwarf2_debug_file *file = unit->file;
3195
3196
456
  return read_section (unit->abfd, &stash->debug_sections[debug_ranges],
3197
456
           file->syms, 0,
3198
456
           &file->dwarf_ranges_buffer, &file->dwarf_ranges_size);
3199
456
}
3200
3201
/* Read in the .debug_rnglists section for future reference.  */
3202
3203
static bool
3204
read_debug_rnglists (struct comp_unit * unit)
3205
0
{
3206
0
  struct dwarf2_debug *stash = unit->stash;
3207
0
  struct dwarf2_debug_file *file = unit->file;
3208
3209
0
  return read_section (unit->abfd, &stash->debug_sections[debug_rnglists],
3210
0
           file->syms, 0,
3211
0
           &file->dwarf_rnglists_buffer, &file->dwarf_rnglists_size);
3212
0
}
3213
3214
/* Function table functions.  */
3215
3216
static int
3217
compare_lookup_funcinfos (const void * a, const void * b)
3218
5.13k
{
3219
5.13k
  const struct lookup_funcinfo * lookup1 = a;
3220
5.13k
  const struct lookup_funcinfo * lookup2 = b;
3221
3222
5.13k
  if (lookup1->low_addr < lookup2->low_addr)
3223
488
    return -1;
3224
4.64k
  if (lookup1->low_addr > lookup2->low_addr)
3225
986
    return 1;
3226
3.66k
  if (lookup1->high_addr < lookup2->high_addr)
3227
365
    return -1;
3228
3.29k
  if (lookup1->high_addr > lookup2->high_addr)
3229
1.10k
    return 1;
3230
3231
2.19k
  if (lookup1->idx < lookup2->idx)
3232
2.19k
    return -1;
3233
0
  if (lookup1->idx > lookup2->idx)
3234
0
    return 1;
3235
0
  return 0;
3236
0
}
3237
3238
static bool
3239
build_lookup_funcinfo_table (struct comp_unit * unit)
3240
4.22k
{
3241
4.22k
  struct lookup_funcinfo *lookup_funcinfo_table = unit->lookup_funcinfo_table;
3242
4.22k
  unsigned int number_of_functions = unit->number_of_functions;
3243
4.22k
  struct funcinfo *each;
3244
4.22k
  struct lookup_funcinfo *entry;
3245
4.22k
  size_t func_index;
3246
4.22k
  struct arange *range;
3247
4.22k
  bfd_vma low_addr, high_addr;
3248
3249
4.22k
  if (lookup_funcinfo_table || number_of_functions == 0)
3250
3.80k
    return true;
3251
3252
  /* Create the function info lookup table.  */
3253
422
  lookup_funcinfo_table = (struct lookup_funcinfo *)
3254
422
    bfd_malloc (number_of_functions * sizeof (struct lookup_funcinfo));
3255
422
  if (lookup_funcinfo_table == NULL)
3256
0
    return false;
3257
3258
  /* Populate the function info lookup table.  */
3259
422
  func_index = number_of_functions;
3260
2.99k
  for (each = unit->function_table; each; each = each->prev_func)
3261
2.57k
    {
3262
2.57k
      entry = &lookup_funcinfo_table[--func_index];
3263
2.57k
      entry->funcinfo = each;
3264
2.57k
      entry->idx = func_index;
3265
3266
      /* Calculate the lowest and highest address for this function entry.  */
3267
2.57k
      low_addr  = entry->funcinfo->arange.low;
3268
2.57k
      high_addr = entry->funcinfo->arange.high;
3269
3270
5.11k
      for (range = entry->funcinfo->arange.next; range; range = range->next)
3271
2.54k
  {
3272
2.54k
    if (range->low < low_addr)
3273
526
      low_addr = range->low;
3274
2.54k
    if (range->high > high_addr)
3275
553
      high_addr = range->high;
3276
2.54k
  }
3277
3278
2.57k
      entry->low_addr = low_addr;
3279
2.57k
      entry->high_addr = high_addr;
3280
2.57k
    }
3281
3282
422
  BFD_ASSERT (func_index == 0);
3283
3284
  /* Sort the function by address.  */
3285
422
  qsort (lookup_funcinfo_table,
3286
422
   number_of_functions,
3287
422
   sizeof (struct lookup_funcinfo),
3288
422
   compare_lookup_funcinfos);
3289
3290
  /* Calculate the high watermark for each function in the lookup table.  */
3291
422
  high_addr = lookup_funcinfo_table[0].high_addr;
3292
2.57k
  for (func_index = 1; func_index < number_of_functions; func_index++)
3293
2.14k
    {
3294
2.14k
      entry = &lookup_funcinfo_table[func_index];
3295
2.14k
      if (entry->high_addr > high_addr)
3296
556
  high_addr = entry->high_addr;
3297
1.59k
      else
3298
1.59k
  entry->high_addr = high_addr;
3299
2.14k
    }
3300
3301
422
  unit->lookup_funcinfo_table = lookup_funcinfo_table;
3302
422
  return true;
3303
422
}
3304
3305
/* If ADDR is within UNIT's function tables, set FUNCTION_PTR, and return
3306
   TRUE.  Note that we need to find the function that has the smallest range
3307
   that contains ADDR, to handle inlined functions without depending upon
3308
   them being ordered in TABLE by increasing range.  */
3309
3310
static bool
3311
lookup_address_in_function_table (struct comp_unit *unit,
3312
          bfd_vma addr,
3313
          struct funcinfo **function_ptr)
3314
5.11k
{
3315
5.11k
  unsigned int number_of_functions = unit->number_of_functions;
3316
5.11k
  struct lookup_funcinfo* lookup_funcinfo = NULL;
3317
5.11k
  struct funcinfo* funcinfo = NULL;
3318
5.11k
  struct funcinfo* best_fit = NULL;
3319
5.11k
  bfd_vma best_fit_len = (bfd_vma) -1;
3320
5.11k
  bfd_size_type low, high, mid, first;
3321
5.11k
  struct arange *arange;
3322
3323
5.11k
  if (number_of_functions == 0)
3324
894
    return false;
3325
3326
4.22k
  if (!build_lookup_funcinfo_table (unit))
3327
0
    return false;
3328
3329
4.22k
  if (unit->lookup_funcinfo_table[number_of_functions - 1].high_addr < addr)
3330
695
    return false;
3331
3332
  /* Find the first function in the lookup table which may contain the
3333
     specified address.  */
3334
3.52k
  low = 0;
3335
3.52k
  high = number_of_functions;
3336
3.52k
  first = high;
3337
14.8k
  while (low < high)
3338
11.2k
    {
3339
11.2k
      mid = (low + high) / 2;
3340
11.2k
      lookup_funcinfo = &unit->lookup_funcinfo_table[mid];
3341
11.2k
      if (addr < lookup_funcinfo->low_addr)
3342
1.10k
  high = mid;
3343
10.1k
      else if (addr >= lookup_funcinfo->high_addr)
3344
5.63k
  low = mid + 1;
3345
4.56k
      else
3346
4.56k
  high = first = mid;
3347
11.2k
    }
3348
3349
  /* Find the 'best' match for the address.  The prior algorithm defined the
3350
     best match as the function with the smallest address range containing
3351
     the specified address.  This definition should probably be changed to the
3352
     innermost inline routine containing the address, but right now we want
3353
     to get the same results we did before.  */
3354
10.8k
  while (first < number_of_functions)
3355
8.76k
    {
3356
8.76k
      if (addr < unit->lookup_funcinfo_table[first].low_addr)
3357
1.41k
  break;
3358
7.35k
      funcinfo = unit->lookup_funcinfo_table[first].funcinfo;
3359
3360
42.3k
      for (arange = &funcinfo->arange; arange; arange = arange->next)
3361
35.0k
  {
3362
35.0k
    if (addr < arange->low || addr >= arange->high)
3363
27.1k
      continue;
3364
3365
7.89k
    if (arange->high - arange->low < best_fit_len
3366
        /* The following comparison is designed to return the same
3367
     match as the previous algorithm for routines which have the
3368
     same best fit length.  */
3369
4.22k
        || (arange->high - arange->low == best_fit_len
3370
1.31k
      && funcinfo > best_fit))
3371
4.89k
      {
3372
4.89k
        best_fit = funcinfo;
3373
4.89k
        best_fit_len = arange->high - arange->low;
3374
4.89k
      }
3375
7.89k
  }
3376
3377
7.35k
      first++;
3378
7.35k
    }
3379
3380
3.52k
  if (!best_fit)
3381
588
    return false;
3382
3383
2.94k
  *function_ptr = best_fit;
3384
2.94k
  return true;
3385
3.52k
}
3386
3387
/* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
3388
   and LINENUMBER_PTR, and return TRUE.  */
3389
3390
static bool
3391
lookup_symbol_in_function_table (struct comp_unit *unit,
3392
         asymbol *sym,
3393
         bfd_vma addr,
3394
         const char **filename_ptr,
3395
         unsigned int *linenumber_ptr)
3396
582
{
3397
582
  struct funcinfo* each;
3398
582
  struct funcinfo* best_fit = NULL;
3399
582
  bfd_vma best_fit_len = (bfd_vma) -1;
3400
582
  struct arange *arange;
3401
582
  const char *name = bfd_asymbol_name (sym);
3402
3403
5.37k
  for (each = unit->function_table; each; each = each->prev_func)
3404
15.1k
    for (arange = &each->arange; arange; arange = arange->next)
3405
10.3k
      if (addr >= arange->low
3406
5.37k
    && addr < arange->high
3407
963
    && arange->high - arange->low < best_fit_len
3408
963
    && each->file
3409
247
    && each->name
3410
140
    && strstr (name, each->name) != NULL)
3411
0
  {
3412
0
    best_fit = each;
3413
0
    best_fit_len = arange->high - arange->low;
3414
0
  }
3415
3416
582
  if (best_fit)
3417
0
    {
3418
0
      *filename_ptr = best_fit->file;
3419
0
      *linenumber_ptr = best_fit->line;
3420
0
      return true;
3421
0
    }
3422
3423
582
  return false;
3424
582
}
3425
3426
/* Variable table functions.  */
3427
3428
/* If SYM is within variable table of UNIT, set FILENAME_PTR and
3429
   LINENUMBER_PTR, and return TRUE.  */
3430
3431
static bool
3432
lookup_symbol_in_variable_table (struct comp_unit *unit,
3433
         asymbol *sym,
3434
         bfd_vma addr,
3435
         const char **filename_ptr,
3436
         unsigned int *linenumber_ptr)
3437
1.23k
{
3438
1.23k
  struct varinfo* each;
3439
1.23k
  const char *name = bfd_asymbol_name (sym);
3440
3441
1.28k
  for (each = unit->variable_table; each; each = each->prev_var)
3442
48
    if (each->addr == addr
3443
0
  && !each->stack
3444
0
  && each->file != NULL
3445
0
  && each->name != NULL
3446
0
  && strstr (name, each->name) != NULL)
3447
0
      break;
3448
3449
1.23k
  if (each)
3450
0
    {
3451
0
      *filename_ptr = each->file;
3452
0
      *linenumber_ptr = each->line;
3453
0
      return true;
3454
0
    }
3455
3456
1.23k
  return false;
3457
1.23k
}
3458
3459
static struct comp_unit *stash_comp_unit (struct dwarf2_debug *,
3460
            struct dwarf2_debug_file *);
3461
static bool comp_unit_maybe_decode_line_info (struct comp_unit *);
3462
3463
static bool
3464
find_abstract_instance (struct comp_unit *unit,
3465
      struct attribute *attr_ptr,
3466
      unsigned int recur_count,
3467
      const char **pname,
3468
      bool *is_linkage,
3469
      char **filename_ptr,
3470
      int *linenumber_ptr)
3471
608
{
3472
608
  bfd *abfd = unit->abfd;
3473
608
  bfd_byte *info_ptr = NULL;
3474
608
  bfd_byte *info_ptr_end;
3475
608
  unsigned int abbrev_number, i;
3476
608
  struct abbrev_info *abbrev;
3477
608
  uint64_t die_ref = attr_ptr->u.val;
3478
608
  struct attribute attr;
3479
3480
608
  if (recur_count == 100)
3481
0
    {
3482
0
      _bfd_error_handler
3483
0
  (_("DWARF error: abstract instance recursion detected"));
3484
0
      bfd_set_error (bfd_error_bad_value);
3485
0
      return false;
3486
0
    }
3487
3488
  /* DW_FORM_ref_addr can reference an entry in a different CU. It
3489
     is an offset from the .debug_info section, not the current CU.  */
3490
608
  if (attr_ptr->form == DW_FORM_ref_addr)
3491
7
    {
3492
      /* We only support DW_FORM_ref_addr within the same file, so
3493
   any relocations should be resolved already.  Check this by
3494
   testing for a zero die_ref;  There can't be a valid reference
3495
   to the header of a .debug_info section.
3496
   DW_FORM_ref_addr is an offset relative to .debug_info.
3497
   Normally when using the GNU linker this is accomplished by
3498
   emitting a symbolic reference to a label, because .debug_info
3499
   sections are linked at zero.  When there are multiple section
3500
   groups containing .debug_info, as there might be in a
3501
   relocatable object file, it would be reasonable to assume that
3502
   a symbolic reference to a label in any .debug_info section
3503
   might be used.  Since we lay out multiple .debug_info
3504
   sections at non-zero VMAs (see place_sections), and read
3505
   them contiguously into dwarf_info_buffer, that means the
3506
   reference is relative to dwarf_info_buffer.  */
3507
7
      size_t total;
3508
3509
7
      info_ptr = unit->file->dwarf_info_buffer;
3510
7
      info_ptr_end = info_ptr + unit->file->dwarf_info_size;
3511
7
      total = info_ptr_end - info_ptr;
3512
7
      if (!die_ref)
3513
1
  return true;
3514
6
      else if (die_ref >= total)
3515
0
  {
3516
0
    _bfd_error_handler
3517
0
      (_("DWARF error: invalid abstract instance DIE ref"));
3518
0
    bfd_set_error (bfd_error_bad_value);
3519
0
    return false;
3520
0
  }
3521
6
      info_ptr += die_ref;
3522
6
    }
3523
601
  else if (attr_ptr->form == DW_FORM_GNU_ref_alt)
3524
0
    {
3525
0
      bool first_time = unit->stash->alt.dwarf_info_buffer == NULL;
3526
3527
0
      info_ptr = read_alt_indirect_ref (unit, die_ref);
3528
0
      if (first_time)
3529
0
  unit->stash->alt.info_ptr = unit->stash->alt.dwarf_info_buffer;
3530
0
      if (info_ptr == NULL)
3531
0
  {
3532
0
    _bfd_error_handler
3533
0
      (_("DWARF error: unable to read alt ref %" PRIu64),
3534
0
       (uint64_t) die_ref);
3535
0
    bfd_set_error (bfd_error_bad_value);
3536
0
    return false;
3537
0
  }
3538
0
      info_ptr_end = (unit->stash->alt.dwarf_info_buffer
3539
0
          + unit->stash->alt.dwarf_info_size);
3540
0
      if (unit->stash->alt.all_comp_units)
3541
0
  unit = unit->stash->alt.all_comp_units;
3542
0
    }
3543
3544
607
  if (attr_ptr->form == DW_FORM_ref_addr
3545
601
      || attr_ptr->form == DW_FORM_GNU_ref_alt)
3546
6
    {
3547
      /* Now find the CU containing this pointer.  */
3548
6
      if (info_ptr >= unit->info_ptr_unit && info_ptr < unit->end_ptr)
3549
6
  info_ptr_end = unit->end_ptr;
3550
0
      else
3551
0
  {
3552
    /* Check other CUs to see if they contain the abbrev.  */
3553
0
    struct comp_unit *u = NULL;
3554
0
    struct addr_range range = { info_ptr, info_ptr };
3555
0
    splay_tree_node v = splay_tree_lookup (unit->file->comp_unit_tree,
3556
0
             (splay_tree_key)&range);
3557
0
    if (v != NULL)
3558
0
      u = (struct comp_unit *)v->value;
3559
3560
0
    if (attr_ptr->form == DW_FORM_ref_addr)
3561
0
      while (u == NULL)
3562
0
        {
3563
0
    u = stash_comp_unit (unit->stash, &unit->stash->f);
3564
0
    if (u == NULL)
3565
0
      break;
3566
0
    if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr)
3567
0
      break;
3568
0
    u = NULL;
3569
0
        }
3570
3571
0
    if (attr_ptr->form == DW_FORM_GNU_ref_alt)
3572
0
      while (u == NULL)
3573
0
        {
3574
0
    u = stash_comp_unit (unit->stash, &unit->stash->alt);
3575
0
    if (u == NULL)
3576
0
      break;
3577
0
    if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr)
3578
0
      break;
3579
0
    u = NULL;
3580
0
        }
3581
3582
0
    if (u == NULL)
3583
0
      {
3584
0
        _bfd_error_handler
3585
0
    (_("DWARF error: unable to locate abstract instance DIE ref %"
3586
0
       PRIu64), (uint64_t) die_ref);
3587
0
        bfd_set_error (bfd_error_bad_value);
3588
0
        return false;
3589
0
      }
3590
0
    unit = u;
3591
0
    info_ptr_end = unit->end_ptr;
3592
0
  }
3593
6
    }
3594
601
  else
3595
601
    {
3596
      /* DW_FORM_ref1, DW_FORM_ref2, DW_FORM_ref4, DW_FORM_ref8 or
3597
   DW_FORM_ref_udata.  These are all references relative to the
3598
   start of the current CU.  */
3599
601
      size_t total;
3600
3601
601
      info_ptr = unit->info_ptr_unit;
3602
601
      info_ptr_end = unit->end_ptr;
3603
601
      total = info_ptr_end - info_ptr;
3604
601
      if (!die_ref || die_ref >= total)
3605
17
  {
3606
17
    _bfd_error_handler
3607
17
      (_("DWARF error: invalid abstract instance DIE ref"));
3608
17
    bfd_set_error (bfd_error_bad_value);
3609
17
    return false;
3610
17
  }
3611
584
      info_ptr += die_ref;
3612
584
    }
3613
3614
590
  abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
3615
590
           false, info_ptr_end);
3616
590
  if (abbrev_number)
3617
550
    {
3618
550
      abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
3619
550
      if (! abbrev)
3620
3
  {
3621
3
    _bfd_error_handler
3622
3
      (_("DWARF error: could not find abbrev number %u"), abbrev_number);
3623
3
    bfd_set_error (bfd_error_bad_value);
3624
3
    return false;
3625
3
  }
3626
547
      else
3627
547
  {
3628
1.69k
    for (i = 0; i < abbrev->num_attrs; ++i)
3629
1.14k
      {
3630
1.14k
        info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit,
3631
1.14k
           info_ptr, info_ptr_end);
3632
1.14k
        if (info_ptr == NULL)
3633
1
    break;
3634
1.14k
        switch (attr.name)
3635
1.14k
    {
3636
546
    case DW_AT_name:
3637
      /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
3638
         over DW_AT_name.  */
3639
546
      if (*pname == NULL && is_str_form (&attr))
3640
542
        {
3641
542
          *pname = attr.u.str;
3642
542
          if (mangle_style (unit->lang) == 0)
3643
384
      *is_linkage = true;
3644
542
        }
3645
546
      break;
3646
0
    case DW_AT_specification:
3647
0
      if (is_int_form (&attr)
3648
0
          && !find_abstract_instance (unit, &attr, recur_count + 1,
3649
0
              pname, is_linkage,
3650
0
              filename_ptr, linenumber_ptr))
3651
0
        return false;
3652
0
      break;
3653
0
    case DW_AT_linkage_name:
3654
0
    case DW_AT_MIPS_linkage_name:
3655
      /* PR 16949:  Corrupt debug info can place
3656
         non-string forms into these attributes.  */
3657
0
      if (is_str_form (&attr))
3658
0
        {
3659
0
          *pname = attr.u.str;
3660
0
          *is_linkage = true;
3661
0
        }
3662
0
      break;
3663
8
    case DW_AT_decl_file:
3664
8
      if (!comp_unit_maybe_decode_line_info (unit))
3665
0
        return false;
3666
8
      if (is_int_form (&attr))
3667
8
        {
3668
8
          free (*filename_ptr);
3669
8
          *filename_ptr = concat_filename (unit->line_table,
3670
8
                   attr.u.val);
3671
8
        }
3672
8
      break;
3673
6
    case DW_AT_decl_line:
3674
6
      if (is_int_form (&attr))
3675
4
        *linenumber_ptr = attr.u.val;
3676
6
      break;
3677
587
    default:
3678
587
      break;
3679
1.14k
    }
3680
1.14k
      }
3681
547
  }
3682
550
    }
3683
587
  return true;
3684
590
}
3685
3686
static bool
3687
read_ranges (struct comp_unit *unit, struct arange *arange,
3688
       struct trie_node **trie_root, uint64_t offset)
3689
1.00k
{
3690
1.00k
  bfd_byte *ranges_ptr;
3691
1.00k
  bfd_byte *ranges_end;
3692
1.00k
  bfd_vma base_address = unit->base_address;
3693
3694
1.00k
  if (! unit->file->dwarf_ranges_buffer)
3695
456
    {
3696
456
      if (! read_debug_ranges (unit))
3697
41
  return false;
3698
456
    }
3699
3700
959
  if (offset > unit->file->dwarf_ranges_size)
3701
10
    return false;
3702
949
  ranges_ptr = unit->file->dwarf_ranges_buffer + offset;
3703
949
  ranges_end = unit->file->dwarf_ranges_buffer + unit->file->dwarf_ranges_size;
3704
3705
949
  for (;;)
3706
6.22k
    {
3707
6.22k
      bfd_vma low_pc;
3708
6.22k
      bfd_vma high_pc;
3709
3710
      /* PR 17512: file: 62cada7d.  */
3711
6.22k
      if (2u * unit->addr_size > (size_t) (ranges_end - ranges_ptr))
3712
70
  return false;
3713
3714
6.15k
      low_pc = read_address (unit, &ranges_ptr, ranges_end);
3715
6.15k
      high_pc = read_address (unit, &ranges_ptr, ranges_end);
3716
3717
6.15k
      if (low_pc == 0 && high_pc == 0)
3718
879
  break;
3719
5.27k
      if (low_pc == (bfd_vma) -1 && high_pc != (bfd_vma) -1)
3720
35
  base_address = high_pc;
3721
5.23k
      else
3722
5.23k
  {
3723
5.23k
    if (!arange_add (unit, arange, trie_root,
3724
5.23k
         base_address + low_pc, base_address + high_pc))
3725
0
      return false;
3726
5.23k
  }
3727
5.27k
    }
3728
879
  return true;
3729
949
}
3730
3731
static bool
3732
read_rnglists (struct comp_unit *unit, struct arange *arange,
3733
         struct trie_node **trie_root, uint64_t offset)
3734
0
{
3735
0
  bfd_byte *rngs_ptr;
3736
0
  bfd_byte *rngs_end;
3737
0
  bfd_vma base_address = unit->base_address;
3738
0
  bfd_vma low_pc;
3739
0
  bfd_vma high_pc;
3740
0
  bfd *abfd = unit->abfd;
3741
3742
0
  if (! unit->file->dwarf_rnglists_buffer)
3743
0
    {
3744
0
      if (! read_debug_rnglists (unit))
3745
0
  return false;
3746
0
    }
3747
3748
0
  rngs_ptr = unit->file->dwarf_rnglists_buffer + offset;
3749
0
  if (rngs_ptr < unit->file->dwarf_rnglists_buffer)
3750
0
    return false;
3751
0
  rngs_end = unit->file->dwarf_rnglists_buffer;
3752
0
  rngs_end +=  unit->file->dwarf_rnglists_size;
3753
3754
0
  for (;;)
3755
0
    {
3756
0
      enum dwarf_range_list_entry rlet;
3757
3758
0
      if (rngs_ptr >= rngs_end)
3759
0
  return false;
3760
3761
0
      rlet = read_1_byte (abfd, &rngs_ptr, rngs_end);
3762
3763
0
      switch (rlet)
3764
0
  {
3765
0
  case DW_RLE_end_of_list:
3766
0
    return true;
3767
3768
0
  case DW_RLE_base_address:
3769
0
    if (unit->addr_size > (size_t) (rngs_end - rngs_ptr))
3770
0
      return false;
3771
0
    base_address = read_address (unit, &rngs_ptr, rngs_end);
3772
0
    continue;
3773
3774
0
  case DW_RLE_start_length:
3775
0
    if (unit->addr_size > (size_t) (rngs_end - rngs_ptr))
3776
0
      return false;
3777
0
    low_pc = read_address (unit, &rngs_ptr, rngs_end);
3778
0
    high_pc = low_pc;
3779
0
    high_pc += _bfd_safe_read_leb128 (abfd, &rngs_ptr,
3780
0
              false, rngs_end);
3781
0
    break;
3782
3783
0
  case DW_RLE_offset_pair:
3784
0
    low_pc = base_address;
3785
0
    low_pc += _bfd_safe_read_leb128 (abfd, &rngs_ptr,
3786
0
             false, rngs_end);
3787
0
    high_pc = base_address;
3788
0
    high_pc += _bfd_safe_read_leb128 (abfd, &rngs_ptr,
3789
0
              false, rngs_end);
3790
0
    break;
3791
3792
0
  case DW_RLE_start_end:
3793
0
    if (2u * unit->addr_size > (size_t) (rngs_end - rngs_ptr))
3794
0
      return false;
3795
0
    low_pc = read_address (unit, &rngs_ptr, rngs_end);
3796
0
    high_pc = read_address (unit, &rngs_ptr, rngs_end);
3797
0
    break;
3798
3799
  /* TODO x-variants need .debug_addr support used for split-dwarf.  */
3800
0
  case DW_RLE_base_addressx:
3801
0
  case DW_RLE_startx_endx:
3802
0
  case DW_RLE_startx_length:
3803
0
  default:
3804
0
    return false;
3805
0
  }
3806
3807
0
      if (!arange_add (unit, arange, trie_root, low_pc, high_pc))
3808
0
  return false;
3809
0
    }
3810
0
}
3811
3812
static bool
3813
read_rangelist (struct comp_unit *unit, struct arange *arange,
3814
    struct trie_node **trie_root, uint64_t offset)
3815
1.00k
{
3816
1.00k
  if (unit->version <= 4)
3817
1.00k
    return read_ranges (unit, arange, trie_root, offset);
3818
0
  else
3819
0
    return read_rnglists (unit, arange, trie_root, offset);
3820
1.00k
}
3821
3822
static struct funcinfo *
3823
lookup_func_by_offset (uint64_t offset, struct funcinfo * table)
3824
481
{
3825
481
  for (; table != NULL; table = table->prev_func)
3826
481
    if (table->unit_offset == offset)
3827
481
      return table;
3828
0
  return NULL;
3829
481
}
3830
3831
static struct varinfo *
3832
lookup_var_by_offset (uint64_t offset, struct varinfo * table)
3833
81
{
3834
81
  while (table)
3835
81
    {
3836
81
      if (table->unit_offset == offset)
3837
81
  return table;
3838
0
      table = table->prev_var;
3839
0
    }
3840
3841
0
  return NULL;
3842
81
}
3843
3844
3845
/* DWARF2 Compilation unit functions.  */
3846
3847
static struct funcinfo *
3848
reverse_funcinfo_list (struct funcinfo *head)
3849
1.16k
{
3850
1.16k
  struct funcinfo *rhead;
3851
1.16k
  struct funcinfo *temp;
3852
3853
6.75k
  for (rhead = NULL; head; head = temp)
3854
5.59k
    {
3855
5.59k
      temp = head->prev_func;
3856
5.59k
      head->prev_func = rhead;
3857
5.59k
      rhead = head;
3858
5.59k
    }
3859
1.16k
  return rhead;
3860
1.16k
}
3861
3862
static struct varinfo *
3863
reverse_varinfo_list (struct varinfo *head)
3864
1.16k
{
3865
1.16k
  struct varinfo *rhead;
3866
1.16k
  struct varinfo *temp;
3867
3868
1.65k
  for (rhead = NULL; head; head = temp)
3869
487
    {
3870
487
      temp = head->prev_var;
3871
487
      head->prev_var = rhead;
3872
487
      rhead = head;
3873
487
    }
3874
1.16k
  return rhead;
3875
1.16k
}
3876
3877
/* Scan over each die in a comp. unit looking for functions to add
3878
   to the function table and variables to the variable table.  */
3879
3880
static bool
3881
scan_unit_for_symbols (struct comp_unit *unit)
3882
810
{
3883
810
  bfd *abfd = unit->abfd;
3884
810
  bfd_byte *info_ptr = unit->first_child_die_ptr;
3885
810
  bfd_byte *info_ptr_end = unit->end_ptr;
3886
810
  int nesting_level = 0;
3887
810
  struct nest_funcinfo
3888
810
  {
3889
810
    struct funcinfo *func;
3890
810
  } *nested_funcs;
3891
810
  int nested_funcs_size;
3892
810
  struct funcinfo *last_func;
3893
810
  struct varinfo *last_var;
3894
  
3895
  /* Maintain a stack of in-scope functions and inlined functions, which we
3896
     can use to set the caller_func field.  */
3897
810
  nested_funcs_size = 32;
3898
810
  nested_funcs = (struct nest_funcinfo *)
3899
810
    bfd_malloc (nested_funcs_size * sizeof (*nested_funcs));
3900
810
  if (nested_funcs == NULL)
3901
0
    return false;
3902
810
  nested_funcs[nesting_level].func = 0;
3903
3904
  /* PR 27484: We must scan the DIEs twice.  The first time we look for
3905
     function and variable tags and accumulate them into their respective
3906
     tables.  The second time through we process the attributes of the
3907
     functions/variables and augment the table entries.  */
3908
10.5k
  while (nesting_level >= 0)
3909
9.92k
    {
3910
9.92k
      unsigned int abbrev_number, i;
3911
9.92k
      struct abbrev_info *abbrev;
3912
9.92k
      struct funcinfo *func;
3913
9.92k
      struct varinfo *var;
3914
9.92k
      uint64_t current_offset;
3915
3916
      /* PR 17512: file: 9f405d9d.  */
3917
9.92k
      if (info_ptr >= info_ptr_end)
3918
18
  goto fail;
3919
3920
9.90k
      current_offset = info_ptr - unit->info_ptr_unit;
3921
9.90k
      abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
3922
9.90k
               false, info_ptr_end);
3923
9.90k
      if (abbrev_number == 0)
3924
1.38k
  {
3925
1.38k
    nesting_level--;
3926
1.38k
    continue;
3927
1.38k
  }
3928
3929
8.52k
      abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
3930
8.52k
      if (! abbrev)
3931
101
  {
3932
101
    static unsigned int previous_failed_abbrev = -1U;
3933
3934
    /* Avoid multiple reports of the same missing abbrev.  */
3935
101
    if (abbrev_number != previous_failed_abbrev)
3936
84
      {
3937
84
        _bfd_error_handler
3938
84
    (_("DWARF error: could not find abbrev number %u"),
3939
84
     abbrev_number);
3940
84
        previous_failed_abbrev = abbrev_number;
3941
84
      }
3942
101
    bfd_set_error (bfd_error_bad_value);
3943
101
    goto fail;
3944
101
  }
3945
3946
8.42k
      if (abbrev->tag == DW_TAG_subprogram
3947
5.80k
    || abbrev->tag == DW_TAG_entry_point
3948
5.77k
    || abbrev->tag == DW_TAG_inlined_subroutine)
3949
3.46k
  {
3950
3.46k
    size_t amt = sizeof (struct funcinfo);
3951
3952
3.46k
    var = NULL;
3953
3.46k
    func = (struct funcinfo *) bfd_zalloc (abfd, amt);
3954
3.46k
    if (func == NULL)
3955
0
      goto fail;
3956
3.46k
    func->tag = abbrev->tag;
3957
3.46k
    func->prev_func = unit->function_table;
3958
3.46k
    func->unit_offset = current_offset;
3959
3.46k
    unit->function_table = func;
3960
3.46k
    unit->number_of_functions++;
3961
3.46k
    BFD_ASSERT (!unit->cached);
3962
3963
3.46k
    if (func->tag == DW_TAG_inlined_subroutine)
3964
917
      for (i = nesting_level; i-- != 0; )
3965
803
        if (nested_funcs[i].func)
3966
701
    {
3967
701
      func->caller_func = nested_funcs[i].func;
3968
701
      break;
3969
701
    }
3970
3.46k
    nested_funcs[nesting_level].func = func;
3971
3.46k
  }
3972
4.95k
      else
3973
4.95k
  {
3974
4.95k
    func = NULL;
3975
4.95k
    if (abbrev->tag == DW_TAG_variable
3976
4.69k
        || abbrev->tag == DW_TAG_member)
3977
284
      {
3978
284
        size_t amt = sizeof (struct varinfo);
3979
3980
284
        var = (struct varinfo *) bfd_zalloc (abfd, amt);
3981
284
        if (var == NULL)
3982
0
    goto fail;
3983
284
        var->tag = abbrev->tag;
3984
284
        var->stack = true;
3985
284
        var->prev_var = unit->variable_table;
3986
284
        unit->variable_table = var;
3987
284
        var->unit_offset = current_offset;
3988
        /* PR 18205: Missing debug information can cause this
3989
     var to be attached to an already cached unit.  */
3990
284
      }
3991
4.67k
    else
3992
4.67k
      var = NULL;
3993
3994
    /* No inline function in scope at this nesting level.  */
3995
4.95k
    nested_funcs[nesting_level].func = 0;
3996
4.95k
  }
3997
3998
39.3k
      for (i = 0; i < abbrev->num_attrs; ++i)
3999
31.0k
  {
4000
31.0k
    struct attribute attr;
4001
4002
31.0k
    info_ptr = read_attribute (&attr, &abbrev->attrs[i],
4003
31.0k
             unit, info_ptr, info_ptr_end);
4004
31.0k
    if (info_ptr == NULL)
4005
80
      goto fail;
4006
31.0k
  }
4007
4008
8.34k
      if (abbrev->has_children)
4009
899
  {
4010
899
    nesting_level++;
4011
4012
899
    if (nesting_level >= nested_funcs_size)
4013
0
      {
4014
0
        struct nest_funcinfo *tmp;
4015
4016
0
        nested_funcs_size *= 2;
4017
0
        tmp = (struct nest_funcinfo *)
4018
0
    bfd_realloc (nested_funcs,
4019
0
           nested_funcs_size * sizeof (*nested_funcs));
4020
0
        if (tmp == NULL)
4021
0
    goto fail;
4022
0
        nested_funcs = tmp;
4023
0
      }
4024
899
    nested_funcs[nesting_level].func = 0;
4025
899
  }
4026
8.34k
    }
4027
4028
611
  unit->function_table = reverse_funcinfo_list (unit->function_table);
4029
611
  unit->variable_table = reverse_varinfo_list (unit->variable_table);
4030
4031
  /* This is the second pass over the abbrevs.  */      
4032
611
  info_ptr = unit->first_child_die_ptr;
4033
611
  nesting_level = 0;
4034
  
4035
611
  last_func = NULL;
4036
611
  last_var = NULL;
4037
4038
8.36k
  while (nesting_level >= 0)
4039
7.81k
    {
4040
7.81k
      unsigned int abbrev_number, i;
4041
7.81k
      struct abbrev_info *abbrev;
4042
7.81k
      struct attribute attr;
4043
7.81k
      struct funcinfo *func;
4044
7.81k
      struct varinfo *var;
4045
7.81k
      bfd_vma low_pc = 0;
4046
7.81k
      bfd_vma high_pc = 0;
4047
7.81k
      bool high_pc_relative = false;
4048
7.81k
      uint64_t current_offset;
4049
4050
      /* PR 17512: file: 9f405d9d.  */
4051
7.81k
      if (info_ptr >= info_ptr_end)
4052
0
  goto fail;
4053
4054
7.81k
      current_offset = info_ptr - unit->info_ptr_unit;
4055
7.81k
      abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
4056
7.81k
               false, info_ptr_end);
4057
7.81k
      if (! abbrev_number)
4058
1.17k
  {
4059
1.17k
    nesting_level--;
4060
1.17k
    continue;
4061
1.17k
  }
4062
4063
6.63k
      abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
4064
      /* This should have been handled above.  */
4065
6.63k
      BFD_ASSERT (abbrev != NULL);
4066
4067
6.63k
      func = NULL;
4068
6.63k
      var = NULL;
4069
6.63k
      if (abbrev->tag == DW_TAG_subprogram
4070
4.47k
    || abbrev->tag == DW_TAG_entry_point
4071
4.44k
    || abbrev->tag == DW_TAG_inlined_subroutine)
4072
2.86k
  {
4073
2.86k
    if (last_func
4074
2.38k
        && last_func->prev_func
4075
2.38k
        && last_func->prev_func->unit_offset == current_offset)
4076
2.38k
      func = last_func->prev_func;
4077
481
    else
4078
481
      func = lookup_func_by_offset (current_offset, unit->function_table);
4079
4080
2.86k
    if (func == NULL)
4081
0
      goto fail;
4082
4083
2.86k
    last_func = func;
4084
2.86k
  }
4085
3.77k
      else if (abbrev->tag == DW_TAG_variable
4086
3.53k
         || abbrev->tag == DW_TAG_member)
4087
243
  {
4088
243
    if (last_var
4089
162
        && last_var->prev_var
4090
162
        && last_var->prev_var->unit_offset == current_offset)
4091
162
      var = last_var->prev_var;
4092
81
    else
4093
81
      var = lookup_var_by_offset (current_offset, unit->variable_table);
4094
4095
243
    if (var == NULL)
4096
0
      goto fail;
4097
4098
243
    last_var = var;
4099
243
  }
4100
4101
31.0k
      for (i = 0; i < abbrev->num_attrs; ++i)
4102
24.5k
  {
4103
24.5k
    info_ptr = read_attribute (&attr, &abbrev->attrs[i],
4104
24.5k
             unit, info_ptr, info_ptr_end);
4105
24.5k
    if (info_ptr == NULL)
4106
0
      goto fail;
4107
4108
24.5k
    if (func)
4109
13.7k
      {
4110
13.7k
        switch (attr.name)
4111
13.7k
    {
4112
614
    case DW_AT_call_file:
4113
614
      if (is_int_form (&attr))
4114
610
        {
4115
610
          free (func->caller_file);
4116
610
          func->caller_file = concat_filename (unit->line_table,
4117
610
                 attr.u.val);
4118
610
        }
4119
614
      break;
4120
4121
614
    case DW_AT_call_line:
4122
614
      if (is_int_form (&attr))
4123
611
        func->caller_line = attr.u.val;
4124
614
      break;
4125
4126
598
    case DW_AT_abstract_origin:
4127
604
    case DW_AT_specification:
4128
604
      if (is_int_form (&attr)
4129
603
          && !find_abstract_instance (unit, &attr, 0,
4130
603
              &func->name,
4131
603
              &func->is_linkage,
4132
603
              &func->file,
4133
603
              &func->line))
4134
18
        goto fail;
4135
586
      break;
4136
4137
2.17k
    case DW_AT_name:
4138
      /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
4139
         over DW_AT_name.  */
4140
2.17k
      if (func->name == NULL && is_str_form (&attr))
4141
2.14k
        {
4142
2.14k
          func->name = attr.u.str;
4143
2.14k
          if (mangle_style (unit->lang) == 0)
4144
1.52k
      func->is_linkage = true;
4145
2.14k
        }
4146
2.17k
      break;
4147
4148
63
    case DW_AT_linkage_name:
4149
63
    case DW_AT_MIPS_linkage_name:
4150
      /* PR 16949:  Corrupt debug info can place
4151
         non-string forms into these attributes.  */
4152
63
      if (is_str_form (&attr))
4153
0
        {
4154
0
          func->name = attr.u.str;
4155
0
          func->is_linkage = true;
4156
0
        }
4157
63
      break;
4158
4159
764
    case DW_AT_low_pc:
4160
764
      if (is_int_form (&attr))
4161
751
        low_pc = attr.u.val;
4162
764
      break;
4163
4164
722
    case DW_AT_high_pc:
4165
722
      if (is_int_form (&attr))
4166
719
        {
4167
719
          high_pc = attr.u.val;
4168
719
          high_pc_relative = attr.form != DW_FORM_addr;
4169
719
        }
4170
722
      break;
4171
4172
643
    case DW_AT_ranges:
4173
643
      if (is_int_form (&attr)
4174
641
          && !read_rangelist (unit, &func->arange,
4175
641
            &unit->file->trie_root, attr.u.val))
4176
37
        goto fail;
4177
606
      break;
4178
4179
1.15k
    case DW_AT_decl_file:
4180
1.15k
      if (is_int_form (&attr))
4181
1.11k
        {
4182
1.11k
          free (func->file);
4183
1.11k
          func->file = concat_filename (unit->line_table,
4184
1.11k
                attr.u.val);
4185
1.11k
        }
4186
1.15k
      break;
4187
4188
1.13k
    case DW_AT_decl_line:
4189
1.13k
      if (is_int_form (&attr))
4190
1.11k
        func->line = attr.u.val;
4191
1.13k
      break;
4192
4193
5.25k
    default:
4194
5.25k
      break;
4195
13.7k
    }
4196
13.7k
      }
4197
10.7k
    else if (var)
4198
1.38k
      {
4199
1.38k
        switch (attr.name)
4200
1.38k
    {
4201
9
    case DW_AT_specification:
4202
9
      if (is_int_form (&attr) && attr.u.val)
4203
5
        {
4204
5
          bool is_linkage;
4205
5
          if (!find_abstract_instance (unit, &attr, 0,
4206
5
               &var->name,
4207
5
               &is_linkage,
4208
5
               &var->file,
4209
5
               &var->line))
4210
2
      {
4211
2
        _bfd_error_handler (_("DWARF error: could not find "
4212
2
            "variable specification "
4213
2
            "at offset 0x%lx"),
4214
2
                (unsigned long) attr.u.val);
4215
2
        break;
4216
2
      }
4217
5
        }
4218
7
      break;
4219
4220
227
    case DW_AT_name:
4221
227
      if (is_str_form (&attr))
4222
220
        var->name = attr.u.str;
4223
227
      break;
4224
4225
216
    case DW_AT_decl_file:
4226
216
      if (is_int_form (&attr))
4227
208
        {
4228
208
          free (var->file);
4229
208
          var->file = concat_filename (unit->line_table,
4230
208
               attr.u.val);
4231
208
        }
4232
216
      break;
4233
4234
220
    case DW_AT_decl_line:
4235
220
      if (is_int_form (&attr))
4236
205
        var->line = attr.u.val;
4237
220
      break;
4238
4239
210
    case DW_AT_external:
4240
210
      if (is_int_form (&attr) && attr.u.val != 0)
4241
201
        var->stack = false;
4242
210
      break;
4243
4244
233
    case DW_AT_location:
4245
233
      switch (attr.form)
4246
233
        {
4247
0
        case DW_FORM_block:
4248
0
        case DW_FORM_block1:
4249
0
        case DW_FORM_block2:
4250
1
        case DW_FORM_block4:
4251
208
        case DW_FORM_exprloc:
4252
208
          if (attr.u.blk->data != NULL
4253
208
        && *attr.u.blk->data == DW_OP_addr)
4254
159
      {
4255
159
        var->stack = false;
4256
4257
        /* Verify that DW_OP_addr is the only opcode in the
4258
           location, in which case the block size will be 1
4259
           plus the address size.  */
4260
        /* ??? For TLS variables, gcc can emit
4261
           DW_OP_addr <addr> DW_OP_GNU_push_tls_address
4262
           which we don't handle here yet.  */
4263
159
        if (attr.u.blk->size == unit->addr_size + 1U)
4264
156
          var->addr = bfd_get (unit->addr_size * 8,
4265
159
             unit->abfd,
4266
159
             attr.u.blk->data + 1);
4267
159
      }
4268
208
          break;
4269
4270
208
        default:
4271
25
          break;
4272
233
        }
4273
233
      break;
4274
4275
266
    default:
4276
266
      break;
4277
1.38k
    }
4278
1.38k
      }
4279
24.5k
  }
4280
4281
6.58k
      if (abbrev->has_children)
4282
672
  nesting_level++;
4283
4284
6.58k
      if (high_pc_relative)
4285
715
  high_pc += low_pc;
4286
4287
6.58k
      if (func && high_pc != 0)
4288
709
  {
4289
709
    if (!arange_add (unit, &func->arange, &unit->file->trie_root,
4290
709
         low_pc, high_pc))
4291
0
      goto fail;
4292
709
  }
4293
6.58k
    }
4294
4295
556
  unit->function_table = reverse_funcinfo_list (unit->function_table);
4296
556
  unit->variable_table = reverse_varinfo_list (unit->variable_table);
4297
4298
556
  free (nested_funcs);
4299
556
  return true;
4300
4301
254
 fail:
4302
254
  free (nested_funcs);
4303
254
  return false;
4304
611
}
4305
4306
/* Read the attributes of the form strx and addrx.  */
4307
4308
static void
4309
reread_attribute (struct comp_unit *unit,
4310
      struct attribute *attr,
4311
      bfd_vma *low_pc,
4312
      bfd_vma *high_pc,
4313
      bool *high_pc_relative,
4314
      bool compunit)
4315
234
{
4316
234
  if (is_strx_form (attr->form))
4317
179
    attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
4318
234
  if (is_addrx_form (attr->form))
4319
55
    attr->u.val = read_indexed_address (attr->u.val, unit);
4320
4321
234
  switch (attr->name)
4322
234
    {
4323
17
    case DW_AT_stmt_list:
4324
17
      unit->stmtlist = 1;
4325
17
      unit->line_offset = attr->u.val;
4326
17
      break;
4327
4328
38
    case DW_AT_name:
4329
38
      if (is_str_form (attr))
4330
33
  unit->name = attr->u.str;
4331
38
      break;
4332
4333
9
    case DW_AT_low_pc:
4334
9
      *low_pc = attr->u.val;
4335
9
      if (compunit)
4336
5
  unit->base_address = *low_pc;
4337
9
      break;
4338
4339
13
    case DW_AT_high_pc:
4340
13
      *high_pc = attr->u.val;
4341
13
      *high_pc_relative = attr->form != DW_FORM_addr;
4342
13
      break;
4343
4344
26
    case DW_AT_ranges:
4345
26
      if (!read_rangelist (unit, &unit->arange,
4346
26
         &unit->file->trie_root, attr->u.val))
4347
13
  return;
4348
13
      break;
4349
4350
27
    case DW_AT_comp_dir:
4351
27
      {
4352
27
  char *comp_dir = attr->u.str;
4353
4354
27
  if (!is_str_form (attr))
4355
5
    {
4356
5
      _bfd_error_handler
4357
5
        (_("DWARF error: DW_AT_comp_dir attribute encountered "
4358
5
     "with a non-string form"));
4359
5
      comp_dir = NULL;
4360
5
    }
4361
4362
27
  if (comp_dir)
4363
0
    {
4364
0
      char *cp = strchr (comp_dir, ':');
4365
4366
0
      if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
4367
0
        comp_dir = cp + 1;
4368
0
    }
4369
27
  unit->comp_dir = comp_dir;
4370
27
  break;
4371
26
      }
4372
4373
11
    case DW_AT_language:
4374
11
      unit->lang = attr->u.val;
4375
104
    default:
4376
104
      break;
4377
234
    }
4378
234
}
4379
4380
/* Parse a DWARF2 compilation unit starting at INFO_PTR.  UNIT_LENGTH
4381
   includes the compilation unit header that proceeds the DIE's, but
4382
   does not include the length field that precedes each compilation
4383
   unit header.  END_PTR points one past the end of this comp unit.
4384
   OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
4385
4386
   This routine does not read the whole compilation unit; only enough
4387
   to get to the line number information for the compilation unit.  */
4388
4389
static struct comp_unit *
4390
parse_comp_unit (struct dwarf2_debug *stash,
4391
     struct dwarf2_debug_file *file,
4392
     bfd_byte *info_ptr,
4393
     bfd_vma unit_length,
4394
     bfd_byte *info_ptr_unit,
4395
     unsigned int offset_size)
4396
1.72k
{
4397
1.72k
  struct comp_unit* unit;
4398
1.72k
  unsigned int version;
4399
1.72k
  uint64_t abbrev_offset = 0;
4400
  /* Initialize it just to avoid a GCC false warning.  */
4401
1.72k
  unsigned int addr_size = -1;
4402
1.72k
  struct abbrev_info** abbrevs;
4403
1.72k
  unsigned int abbrev_number, i;
4404
1.72k
  struct abbrev_info *abbrev;
4405
1.72k
  struct attribute attr;
4406
1.72k
  bfd_byte *end_ptr = info_ptr + unit_length;
4407
1.72k
  size_t amt;
4408
1.72k
  bfd_vma low_pc = 0;
4409
1.72k
  bfd_vma high_pc = 0;
4410
1.72k
  bfd *abfd = file->bfd_ptr;
4411
1.72k
  bool high_pc_relative = false;
4412
1.72k
  enum dwarf_unit_type unit_type;
4413
1.72k
  struct attribute *str_addrp = NULL;
4414
1.72k
  size_t str_count = 0;
4415
1.72k
  size_t str_alloc = 0;
4416
1.72k
  bool compunit_flag = false;
4417
4418
1.72k
  version = read_2_bytes (abfd, &info_ptr, end_ptr);
4419
1.72k
  if (version < 2 || version > 5)
4420
67
    {
4421
      /* PR 19872: A version number of 0 probably means that there is padding
4422
   at the end of the .debug_info section.  Gold puts it there when
4423
   performing an incremental link, for example.  So do not generate
4424
   an error, just return a NULL.  */
4425
67
      if (version)
4426
42
  {
4427
42
    _bfd_error_handler
4428
42
      (_("DWARF error: found dwarf version '%u', this reader"
4429
42
         " only handles version 2, 3, 4 and 5 information"), version);
4430
42
    bfd_set_error (bfd_error_bad_value);
4431
42
  }
4432
67
      return NULL;
4433
67
    }
4434
4435
1.65k
  if (version < 5)
4436
1.65k
    unit_type = DW_UT_compile;
4437
3
  else
4438
3
    {
4439
3
      unit_type = read_1_byte (abfd, &info_ptr, end_ptr);
4440
3
      addr_size = read_1_byte (abfd, &info_ptr, end_ptr);
4441
3
    }
4442
4443
1.65k
  BFD_ASSERT (offset_size == 4 || offset_size == 8);
4444
1.65k
  if (offset_size == 4)
4445
1.64k
    abbrev_offset = read_4_bytes (abfd, &info_ptr, end_ptr);
4446
5
  else
4447
5
    abbrev_offset = read_8_bytes (abfd, &info_ptr, end_ptr);
4448
4449
1.65k
  if (version < 5)
4450
1.65k
    addr_size = read_1_byte (abfd, &info_ptr, end_ptr);
4451
4452
1.65k
  switch (unit_type)
4453
1.65k
    {
4454
0
    case DW_UT_type:
4455
      /* Skip type signature.  */
4456
0
      info_ptr += 8;
4457
4458
      /* Skip type offset.  */
4459
0
      info_ptr += offset_size;
4460
0
      break;
4461
4462
0
    case DW_UT_skeleton:
4463
      /* Skip DWO_id field.  */
4464
0
      info_ptr += 8;
4465
0
      break;
4466
4467
1.65k
    default:
4468
1.65k
      break;
4469
1.65k
    }
4470
4471
1.65k
  if (addr_size > sizeof (bfd_vma))
4472
24
    {
4473
24
      _bfd_error_handler
4474
  /* xgettext: c-format */
4475
24
  (_("DWARF error: found address size '%u', this reader"
4476
24
     " can not handle sizes greater than '%u'"),
4477
24
   addr_size,
4478
24
   (unsigned int) sizeof (bfd_vma));
4479
24
      bfd_set_error (bfd_error_bad_value);
4480
24
      return NULL;
4481
24
    }
4482
4483
1.62k
  if (addr_size != 2 && addr_size != 4 && addr_size != 8)
4484
14
    {
4485
14
      _bfd_error_handler
4486
14
  ("DWARF error: found address size '%u', this reader"
4487
14
   " can only handle address sizes '2', '4' and '8'", addr_size);
4488
14
      bfd_set_error (bfd_error_bad_value);
4489
14
      return NULL;
4490
14
    }
4491
4492
  /* Read the abbrevs for this compilation unit into a table.  */
4493
1.61k
  abbrevs = read_abbrevs (abfd, abbrev_offset, stash, file);
4494
1.61k
  if (! abbrevs)
4495
75
    return NULL;
4496
4497
1.54k
  abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
4498
1.54k
           false, end_ptr);
4499
1.54k
  if (! abbrev_number)
4500
3
    {
4501
      /* PR 19872: An abbrev number of 0 probably means that there is padding
4502
   at the end of the .debug_abbrev section.  Gold puts it there when
4503
   performing an incremental link, for example.  So do not generate
4504
   an error, just return a NULL.  */
4505
3
      return NULL;
4506
3
    }
4507
4508
1.53k
  abbrev = lookup_abbrev (abbrev_number, abbrevs);
4509
1.53k
  if (! abbrev)
4510
46
    {
4511
46
      _bfd_error_handler (_("DWARF error: could not find abbrev number %u"),
4512
46
        abbrev_number);
4513
46
      bfd_set_error (bfd_error_bad_value);
4514
46
      return NULL;
4515
46
    }
4516
4517
1.49k
  amt = sizeof (struct comp_unit);
4518
1.49k
  unit = (struct comp_unit *) bfd_zalloc (abfd, amt);
4519
1.49k
  if (unit == NULL)
4520
0
    return NULL;
4521
1.49k
  unit->abfd = abfd;
4522
1.49k
  unit->version = version;
4523
1.49k
  unit->addr_size = addr_size;
4524
1.49k
  unit->offset_size = offset_size;
4525
1.49k
  unit->abbrevs = abbrevs;
4526
1.49k
  unit->end_ptr = end_ptr;
4527
1.49k
  unit->stash = stash;
4528
1.49k
  unit->file = file;
4529
1.49k
  unit->info_ptr_unit = info_ptr_unit;
4530
4531
1.49k
  if (abbrev->tag == DW_TAG_compile_unit)
4532
1.40k
    compunit_flag = true;
4533
4534
11.4k
  for (i = 0; i < abbrev->num_attrs; ++i)
4535
10.1k
    {
4536
10.1k
      info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr, end_ptr);
4537
10.1k
      if (info_ptr == NULL)
4538
53
  goto err_exit;
4539
4540
      /* Identify attributes of the form strx* and addrx* which come before
4541
   DW_AT_str_offsets_base and DW_AT_addr_base respectively in the CU.
4542
   Store the attributes in an array and process them later.  */
4543
10.0k
      if ((unit->dwarf_str_offset == 0 && is_strx_form (attr.form))
4544
9.87k
    || (unit->dwarf_addr_offset == 0 && is_addrx_form (attr.form)))
4545
258
  {
4546
258
    if (str_count <= str_alloc)
4547
258
      {
4548
258
        str_alloc = 2 * str_alloc + 200;
4549
258
        str_addrp = bfd_realloc (str_addrp,
4550
258
               str_alloc * sizeof (*str_addrp));
4551
258
        if (str_addrp == NULL)
4552
0
    goto err_exit;
4553
258
      }
4554
258
    str_addrp[str_count] = attr;
4555
258
    str_count++;
4556
258
    continue;
4557
258
  }
4558
4559
      /* Store the data if it is of an attribute we want to keep in a
4560
   partial symbol table.  */
4561
9.80k
      switch (attr.name)
4562
9.80k
  {
4563
1.36k
  case DW_AT_stmt_list:
4564
1.36k
    if (is_int_form (&attr))
4565
1.36k
      {
4566
1.36k
        unit->stmtlist = 1;
4567
1.36k
        unit->line_offset = attr.u.val;
4568
1.36k
      }
4569
1.36k
    break;
4570
4571
1.31k
  case DW_AT_name:
4572
1.31k
    if (is_str_form (&attr))
4573
1.26k
      unit->name = attr.u.str;
4574
1.31k
    break;
4575
4576
1.43k
  case DW_AT_low_pc:
4577
1.43k
    if (is_int_form (&attr))
4578
1.42k
      {
4579
1.42k
        low_pc = attr.u.val;
4580
        /* If the compilation unit DIE has a DW_AT_low_pc attribute,
4581
     this is the base address to use when reading location
4582
     lists or range lists.  */
4583
1.42k
        if (compunit_flag)
4584
1.38k
    unit->base_address = low_pc;
4585
1.42k
      }
4586
1.43k
    break;
4587
4588
943
  case DW_AT_high_pc:
4589
943
    if (is_int_form (&attr))
4590
915
      {
4591
915
        high_pc = attr.u.val;
4592
915
        high_pc_relative = attr.form != DW_FORM_addr;
4593
915
      }
4594
943
    break;
4595
4596
333
  case DW_AT_ranges:
4597
333
    if (is_int_form (&attr)
4598
333
        && !read_rangelist (unit, &unit->arange,
4599
333
          &unit->file->trie_root, attr.u.val))
4600
71
      goto err_exit;
4601
262
    break;
4602
4603
1.29k
  case DW_AT_comp_dir:
4604
1.29k
    {
4605
1.29k
      char *comp_dir = attr.u.str;
4606
4607
      /* PR 17512: file: 1fe726be.  */
4608
1.29k
      if (!is_str_form (&attr))
4609
14
        {
4610
14
    _bfd_error_handler
4611
14
      (_("DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"));
4612
14
    comp_dir = NULL;
4613
14
        }
4614
4615
1.29k
      if (comp_dir)
4616
611
        {
4617
    /* Irix 6.2 native cc prepends <machine>.: to the compilation
4618
       directory, get rid of it.  */
4619
611
    char *cp = strchr (comp_dir, ':');
4620
4621
611
    if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
4622
0
      comp_dir = cp + 1;
4623
611
        }
4624
1.29k
      unit->comp_dir = comp_dir;
4625
1.29k
      break;
4626
333
    }
4627
4628
1.41k
  case DW_AT_language:
4629
1.41k
    if (is_int_form (&attr))
4630
1.37k
      unit->lang = attr.u.val;
4631
1.41k
    break;
4632
4633
14
  case DW_AT_addr_base:
4634
14
    unit->dwarf_addr_offset = attr.u.val;
4635
14
    break;
4636
4637
0
  case DW_AT_str_offsets_base:
4638
0
    unit->dwarf_str_offset = attr.u.val;
4639
0
    break;
4640
4641
1.69k
  default:
4642
1.69k
    break;
4643
9.80k
  }
4644
9.80k
    }
4645
4646
1.60k
  for (i = 0; i < str_count; ++i)
4647
234
    reread_attribute (unit, &str_addrp[i], &low_pc, &high_pc,
4648
234
          &high_pc_relative, compunit_flag);
4649
4650
1.36k
  if (high_pc_relative)
4651
843
    high_pc += low_pc;
4652
1.36k
  if (high_pc != 0)
4653
850
    {
4654
850
      if (!arange_add (unit, &unit->arange, &unit->file->trie_root,
4655
850
           low_pc, high_pc))
4656
0
  goto err_exit;
4657
850
    }
4658
4659
1.36k
  unit->first_child_die_ptr = info_ptr;
4660
4661
1.36k
  free (str_addrp);
4662
1.36k
  return unit;
4663
4664
124
 err_exit:
4665
124
  unit->error = 1;
4666
124
  free (str_addrp);
4667
124
  return NULL;
4668
1.36k
}
4669
4670
/* Return TRUE if UNIT may contain the address given by ADDR.  When
4671
   there are functions written entirely with inline asm statements, the
4672
   range info in the compilation unit header may not be correct.  We
4673
   need to consult the line info table to see if a compilation unit
4674
   really contains the given address.  */
4675
4676
static bool
4677
comp_unit_may_contain_address (struct comp_unit *unit, bfd_vma addr)
4678
3.16k
{
4679
3.16k
  struct arange *arange;
4680
4681
3.16k
  if (unit->error)
4682
907
    return false;
4683
4684
2.26k
  if (unit->arange.high == 0 /* No ranges have been computed yet.  */
4685
1.84k
      || unit->line_table == NULL) /* The line info table has not been loaded.  */
4686
1.38k
    return true;
4687
4688
2.75k
  for (arange = &unit->arange; arange != NULL; arange = arange->next)
4689
2.35k
    if (addr >= arange->low && addr < arange->high)
4690
478
      return true;
4691
4692
404
  return false;
4693
882
}
4694
4695
/* If UNIT contains ADDR, set the output parameters to the values for
4696
   the line containing ADDR and return TRUE.  Otherwise return FALSE.
4697
   The output parameters, FILENAME_PTR, FUNCTION_PTR, and
4698
   LINENUMBER_PTR, are pointers to the objects to be filled in.  */
4699
4700
static bool
4701
comp_unit_find_nearest_line (struct comp_unit *unit,
4702
           bfd_vma addr,
4703
           const char **filename_ptr,
4704
           struct funcinfo **function_ptr,
4705
           unsigned int *linenumber_ptr,
4706
           unsigned int *discriminator_ptr)
4707
10.0k
{
4708
10.0k
  bool line_p, func_p;
4709
4710
10.0k
  if (!comp_unit_maybe_decode_line_info (unit))
4711
4.96k
    return false;
4712
4713
5.11k
  *function_ptr = NULL;
4714
5.11k
  func_p = lookup_address_in_function_table (unit, addr, function_ptr);
4715
4716
5.11k
  if (func_p && (*function_ptr)->tag == DW_TAG_inlined_subroutine)
4717
1.02k
    unit->stash->inliner_chain = *function_ptr;
4718
4719
5.11k
  line_p = lookup_address_in_line_info_table (unit->line_table, addr,
4720
5.11k
                filename_ptr,
4721
5.11k
                linenumber_ptr,
4722
5.11k
                discriminator_ptr);
4723
5.11k
  return line_p || func_p;
4724
10.0k
}
4725
4726
/* Check to see if line info is already decoded in a comp_unit.
4727
   If not, decode it.  Returns TRUE if no errors were encountered;
4728
   FALSE otherwise.  */
4729
4730
static bool
4731
comp_unit_maybe_decode_line_info (struct comp_unit *unit)
4732
13.7k
{
4733
13.7k
  if (unit->error)
4734
6.06k
    return false;
4735
4736
7.72k
  if (! unit->line_table)
4737
1.36k
    {
4738
1.36k
      if (! unit->stmtlist)
4739
70
  {
4740
70
    unit->error = 1;
4741
70
    return false;
4742
70
  }
4743
4744
1.29k
      unit->line_table = decode_line_info (unit);
4745
4746
1.29k
      if (! unit->line_table)
4747
455
  {
4748
455
    unit->error = 1;
4749
455
    return false;
4750
455
  }
4751
4752
842
      if (unit->first_child_die_ptr < unit->end_ptr
4753
810
    && ! scan_unit_for_symbols (unit))
4754
254
  {
4755
254
    unit->error = 1;
4756
254
    return false;
4757
254
  }
4758
842
    }
4759
4760
6.94k
  return true;
4761
7.72k
}
4762
4763
/* If UNIT contains SYM at ADDR, set the output parameters to the
4764
   values for the line containing SYM.  The output parameters,
4765
   FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
4766
   filled in.
4767
4768
   Return TRUE if UNIT contains SYM, and no errors were encountered;
4769
   FALSE otherwise.  */
4770
4771
static bool
4772
comp_unit_find_line (struct comp_unit *unit,
4773
         asymbol *sym,
4774
         bfd_vma addr,
4775
         const char **filename_ptr,
4776
         unsigned int *linenumber_ptr)
4777
3.70k
{
4778
3.70k
  if (!comp_unit_maybe_decode_line_info (unit))
4779
1.88k
    return false;
4780
4781
1.81k
  if (sym->flags & BSF_FUNCTION)
4782
582
    return lookup_symbol_in_function_table (unit, sym, addr,
4783
582
              filename_ptr,
4784
582
              linenumber_ptr);
4785
4786
1.23k
  return lookup_symbol_in_variable_table (unit, sym, addr,
4787
1.23k
            filename_ptr,
4788
1.23k
            linenumber_ptr);
4789
1.81k
}
4790
4791
/* Extract all interesting funcinfos and varinfos of a compilation
4792
   unit into hash tables for faster lookup.  Returns TRUE if no
4793
   errors were enountered; FALSE otherwise.  */
4794
4795
static bool
4796
comp_unit_hash_info (struct dwarf2_debug *stash,
4797
         struct comp_unit *unit,
4798
         struct info_hash_table *funcinfo_hash_table,
4799
         struct info_hash_table *varinfo_hash_table)
4800
0
{
4801
0
  struct funcinfo* each_func;
4802
0
  struct varinfo* each_var;
4803
0
  bool okay = true;
4804
4805
0
  BFD_ASSERT (stash->info_hash_status != STASH_INFO_HASH_DISABLED);
4806
4807
0
  if (!comp_unit_maybe_decode_line_info (unit))
4808
0
    return false;
4809
4810
0
  BFD_ASSERT (!unit->cached);
4811
4812
  /* To preserve the original search order, we went to visit the function
4813
     infos in the reversed order of the list.  However, making the list
4814
     bi-directional use quite a bit of extra memory.  So we reverse
4815
     the list first, traverse the list in the now reversed order and
4816
     finally reverse the list again to get back the original order.  */
4817
0
  unit->function_table = reverse_funcinfo_list (unit->function_table);
4818
0
  for (each_func = unit->function_table;
4819
0
       each_func && okay;
4820
0
       each_func = each_func->prev_func)
4821
0
    {
4822
      /* Skip nameless functions.  */
4823
0
      if (each_func->name)
4824
  /* There is no need to copy name string into hash table as
4825
     name string is either in the dwarf string buffer or
4826
     info in the stash.  */
4827
0
  okay = insert_info_hash_table (funcinfo_hash_table, each_func->name,
4828
0
               (void*) each_func, false);
4829
0
    }
4830
0
  unit->function_table = reverse_funcinfo_list (unit->function_table);
4831
0
  if (!okay)
4832
0
    return false;
4833
4834
  /* We do the same for variable infos.  */
4835
0
  unit->variable_table = reverse_varinfo_list (unit->variable_table);
4836
0
  for (each_var = unit->variable_table;
4837
0
       each_var && okay;
4838
0
       each_var = each_var->prev_var)
4839
0
    {
4840
      /* Skip stack vars and vars with no files or names.  */
4841
0
      if (! each_var->stack
4842
0
    && each_var->file != NULL
4843
0
    && each_var->name != NULL)
4844
  /* There is no need to copy name string into hash table as
4845
     name string is either in the dwarf string buffer or
4846
     info in the stash.  */
4847
0
  okay = insert_info_hash_table (varinfo_hash_table, each_var->name,
4848
0
               (void*) each_var, false);
4849
0
    }
4850
4851
0
  unit->variable_table = reverse_varinfo_list (unit->variable_table);
4852
0
  unit->cached = true;
4853
0
  return okay;
4854
0
}
4855
4856
/* Locate a section in a BFD containing debugging info.  The search starts
4857
   from the section after AFTER_SEC, or from the first section in the BFD if
4858
   AFTER_SEC is NULL.  The search works by examining the names of the
4859
   sections.  There are three permissiable names.  The first two are given
4860
   by DEBUG_SECTIONS[debug_info] (whose standard DWARF2 names are .debug_info
4861
   and .zdebug_info).  The third is a prefix .gnu.linkonce.wi.
4862
   This is a variation on the .debug_info section which has a checksum
4863
   describing the contents appended onto the name.  This allows the linker to
4864
   identify and discard duplicate debugging sections for different
4865
   compilation units.  */
4866
226k
#define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
4867
4868
static asection *
4869
find_debug_info (bfd *abfd, const struct dwarf_debug_section *debug_sections,
4870
     asection *after_sec)
4871
12.2k
{
4872
12.2k
  asection *msec;
4873
12.2k
  const char *look;
4874
4875
12.2k
  if (after_sec == NULL)
4876
7.81k
    {
4877
7.81k
      look = debug_sections[debug_info].uncompressed_name;
4878
7.81k
      msec = bfd_get_section_by_name (abfd, look);
4879
      /* Testing SEC_HAS_CONTENTS is an anti-fuzzer measure.  Of
4880
   course debug sections always have contents.  */
4881
7.81k
      if (msec != NULL && (msec->flags & SEC_HAS_CONTENTS) != 0)
4882
3.58k
  return msec;
4883
4884
4.23k
      look = debug_sections[debug_info].compressed_name;
4885
4.23k
      msec = bfd_get_section_by_name (abfd, look);
4886
4.23k
      if (msec != NULL && (msec->flags & SEC_HAS_CONTENTS) != 0)
4887
2
        return msec;
4888
4889
116k
      for (msec = abfd->sections; msec != NULL; msec = msec->next)
4890
111k
  if ((msec->flags & SEC_HAS_CONTENTS) != 0
4891
86.5k
      && startswith (msec->name, GNU_LINKONCE_INFO))
4892
48
    return msec;
4893
4894
4.18k
      return NULL;
4895
4.22k
    }
4896
4897
34.2k
  for (msec = after_sec->next; msec != NULL; msec = msec->next)
4898
30.6k
    {
4899
30.6k
      if ((msec->flags & SEC_HAS_CONTENTS) == 0)
4900
86
  continue;
4901
4902
30.6k
      look = debug_sections[debug_info].uncompressed_name;
4903
30.6k
      if (strcmp (msec->name, look) == 0)
4904
811
  return msec;
4905
4906
29.8k
      look = debug_sections[debug_info].compressed_name;
4907
29.8k
      if (look != NULL && strcmp (msec->name, look) == 0)
4908
3
  return msec;
4909
4910
29.7k
      if (startswith (msec->name, GNU_LINKONCE_INFO))
4911
55
  return msec;
4912
29.7k
    }
4913
4914
3.52k
  return NULL;
4915
4.39k
}
4916
4917
/* Transfer VMAs from object file to separate debug file.  */
4918
4919
static void
4920
set_debug_vma (bfd *orig_bfd, bfd *debug_bfd)
4921
0
{
4922
0
  asection *s, *d;
4923
4924
0
  for (s = orig_bfd->sections, d = debug_bfd->sections;
4925
0
       s != NULL && d != NULL;
4926
0
       s = s->next, d = d->next)
4927
0
    {
4928
0
      if ((d->flags & SEC_DEBUGGING) != 0)
4929
0
  break;
4930
      /* ??? Assumes 1-1 correspondence between sections in the
4931
   two files.  */
4932
0
      if (strcmp (s->name, d->name) == 0)
4933
0
  {
4934
0
    d->output_section = s->output_section;
4935
0
    d->output_offset = s->output_offset;
4936
0
    d->vma = s->vma;
4937
0
  }
4938
0
    }
4939
0
}
4940
4941
/* If the dwarf2 info was found in a separate debug file, return the
4942
   debug file section corresponding to the section in the original file
4943
   and the debug file symbols.  */
4944
4945
static void
4946
_bfd_dwarf2_stash_syms (struct dwarf2_debug *stash, bfd *abfd,
4947
      asection **sec, asymbol ***syms)
4948
19.3k
{
4949
19.3k
  if (stash->f.bfd_ptr != abfd)
4950
0
    {
4951
0
      asection *s, *d;
4952
4953
0
      if (*sec == NULL)
4954
0
  {
4955
0
    *syms = stash->f.syms;
4956
0
    return;
4957
0
  }
4958
4959
0
      for (s = abfd->sections, d = stash->f.bfd_ptr->sections;
4960
0
     s != NULL && d != NULL;
4961
0
     s = s->next, d = d->next)
4962
0
  {
4963
0
    if ((d->flags & SEC_DEBUGGING) != 0)
4964
0
      break;
4965
0
    if (s == *sec
4966
0
        && strcmp (s->name, d->name) == 0)
4967
0
      {
4968
0
        *sec = d;
4969
0
        *syms = stash->f.syms;
4970
0
        break;
4971
0
      }
4972
0
  }
4973
0
    }
4974
19.3k
}
4975
4976
/* Unset vmas for adjusted sections in STASH.  */
4977
4978
static void
4979
unset_sections (struct dwarf2_debug *stash)
4980
27.5k
{
4981
27.5k
  int i;
4982
27.5k
  struct adjusted_section *p;
4983
4984
27.5k
  i = stash->adjusted_section_count;
4985
27.5k
  p = stash->adjusted_sections;
4986
339k
  for (; i > 0; i--, p++)
4987
312k
    p->section->vma = p->orig_vma;
4988
27.5k
}
4989
4990
/* Set VMAs for allocated and .debug_info sections in ORIG_BFD, a
4991
   relocatable object file.  VMAs are normally all zero in relocatable
4992
   object files, so if we want to distinguish locations in sections by
4993
   address we need to set VMAs so the sections do not overlap.  We
4994
   also set VMA on .debug_info so that when we have multiple
4995
   .debug_info sections (or the linkonce variant) they also do not
4996
   overlap.  The multiple .debug_info sections make up a single
4997
   logical section.  ??? We should probably do the same for other
4998
   debug sections.  */
4999
5000
static bool
5001
place_sections (bfd *orig_bfd, struct dwarf2_debug *stash)
5002
26.0k
{
5003
26.0k
  bfd *abfd;
5004
26.0k
  struct adjusted_section *p;
5005
26.0k
  int i;
5006
26.0k
  const char *debug_info_name;
5007
5008
26.0k
  if (stash->adjusted_section_count != 0)
5009
22.7k
    {
5010
22.7k
      i = stash->adjusted_section_count;
5011
22.7k
      p = stash->adjusted_sections;
5012
308k
      for (; i > 0; i--, p++)
5013
285k
  p->section->vma = p->adj_vma;
5014
22.7k
      return true;
5015
22.7k
    }
5016
5017
3.29k
  debug_info_name = stash->debug_sections[debug_info].uncompressed_name;
5018
3.29k
  i = 0;
5019
3.29k
  abfd = orig_bfd;
5020
3.29k
  while (1)
5021
3.29k
    {
5022
3.29k
      asection *sect;
5023
5024
61.9k
      for (sect = abfd->sections; sect != NULL; sect = sect->next)
5025
58.6k
  {
5026
58.6k
    int is_debug_info;
5027
5028
58.6k
    if (sect->output_section != NULL
5029
0
        && sect->output_section != sect
5030
0
        && (sect->flags & SEC_DEBUGGING) == 0)
5031
0
      continue;
5032
5033
58.6k
    is_debug_info = (strcmp (sect->name, debug_info_name) == 0
5034
55.0k
         || startswith (sect->name, GNU_LINKONCE_INFO));
5035
5036
58.6k
    if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd)
5037
34.5k
        && !is_debug_info)
5038
32.2k
      continue;
5039
5040
26.4k
    i++;
5041
26.4k
  }
5042
3.29k
      if (abfd == stash->f.bfd_ptr)
5043
3.29k
  break;
5044
0
      abfd = stash->f.bfd_ptr;
5045
0
    }
5046
5047
3.29k
  if (i <= 1)
5048
0
    stash->adjusted_section_count = -1;
5049
3.29k
  else
5050
3.29k
    {
5051
3.29k
      bfd_vma last_vma = 0, last_dwarf = 0;
5052
3.29k
      size_t amt = i * sizeof (struct adjusted_section);
5053
5054
3.29k
      p = (struct adjusted_section *) bfd_malloc (amt);
5055
3.29k
      if (p == NULL)
5056
0
  return false;
5057
5058
3.29k
      stash->adjusted_sections = p;
5059
3.29k
      stash->adjusted_section_count = i;
5060
5061
3.29k
      abfd = orig_bfd;
5062
3.29k
      while (1)
5063
3.29k
  {
5064
3.29k
    asection *sect;
5065
5066
61.9k
    for (sect = abfd->sections; sect != NULL; sect = sect->next)
5067
58.6k
      {
5068
58.6k
        bfd_size_type sz;
5069
58.6k
        int is_debug_info;
5070
5071
58.6k
        if (sect->output_section != NULL
5072
0
      && sect->output_section != sect
5073
0
      && (sect->flags & SEC_DEBUGGING) == 0)
5074
0
    continue;
5075
5076
58.6k
        is_debug_info = (strcmp (sect->name, debug_info_name) == 0
5077
55.0k
             || startswith (sect->name, GNU_LINKONCE_INFO));
5078
5079
58.6k
        if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd)
5080
34.5k
      && !is_debug_info)
5081
32.2k
    continue;
5082
5083
26.4k
        sz = sect->rawsize ? sect->rawsize : sect->size;
5084
5085
26.4k
        p->section = sect;
5086
26.4k
        p->orig_vma = sect->vma;
5087
5088
26.4k
        bfd_vma *v = is_debug_info ? &last_dwarf : &last_vma;
5089
        /* Align the new address to the current section
5090
     alignment.  */
5091
26.4k
        bfd_vma mask = -(bfd_vma) 1 << sect->alignment_power;
5092
26.4k
        *v = (*v + ~mask) & mask;
5093
26.4k
        sect->vma = *v;
5094
26.4k
        *v += sz;
5095
5096
26.4k
        p->adj_vma = sect->vma;
5097
26.4k
        p++;
5098
26.4k
      }
5099
3.29k
    if (abfd == stash->f.bfd_ptr)
5100
3.29k
      break;
5101
0
    abfd = stash->f.bfd_ptr;
5102
0
  }
5103
3.29k
    }
5104
5105
3.29k
  if (orig_bfd != stash->f.bfd_ptr)
5106
0
    set_debug_vma (orig_bfd, stash->f.bfd_ptr);
5107
5108
3.29k
  return true;
5109
3.29k
}
5110
5111
/* Look up a funcinfo by name using the given info hash table.  If found,
5112
   also update the locations pointed to by filename_ptr and linenumber_ptr.
5113
5114
   This function returns TRUE if a funcinfo that matches the given symbol
5115
   and address is found with any error; otherwise it returns FALSE.  */
5116
5117
static bool
5118
info_hash_lookup_funcinfo (struct info_hash_table *hash_table,
5119
         asymbol *sym,
5120
         bfd_vma addr,
5121
         const char **filename_ptr,
5122
         unsigned int *linenumber_ptr)
5123
0
{
5124
0
  struct funcinfo* each_func;
5125
0
  struct funcinfo* best_fit = NULL;
5126
0
  bfd_vma best_fit_len = (bfd_vma) -1;
5127
0
  struct info_list_node *node;
5128
0
  struct arange *arange;
5129
0
  const char *name = bfd_asymbol_name (sym);
5130
5131
0
  for (node = lookup_info_hash_table (hash_table, name);
5132
0
       node;
5133
0
       node = node->next)
5134
0
    {
5135
0
      each_func = (struct funcinfo *) node->info;
5136
0
      for (arange = &each_func->arange;
5137
0
     arange;
5138
0
     arange = arange->next)
5139
0
  {
5140
0
    if (addr >= arange->low
5141
0
        && addr < arange->high
5142
0
        && arange->high - arange->low < best_fit_len)
5143
0
      {
5144
0
        best_fit = each_func;
5145
0
        best_fit_len = arange->high - arange->low;
5146
0
      }
5147
0
  }
5148
0
    }
5149
5150
0
  if (best_fit)
5151
0
    {
5152
0
      *filename_ptr = best_fit->file;
5153
0
      *linenumber_ptr = best_fit->line;
5154
0
      return true;
5155
0
    }
5156
5157
0
  return false;
5158
0
}
5159
5160
/* Look up a varinfo by name using the given info hash table.  If found,
5161
   also update the locations pointed to by filename_ptr and linenumber_ptr.
5162
5163
   This function returns TRUE if a varinfo that matches the given symbol
5164
   and address is found with any error; otherwise it returns FALSE.  */
5165
5166
static bool
5167
info_hash_lookup_varinfo (struct info_hash_table *hash_table,
5168
        asymbol *sym,
5169
        bfd_vma addr,
5170
        const char **filename_ptr,
5171
        unsigned int *linenumber_ptr)
5172
0
{
5173
0
  struct varinfo* each;
5174
0
  struct info_list_node *node;
5175
0
  const char *name = bfd_asymbol_name (sym);
5176
5177
0
  for (node = lookup_info_hash_table (hash_table, name);
5178
0
       node;
5179
0
       node = node->next)
5180
0
    {
5181
0
      each = (struct varinfo *) node->info;
5182
0
      if (each->addr == addr)
5183
0
  {
5184
0
    *filename_ptr = each->file;
5185
0
    *linenumber_ptr = each->line;
5186
0
    return true;
5187
0
  }
5188
0
    }
5189
5190
0
  return false;
5191
0
}
5192
5193
/* Update the funcinfo and varinfo info hash tables if they are
5194
   not up to date.  Returns TRUE if there is no error; otherwise
5195
   returns FALSE and disable the info hash tables.  */
5196
5197
static bool
5198
stash_maybe_update_info_hash_tables (struct dwarf2_debug *stash)
5199
0
{
5200
0
  struct comp_unit *each;
5201
5202
  /* Exit if hash tables are up-to-date.  */
5203
0
  if (stash->f.all_comp_units == stash->hash_units_head)
5204
0
    return true;
5205
5206
0
  if (stash->hash_units_head)
5207
0
    each = stash->hash_units_head->prev_unit;
5208
0
  else
5209
0
    each = stash->f.last_comp_unit;
5210
5211
0
  while (each)
5212
0
    {
5213
0
      if (!comp_unit_hash_info (stash, each, stash->funcinfo_hash_table,
5214
0
        stash->varinfo_hash_table))
5215
0
  {
5216
0
    stash->info_hash_status = STASH_INFO_HASH_DISABLED;
5217
0
    return false;
5218
0
  }
5219
0
      each = each->prev_unit;
5220
0
    }
5221
5222
0
  stash->hash_units_head = stash->f.all_comp_units;
5223
0
  return true;
5224
0
}
5225
5226
/* Check consistency of info hash tables.  This is for debugging only.  */
5227
5228
static void ATTRIBUTE_UNUSED
5229
stash_verify_info_hash_table (struct dwarf2_debug *stash)
5230
0
{
5231
0
  struct comp_unit *each_unit;
5232
0
  struct funcinfo *each_func;
5233
0
  struct varinfo *each_var;
5234
0
  struct info_list_node *node;
5235
0
  bool found;
5236
0
5237
0
  for (each_unit = stash->f.all_comp_units;
5238
0
       each_unit;
5239
0
       each_unit = each_unit->next_unit)
5240
0
    {
5241
0
      for (each_func = each_unit->function_table;
5242
0
     each_func;
5243
0
     each_func = each_func->prev_func)
5244
0
  {
5245
0
    if (!each_func->name)
5246
0
      continue;
5247
0
    node = lookup_info_hash_table (stash->funcinfo_hash_table,
5248
0
           each_func->name);
5249
0
    BFD_ASSERT (node);
5250
0
    found = false;
5251
0
    while (node && !found)
5252
0
      {
5253
0
        found = node->info == each_func;
5254
0
        node = node->next;
5255
0
      }
5256
0
    BFD_ASSERT (found);
5257
0
  }
5258
0
5259
0
      for (each_var = each_unit->variable_table;
5260
0
     each_var;
5261
0
     each_var = each_var->prev_var)
5262
0
  {
5263
0
    if (!each_var->name || !each_var->file || each_var->stack)
5264
0
      continue;
5265
0
    node = lookup_info_hash_table (stash->varinfo_hash_table,
5266
0
           each_var->name);
5267
0
    BFD_ASSERT (node);
5268
0
    found = false;
5269
0
    while (node && !found)
5270
0
      {
5271
0
        found = node->info == each_var;
5272
0
        node = node->next;
5273
0
      }
5274
0
    BFD_ASSERT (found);
5275
0
  }
5276
0
    }
5277
0
}
5278
5279
/* Check to see if we want to enable the info hash tables, which consume
5280
   quite a bit of memory.  Currently we only check the number times
5281
   bfd_dwarf2_find_line is called.  In the future, we may also want to
5282
   take the number of symbols into account.  */
5283
5284
static void
5285
stash_maybe_enable_info_hash_tables (bfd *abfd, struct dwarf2_debug *stash)
5286
5.83k
{
5287
5.83k
  BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_OFF);
5288
5289
5.83k
  if (stash->info_hash_count++ < STASH_INFO_HASH_TRIGGER)
5290
5.83k
    return;
5291
5292
  /* FIXME: Maybe we should check the reduce_memory_overheads
5293
     and optimize fields in the bfd_link_info structure ?  */
5294
5295
  /* Create hash tables.  */
5296
0
  stash->funcinfo_hash_table = create_info_hash_table (abfd);
5297
0
  stash->varinfo_hash_table = create_info_hash_table (abfd);
5298
0
  if (!stash->funcinfo_hash_table || !stash->varinfo_hash_table)
5299
0
    {
5300
      /* Turn off info hashes if any allocation above fails.  */
5301
0
      stash->info_hash_status = STASH_INFO_HASH_DISABLED;
5302
0
      return;
5303
0
    }
5304
  /* We need a forced update so that the info hash tables will
5305
     be created even though there is no compilation unit.  That
5306
     happens if STASH_INFO_HASH_TRIGGER is 0.  */
5307
0
  if (stash_maybe_update_info_hash_tables (stash))
5308
0
    stash->info_hash_status = STASH_INFO_HASH_ON;
5309
0
}
5310
5311
/* Find the file and line associated with a symbol and address using the
5312
   info hash tables of a stash. If there is a match, the function returns
5313
   TRUE and update the locations pointed to by filename_ptr and linenumber_ptr;
5314
   otherwise it returns FALSE.  */
5315
5316
static bool
5317
stash_find_line_fast (struct dwarf2_debug *stash,
5318
          asymbol *sym,
5319
          bfd_vma addr,
5320
          const char **filename_ptr,
5321
          unsigned int *linenumber_ptr)
5322
0
{
5323
0
  BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_ON);
5324
5325
0
  if (sym->flags & BSF_FUNCTION)
5326
0
    return info_hash_lookup_funcinfo (stash->funcinfo_hash_table, sym, addr,
5327
0
              filename_ptr, linenumber_ptr);
5328
0
  return info_hash_lookup_varinfo (stash->varinfo_hash_table, sym, addr,
5329
0
           filename_ptr, linenumber_ptr);
5330
0
}
5331
5332
/* Save current section VMAs.  */
5333
5334
static bool
5335
save_section_vma (const bfd *abfd, struct dwarf2_debug *stash)
5336
7.58k
{
5337
7.58k
  asection *s;
5338
7.58k
  unsigned int i;
5339
5340
7.58k
  if (abfd->section_count == 0)
5341
0
    return true;
5342
7.58k
  stash->sec_vma = bfd_malloc (sizeof (*stash->sec_vma) * abfd->section_count);
5343
7.58k
  if (stash->sec_vma == NULL)
5344
0
    return false;
5345
7.58k
  stash->sec_vma_count = abfd->section_count;
5346
7.58k
  for (i = 0, s = abfd->sections;
5347
179k
       s != NULL && i < abfd->section_count;
5348
172k
       i++, s = s->next)
5349
172k
    {
5350
172k
      if (s->output_section != NULL)
5351
0
  stash->sec_vma[i] = s->output_section->vma + s->output_offset;
5352
172k
      else
5353
172k
  stash->sec_vma[i] = s->vma;
5354
172k
    }
5355
7.58k
  return true;
5356
7.58k
}
5357
5358
/* Compare current section VMAs against those at the time the stash
5359
   was created.  If find_nearest_line is used in linker warnings or
5360
   errors early in the link process, the debug info stash will be
5361
   invalid for later calls.  This is because we relocate debug info
5362
   sections, so the stashed section contents depend on symbol values,
5363
   which in turn depend on section VMAs.  */
5364
5365
static bool
5366
section_vma_same (const bfd *abfd, const struct dwarf2_debug *stash)
5367
71.9k
{
5368
71.9k
  asection *s;
5369
71.9k
  unsigned int i;
5370
5371
  /* PR 24334: If the number of sections in ABFD has changed between
5372
     when the stash was created and now, then we cannot trust the
5373
     stashed vma information.  */
5374
71.9k
  if (abfd->section_count != stash->sec_vma_count)
5375
0
    return false;
5376
5377
71.9k
  for (i = 0, s = abfd->sections;
5378
4.83M
       s != NULL && i < abfd->section_count;
5379
4.76M
       i++, s = s->next)
5380
4.76M
    {
5381
4.76M
      bfd_vma vma;
5382
5383
4.76M
      if (s->output_section != NULL)
5384
0
  vma = s->output_section->vma + s->output_offset;
5385
4.76M
      else
5386
4.76M
  vma = s->vma;
5387
4.76M
      if (vma != stash->sec_vma[i])
5388
0
  return false;
5389
4.76M
    }
5390
71.9k
  return true;
5391
71.9k
}
5392
5393
/* Read debug information from DEBUG_BFD when DEBUG_BFD is specified.
5394
   If DEBUG_BFD is not specified, we read debug information from ABFD
5395
   or its gnu_debuglink. The results will be stored in PINFO.
5396
   The function returns TRUE iff debug information is ready.  */
5397
5398
bool
5399
_bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
5400
            const struct dwarf_debug_section *debug_sections,
5401
            asymbol **symbols,
5402
            void **pinfo,
5403
            bool do_place)
5404
79.5k
{
5405
79.5k
  bfd_size_type total_size;
5406
79.5k
  asection *msec;
5407
79.5k
  struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
5408
5409
79.5k
  if (stash != NULL)
5410
71.9k
    {
5411
71.9k
      if (stash->orig_bfd_id == abfd->id
5412
71.9k
    && section_vma_same (abfd, stash))
5413
71.9k
  {
5414
    /* Check that we did previously find some debug information
5415
       before attempting to make use of it.  */
5416
71.9k
    if (stash->f.dwarf_info_size != 0)
5417
24.1k
      {
5418
24.1k
        if (do_place && !place_sections (abfd, stash))
5419
0
    return false;
5420
24.1k
        return true;
5421
24.1k
      }
5422
5423
47.7k
    return false;
5424
71.9k
  }
5425
0
      _bfd_dwarf2_cleanup_debug_info (abfd, pinfo);
5426
0
      memset (stash, 0, sizeof (*stash));
5427
0
    }
5428
7.58k
  else
5429
7.58k
    {
5430
7.58k
      stash = (struct dwarf2_debug *) bfd_zalloc (abfd, sizeof (*stash));
5431
7.58k
      if (! stash)
5432
0
  return false;
5433
7.58k
      *pinfo = stash;
5434
7.58k
    }
5435
7.58k
  stash->orig_bfd_id = abfd->id;
5436
7.58k
  stash->debug_sections = debug_sections;
5437
7.58k
  stash->f.syms = symbols;
5438
7.58k
  if (!save_section_vma (abfd, stash))
5439
0
    return false;
5440
5441
7.58k
  stash->f.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev,
5442
7.58k
                 del_abbrev, calloc, free);
5443
7.58k
  if (!stash->f.abbrev_offsets)
5444
0
    return false;
5445
5446
7.58k
  stash->alt.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev,
5447
7.58k
             del_abbrev, calloc, free);
5448
7.58k
  if (!stash->alt.abbrev_offsets)
5449
0
    return false;
5450
5451
7.58k
  stash->f.trie_root = alloc_trie_leaf (abfd);
5452
7.58k
  if (!stash->f.trie_root)
5453
0
    return false;
5454
5455
7.58k
  stash->alt.trie_root = alloc_trie_leaf (abfd);
5456
7.58k
  if (!stash->alt.trie_root)
5457
0
    return false;
5458
5459
7.58k
  if (debug_bfd == NULL)
5460
7.58k
    debug_bfd = abfd;
5461
5462
7.58k
  msec = find_debug_info (debug_bfd, debug_sections, NULL);
5463
7.58k
  if (msec == NULL && abfd == debug_bfd)
5464
4.18k
    {
5465
4.18k
      char * debug_filename;
5466
5467
4.18k
      debug_filename = bfd_follow_build_id_debuglink (abfd, DEBUGDIR);
5468
4.18k
      if (debug_filename == NULL)
5469
4.18k
  debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
5470
5471
4.18k
      if (debug_filename == NULL)
5472
  /* No dwarf2 info, and no gnu_debuglink to follow.
5473
     Note that at this point the stash has been allocated, but
5474
     contains zeros.  This lets future calls to this function
5475
     fail more quickly.  */
5476
4.18k
  return false;
5477
5478
0
      debug_bfd = bfd_openr (debug_filename, NULL);
5479
0
      free (debug_filename);
5480
0
      if (debug_bfd == NULL)
5481
  /* FIXME: Should we report our failure to follow the debuglink ?  */
5482
0
  return false;
5483
5484
      /* Set BFD_DECOMPRESS to decompress debug sections.  */
5485
0
      debug_bfd->flags |= BFD_DECOMPRESS;
5486
0
      if (!bfd_check_format (debug_bfd, bfd_object)
5487
0
    || (msec = find_debug_info (debug_bfd,
5488
0
              debug_sections, NULL)) == NULL
5489
0
    || !bfd_generic_link_read_symbols (debug_bfd))
5490
0
  {
5491
0
    bfd_close (debug_bfd);
5492
0
    return false;
5493
0
  }
5494
5495
0
      symbols = bfd_get_outsymbols (debug_bfd);
5496
0
      stash->f.syms = symbols;
5497
0
      stash->close_on_cleanup = true;
5498
0
    }
5499
3.40k
  stash->f.bfd_ptr = debug_bfd;
5500
5501
3.40k
  if (do_place
5502
3.29k
      && !place_sections (abfd, stash))
5503
0
    return false;
5504
5505
  /* There can be more than one DWARF2 info section in a BFD these
5506
     days.  First handle the easy case when there's only one.  If
5507
     there's more than one, try case two: read them all in and produce
5508
     one large stash.  We do this in two passes - in the first pass we
5509
     just accumulate the section sizes, and in the second pass we
5510
     read in the section's contents.  (The allows us to avoid
5511
     reallocing the data as we add sections to the stash.)  */
5512
5513
3.40k
  if (! find_debug_info (debug_bfd, debug_sections, msec))
5514
3.13k
    {
5515
      /* Case 1: only one info section.  */
5516
3.13k
      total_size = bfd_get_section_limit_octets (debug_bfd, msec);
5517
3.13k
      if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
5518
3.13k
        symbols, 0,
5519
3.13k
        &stash->f.dwarf_info_buffer, &total_size))
5520
1.37k
  goto restore_vma;
5521
3.13k
    }
5522
265
  else
5523
265
    {
5524
      /* Case 2: multiple sections.  */
5525
265
      for (total_size = 0;
5526
846
     msec;
5527
581
     msec = find_debug_info (debug_bfd, debug_sections, msec))
5528
609
  {
5529
609
    if (bfd_section_size_insane (debug_bfd, msec))
5530
28
      goto restore_vma;
5531
581
    bfd_size_type readsz = bfd_get_section_limit_octets (debug_bfd, msec);
5532
    /* Catch PR25070 testcase overflowing size calculation here.  */
5533
581
    if (total_size + readsz < total_size)
5534
0
      {
5535
0
        bfd_set_error (bfd_error_no_memory);
5536
0
        goto restore_vma;
5537
0
      }
5538
581
    total_size += readsz;
5539
581
  }
5540
5541
237
      stash->f.dwarf_info_buffer = (bfd_byte *) bfd_malloc (total_size);
5542
237
      if (stash->f.dwarf_info_buffer == NULL)
5543
0
  goto restore_vma;
5544
5545
237
      total_size = 0;
5546
237
      for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
5547
646
     msec;
5548
409
     msec = find_debug_info (debug_bfd, debug_sections, msec))
5549
497
  {
5550
497
    bfd_size_type readsz = bfd_get_section_limit_octets (debug_bfd, msec);
5551
497
    if (readsz == 0)
5552
45
      continue;
5553
5554
452
    if (!(bfd_simple_get_relocated_section_contents
5555
452
    (debug_bfd, msec, stash->f.dwarf_info_buffer + total_size,
5556
452
     symbols)))
5557
88
      goto restore_vma;
5558
5559
364
    total_size += readsz;
5560
364
  }
5561
237
    }
5562
5563
1.91k
  stash->f.info_ptr = stash->f.dwarf_info_buffer;
5564
1.91k
  stash->f.dwarf_info_size = total_size;
5565
1.91k
  return true;
5566
5567
1.48k
 restore_vma:
5568
1.48k
  unset_sections (stash);
5569
1.48k
  return false;
5570
3.40k
}
5571
5572
/* Parse the next DWARF2 compilation unit at FILE->INFO_PTR.  */
5573
5574
static struct comp_unit *
5575
stash_comp_unit (struct dwarf2_debug *stash, struct dwarf2_debug_file *file)
5576
23.9k
{
5577
23.9k
  bfd_size_type length;
5578
23.9k
  unsigned int offset_size;
5579
23.9k
  bfd_byte *info_ptr_unit = file->info_ptr;
5580
23.9k
  bfd_byte *info_ptr_end = file->dwarf_info_buffer + file->dwarf_info_size;
5581
5582
23.9k
  if (file->info_ptr >= info_ptr_end)
5583
21.7k
    return NULL;
5584
5585
2.13k
  length = read_4_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
5586
  /* A 0xffffff length is the DWARF3 way of indicating
5587
     we use 64-bit offsets, instead of 32-bit offsets.  */
5588
2.13k
  if (length == 0xffffffff)
5589
19
    {
5590
19
      offset_size = 8;
5591
19
      length = read_8_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
5592
19
    }
5593
  /* A zero length is the IRIX way of indicating 64-bit offsets,
5594
     mostly because the 64-bit length will generally fit in 32
5595
     bits, and the endianness helps.  */
5596
2.11k
  else if (length == 0)
5597
71
    {
5598
71
      offset_size = 8;
5599
71
      length = read_4_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
5600
71
    }
5601
  /* In the absence of the hints above, we assume 32-bit DWARF2
5602
     offsets even for targets with 64-bit addresses, because:
5603
     a) most of the time these targets will not have generated
5604
     more than 2Gb of debug info and so will not need 64-bit
5605
     offsets,
5606
     and
5607
     b) if they do use 64-bit offsets but they are not using
5608
     the size hints that are tested for above then they are
5609
     not conforming to the DWARF3 standard anyway.  */
5610
2.04k
  else
5611
2.04k
    offset_size = 4;
5612
5613
2.13k
  if (length != 0
5614
2.10k
      && length <= (size_t) (info_ptr_end - file->info_ptr))
5615
1.72k
    {
5616
1.72k
      struct comp_unit *each = parse_comp_unit (stash, file,
5617
1.72k
            file->info_ptr, length,
5618
1.72k
            info_ptr_unit, offset_size);
5619
1.72k
      if (each)
5620
1.36k
  {
5621
1.36k
    if (file->comp_unit_tree == NULL)
5622
1.27k
      file->comp_unit_tree
5623
1.27k
        = splay_tree_new (splay_tree_compare_addr_range,
5624
1.27k
        splay_tree_free_addr_range, NULL);
5625
5626
1.36k
    struct addr_range *r
5627
1.36k
      = (struct addr_range *)bfd_malloc (sizeof (struct addr_range));
5628
1.36k
    r->start = each->info_ptr_unit;
5629
1.36k
    r->end = each->end_ptr;
5630
1.36k
    splay_tree_node v = splay_tree_lookup (file->comp_unit_tree,
5631
1.36k
             (splay_tree_key)r);
5632
1.36k
    if (v != NULL || r->end <= r->start)
5633
0
      abort ();
5634
1.36k
    splay_tree_insert (file->comp_unit_tree, (splay_tree_key)r,
5635
1.36k
           (splay_tree_value)each);
5636
5637
1.36k
    if (file->all_comp_units)
5638
88
      file->all_comp_units->prev_unit = each;
5639
1.27k
    else
5640
1.27k
      file->last_comp_unit = each;
5641
5642
1.36k
    each->next_unit = file->all_comp_units;
5643
1.36k
    file->all_comp_units = each;
5644
5645
1.36k
    if (each->arange.high == 0)
5646
348
      {
5647
348
        each->next_unit_without_ranges = file->all_comp_units_without_ranges;
5648
348
        file->all_comp_units_without_ranges = each;
5649
348
      }
5650
5651
1.36k
    file->info_ptr += length;
5652
1.36k
    return each;
5653
1.36k
  }
5654
1.72k
    }
5655
5656
  /* Don't trust any of the DWARF info after a corrupted length or
5657
     parse error.  */
5658
770
  file->info_ptr = info_ptr_end;
5659
770
  return NULL;
5660
2.13k
}
5661
5662
/* Hash function for an asymbol.  */
5663
5664
static hashval_t
5665
hash_asymbol (const void *sym)
5666
390
{
5667
390
  const asymbol *asym = sym;
5668
390
  return htab_hash_string (asym->name);
5669
390
}
5670
5671
/* Equality function for asymbols.  */
5672
5673
static int
5674
eq_asymbol (const void *a, const void *b)
5675
28
{
5676
28
  const asymbol *sa = a;
5677
28
  const asymbol *sb = b;
5678
28
  return strcmp (sa->name, sb->name) == 0;
5679
28
}
5680
5681
/* Scan the debug information in PINFO looking for a DW_TAG_subprogram
5682
   abbrev with a DW_AT_low_pc attached to it.  Then lookup that same
5683
   symbol in SYMBOLS and return the difference between the low_pc and
5684
   the symbol's address.  Returns 0 if no suitable symbol could be found.  */
5685
5686
bfd_signed_vma
5687
_bfd_dwarf2_find_symbol_bias (asymbol ** symbols, void ** pinfo)
5688
967
{
5689
967
  struct dwarf2_debug *stash;
5690
967
  struct comp_unit * unit;
5691
967
  htab_t sym_hash;
5692
967
  bfd_signed_vma result = 0;
5693
967
  asymbol ** psym;
5694
5695
967
  stash = (struct dwarf2_debug *) *pinfo;
5696
5697
967
  if (stash == NULL || symbols == NULL)
5698
0
    return 0;
5699
5700
967
  sym_hash = htab_create_alloc (10, hash_asymbol, eq_asymbol,
5701
967
        NULL, xcalloc, free);
5702
5.10k
  for (psym = symbols; * psym != NULL; psym++)
5703
4.13k
    {
5704
4.13k
      asymbol * sym = * psym;
5705
5706
4.13k
      if (sym->flags & BSF_FUNCTION && sym->section != NULL)
5707
390
  {
5708
390
    void **slot = htab_find_slot (sym_hash, sym, INSERT);
5709
390
    *slot = sym;
5710
390
  }
5711
4.13k
    }
5712
5713
967
  for (unit = stash->f.all_comp_units; unit; unit = unit->next_unit)
5714
0
    {
5715
0
      struct funcinfo * func;
5716
5717
0
      comp_unit_maybe_decode_line_info (unit);
5718
5719
0
      for (func = unit->function_table; func != NULL; func = func->prev_func)
5720
0
  if (func->name && func->arange.low)
5721
0
    {
5722
0
      asymbol search, *sym;
5723
5724
      /* FIXME: Do we need to scan the aranges looking for the
5725
         lowest pc value?  */
5726
5727
0
      search.name = func->name;
5728
0
      sym = htab_find (sym_hash, &search);
5729
0
      if (sym != NULL)
5730
0
        {
5731
0
    result = func->arange.low - (sym->value + sym->section->vma);
5732
0
    goto done;
5733
0
        }
5734
0
    }
5735
0
    }
5736
5737
967
 done:
5738
967
  htab_delete (sym_hash);
5739
967
  return result;
5740
967
}
5741
5742
/* See _bfd_dwarf2_find_nearest_line_with_alt.  */
5743
5744
int
5745
_bfd_dwarf2_find_nearest_line (bfd *abfd,
5746
             asymbol **symbols,
5747
             asymbol *symbol,
5748
             asection *section,
5749
             bfd_vma offset,
5750
             const char **filename_ptr,
5751
             const char **functionname_ptr,
5752
             unsigned int *linenumber_ptr,
5753
             unsigned int *discriminator_ptr,
5754
             const struct dwarf_debug_section *debug_sections,
5755
             void **pinfo)
5756
45.0k
{
5757
45.0k
  return _bfd_dwarf2_find_nearest_line_with_alt
5758
45.0k
    (abfd, NULL, symbols, symbol, section, offset, filename_ptr,
5759
45.0k
     functionname_ptr, linenumber_ptr, discriminator_ptr, debug_sections,
5760
45.0k
     pinfo);
5761
45.0k
}
5762
5763
/* Find the source code location of SYMBOL.  If SYMBOL is NULL
5764
   then find the nearest source code location corresponding to
5765
   the address SECTION + OFFSET.
5766
   Returns 1 if the line is found without error and fills in
5767
   FILENAME_PTR and LINENUMBER_PTR.  In the case where SYMBOL was
5768
   NULL the FUNCTIONNAME_PTR is also filled in.
5769
   Returns 2 if partial information from _bfd_elf_find_function is
5770
   returned (function and maybe file) by looking at symbols.  DWARF2
5771
   info is present but not regarding the requested code location.
5772
   Returns 0 otherwise.
5773
   SYMBOLS contains the symbol table for ABFD.
5774
   DEBUG_SECTIONS contains the name of the dwarf debug sections.
5775
   If ALT_FILENAME is given, attempt to open the file and use it
5776
   as the .gnu_debugaltlink file. Otherwise this file will be
5777
   searched for when needed.  */
5778
5779
int
5780
_bfd_dwarf2_find_nearest_line_with_alt
5781
  (bfd *abfd,
5782
   const char *alt_filename,
5783
   asymbol **symbols,
5784
   asymbol *symbol,
5785
   asection *section,
5786
   bfd_vma offset,
5787
   const char **filename_ptr,
5788
   const char **functionname_ptr,
5789
   unsigned int *linenumber_ptr,
5790
   unsigned int *discriminator_ptr,
5791
   const struct dwarf_debug_section *debug_sections,
5792
   void **pinfo)
5793
79.5k
{
5794
  /* Read each compilation unit from the section .debug_info, and check
5795
     to see if it contains the address we are searching for.  If yes,
5796
     lookup the address, and return the line number info.  If no, go
5797
     on to the next compilation unit.
5798
5799
     We keep a list of all the previously read compilation units, and
5800
     a pointer to the next un-read compilation unit.  Check the
5801
     previously read units before reading more.  */
5802
79.5k
  struct dwarf2_debug *stash;
5803
  /* What address are we looking for?  */
5804
79.5k
  bfd_vma addr;
5805
79.5k
  struct comp_unit* each;
5806
79.5k
  struct funcinfo *function = NULL;
5807
79.5k
  int found = false;
5808
79.5k
  bool do_line;
5809
5810
79.5k
  *filename_ptr = NULL;
5811
79.5k
  if (functionname_ptr != NULL)
5812
73.7k
    *functionname_ptr = NULL;
5813
79.5k
  *linenumber_ptr = 0;
5814
79.5k
  if (discriminator_ptr)
5815
25.3k
    *discriminator_ptr = 0;
5816
5817
79.5k
  if (! _bfd_dwarf2_slurp_debug_info (abfd, NULL, debug_sections,
5818
79.5k
              symbols, pinfo,
5819
79.5k
              (abfd->flags & (EXEC_P | DYNAMIC)) == 0))
5820
53.4k
    return false;
5821
5822
26.0k
  stash = (struct dwarf2_debug *) *pinfo;
5823
5824
26.0k
  if (stash->alt.bfd_ptr == NULL && alt_filename != NULL)
5825
0
    {
5826
0
      bfd *alt_bfd = bfd_openr (alt_filename, NULL);
5827
5828
0
      if (alt_bfd == NULL)
5829
  /* bfd_openr will have set the bfd_error.  */
5830
0
  return false;
5831
0
      if (!bfd_check_format (alt_bfd, bfd_object))
5832
0
  {
5833
0
    bfd_set_error (bfd_error_wrong_format);
5834
0
    bfd_close (alt_bfd);
5835
0
    return false;
5836
0
  }
5837
5838
0
      stash->alt.bfd_ptr = alt_bfd;
5839
0
    }
5840
5841
26.0k
  do_line = symbol != NULL;
5842
26.0k
  if (do_line)
5843
3.91k
    {
5844
3.91k
      BFD_ASSERT (section == NULL && offset == 0 && functionname_ptr == NULL);
5845
3.91k
      section = bfd_asymbol_section (symbol);
5846
3.91k
      addr = symbol->value;
5847
3.91k
    }
5848
22.1k
  else
5849
22.1k
    {
5850
22.1k
      BFD_ASSERT (section != NULL && functionname_ptr != NULL);
5851
22.1k
      addr = offset;
5852
5853
      /* If we have no SYMBOL but the section we're looking at is not a
5854
   code section, then take a look through the list of symbols to see
5855
   if we have a symbol at the address we're looking for.  If we do
5856
   then use this to look up line information.  This will allow us to
5857
   give file and line results for data symbols.  We exclude code
5858
   symbols here, if we look up a function symbol and then look up the
5859
   line information we'll actually return the line number for the
5860
   opening '{' rather than the function definition line.  This is
5861
   because looking up by symbol uses the line table, in which the
5862
   first line for a function is usually the opening '{', while
5863
   looking up the function by section + offset uses the
5864
   DW_AT_decl_line from the function DW_TAG_subprogram for the line,
5865
   which will be the line of the function name.  */
5866
22.1k
      if (symbols != NULL && (section->flags & SEC_CODE) == 0)
5867
6.99k
  {
5868
6.99k
    asymbol **tmp;
5869
5870
272k
    for (tmp = symbols; (*tmp) != NULL; ++tmp)
5871
265k
      if ((*tmp)->the_bfd == abfd
5872
265k
    && (*tmp)->section == section
5873
9.38k
    && (*tmp)->value == offset
5874
2.97k
    && ((*tmp)->flags & BSF_SECTION_SYM) == 0)
5875
2.08k
        {
5876
2.08k
    symbol = *tmp;
5877
2.08k
    do_line = true;
5878
    /* For local symbols, keep going in the hope we find a
5879
       global.  */
5880
2.08k
    if ((symbol->flags & BSF_GLOBAL) != 0)
5881
403
      break;
5882
2.08k
        }
5883
6.99k
  }
5884
22.1k
    }
5885
5886
26.0k
  if (section->output_section)
5887
0
    addr += section->output_section->vma + section->output_offset;
5888
26.0k
  else
5889
26.0k
    addr += section->vma;
5890
5891
  /* A null info_ptr indicates that there is no dwarf2 info
5892
     (or that an error occured while setting up the stash).  */
5893
26.0k
  if (! stash->f.info_ptr)
5894
0
    return false;
5895
5896
26.0k
  stash->inliner_chain = NULL;
5897
5898
  /* Check the previously read comp. units first.  */
5899
26.0k
  if (do_line)
5900
5.83k
    {
5901
      /* The info hash tables use quite a bit of memory.  We may not want to
5902
   always use them.  We use some heuristics to decide if and when to
5903
   turn it on.  */
5904
5.83k
      if (stash->info_hash_status == STASH_INFO_HASH_OFF)
5905
5.83k
  stash_maybe_enable_info_hash_tables (abfd, stash);
5906
5907
      /* Keep info hash table up to date if they are available.  Note that we
5908
   may disable the hash tables if there is any error duing update.  */
5909
5.83k
      if (stash->info_hash_status == STASH_INFO_HASH_ON)
5910
0
  stash_maybe_update_info_hash_tables (stash);
5911
5912
5.83k
      if (stash->info_hash_status == STASH_INFO_HASH_ON)
5913
0
  {
5914
0
    found = stash_find_line_fast (stash, symbol, addr,
5915
0
          filename_ptr, linenumber_ptr);
5916
0
    if (found)
5917
0
      goto done;
5918
0
  }
5919
5920
      /* Check the previously read comp. units first.  */
5921
10.7k
      for (each = stash->f.all_comp_units; each; each = each->next_unit)
5922
4.88k
  if ((symbol->flags & BSF_FUNCTION) == 0
5923
1.88k
      || comp_unit_may_contain_address (each, addr))
5924
3.56k
    {
5925
3.56k
      found = comp_unit_find_line (each, symbol, addr, filename_ptr,
5926
3.56k
           linenumber_ptr);
5927
3.56k
      if (found)
5928
0
        goto done;
5929
3.56k
    }
5930
5.83k
    }
5931
20.2k
  else
5932
20.2k
    {
5933
20.2k
      struct trie_node *trie = stash->f.trie_root;
5934
20.2k
      unsigned int bits = VMA_BITS - 8;
5935
20.2k
      struct comp_unit **prev_each;
5936
5937
      /* Traverse interior nodes until we get to a leaf.  */
5938
20.3k
      while (trie && trie->num_room_in_leaf == 0)
5939
111
  {
5940
111
    int ch = (addr >> bits) & 0xff;
5941
111
    trie = ((struct trie_interior *) trie)->children[ch];
5942
111
    bits -= 8;
5943
111
  }
5944
5945
20.2k
      if (trie)
5946
20.2k
  {
5947
20.2k
    const struct trie_leaf *leaf = (struct trie_leaf *) trie;
5948
20.2k
    unsigned int i;
5949
5950
47.5k
    for (i = 0; i < leaf->num_stored_in_leaf; ++i)
5951
27.3k
      leaf->ranges[i].unit->mark = false;
5952
5953
39.2k
    for (i = 0; i < leaf->num_stored_in_leaf; ++i)
5954
22.1k
      {
5955
22.1k
        struct comp_unit *unit = leaf->ranges[i].unit;
5956
22.1k
        if (unit->mark
5957
18.9k
      || addr < leaf->ranges[i].low_pc
5958
12.9k
      || addr >= leaf->ranges[i].high_pc)
5959
15.7k
          continue;
5960
6.41k
        unit->mark = true;
5961
5962
6.41k
        found = comp_unit_find_nearest_line (unit, addr,
5963
6.41k
               filename_ptr,
5964
6.41k
               &function,
5965
6.41k
               linenumber_ptr,
5966
6.41k
               discriminator_ptr);
5967
6.41k
        if (found)
5968
3.18k
    goto done;
5969
6.41k
     }
5970
20.2k
  }
5971
5972
      /* Also scan through all compilation units without any ranges,
5973
         taking them out of the list if they have acquired any since
5974
   last time.  */
5975
17.0k
      prev_each = &stash->f.all_comp_units_without_ranges;
5976
19.4k
      for (each = *prev_each; each; each = each->next_unit_without_ranges)
5977
2.48k
        {
5978
2.48k
    if (each->arange.high != 0)
5979
60
      {
5980
60
        *prev_each = each->next_unit_without_ranges;
5981
60
        continue;
5982
60
      }
5983
5984
2.42k
    found = comp_unit_find_nearest_line (each, addr,
5985
2.42k
                 filename_ptr,
5986
2.42k
                 &function,
5987
2.42k
                 linenumber_ptr,
5988
2.42k
                 discriminator_ptr);
5989
2.42k
    if (found)
5990
109
      goto done;
5991
2.31k
    prev_each = &each->next_unit_without_ranges;
5992
2.31k
  }
5993
17.0k
    }
5994
5995
  /* Read each remaining comp. units checking each as they are read.  */
5996
23.9k
  while ((each = stash_comp_unit (stash, &stash->f)) != NULL)
5997
1.36k
    {
5998
      /* DW_AT_low_pc and DW_AT_high_pc are optional for
5999
   compilation units.  If we don't have them (i.e.,
6000
   unit->high == 0), we need to consult the line info table
6001
   to see if a compilation unit contains the given
6002
   address.  */
6003
1.36k
      if (do_line)
6004
131
  found = (((symbol->flags & BSF_FUNCTION) == 0
6005
49
      || comp_unit_may_contain_address (each, addr))
6006
131
     && comp_unit_find_line (each, symbol, addr,
6007
131
           filename_ptr, linenumber_ptr));
6008
1.23k
      else
6009
1.23k
  found = (comp_unit_may_contain_address (each, addr)
6010
1.23k
     && comp_unit_find_nearest_line (each, addr,
6011
1.23k
             filename_ptr,
6012
1.23k
             &function,
6013
1.23k
             linenumber_ptr,
6014
1.23k
             discriminator_ptr));
6015
6016
1.36k
      if (found)
6017
229
  break;
6018
1.36k
    }
6019
6020
26.0k
 done:
6021
26.0k
  if (functionname_ptr && function && function->is_linkage)
6022
2.80k
    {
6023
2.80k
      *functionname_ptr = function->name;
6024
2.80k
      if (!found)
6025
0
        found = 2;
6026
2.80k
    }
6027
23.2k
  else if (functionname_ptr
6028
19.3k
     && (!*functionname_ptr
6029
0
         || (function && !function->is_linkage)))
6030
19.3k
    {
6031
19.3k
      asymbol *fun;
6032
19.3k
      asymbol **syms = symbols;
6033
19.3k
      asection *sec = section;
6034
6035
19.3k
      _bfd_dwarf2_stash_syms (stash, abfd, &sec, &syms);
6036
19.3k
      fun = _bfd_elf_find_function (abfd, syms, sec, offset,
6037
19.3k
            *filename_ptr ? NULL : filename_ptr,
6038
19.3k
            functionname_ptr);
6039
6040
19.3k
      if (!found && fun != NULL)
6041
6.22k
  found = 2;
6042
6043
19.3k
      if (function && !function->is_linkage)
6044
140
  {
6045
140
    bfd_vma sec_vma;
6046
6047
140
    sec_vma = section->vma;
6048
140
    if (section->output_section != NULL)
6049
0
      sec_vma = section->output_section->vma + section->output_offset;
6050
140
    if (fun == NULL)
6051
58
      *functionname_ptr = function->name;
6052
82
    else if (fun->value + sec_vma == function->arange.low)
6053
34
      function->name = *functionname_ptr;
6054
    /* Even if we didn't find a linkage name, say that we have
6055
       to stop a repeated search of symbols.  */
6056
140
    function->is_linkage = true;
6057
140
  }
6058
19.3k
    }
6059
6060
26.0k
  unset_sections (stash);
6061
6062
26.0k
  return found;
6063
22.7k
}
6064
6065
bool
6066
_bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
6067
             const char **filename_ptr,
6068
             const char **functionname_ptr,
6069
             unsigned int *linenumber_ptr,
6070
             void **pinfo)
6071
0
{
6072
0
  struct dwarf2_debug *stash;
6073
6074
0
  stash = (struct dwarf2_debug *) *pinfo;
6075
0
  if (stash)
6076
0
    {
6077
0
      struct funcinfo *func = stash->inliner_chain;
6078
6079
0
      if (func && func->caller_func)
6080
0
  {
6081
0
    *filename_ptr = func->caller_file;
6082
0
    *functionname_ptr = func->caller_func->name;
6083
0
    *linenumber_ptr = func->caller_line;
6084
0
    stash->inliner_chain = func->caller_func;
6085
0
    return true;
6086
0
  }
6087
0
    }
6088
6089
0
  return false;
6090
0
}
6091
6092
void
6093
_bfd_dwarf2_cleanup_debug_info (bfd *abfd, void **pinfo)
6094
154k
{
6095
154k
  struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
6096
154k
  struct comp_unit *each;
6097
154k
  struct dwarf2_debug_file *file;
6098
6099
154k
  if (abfd == NULL || stash == NULL)
6100
146k
    return;
6101
6102
7.58k
  if (stash->varinfo_hash_table)
6103
0
    bfd_hash_table_free (&stash->varinfo_hash_table->base);
6104
7.58k
  if (stash->funcinfo_hash_table)
6105
0
    bfd_hash_table_free (&stash->funcinfo_hash_table->base);
6106
6107
7.58k
  file = &stash->f;
6108
15.1k
  while (1)
6109
15.1k
    {
6110
16.5k
      for (each = file->all_comp_units; each; each = each->next_unit)
6111
1.36k
  {
6112
1.36k
    struct funcinfo *function_table = each->function_table;
6113
1.36k
    struct varinfo *variable_table = each->variable_table;
6114
6115
1.36k
    if (each->line_table && each->line_table != file->line_table)
6116
18
      {
6117
18
        free (each->line_table->files);
6118
18
        free (each->line_table->dirs);
6119
18
      }
6120
6121
1.36k
    free (each->lookup_funcinfo_table);
6122
1.36k
    each->lookup_funcinfo_table = NULL;
6123
6124
4.83k
    while (function_table)
6125
3.46k
      {
6126
3.46k
        free (function_table->file);
6127
3.46k
        function_table->file = NULL;
6128
3.46k
        free (function_table->caller_file);
6129
3.46k
        function_table->caller_file = NULL;
6130
3.46k
        function_table = function_table->prev_func;
6131
3.46k
      }
6132
6133
1.65k
    while (variable_table)
6134
284
      {
6135
284
        free (variable_table->file);
6136
284
        variable_table->file = NULL;
6137
284
        variable_table = variable_table->prev_var;
6138
284
      }
6139
1.36k
  }
6140
6141
15.1k
      if (file->line_table)
6142
811
  {
6143
811
    free (file->line_table->files);
6144
811
    free (file->line_table->dirs);
6145
811
  }
6146
15.1k
      htab_delete (file->abbrev_offsets);
6147
15.1k
      if (file->comp_unit_tree != NULL)
6148
1.27k
  splay_tree_delete (file->comp_unit_tree);
6149
6150
15.1k
      free (file->dwarf_line_str_buffer);
6151
15.1k
      free (file->dwarf_str_buffer);
6152
15.1k
      free (file->dwarf_ranges_buffer);
6153
15.1k
      free (file->dwarf_rnglists_buffer);
6154
15.1k
      free (file->dwarf_line_buffer);
6155
15.1k
      free (file->dwarf_abbrev_buffer);
6156
15.1k
      free (file->dwarf_info_buffer);
6157
15.1k
      free (file->dwarf_addr_buffer);
6158
15.1k
      free (file->dwarf_str_offsets_buffer);
6159
15.1k
      if (file == &stash->alt)
6160
7.58k
  break;
6161
7.58k
      file = &stash->alt;
6162
7.58k
    }
6163
7.58k
  free (stash->sec_vma);
6164
7.58k
  free (stash->adjusted_sections);
6165
7.58k
  if (stash->close_on_cleanup)
6166
0
    bfd_close (stash->f.bfd_ptr);
6167
7.58k
  if (stash->alt.bfd_ptr)
6168
0
    bfd_close (stash->alt.bfd_ptr);
6169
7.58k
}
6170
6171
typedef struct elf_find_function_cache
6172
{
6173
  asection *     last_section;
6174
  asymbol *      func;
6175
  const char *   filename;
6176
  bfd_size_type  code_size;
6177
  bfd_vma        code_off;
6178
6179
} elf_find_function_cache;
6180
6181
6182
/* Returns TRUE if symbol SYM with address CODE_OFF and size CODE_SIZE
6183
   is a better fit to match OFFSET than whatever is currenly stored in
6184
   CACHE.  */
6185
6186
static inline bool
6187
better_fit (elf_find_function_cache *  cache,
6188
      asymbol *                  sym,
6189
      bfd_vma                    code_off,
6190
      bfd_size_type              code_size,
6191
      bfd_vma                    offset)
6192
17.2k
{
6193
  /* If the symbol is beyond the desired offset, ignore it.  */
6194
17.2k
  if (code_off > offset)
6195
4.37k
    return false;
6196
6197
  /* If the symbol is further away from the desired
6198
     offset than our current best, then ignore it.  */
6199
12.8k
  if (code_off < cache->code_off)
6200
1.24k
    return false;
6201
6202
  /* On the other hand, if it is closer, then use it.  */
6203
11.5k
  if (code_off > cache->code_off)
6204
2.26k
    return true;
6205
6206
  /* assert (code_off == cache->code_off);  */
6207
6208
  /* If our current best fit does not actually reach the desired
6209
     offset...  */
6210
9.33k
  if (cache->code_off + cache->code_size <= offset)
6211
    /* ... then return whichever candidate covers
6212
       more area and hence gets closer to OFFSET.  */
6213
7.59k
    return code_size > cache->code_size;
6214
6215
  /* The current cache'd symbol covers OFFSET.  */
6216
6217
  /* If the new symbol does not cover the desired offset then skip it.  */  
6218
1.73k
  if (code_off + code_size <= offset)
6219
429
    return false;
6220
6221
  /* Both symbols cover OFFSET.  */
6222
6223
  /* Prefer functions over non-functions.  */
6224
1.30k
  flagword cache_flags = cache->func->flags;
6225
1.30k
  flagword sym_flags   = sym->flags;
6226
6227
1.30k
  if ((cache_flags & BSF_FUNCTION) && ((sym_flags & BSF_FUNCTION) == 0))
6228
149
    return false;
6229
1.15k
  if ((sym_flags & BSF_FUNCTION) && ((cache_flags & BSF_FUNCTION) == 0))
6230
102
    return true;
6231
6232
  /* FIXME: Should we choose LOCAL over GLOBAL ?  */
6233
6234
  /* Prefer typed symbols over notyped.  */
6235
1.05k
  int cache_type = ELF_ST_TYPE (((elf_symbol_type *) cache->func)->internal_elf_sym.st_info);
6236
1.05k
  int sym_type   = ELF_ST_TYPE (((elf_symbol_type *) sym)->internal_elf_sym.st_info);
6237
6238
1.05k
  if (cache_type == STT_NOTYPE && sym_type != STT_NOTYPE)
6239
44
    return true;
6240
1.01k
  if (cache_type != STT_NOTYPE && sym_type == STT_NOTYPE)
6241
250
    return false;
6242
6243
  /* Otherwise choose whichever symbol covers a smaller area.  */
6244
760
  return code_size < cache->code_size;
6245
1.01k
}
6246
6247
/* Find the function to a particular section and offset,
6248
   for error reporting.  */
6249
6250
asymbol *
6251
_bfd_elf_find_function (bfd *abfd,
6252
      asymbol **symbols,
6253
      asection *section,
6254
      bfd_vma offset,
6255
      const char **filename_ptr,
6256
      const char **functionname_ptr)
6257
36.6k
{
6258
36.6k
  if (symbols == NULL)
6259
5.41k
    return NULL;
6260
6261
31.2k
  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6262
0
    return NULL;
6263
6264
31.2k
  elf_find_function_cache * cache = elf_tdata (abfd)->elf_find_function_cache;
6265
6266
31.2k
  if (cache == NULL)
6267
3.46k
    {
6268
3.46k
      cache = bfd_zalloc (abfd, sizeof (*cache));
6269
3.46k
      elf_tdata (abfd)->elf_find_function_cache = cache;
6270
3.46k
      if (cache == NULL)
6271
0
  return NULL;
6272
3.46k
    }
6273
6274
31.2k
  if (cache->last_section != section
6275
14.6k
      || cache->func == NULL
6276
4.05k
      || offset < cache->func->value
6277
3.92k
      || offset >= cache->func->value + cache->code_size)
6278
28.3k
    {
6279
28.3k
      asymbol *file;
6280
28.3k
      asymbol **p;
6281
      /* ??? Given multiple file symbols, it is impossible to reliably
6282
   choose the right file name for global symbols.  File symbols are
6283
   local symbols, and thus all file symbols must sort before any
6284
   global symbols.  The ELF spec may be interpreted to say that a
6285
   file symbol must sort before other local symbols, but currently
6286
   ld -r doesn't do this.  So, for ld -r output, it is possible to
6287
   make a better choice of file name for local symbols by ignoring
6288
   file symbols appearing after a given local symbol.  */
6289
28.3k
      enum { nothing_seen, symbol_seen, file_after_symbol_seen } state;
6290
28.3k
      elf_backend_data *bed = get_elf_backend_data (abfd);
6291
6292
28.3k
      file = NULL;
6293
28.3k
      state = nothing_seen;
6294
28.3k
      cache->filename = NULL;
6295
28.3k
      cache->func = NULL;
6296
28.3k
      cache->code_size = 0;
6297
28.3k
      cache->code_off = 0;
6298
28.3k
      cache->last_section = section;
6299
6300
1.07M
      for (p = symbols; *p != NULL; p++)
6301
1.04M
  {
6302
1.04M
    asymbol *sym = *p;
6303
1.04M
    bfd_vma code_off;
6304
1.04M
    bfd_size_type size;
6305
6306
1.04M
    if ((sym->flags & BSF_FILE) != 0)
6307
46.9k
      {
6308
46.9k
        file = sym;
6309
46.9k
        if (state == symbol_seen)
6310
4.41k
    state = file_after_symbol_seen;
6311
46.9k
        continue;
6312
46.9k
      }
6313
6314
1.00M
    if (state == nothing_seen)
6315
28.3k
      state = symbol_seen;
6316
6317
1.00M
    size = bed->maybe_function_sym (sym, section, &code_off);
6318
6319
1.00M
    if (size == 0)
6320
983k
      continue;
6321
6322
17.2k
    if (better_fit (cache, sym, code_off, size, offset))
6323
9.11k
      {
6324
9.11k
        cache->func = sym;
6325
9.11k
        cache->code_size = size;
6326
9.11k
        cache->code_off = code_off;
6327
9.11k
        cache->filename = NULL;
6328
6329
9.11k
        if (file != NULL
6330
6.98k
      && ((sym->flags & BSF_LOCAL) != 0
6331
2.86k
          || state != file_after_symbol_seen))
6332
6.50k
    cache->filename = bfd_asymbol_name (file);
6333
9.11k
      }
6334
    /* Otherwise, if the symbol is beyond the desired offset but it
6335
       lies within the bounds of the current best match then reduce
6336
       the size of the current best match so that future searches
6337
       will not not used the cached symbol by mistake.  */
6338
8.09k
    else if (code_off > offset 
6339
4.37k
       && code_off > cache->code_off
6340
4.37k
       && code_off < cache->code_off + cache->code_size)
6341
167
      {
6342
167
        cache->code_size = code_off - cache->code_off;
6343
167
      }
6344
17.2k
  }
6345
28.3k
    }
6346
6347
31.2k
  if (cache->func == NULL)
6348
21.0k
    return NULL;
6349
6350
10.1k
  if (filename_ptr)
6351
9.66k
    *filename_ptr = cache->filename;
6352
10.1k
  if (functionname_ptr)
6353
10.1k
    *functionname_ptr = bfd_asymbol_name (cache->func);
6354
6355
10.1k
  return cache->func;
6356
31.2k
}