Coverage Report

Created: 2023-08-28 06:31

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