Coverage Report

Created: 2023-08-28 06:25

/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
116k
#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
58.4k
{
151
58.4k
  struct trie_leaf *leaf;
152
58.4k
  size_t amt = sizeof (*leaf) + TRIE_LEAF_SIZE * sizeof (leaf->ranges[0]);
153
58.4k
  leaf = bfd_zalloc (abfd, amt);
154
58.4k
  if (leaf == NULL)
155
0
    return NULL;
156
58.4k
  leaf->head.num_room_in_leaf = TRIE_LEAF_SIZE;
157
58.4k
  return &leaf->head;
158
58.4k
}
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.1k
{
171
25.1k
  return (r1->start <= r2->start && r2->start < r1->end)
172
25.1k
    || (r1->start <= (r2->end - 1) && (r2->end - 1) < r1->end);
173
25.1k
}
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.5k
{
180
12.5k
  struct addr_range *r1 = (struct addr_range *) xa;
181
12.5k
  struct addr_range *r2 = (struct addr_range *) xb;
182
183
12.5k
  if (addr_range_intersects (r1, r2) || addr_range_intersects (r2, r1))
184
0
    return 0;
185
12.5k
  else if (r1->end <= r2->start)
186
6.28k
    return -1;
187
6.28k
  else
188
6.28k
    return 1;
189
12.5k
}
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.53k
{
196
3.53k
  free ((struct addr_range *)key);
197
3.53k
}
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
998k
#define ABBREV_HASH_SIZE 121
546
#endif
547
#ifndef ATTR_ALLOC_CHUNK
548
417k
#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
230k
{
688
230k
  const char *section_name = sec->uncompressed_name;
689
230k
  bfd_byte *contents = *section_buffer;
690
691
  /* The section may have already been read.  */
692
230k
  if (contents == NULL)
693
2.89k
    {
694
2.89k
      bfd_size_type amt;
695
2.89k
      asection *msec;
696
697
2.89k
      msec = bfd_get_section_by_name (abfd, section_name);
698
2.89k
      if (msec == NULL)
699
528
  {
700
528
    section_name = sec->compressed_name;
701
528
          msec = bfd_get_section_by_name (abfd, section_name);
702
528
  }
703
2.89k
      if (msec == NULL)
704
527
  {
705
527
    _bfd_error_handler (_("DWARF error: can't find %s section."),
706
527
            sec->uncompressed_name);
707
527
    bfd_set_error (bfd_error_bad_value);
708
527
    return false;
709
527
  }
710
711
2.37k
      if ((msec->flags & SEC_HAS_CONTENTS) == 0)
712
6
  {
713
6
    _bfd_error_handler (_("DWARF error: section %s has no contents"),
714
6
            section_name);
715
6
    bfd_set_error (bfd_error_no_contents);
716
6
    return false;
717
6
  }
718
719
2.36k
      if (_bfd_section_size_insane (abfd, msec))
720
398
  {
721
    /* PR 26946 */
722
398
    _bfd_error_handler (_("DWARF error: section %s is too big"),
723
398
            section_name);
724
398
    return false;
725
398
  }
726
1.96k
      amt = bfd_get_section_limit_octets (abfd, msec);
727
1.96k
      *section_size = amt;
728
      /* Paranoia - alloc one extra so that we can make sure a string
729
   section is NUL terminated.  */
730
1.96k
      amt += 1;
731
1.96k
      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
1.96k
      contents = (bfd_byte *) bfd_malloc (amt);
738
1.96k
      if (contents == NULL)
739
0
  return false;
740
1.96k
      if (syms
741
1.96k
    ? !bfd_simple_get_relocated_section_contents (abfd, msec, contents,
742
1.96k
              syms)
743
1.96k
    : !bfd_get_section_contents (abfd, msec, contents, 0, *section_size))
744
284
  {
745
284
    free (contents);
746
284
    return false;
747
284
  }
748
1.68k
      contents[*section_size] = 0;
749
1.68k
      *section_buffer = contents;
750
1.68k
    }
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
229k
  if (offset != 0 && offset >= *section_size)
755
1.10k
    {
756
      /* xgettext: c-format */
757
1.10k
      _bfd_error_handler (_("DWARF error: offset (%" PRIu64 ")"
758
1.10k
          " greater than or equal to %s size (%" PRIu64 ")"),
759
1.10k
        (uint64_t) offset, section_name,
760
1.10k
        (uint64_t) *section_size);
761
1.10k
      bfd_set_error (bfd_error_bad_value);
762
1.10k
      return false;
763
1.10k
    }
764
765
228k
  return true;
766
229k
}
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
2.77M
{
773
2.77M
  bfd_byte *buf = *ptr;
774
2.77M
  if (end - buf < n)
775
165
    {
776
165
      *ptr = end;
777
165
      return 0;
778
165
    }
779
2.77M
  *ptr = buf + n;
780
2.77M
  return bfd_get (n * 8, abfd, buf);
781
2.77M
}
782
783
static unsigned int
784
read_1_byte (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
785
1.96M
{
786
1.96M
  return read_n_bytes (abfd, ptr, end, 1);
787
1.96M
}
788
789
static int
790
read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte **ptr, bfd_byte *end)
791
2.42k
{
792
2.42k
  bfd_byte *buf = *ptr;
793
2.42k
  if (end - buf < 1)
794
0
    {
795
0
      *ptr = end;
796
0
      return 0;
797
0
    }
798
2.42k
  *ptr = buf + 1;
799
2.42k
  return bfd_get_signed_8 (abfd, buf);
800
2.42k
}
801
802
static unsigned int
803
read_2_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
804
115k
{
805
115k
  return read_n_bytes (abfd, ptr, end, 2);
806
115k
}
807
808
static unsigned int
809
read_3_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
810
86
{
811
86
  unsigned int val = read_1_byte (abfd, ptr, end);
812
86
  val <<= 8;
813
86
  val |= read_1_byte (abfd, ptr, end);
814
86
  val <<= 8;
815
86
  val |= read_1_byte (abfd, ptr, end);
816
86
  if (bfd_little_endian (abfd))
817
84
    val = (((val >> 16) & 0xff)
818
84
     | (val & 0xff00)
819
84
     | ((val & 0xff) << 16));
820
86
  return val;
821
86
}
822
823
static unsigned int
824
read_4_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
825
689k
{
826
689k
  return read_n_bytes (abfd, ptr, end, 4);
827
689k
}
828
829
static uint64_t
830
read_8_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
831
149
{
832
149
  return read_n_bytes (abfd, ptr, end, 8);
833
149
}
834
835
static struct dwarf_block *
836
read_blk (bfd *abfd, bfd_byte **ptr, bfd_byte *end, size_t size)
837
70.0k
{
838
70.0k
  bfd_byte *buf = *ptr;
839
70.0k
  struct dwarf_block *block;
840
841
70.0k
  block = (struct dwarf_block *) bfd_alloc (abfd, sizeof (*block));
842
70.0k
  if (block == NULL)
843
0
    return NULL;
844
845
70.0k
  if (size > (size_t) (end - buf))
846
12
    {
847
12
      *ptr = end;
848
12
      block->data = NULL;
849
12
      block->size = 0;
850
12
    }
851
69.9k
  else
852
69.9k
    {
853
69.9k
      *ptr = buf + size;
854
69.9k
      block->data = buf;
855
69.9k
      block->size = size;
856
69.9k
    }
857
70.0k
  return block;
858
70.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
74.2k
{
869
74.2k
  bfd_byte *buf = *ptr;
870
74.2k
  bfd_byte *str = buf;
871
872
445k
  while (buf < buf_end)
873
445k
    if (*buf++ == 0)
874
74.1k
      {
875
74.1k
  if (str == buf - 1)
876
4.79k
    break;
877
69.3k
  *ptr = buf;
878
69.3k
  return (char *) str;
879
74.1k
      }
880
881
4.83k
  *ptr = buf;
882
4.83k
  return NULL;
883
74.2k
}
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
222k
{
898
222k
  uint64_t offset;
899
222k
  struct dwarf2_debug *stash = unit->stash;
900
222k
  struct dwarf2_debug_file *file = unit->file;
901
222k
  char *str;
902
903
222k
  if (unit->offset_size > (size_t) (buf_end - *ptr))
904
2
    {
905
2
      *ptr = buf_end;
906
2
      return NULL;
907
2
    }
908
909
222k
  if (unit->offset_size == 4)
910
222k
    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
222k
  if (! read_section (unit->abfd, &stash->debug_sections[debug_str],
915
222k
          file->syms, offset,
916
222k
          &file->dwarf_str_buffer, &file->dwarf_str_size))
917
1.86k
    return NULL;
918
919
220k
  str = (char *) file->dwarf_str_buffer + offset;
920
220k
  if (*str == '\0')
921
29.6k
    return NULL;
922
190k
  return str;
923
220k
}
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
30
{
932
30
  uint64_t offset;
933
30
  struct dwarf2_debug *stash = unit->stash;
934
30
  struct dwarf2_debug_file *file = unit->file;
935
30
  char *str;
936
937
30
  if (unit->offset_size > (size_t) (buf_end - *ptr))
938
0
    {
939
0
      *ptr = buf_end;
940
0
      return NULL;
941
0
    }
942
943
30
  if (unit->offset_size == 4)
944
30
    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
30
  if (! read_section (unit->abfd, &stash->debug_sections[debug_line_str],
949
30
          file->syms, offset,
950
30
          &file->dwarf_line_str_buffer,
951
30
          &file->dwarf_line_str_size))
952
30
    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
729k
{
1064
729k
  bfd_byte *buf = *ptr;
1065
729k
  int signed_vma = 0;
1066
1067
729k
  if (bfd_get_flavour (unit->abfd) == bfd_target_elf_flavour)
1068
729k
    signed_vma = get_elf_backend_data (unit->abfd)->sign_extend_vma;
1069
1070
729k
  if (unit->addr_size > (size_t) (buf_end - buf))
1071
2
    {
1072
2
      *ptr = buf_end;
1073
2
      return 0;
1074
2
    }
1075
1076
729k
  *ptr = buf + unit->addr_size;
1077
729k
  if (signed_vma)
1078
65
    {
1079
65
      switch (unit->addr_size)
1080
65
  {
1081
63
  case 8:
1082
63
    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
65
  }
1090
65
    }
1091
729k
  else
1092
729k
    {
1093
729k
      switch (unit->addr_size)
1094
729k
  {
1095
62.6k
  case 8:
1096
62.6k
    return bfd_get_64 (unit->abfd, buf);
1097
666k
  case 4:
1098
666k
    return bfd_get_32 (unit->abfd, buf);
1099
3
  case 2:
1100
3
    return bfd_get_16 (unit->abfd, buf);
1101
0
  default:
1102
0
    abort ();
1103
729k
  }
1104
729k
    }
1105
729k
}
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
493k
{
1112
493k
  unsigned int hash_number;
1113
493k
  struct abbrev_info *abbrev;
1114
1115
493k
  hash_number = number % ABBREV_HASH_SIZE;
1116
493k
  abbrev = abbrevs[hash_number];
1117
1118
493k
  while (abbrev)
1119
418k
    {
1120
418k
      if (abbrev->number == number)
1121
418k
  return abbrev;
1122
36
      else
1123
36
  abbrev = abbrev->next;
1124
418k
    }
1125
1126
75.0k
  return NULL;
1127
493k
}
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.45k
{
1142
7.45k
  const struct abbrev_offset_entry *ent = p;
1143
7.45k
  return htab_hash_pointer ((void *) ent->offset);
1144
7.45k
}
1145
1146
static int
1147
eq_abbrev (const void *pa, const void *pb)
1148
2.77k
{
1149
2.77k
  const struct abbrev_offset_entry *a = pa;
1150
2.77k
  const struct abbrev_offset_entry *b = pb;
1151
2.77k
  return a->offset == b->offset;
1152
2.77k
}
1153
1154
static void
1155
del_abbrev (void *p)
1156
3.49k
{
1157
3.49k
  struct abbrev_offset_entry *ent = p;
1158
3.49k
  struct abbrev_info **abbrevs = ent->abbrevs;
1159
3.49k
  size_t i;
1160
1161
426k
  for (i = 0; i < ABBREV_HASH_SIZE; i++)
1162
422k
    {
1163
422k
      struct abbrev_info *abbrev = abbrevs[i];
1164
1165
497k
      while (abbrev)
1166
75.0k
  {
1167
75.0k
    free (abbrev->attrs);
1168
75.0k
    abbrev = abbrev->next;
1169
75.0k
  }
1170
422k
    }
1171
3.49k
  free (ent);
1172
3.49k
}
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.56k
{
1183
3.56k
  struct abbrev_info **abbrevs;
1184
3.56k
  bfd_byte *abbrev_ptr;
1185
3.56k
  bfd_byte *abbrev_end;
1186
3.56k
  struct abbrev_info *cur_abbrev;
1187
3.56k
  unsigned int abbrev_number, abbrev_name;
1188
3.56k
  unsigned int abbrev_form, hash_number;
1189
3.56k
  size_t amt;
1190
3.56k
  void **slot;
1191
3.56k
  struct abbrev_offset_entry ent = { offset, NULL };
1192
1193
3.56k
  if (ent.offset != offset)
1194
0
    return NULL;
1195
1196
3.56k
  slot = htab_find_slot (file->abbrev_offsets, &ent, INSERT);
1197
3.56k
  if (slot == NULL)
1198
0
    return NULL;
1199
3.56k
  if (*slot != NULL)
1200
71
    return ((struct abbrev_offset_entry *) (*slot))->abbrevs;
1201
1202
3.49k
  if (! read_section (abfd, &stash->debug_sections[debug_abbrev],
1203
3.49k
          file->syms, offset,
1204
3.49k
          &file->dwarf_abbrev_buffer,
1205
3.49k
          &file->dwarf_abbrev_size))
1206
3
    return NULL;
1207
1208
3.49k
  amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
1209
3.49k
  abbrevs = (struct abbrev_info **) bfd_zalloc (abfd, amt);
1210
3.49k
  if (abbrevs == NULL)
1211
0
    return NULL;
1212
1213
3.49k
  abbrev_ptr = file->dwarf_abbrev_buffer + offset;
1214
3.49k
  abbrev_end = file->dwarf_abbrev_buffer + file->dwarf_abbrev_size;
1215
3.49k
  abbrev_number = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1216
3.49k
           false, abbrev_end);
1217
1218
  /* Loop until we reach an abbrev number of 0.  */
1219
78.4k
  while (abbrev_number)
1220
75.0k
    {
1221
75.0k
      amt = sizeof (struct abbrev_info);
1222
75.0k
      cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt);
1223
75.0k
      if (cur_abbrev == NULL)
1224
0
  goto fail;
1225
1226
      /* Read in abbrev header.  */
1227
75.0k
      cur_abbrev->number = abbrev_number;
1228
75.0k
      cur_abbrev->tag = (enum dwarf_tag)
1229
75.0k
  _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1230
75.0k
             false, abbrev_end);
1231
75.0k
      cur_abbrev->has_children = read_1_byte (abfd, &abbrev_ptr, abbrev_end);
1232
1233
      /* Now read in declarations.  */
1234
75.0k
      for (;;)
1235
381k
  {
1236
    /* Initialize it just to avoid a GCC false warning.  */
1237
381k
    bfd_vma implicit_const = -1;
1238
1239
381k
    abbrev_name = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1240
381k
                 false, abbrev_end);
1241
381k
    abbrev_form = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1242
381k
                 false, abbrev_end);
1243
381k
    if (abbrev_form == DW_FORM_implicit_const)
1244
12
      implicit_const = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1245
12
                true, abbrev_end);
1246
381k
    if (abbrev_name == 0)
1247
75.0k
      break;
1248
1249
306k
    if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
1250
110k
      {
1251
110k
        struct attr_abbrev *tmp;
1252
1253
110k
        amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
1254
110k
        amt *= sizeof (struct attr_abbrev);
1255
110k
        tmp = (struct attr_abbrev *) bfd_realloc (cur_abbrev->attrs, amt);
1256
110k
        if (tmp == NULL)
1257
0
    goto fail;
1258
110k
        cur_abbrev->attrs = tmp;
1259
110k
      }
1260
1261
306k
    cur_abbrev->attrs[cur_abbrev->num_attrs].name
1262
306k
      = (enum dwarf_attribute) abbrev_name;
1263
306k
    cur_abbrev->attrs[cur_abbrev->num_attrs].form
1264
306k
      = (enum dwarf_form) abbrev_form;
1265
306k
    cur_abbrev->attrs[cur_abbrev->num_attrs].implicit_const
1266
306k
      = implicit_const;
1267
306k
    ++cur_abbrev->num_attrs;
1268
306k
  }
1269
1270
75.0k
      hash_number = abbrev_number % ABBREV_HASH_SIZE;
1271
75.0k
      cur_abbrev->next = abbrevs[hash_number];
1272
75.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
75.0k
      if ((size_t) (abbrev_ptr - file->dwarf_abbrev_buffer)
1282
75.0k
    >= file->dwarf_abbrev_size)
1283
18
  break;
1284
75.0k
      abbrev_number = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1285
75.0k
               false, abbrev_end);
1286
75.0k
      if (lookup_abbrev (abbrev_number, abbrevs) != NULL)
1287
110
  break;
1288
75.0k
    }
1289
1290
3.49k
  *slot = bfd_malloc (sizeof ent);
1291
3.49k
  if (!*slot)
1292
0
    goto fail;
1293
3.49k
  ent.abbrevs = abbrevs;
1294
3.49k
  memcpy (*slot, &ent, sizeof ent);
1295
3.49k
  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.49k
}
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
79.9k
{
1322
79.9k
  switch (attr->form)
1323
79.9k
    {
1324
12.2k
    case DW_FORM_string:
1325
79.7k
    case DW_FORM_strp:
1326
79.7k
    case DW_FORM_strx:
1327
79.7k
    case DW_FORM_strx1:
1328
79.7k
    case DW_FORM_strx2:
1329
79.7k
    case DW_FORM_strx3:
1330
79.8k
    case DW_FORM_strx4:
1331
79.8k
    case DW_FORM_line_strp:
1332
79.8k
    case DW_FORM_GNU_strp_alt:
1333
79.8k
      return true;
1334
1335
110
    default:
1336
110
      return false;
1337
79.9k
    }
1338
79.9k
}
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
206k
{
1345
206k
  switch (attr->form)
1346
206k
    {
1347
25.8k
    case DW_FORM_addr:
1348
64.0k
    case DW_FORM_data2:
1349
73.0k
    case DW_FORM_data4:
1350
73.0k
    case DW_FORM_data8:
1351
189k
    case DW_FORM_data1:
1352
191k
    case DW_FORM_flag:
1353
191k
    case DW_FORM_sdata:
1354
191k
    case DW_FORM_udata:
1355
191k
    case DW_FORM_ref_addr:
1356
191k
    case DW_FORM_ref1:
1357
191k
    case DW_FORM_ref2:
1358
202k
    case DW_FORM_ref4:
1359
202k
    case DW_FORM_ref8:
1360
202k
    case DW_FORM_ref_udata:
1361
206k
    case DW_FORM_sec_offset:
1362
206k
    case DW_FORM_flag_present:
1363
206k
    case DW_FORM_ref_sig8:
1364
206k
    case DW_FORM_addrx:
1365
206k
    case DW_FORM_implicit_const:
1366
206k
    case DW_FORM_addrx1:
1367
206k
    case DW_FORM_addrx2:
1368
206k
    case DW_FORM_addrx3:
1369
206k
    case DW_FORM_addrx4:
1370
206k
    case DW_FORM_GNU_ref_alt:
1371
206k
      return true;
1372
1373
207
    default:
1374
207
      return false;
1375
206k
    }
1376
206k
}
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
24.6k
{
1383
24.6k
  return (form == DW_FORM_strx
1384
24.6k
    || form == DW_FORM_strx1
1385
24.6k
    || form == DW_FORM_strx2
1386
24.6k
    || form == DW_FORM_strx3
1387
24.6k
    || form == DW_FORM_strx4);
1388
24.6k
}
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
24.5k
{
1395
24.5k
  return (form == DW_FORM_addrx
1396
24.5k
    || form == DW_FORM_addrx1
1397
24.5k
    || form == DW_FORM_addrx2
1398
24.5k
    || form == DW_FORM_addrx3
1399
24.5k
    || form == DW_FORM_addrx4);
1400
24.5k
}
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
121
{
1407
121
  struct dwarf2_debug *stash = unit->stash;
1408
121
  struct dwarf2_debug_file *file = unit->file;
1409
121
  bfd_byte *info_ptr;
1410
121
  size_t offset;
1411
1412
121
  if (stash == NULL)
1413
0
    return 0;
1414
1415
121
  if (!read_section (unit->abfd, &stash->debug_sections[debug_addr],
1416
121
         file->syms, 0,
1417
121
         &file->dwarf_addr_buffer, &file->dwarf_addr_size))
1418
121
    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
126
{
1444
126
  struct dwarf2_debug *stash = unit->stash;
1445
126
  struct dwarf2_debug_file *file = unit->file;
1446
126
  bfd_byte *info_ptr;
1447
126
  uint64_t str_offset;
1448
126
  size_t offset;
1449
1450
126
  if (stash == NULL)
1451
0
    return NULL;
1452
1453
126
  if (!read_section (unit->abfd, &stash->debug_sections[debug_str],
1454
126
         file->syms, 0,
1455
126
         &file->dwarf_str_buffer, &file->dwarf_str_size))
1456
24
    return NULL;
1457
1458
102
  if (!read_section (unit->abfd, &stash->debug_sections[debug_str_offsets],
1459
102
         file->syms, 0,
1460
102
         &file->dwarf_str_offsets_buffer,
1461
102
         &file->dwarf_str_offsets_size))
1462
102
    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.54M
{
1499
1.54M
  bfd *abfd = unit->abfd;
1500
1.54M
  size_t amt;
1501
1502
1.54M
  if (info_ptr >= info_ptr_end && form != DW_FORM_flag_present)
1503
24
    {
1504
24
      _bfd_error_handler (_("DWARF error: info pointer extends beyond end of attributes"));
1505
24
      bfd_set_error (bfd_error_bad_value);
1506
24
      return NULL;
1507
24
    }
1508
1509
1.54M
  attr->form = (enum dwarf_form) form;
1510
1511
1.54M
  switch (form)
1512
1.54M
    {
1513
12.9k
    case DW_FORM_flag_present:
1514
12.9k
      attr->u.val = 1;
1515
12.9k
      break;
1516
34
    case DW_FORM_ref_addr:
1517
      /* DW_FORM_ref_addr is an address in DWARF2, and an offset in
1518
   DWARF3.  */
1519
34
      if (unit->version >= 3)
1520
25
  {
1521
25
    if (unit->offset_size == 4)
1522
25
      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
25
    break;
1526
25
  }
1527
      /* FALLTHROUGH */
1528
81.8k
    case DW_FORM_addr:
1529
81.8k
      attr->u.val = read_address (unit, &info_ptr, info_ptr_end);
1530
81.8k
      break;
1531
0
    case DW_FORM_GNU_ref_alt:
1532
8.25k
    case DW_FORM_sec_offset:
1533
8.25k
      if (unit->offset_size == 4)
1534
8.25k
  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
8.25k
      break;
1538
20
    case DW_FORM_block2:
1539
20
      amt = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1540
20
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1541
20
      if (attr->u.blk == NULL)
1542
0
  return NULL;
1543
20
      break;
1544
65
    case DW_FORM_block4:
1545
65
      amt = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1546
65
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1547
65
      if (attr->u.blk == NULL)
1548
0
  return NULL;
1549
65
      break;
1550
65
    case DW_FORM_ref1:
1551
40.1k
    case DW_FORM_flag:
1552
534k
    case DW_FORM_data1:
1553
534k
      attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
1554
534k
      break;
1555
43
    case DW_FORM_addrx1:
1556
43
      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
43
      if (unit->dwarf_addr_offset != 0)
1560
3
  attr->u.val = read_indexed_address (attr->u.val, unit);
1561
43
      break;
1562
108k
    case DW_FORM_data2:
1563
109k
    case DW_FORM_ref2:
1564
109k
      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1565
109k
      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
19
    case DW_FORM_addrx3:
1572
19
      attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
1573
19
      if (unit->dwarf_addr_offset != 0)
1574
12
  attr->u.val = read_indexed_address(attr->u.val, unit);
1575
19
      break;
1576
354k
    case DW_FORM_ref4:
1577
445k
    case DW_FORM_data4:
1578
445k
      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1579
445k
      break;
1580
58
    case DW_FORM_addrx4:
1581
58
      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1582
58
      if (unit->dwarf_addr_offset != 0)
1583
0
  attr->u.val = read_indexed_address (attr->u.val, unit);
1584
58
      break;
1585
79
    case DW_FORM_data8:
1586
103
    case DW_FORM_ref8:
1587
126
    case DW_FORM_ref_sig8:
1588
126
      attr->u.val = read_8_bytes (abfd, &info_ptr, info_ptr_end);
1589
126
      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
222k
    case DW_FORM_strp:
1594
222k
      attr->u.str = read_indirect_string (unit, &info_ptr, info_ptr_end);
1595
222k
      break;
1596
30
    case DW_FORM_line_strp:
1597
30
      attr->u.str = read_indirect_line_string (unit, &info_ptr, info_ptr_end);
1598
30
      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
30
    case DW_FORM_strx1:
1603
30
      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
30
      if (unit->dwarf_str_offset != 0)
1607
18
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1608
12
      else
1609
12
  attr->u.str = NULL;
1610
30
      break;
1611
9
    case DW_FORM_strx2:
1612
9
      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1613
9
      if (unit->dwarf_str_offset != 0)
1614
2
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1615
7
      else
1616
7
  attr->u.str = NULL;
1617
9
      break;
1618
67
    case DW_FORM_strx3:
1619
67
      attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
1620
67
      if (unit->dwarf_str_offset != 0)
1621
12
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1622
55
      else
1623
55
  attr->u.str = NULL;
1624
67
      break;
1625
79
    case DW_FORM_strx4:
1626
79
      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1627
79
      if (unit->dwarf_str_offset != 0)
1628
8
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1629
71
      else
1630
71
  attr->u.str = NULL;
1631
79
      break;
1632
46
    case DW_FORM_strx:
1633
46
      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1634
46
             false, info_ptr_end);
1635
46
      if (unit->dwarf_str_offset != 0)
1636
15
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1637
31
      else
1638
31
  attr->u.str = NULL;
1639
46
      break;
1640
1.26k
    case DW_FORM_exprloc:
1641
1.35k
    case DW_FORM_block:
1642
1.35k
      amt = _bfd_safe_read_leb128 (abfd, &info_ptr,
1643
1.35k
           false, info_ptr_end);
1644
1.35k
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1645
1.35k
      if (attr->u.blk == NULL)
1646
0
  return NULL;
1647
1.35k
      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
143
    case DW_FORM_loclistx:
1661
      /* FIXME: Add support for these forms!  */
1662
      /* Fall through.  */
1663
154
    case DW_FORM_ref_udata:
1664
232
    case DW_FORM_udata:
1665
232
      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1666
232
             false, info_ptr_end);
1667
232
      break;
1668
63
    case DW_FORM_addrx:
1669
63
      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1670
63
             false, info_ptr_end);
1671
63
      if (unit->dwarf_addr_offset != 0)
1672
0
  attr->u.val = read_indexed_address (attr->u.val, unit);
1673
63
      break;
1674
1
    case DW_FORM_indirect:
1675
1
      form = _bfd_safe_read_leb128 (abfd, &info_ptr,
1676
1
            false, info_ptr_end);
1677
1
      if (form == DW_FORM_implicit_const)
1678
0
  implicit_const = _bfd_safe_read_leb128 (abfd, &info_ptr,
1679
0
            true, info_ptr_end);
1680
1
      info_ptr = read_attribute_value (attr, form, implicit_const, unit,
1681
1
               info_ptr, info_ptr_end);
1682
1
      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
40
    default:
1696
40
      _bfd_error_handler (_("DWARF error: invalid or unhandled FORM value: %#x"),
1697
40
        form);
1698
40
      bfd_set_error (bfd_error_bad_value);
1699
40
      return NULL;
1700
1.54M
    }
1701
1.54M
  return info_ptr;
1702
1.54M
}
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.54M
{
1713
1.54M
  attr->name = abbrev->name;
1714
1.54M
  info_ptr = read_attribute_value (attr, abbrev->form, abbrev->implicit_const,
1715
1.54M
           unit, info_ptr, info_ptr_end);
1716
1.54M
  return info_ptr;
1717
1.54M
}
1718
1719
/* Return mangling style given LANG.  */
1720
1721
static int
1722
mangle_style (int lang)
1723
23.3k
{
1724
23.3k
  switch (lang)
1725
23.3k
    {
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
7
    case DW_LANG_C_plus_plus_11:
1733
7
    case DW_LANG_C_plus_plus_14:
1734
7
      return DMGL_GNU_V3;
1735
1736
55
    case DW_LANG_Java:
1737
55
      return DMGL_JAVA;
1738
1739
25
    case DW_LANG_D:
1740
25
      return DMGL_DLANG;
1741
1742
13
    case DW_LANG_Rust:
1743
13
    case DW_LANG_Rust_old:
1744
13
      return DMGL_RUST;
1745
1746
206
    default:
1747
206
      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
23.0k
    case DW_LANG_C99:
1757
23.0k
    case DW_LANG_UPC:
1758
23.0k
    case DW_LANG_C11:
1759
23.0k
    case DW_LANG_Mips_Assembler:
1760
23.0k
    case DW_LANG_Upc:
1761
23.0k
    case DW_LANG_HP_Basic91:
1762
23.0k
    case DW_LANG_HP_IMacro:
1763
23.0k
    case DW_LANG_HP_Assembler:
1764
23.0k
      return 0;
1765
23.3k
    }
1766
23.3k
}
1767
1768
/* Source line information table routines.  */
1769
1770
20.3k
#define FILE_ALLOC_CHUNK 5
1771
7.08k
#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.02M
{
1884
1.02M
  return (new_line->address > line->address
1885
1.02M
    || (new_line->address == line->address
1886
534k
        && new_line->op_index > line->op_index));
1887
1.02M
}
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
530k
{
1905
530k
  size_t amt = sizeof (struct line_info);
1906
530k
  struct line_sequence* seq = table->sequences;
1907
530k
  struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt);
1908
1909
530k
  if (info == NULL)
1910
0
    return false;
1911
1912
  /* Set member data of 'info'.  */
1913
530k
  info->prev_line = NULL;
1914
530k
  info->address = address;
1915
530k
  info->op_index = op_index;
1916
530k
  info->line = line;
1917
530k
  info->column = column;
1918
530k
  info->discriminator = discriminator;
1919
530k
  info->end_sequence = end_sequence;
1920
1921
530k
  if (filename && filename[0])
1922
527k
    {
1923
527k
      info->filename = (char *) bfd_alloc (table->abfd, strlen (filename) + 1);
1924
527k
      if (info->filename == NULL)
1925
0
  return false;
1926
527k
      strcpy (info->filename, filename);
1927
527k
    }
1928
2.92k
  else
1929
2.92k
    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
530k
  if (seq
1947
530k
      && seq->last_line->address == address
1948
530k
      && seq->last_line->op_index == op_index
1949
530k
      && seq->last_line->end_sequence == end_sequence)
1950
33.6k
    {
1951
      /* We only keep the last entry with the same address and end
1952
   sequence.  See PR ld/4986.  */
1953
33.6k
      if (table->lcl_head == seq->last_line)
1954
22.7k
  table->lcl_head = info;
1955
33.6k
      info->prev_line = seq->last_line->prev_line;
1956
33.6k
      seq->last_line = info;
1957
33.6k
    }
1958
496k
  else if (!seq || seq->last_line->end_sequence)
1959
3.83k
    {
1960
      /* Start a new line sequence.  */
1961
3.83k
      amt = sizeof (struct line_sequence);
1962
3.83k
      seq = (struct line_sequence *) bfd_malloc (amt);
1963
3.83k
      if (seq == NULL)
1964
0
  return false;
1965
3.83k
      seq->low_pc = address;
1966
3.83k
      seq->prev_sequence = table->sequences;
1967
3.83k
      seq->last_line = info;
1968
3.83k
      table->lcl_head = info;
1969
3.83k
      table->sequences = seq;
1970
3.83k
      table->num_sequences++;
1971
3.83k
    }
1972
492k
  else if (info->end_sequence
1973
492k
     || new_line_sorts_after (info, seq->last_line))
1974
482k
    {
1975
      /* Normal case: add 'info' to the beginning of the current sequence.  */
1976
482k
      info->prev_line = seq->last_line;
1977
482k
      seq->last_line = info;
1978
1979
      /* lcl_head: initialize to head a *possible* sequence at the end.  */
1980
482k
      if (!table->lcl_head)
1981
0
  table->lcl_head = info;
1982
482k
    }
1983
10.7k
  else if (!new_line_sorts_after (info, table->lcl_head)
1984
10.7k
     && (!table->lcl_head->prev_line
1985
6.42k
         || new_line_sorts_after (info, table->lcl_head->prev_line)))
1986
5.00k
    {
1987
      /* Abnormal but easy: lcl_head is the head of 'info'.  */
1988
5.00k
      info->prev_line = table->lcl_head->prev_line;
1989
5.00k
      table->lcl_head->prev_line = info;
1990
5.00k
    }
1991
5.69k
  else
1992
5.69k
    {
1993
      /* Abnormal and hard: Neither 'last_line' nor 'lcl_head'
1994
   are valid heads for 'info'.  Reset 'lcl_head'.  */
1995
5.69k
      struct line_info* li2 = seq->last_line; /* Always non-NULL.  */
1996
5.69k
      struct line_info* li1 = li2->prev_line;
1997
1998
257k
      while (li1)
1999
257k
  {
2000
257k
    if (!new_line_sorts_after (info, li2)
2001
257k
        && new_line_sorts_after (info, li1))
2002
5.36k
      break;
2003
2004
251k
    li2 = li1; /* always non-NULL */
2005
251k
    li1 = li1->prev_line;
2006
251k
  }
2007
5.69k
      table->lcl_head = li2;
2008
5.69k
      info->prev_line = table->lcl_head->prev_line;
2009
5.69k
      table->lcl_head->prev_line = info;
2010
5.69k
      if (address < seq->low_pc)
2011
37
  seq->low_pc = address;
2012
5.69k
    }
2013
530k
  return true;
2014
530k
}
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
104k
{
2023
104k
  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
104k
  if (! table->use_dir_and_file_0)
2033
104k
    {
2034
      /* Pre DWARF-5, FILE == 0 means unknown.  */
2035
104k
      if (file == 0)
2036
35
  return strdup ("<unknown>");
2037
104k
      -- file;
2038
104k
    }
2039
2040
104k
  if (table == NULL || file >= table->num_files)
2041
148
    {
2042
148
      _bfd_error_handler
2043
148
  (_("DWARF error: mangled line number section (bad file number)"));
2044
148
      return strdup ("<unknown>");
2045
148
    }
2046
2047
104k
  filename = table->files[file].name;
2048
2049
104k
  if (filename == NULL)
2050
0
    return strdup ("<unknown>");
2051
2052
104k
  if (!IS_ABSOLUTE_PATH (filename))
2053
104k
    {
2054
104k
      char *dir_name = NULL;
2055
104k
      char *subdir_name = NULL;
2056
104k
      char *name;
2057
104k
      size_t len;
2058
104k
      unsigned int dir = table->files[file].dir;
2059
2060
104k
      if (!table->use_dir_and_file_0)
2061
104k
  --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
104k
      if (dir < table->num_dirs)
2067
35.7k
  subdir_name = table->dirs[dir];
2068
2069
104k
      if (!subdir_name || !IS_ABSOLUTE_PATH (subdir_name))
2070
91.4k
  dir_name = table->comp_dir;
2071
2072
104k
      if (!dir_name)
2073
20.5k
  {
2074
20.5k
    dir_name = subdir_name;
2075
20.5k
    subdir_name = NULL;
2076
20.5k
  }
2077
2078
104k
      if (!dir_name)
2079
5.65k
  return strdup (filename);
2080
2081
98.5k
      len = strlen (dir_name) + strlen (filename) + 2;
2082
2083
98.5k
      if (subdir_name)
2084
20.8k
  {
2085
20.8k
    len += strlen (subdir_name) + 1;
2086
20.8k
    name = (char *) bfd_malloc (len);
2087
20.8k
    if (name)
2088
20.8k
      sprintf (name, "%s/%s/%s", dir_name, subdir_name, filename);
2089
20.8k
  }
2090
77.7k
      else
2091
77.7k
  {
2092
77.7k
    name = (char *) bfd_malloc (len);
2093
77.7k
    if (name)
2094
77.7k
      sprintf (name, "%s/%s", dir_name, filename);
2095
77.7k
  }
2096
2097
98.5k
      return name;
2098
104k
    }
2099
2100
14
  return strdup (filename);
2101
104k
}
2102
2103
/* Number of bits in a bfd_vma.  */
2104
8.34M
#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.33M
{
2115
6.33M
  if (low1 == low2 || high1 == high2)
2116
498k
    return true;
2117
2118
  /* Sort so that low1 is below low2. */
2119
5.84M
  if (low1 > low2)
2120
5.72M
    {
2121
5.72M
      bfd_vma tmp;
2122
2123
5.72M
      tmp = low1;
2124
5.72M
      low1 = low2;
2125
5.72M
      low2 = tmp;
2126
2127
5.72M
      tmp = high1;
2128
5.72M
      high1 = high2;
2129
5.72M
      high2 = tmp;
2130
5.72M
    }
2131
2132
  /* We touch iff low2 == high1.
2133
     We overlap iff low2 is within [low1, high1). */
2134
5.84M
  return low2 <= high1;
2135
6.33M
}
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.29M
{
2151
7.29M
  bfd_vma clamped_low_pc, clamped_high_pc;
2152
7.29M
  int ch, from_ch, to_ch;
2153
7.29M
  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.29M
  if (trie->num_room_in_leaf > 0)
2159
6.71M
    {
2160
6.71M
      struct trie_leaf *leaf = (struct trie_leaf *) trie;
2161
6.71M
      unsigned int i;
2162
2163
47.3M
      for (i = 0; i < leaf->num_stored_in_leaf; ++i)
2164
46.8M
  {
2165
46.8M
    if (leaf->ranges[i].unit == unit
2166
46.8M
        && ranges_overlap (low_pc, high_pc,
2167
6.33M
         leaf->ranges[i].low_pc,
2168
6.33M
         leaf->ranges[i].high_pc))
2169
6.26M
      {
2170
6.26M
        if (low_pc < leaf->ranges[i].low_pc)
2171
112k
    leaf->ranges[i].low_pc = low_pc;
2172
6.26M
        if (high_pc > leaf->ranges[i].high_pc)
2173
173k
    leaf->ranges[i].high_pc = high_pc;
2174
6.26M
        return trie;
2175
6.26M
      }
2176
46.8M
  }
2177
2178
448k
      is_full_leaf = leaf->num_stored_in_leaf == trie->num_room_in_leaf;
2179
448k
    }
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.03M
  if (is_full_leaf && trie_pc_bits < VMA_BITS)
2184
745
    {
2185
745
      const struct trie_leaf *leaf = (struct trie_leaf *) trie;
2186
745
      unsigned int i;
2187
2188
745
      trie = bfd_zalloc (abfd, sizeof (struct trie_interior));
2189
745
      if (!trie)
2190
0
  return NULL;
2191
745
      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
12.6k
      for (i = 0; i < leaf->num_stored_in_leaf; ++i)
2197
11.9k
        {
2198
11.9k
    if (!insert_arange_in_trie (abfd, trie, trie_pc, trie_pc_bits,
2199
11.9k
              leaf->ranges[i].unit, leaf->ranges[i].low_pc,
2200
11.9k
              leaf->ranges[i].high_pc))
2201
0
      return NULL;
2202
11.9k
  }
2203
745
    }
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.03M
  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.03M
  if (trie->num_room_in_leaf > 0)
2228
447k
    {
2229
447k
      struct trie_leaf *leaf = (struct trie_leaf *) trie;
2230
2231
447k
      unsigned int i = leaf->num_stored_in_leaf++;
2232
447k
      leaf->ranges[i].unit = unit;
2233
447k
      leaf->ranges[i].low_pc = low_pc;
2234
447k
      leaf->ranges[i].high_pc = high_pc;
2235
447k
      return trie;
2236
447k
    }
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
584k
  clamped_low_pc = low_pc;
2243
584k
  clamped_high_pc = high_pc;
2244
584k
  if (trie_pc_bits > 0)
2245
458k
    {
2246
458k
      bfd_vma bucket_high_pc =
2247
458k
  trie_pc + ((bfd_vma) -1 >> trie_pc_bits);  /* Inclusive.  */
2248
458k
      if (clamped_low_pc < trie_pc)
2249
1.42k
  clamped_low_pc = trie_pc;
2250
458k
      if (clamped_high_pc > bucket_high_pc)
2251
23.3k
  clamped_high_pc = bucket_high_pc;
2252
458k
    }
2253
2254
  /* Insert the ranges in all buckets that it spans.  */
2255
584k
  from_ch = (clamped_low_pc >> (VMA_BITS - trie_pc_bits - 8)) & 0xff;
2256
584k
  to_ch = ((clamped_high_pc - 1) >> (VMA_BITS - trie_pc_bits - 8)) & 0xff;
2257
7.57M
  for (ch = from_ch; ch <= to_ch; ++ch)
2258
6.98M
    {
2259
6.98M
      struct trie_interior *interior = (struct trie_interior *) trie;
2260
6.98M
      struct trie_node *child = interior->children[ch];
2261
2262
6.98M
      if (child == NULL)
2263
56.2k
        {
2264
56.2k
    child = alloc_trie_leaf (abfd);
2265
56.2k
    if (!child)
2266
0
      return NULL;
2267
56.2k
  }
2268
6.98M
      bfd_vma bucket = (bfd_vma) ch << (VMA_BITS - trie_pc_bits - 8);
2269
6.98M
      child = insert_arange_in_trie (abfd,
2270
6.98M
             child,
2271
6.98M
             trie_pc + bucket,
2272
6.98M
             trie_pc_bits + 8,
2273
6.98M
             unit,
2274
6.98M
             low_pc,
2275
6.98M
             high_pc);
2276
6.98M
      if (!child)
2277
0
  return NULL;
2278
2279
6.98M
      interior->children[ch] = child;
2280
6.98M
    }
2281
2282
584k
    return trie;
2283
584k
}
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
304k
{
2289
304k
  struct arange *arange;
2290
2291
  /* Ignore empty ranges.  */
2292
304k
  if (low_pc == high_pc)
2293
4.69k
    return true;
2294
2295
300k
  if (trie_root != NULL)
2296
300k
    {
2297
300k
      *trie_root = insert_arange_in_trie (unit->file->bfd_ptr,
2298
300k
            *trie_root,
2299
300k
            0,
2300
300k
            0,
2301
300k
            unit,
2302
300k
            low_pc,
2303
300k
            high_pc);
2304
300k
      if (*trie_root == NULL)
2305
0
  return false;
2306
300k
    }
2307
2308
  /* If the first arange is empty, use it.  */
2309
300k
  if (first_arange->high == 0)
2310
20.4k
    {
2311
20.4k
      first_arange->low = low_pc;
2312
20.4k
      first_arange->high = high_pc;
2313
20.4k
      return true;
2314
20.4k
    }
2315
2316
  /* Next see if we can cheaply extend an existing range.  */
2317
279k
  arange = first_arange;
2318
279k
  do
2319
62.5M
    {
2320
62.5M
      if (low_pc == arange->high)
2321
15.5k
  {
2322
15.5k
    arange->high = high_pc;
2323
15.5k
    return true;
2324
15.5k
  }
2325
62.5M
      if (high_pc == arange->low)
2326
16.9k
  {
2327
16.9k
    arange->low = low_pc;
2328
16.9k
    return true;
2329
16.9k
  }
2330
62.5M
      arange = arange->next;
2331
62.5M
    }
2332
62.5M
  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
247k
  arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange));
2337
247k
  if (arange == NULL)
2338
0
    return false;
2339
247k
  arange->low = low_pc;
2340
247k
  arange->high = high_pc;
2341
247k
  arange->next = first_arange->next;
2342
247k
  first_arange->next = arange;
2343
247k
  return true;
2344
247k
}
2345
2346
/* Compare function for line sequences.  */
2347
2348
static int
2349
compare_sequences (const void* a, const void* b)
2350
4.36k
{
2351
4.36k
  const struct line_sequence* seq1 = a;
2352
4.36k
  const struct line_sequence* seq2 = b;
2353
2354
  /* Sort by low_pc as the primary key.  */
2355
4.36k
  if (seq1->low_pc < seq2->low_pc)
2356
53
    return -1;
2357
4.31k
  if (seq1->low_pc > seq2->low_pc)
2358
3.85k
    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
458
  if (seq1->last_line->address < seq2->last_line->address)
2363
212
    return 1;
2364
246
  if (seq1->last_line->address > seq2->last_line->address)
2365
183
    return -1;
2366
2367
63
  if (seq1->last_line->op_index < seq2->last_line->op_index)
2368
14
    return 1;
2369
49
  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
32
  if (seq1->num_lines < seq2->num_lines)
2374
32
    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.73k
{
2386
7.73k
  size_t amt;
2387
7.73k
  struct line_info **line_info_lookup;
2388
7.73k
  struct line_info *each_line;
2389
7.73k
  unsigned int num_lines;
2390
7.73k
  unsigned int line_index;
2391
2392
7.73k
  if (seq->line_info_lookup != NULL)
2393
6.04k
    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.69k
  num_lines = 0;
2400
239k
  for (each_line = seq->last_line; each_line; each_line = each_line->prev_line)
2401
237k
    num_lines++;
2402
2403
1.69k
  seq->num_lines = num_lines;
2404
1.69k
  if (num_lines == 0)
2405
0
    return true;
2406
2407
  /* Allocate space for the line information lookup table.  */
2408
1.69k
  amt = sizeof (struct line_info*) * num_lines;
2409
1.69k
  line_info_lookup = (struct line_info**) bfd_alloc (table->abfd, amt);
2410
1.69k
  seq->line_info_lookup = line_info_lookup;
2411
1.69k
  if (line_info_lookup == NULL)
2412
0
    return false;
2413
2414
  /* Create the line information lookup table.  */
2415
1.69k
  line_index = num_lines;
2416
239k
  for (each_line = seq->last_line; each_line; each_line = each_line->prev_line)
2417
237k
    line_info_lookup[--line_index] = each_line;
2418
2419
1.69k
  BFD_ASSERT (line_index == 0);
2420
1.69k
  return true;
2421
1.69k
}
2422
2423
/* Sort the line sequences for quick lookup.  */
2424
2425
static bool
2426
sort_line_sequences (struct line_info_table* table)
2427
2.27k
{
2428
2.27k
  size_t amt;
2429
2.27k
  struct line_sequence *sequences;
2430
2.27k
  struct line_sequence *seq;
2431
2.27k
  unsigned int n = 0;
2432
2.27k
  unsigned int num_sequences = table->num_sequences;
2433
2.27k
  bfd_vma last_high_pc;
2434
2435
2.27k
  if (num_sequences == 0)
2436
191
    return true;
2437
2438
  /* Allocate space for an array of sequences.  */
2439
2.08k
  amt = sizeof (struct line_sequence) * num_sequences;
2440
2.08k
  sequences = (struct line_sequence *) bfd_alloc (table->abfd, amt);
2441
2.08k
  if (sequences == NULL)
2442
0
    return false;
2443
2444
  /* Copy the linked list into the array, freeing the original nodes.  */
2445
2.08k
  seq = table->sequences;
2446
5.75k
  for (n = 0; n < num_sequences; n++)
2447
3.66k
    {
2448
3.66k
      struct line_sequence* last_seq = seq;
2449
2450
3.66k
      BFD_ASSERT (seq);
2451
3.66k
      sequences[n].low_pc = seq->low_pc;
2452
3.66k
      sequences[n].prev_sequence = NULL;
2453
3.66k
      sequences[n].last_line = seq->last_line;
2454
3.66k
      sequences[n].line_info_lookup = NULL;
2455
3.66k
      sequences[n].num_lines = n;
2456
3.66k
      seq = seq->prev_sequence;
2457
3.66k
      free (last_seq);
2458
3.66k
    }
2459
2.08k
  BFD_ASSERT (seq == NULL);
2460
2461
2.08k
  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.08k
  num_sequences = 1;
2466
2.08k
  last_high_pc = sequences[0].last_line->address;
2467
3.66k
  for (n = 1; n < table->num_sequences; n++)
2468
1.58k
    {
2469
1.58k
      if (sequences[n].low_pc < last_high_pc)
2470
181
  {
2471
181
    if (sequences[n].last_line->address <= last_high_pc)
2472
      /* Skip nested entries.  */
2473
176
      continue;
2474
2475
    /* Trim overlapping entries.  */
2476
5
    sequences[n].low_pc = last_high_pc;
2477
5
  }
2478
1.40k
      last_high_pc = sequences[n].last_line->address;
2479
1.40k
      if (n > num_sequences)
2480
75
  {
2481
    /* Close up the gap.  */
2482
75
    sequences[num_sequences].low_pc = sequences[n].low_pc;
2483
75
    sequences[num_sequences].last_line = sequences[n].last_line;
2484
75
  }
2485
1.40k
      num_sequences++;
2486
1.40k
    }
2487
2488
2.08k
  table->sequences = sequences;
2489
2.08k
  table->num_sequences = num_sequences;
2490
2.08k
  return true;
2491
2.08k
}
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.08k
{
2498
5.08k
  if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
2499
1.99k
    {
2500
1.99k
      char **tmp;
2501
1.99k
      size_t amt;
2502
2503
1.99k
      amt = table->num_dirs + DIR_ALLOC_CHUNK;
2504
1.99k
      amt *= sizeof (char *);
2505
2506
1.99k
      tmp = (char **) bfd_realloc (table->dirs, amt);
2507
1.99k
      if (tmp == NULL)
2508
0
  return false;
2509
1.99k
      table->dirs = tmp;
2510
1.99k
    }
2511
2512
5.08k
  table->dirs[table->num_dirs++] = cur_dir;
2513
5.08k
  return true;
2514
5.08k
}
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
9
{
2522
9
  return line_info_add_include_dir (table, cur_dir);
2523
9
}
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
16.0k
{
2532
16.0k
  if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
2533
4.33k
    {
2534
4.33k
      struct fileinfo *tmp;
2535
4.33k
      size_t amt;
2536
2537
4.33k
      amt = table->num_files + FILE_ALLOC_CHUNK;
2538
4.33k
      amt *= sizeof (struct fileinfo);
2539
2540
4.33k
      tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
2541
4.33k
      if (tmp == NULL)
2542
0
  return false;
2543
4.33k
      table->files = tmp;
2544
4.33k
    }
2545
2546
16.0k
  table->files[table->num_files].name = cur_file;
2547
16.0k
  table->files[table->num_files].dir = dir;
2548
16.0k
  table->files[table->num_files].time = xtime;
2549
16.0k
  table->files[table->num_files].size = size;
2550
16.0k
  table->num_files++;
2551
16.0k
  return true;
2552
16.0k
}
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
49
{
2568
49
  bfd *abfd = unit->abfd;
2569
49
  bfd_byte format_count, formati;
2570
49
  bfd_vma data_count, datai;
2571
49
  bfd_byte *buf = *bufp;
2572
49
  bfd_byte *format_header_data;
2573
2574
49
  format_count = read_1_byte (abfd, &buf, buf_end);
2575
49
  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
49
  data_count = _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
2583
49
  if (format_count == 0 && data_count != 0)
2584
1
    {
2585
1
      _bfd_error_handler (_("DWARF error: zero format count"));
2586
1
      bfd_set_error (bfd_error_bad_value);
2587
1
      return false;
2588
1
    }
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
48
  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
78
  for (datai = 0; datai < data_count; datai++)
2602
41
    {
2603
41
      bfd_byte *format = format_header_data;
2604
41
      struct fileinfo fe;
2605
2606
41
      memset (&fe, 0, sizeof fe);
2607
179
      for (formati = 0; formati < format_count; formati++)
2608
148
  {
2609
148
    bfd_vma content_type, form;
2610
148
    char *string_trash;
2611
148
    char **stringp = &string_trash;
2612
148
    unsigned int uint_trash, *uintp = &uint_trash;
2613
148
    struct attribute attr;
2614
2615
148
    content_type = _bfd_safe_read_leb128 (abfd, &format, false, buf_end);
2616
148
    switch (content_type)
2617
148
      {
2618
12
      case DW_LNCT_path:
2619
12
        stringp = &fe.name;
2620
12
        break;
2621
1
      case DW_LNCT_directory_index:
2622
1
        uintp = &fe.dir;
2623
1
        break;
2624
23
      case DW_LNCT_timestamp:
2625
23
        uintp = &fe.time;
2626
23
        break;
2627
23
      case DW_LNCT_size:
2628
23
        uintp = &fe.size;
2629
23
        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
148
      }
2639
2640
146
    form = _bfd_safe_read_leb128 (abfd, &format, false, buf_end);
2641
146
    buf = read_attribute_value (&attr, form, 0, unit, buf, buf_end);
2642
146
    if (buf == NULL)
2643
8
      return false;
2644
138
    switch (form)
2645
138
      {
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
138
      }
2668
138
  }
2669
2670
31
      if (!callback (table, fe.name, fe.dir, fe.time, fe.size))
2671
0
  return false;
2672
31
    }
2673
2674
37
  *bufp = buf;
2675
37
  return true;
2676
47
}
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.50k
{
2683
3.50k
  bfd *abfd = unit->abfd;
2684
3.50k
  struct dwarf2_debug *stash = unit->stash;
2685
3.50k
  struct dwarf2_debug_file *file = unit->file;
2686
3.50k
  struct line_info_table* table;
2687
3.50k
  bfd_byte *line_ptr;
2688
3.50k
  bfd_byte *line_end;
2689
3.50k
  struct line_head lh;
2690
3.50k
  unsigned int i, offset_size;
2691
3.50k
  char *cur_file, *cur_dir;
2692
3.50k
  unsigned char op_code, extended_op, adj_opcode;
2693
3.50k
  unsigned int exop_len;
2694
3.50k
  size_t amt;
2695
2696
3.50k
  if (unit->line_offset == 0 && file->line_table)
2697
13
    return file->line_table;
2698
2699
3.49k
  if (! read_section (abfd, &stash->debug_sections[debug_line],
2700
3.49k
          file->syms, unit->line_offset,
2701
3.49k
          &file->dwarf_line_buffer, &file->dwarf_line_size))
2702
81
    return NULL;
2703
2704
3.41k
  if (file->dwarf_line_size < 16)
2705
4
    {
2706
4
      _bfd_error_handler
2707
4
  (_("DWARF error: line info section is too small (%" PRId64 ")"),
2708
4
   (int64_t) file->dwarf_line_size);
2709
4
      bfd_set_error (bfd_error_bad_value);
2710
4
      return NULL;
2711
4
    }
2712
3.40k
  line_ptr = file->dwarf_line_buffer + unit->line_offset;
2713
3.40k
  line_end = file->dwarf_line_buffer + file->dwarf_line_size;
2714
2715
  /* Read in the prologue.  */
2716
3.40k
  lh.total_length = read_4_bytes (abfd, &line_ptr, line_end);
2717
3.40k
  offset_size = 4;
2718
3.40k
  if (lh.total_length == 0xffffffff)
2719
9
    {
2720
9
      lh.total_length = read_8_bytes (abfd, &line_ptr, line_end);
2721
9
      offset_size = 8;
2722
9
    }
2723
3.40k
  else if (lh.total_length == 0 && unit->addr_size == 8)
2724
7
    {
2725
      /* Handle (non-standard) 64-bit DWARF2 formats.  */
2726
7
      lh.total_length = read_4_bytes (abfd, &line_ptr, line_end);
2727
7
      offset_size = 8;
2728
7
    }
2729
2730
3.40k
  if (lh.total_length > (size_t) (line_end - line_ptr))
2731
773
    {
2732
773
      _bfd_error_handler
2733
  /* xgettext: c-format */
2734
773
  (_("DWARF error: line info data is bigger (%#" PRIx64 ")"
2735
773
     " than the space remaining in the section (%#lx)"),
2736
773
   (uint64_t) lh.total_length, (unsigned long) (line_end - line_ptr));
2737
773
      bfd_set_error (bfd_error_bad_value);
2738
773
      return NULL;
2739
773
    }
2740
2741
2.63k
  line_end = line_ptr + lh.total_length;
2742
2743
2.63k
  lh.version = read_2_bytes (abfd, &line_ptr, line_end);
2744
2.63k
  if (lh.version < 2 || lh.version > 5)
2745
209
    {
2746
209
      _bfd_error_handler
2747
209
  (_("DWARF error: unhandled .debug_line version %d"), lh.version);
2748
209
      bfd_set_error (bfd_error_bad_value);
2749
209
      return NULL;
2750
209
    }
2751
2752
2.42k
  if (line_ptr + offset_size + (lh.version >= 5 ? 8 : (lh.version >= 4 ? 6 : 5))
2753
2.42k
      >= line_end)
2754
5
    {
2755
5
      _bfd_error_handler
2756
5
  (_("DWARF error: ran out of room reading prologue"));
2757
5
      bfd_set_error (bfd_error_bad_value);
2758
5
      return NULL;
2759
5
    }
2760
2761
2.42k
  if (lh.version >= 5)
2762
28
    {
2763
28
      unsigned int segment_selector_size;
2764
2765
      /* Skip address size.  */
2766
28
      read_1_byte (abfd, &line_ptr, line_end);
2767
2768
28
      segment_selector_size = read_1_byte (abfd, &line_ptr, line_end);
2769
28
      if (segment_selector_size != 0)
2770
1
  {
2771
1
    _bfd_error_handler
2772
1
      (_("DWARF error: line info unsupported segment selector size %u"),
2773
1
       segment_selector_size);
2774
1
    bfd_set_error (bfd_error_bad_value);
2775
1
    return NULL;
2776
1
  }
2777
28
    }
2778
2779
2.42k
  if (offset_size == 4)
2780
2.42k
    lh.prologue_length = read_4_bytes (abfd, &line_ptr, line_end);
2781
1
  else
2782
1
    lh.prologue_length = read_8_bytes (abfd, &line_ptr, line_end);
2783
2784
2.42k
  lh.minimum_instruction_length = read_1_byte (abfd, &line_ptr, line_end);
2785
2786
2.42k
  if (lh.version >= 4)
2787
252
    lh.maximum_ops_per_insn = read_1_byte (abfd, &line_ptr, line_end);
2788
2.16k
  else
2789
2.16k
    lh.maximum_ops_per_insn = 1;
2790
2791
2.42k
  if (lh.maximum_ops_per_insn == 0)
2792
1
    {
2793
1
      _bfd_error_handler
2794
1
  (_("DWARF error: invalid maximum operations per instruction"));
2795
1
      bfd_set_error (bfd_error_bad_value);
2796
1
      return NULL;
2797
1
    }
2798
2799
2.42k
  lh.default_is_stmt = read_1_byte (abfd, &line_ptr, line_end);
2800
2.42k
  lh.line_base = read_1_signed_byte (abfd, &line_ptr, line_end);
2801
2.42k
  lh.line_range = read_1_byte (abfd, &line_ptr, line_end);
2802
2.42k
  lh.opcode_base = read_1_byte (abfd, &line_ptr, line_end);
2803
2804
2.42k
  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.40k
  amt = lh.opcode_base * sizeof (unsigned char);
2812
2.40k
  lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt);
2813
2814
2.40k
  lh.standard_opcode_lengths[0] = 1;
2815
2816
32.7k
  for (i = 1; i < lh.opcode_base; ++i)
2817
30.3k
    lh.standard_opcode_lengths[i] = read_1_byte (abfd, &line_ptr, line_end);
2818
2819
2.40k
  amt = sizeof (struct line_info_table);
2820
2.40k
  table = (struct line_info_table *) bfd_alloc (abfd, amt);
2821
2.40k
  if (table == NULL)
2822
0
    return NULL;
2823
2.40k
  table->abfd = abfd;
2824
2.40k
  table->comp_dir = unit->comp_dir;
2825
2826
2.40k
  table->num_files = 0;
2827
2.40k
  table->files = NULL;
2828
2829
2.40k
  table->num_dirs = 0;
2830
2.40k
  table->dirs = NULL;
2831
2832
2.40k
  table->num_sequences = 0;
2833
2.40k
  table->sequences = NULL;
2834
2835
2.40k
  table->lcl_head = NULL;
2836
2837
2.40k
  if (lh.version >= 5)
2838
26
    {
2839
      /* Read directory table.  */
2840
26
      if (!read_formatted_entries (unit, &line_ptr, line_end, table,
2841
26
           line_info_add_include_dir_stub))
2842
3
  goto fail;
2843
2844
      /* Read file name table.  */
2845
23
      if (!read_formatted_entries (unit, &line_ptr, line_end, table,
2846
23
           line_info_add_file_name))
2847
9
  goto fail;
2848
14
      table->use_dir_and_file_0 = true;
2849
14
    }
2850
2.38k
  else
2851
2.38k
    {
2852
      /* Read directory table.  */
2853
7.46k
      while ((cur_dir = read_string (&line_ptr, line_end)) != NULL)
2854
5.08k
  {
2855
5.08k
    if (!line_info_add_include_dir (table, cur_dir))
2856
0
      goto fail;
2857
5.08k
  }
2858
2859
      /* Read file name table.  */
2860
18.3k
      while ((cur_file = read_string (&line_ptr, line_end)) != NULL)
2861
15.9k
  {
2862
15.9k
    unsigned int dir, xtime, size;
2863
2864
15.9k
    dir = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2865
15.9k
    xtime = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2866
15.9k
    size = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2867
2868
15.9k
    if (!line_info_add_file_name (table, cur_file, dir, xtime, size))
2869
0
      goto fail;
2870
15.9k
  }
2871
2.38k
      table->use_dir_and_file_0 = false;
2872
2.38k
    }
2873
2874
  /* Read the statement sequences until there's nothing left.  */
2875
6.14k
  while (line_ptr < line_end)
2876
3.86k
    {
2877
      /* State machine registers.  */
2878
3.86k
      bfd_vma address = 0;
2879
3.86k
      unsigned char op_index = 0;
2880
3.86k
      char * filename = NULL;
2881
3.86k
      unsigned int line = 1;
2882
3.86k
      unsigned int column = 0;
2883
3.86k
      unsigned int discriminator = 0;
2884
3.86k
      int is_stmt = lh.default_is_stmt;
2885
3.86k
      int end_sequence = 0;
2886
3.86k
      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
3.86k
      bfd_vma low_pc  = (bfd_vma) -1;
2893
3.86k
      bfd_vma high_pc = 0;
2894
2895
3.86k
      if (table->num_files)
2896
3.83k
  {
2897
3.83k
    if (table->use_dir_and_file_0)
2898
0
      filename = concat_filename (table, 0);
2899
3.83k
    else
2900
3.83k
      filename = concat_filename (table, 1);
2901
3.83k
  }
2902
2903
      /* Decode the table.  */
2904
1.18M
      while (!end_sequence && line_ptr < line_end)
2905
1.18M
  {
2906
1.18M
    op_code = read_1_byte (abfd, &line_ptr, line_end);
2907
2908
1.18M
    if (op_code >= lh.opcode_base)
2909
499k
      {
2910
        /* Special operand.  */
2911
499k
        adj_opcode = op_code - lh.opcode_base;
2912
499k
        if (lh.line_range == 0)
2913
4
    goto line_fail;
2914
499k
        if (lh.maximum_ops_per_insn == 1)
2915
488k
    address += (adj_opcode / lh.line_range
2916
488k
          * lh.minimum_instruction_length);
2917
10.7k
        else
2918
10.7k
    {
2919
10.7k
      address += ((op_index + adj_opcode / lh.line_range)
2920
10.7k
            / lh.maximum_ops_per_insn
2921
10.7k
            * lh.minimum_instruction_length);
2922
10.7k
      op_index = ((op_index + adj_opcode / lh.line_range)
2923
10.7k
            % lh.maximum_ops_per_insn);
2924
10.7k
    }
2925
499k
        line += lh.line_base + (adj_opcode % lh.line_range);
2926
        /* Append row to matrix using current values.  */
2927
499k
        if (!add_line_info (table, address, op_index, filename,
2928
499k
          line, column, discriminator, 0))
2929
0
    goto line_fail;
2930
499k
        discriminator = 0;
2931
499k
        if (address < low_pc)
2932
386
    low_pc = address;
2933
499k
        if (address > high_pc)
2934
456k
    high_pc = address;
2935
499k
      }
2936
681k
    else switch (op_code)
2937
681k
      {
2938
63.1k
      case DW_LNS_extended_op:
2939
63.1k
        exop_len = _bfd_safe_read_leb128 (abfd, &line_ptr,
2940
63.1k
            false, line_end);
2941
63.1k
        extended_op = read_1_byte (abfd, &line_ptr, line_end);
2942
2943
63.1k
        switch (extended_op)
2944
63.1k
    {
2945
3.69k
    case DW_LNE_end_sequence:
2946
3.69k
      end_sequence = 1;
2947
3.69k
      if (!add_line_info (table, address, op_index, filename, line,
2948
3.69k
              column, discriminator, end_sequence))
2949
0
        goto line_fail;
2950
3.69k
      discriminator = 0;
2951
3.69k
      if (address < low_pc)
2952
89
        low_pc = address;
2953
3.69k
      if (address > high_pc)
2954
3.58k
        high_pc = address;
2955
3.69k
      if (!arange_add (unit, &unit->arange, &unit->file->trie_root,
2956
3.69k
           low_pc, high_pc))
2957
0
        goto line_fail;
2958
3.69k
      break;
2959
59.3k
    case DW_LNE_set_address:
2960
59.3k
      address = read_address (unit, &line_ptr, line_end);
2961
59.3k
      op_index = 0;
2962
59.3k
      break;
2963
30
    case DW_LNE_define_file:
2964
30
      cur_file = read_string (&line_ptr, line_end);
2965
30
      dir = _bfd_safe_read_leb128 (abfd, &line_ptr,
2966
30
                 false, line_end);
2967
30
      xtime = _bfd_safe_read_leb128 (abfd, &line_ptr,
2968
30
             false, line_end);
2969
30
      size = _bfd_safe_read_leb128 (abfd, &line_ptr,
2970
30
            false, line_end);
2971
30
      if (!line_info_add_file_name (table, cur_file, dir,
2972
30
            xtime, size))
2973
0
        goto line_fail;
2974
30
      break;
2975
30
    case DW_LNE_set_discriminator:
2976
4
      discriminator = _bfd_safe_read_leb128 (abfd, &line_ptr,
2977
4
               false, line_end);
2978
4
      break;
2979
10
    case DW_LNE_HP_source_file_correlation:
2980
10
      line_ptr += exop_len - 1;
2981
10
      break;
2982
118
    default:
2983
118
      _bfd_error_handler
2984
118
        (_("DWARF error: mangled line number section"));
2985
118
      bfd_set_error (bfd_error_bad_value);
2986
122
    line_fail:
2987
122
      free (filename);
2988
122
      goto fail;
2989
63.1k
    }
2990
63.0k
        break;
2991
63.0k
      case DW_LNS_copy:
2992
27.2k
        if (!add_line_info (table, address, op_index,
2993
27.2k
          filename, line, column, discriminator, 0))
2994
0
    goto line_fail;
2995
27.2k
        discriminator = 0;
2996
27.2k
        if (address < low_pc)
2997
3.44k
    low_pc = address;
2998
27.2k
        if (address > high_pc)
2999
23.8k
    high_pc = address;
3000
27.2k
        break;
3001
29.6k
      case DW_LNS_advance_pc:
3002
29.6k
        if (lh.maximum_ops_per_insn == 1)
3003
29.1k
    address += (lh.minimum_instruction_length
3004
29.1k
          * _bfd_safe_read_leb128 (abfd, &line_ptr,
3005
29.1k
                 false, line_end));
3006
494
        else
3007
494
    {
3008
494
      bfd_vma adjust = _bfd_safe_read_leb128 (abfd, &line_ptr,
3009
494
                false, line_end);
3010
494
      address = ((op_index + adjust) / lh.maximum_ops_per_insn
3011
494
           * lh.minimum_instruction_length);
3012
494
      op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
3013
494
    }
3014
29.6k
        break;
3015
202k
      case DW_LNS_advance_line:
3016
202k
        line += _bfd_safe_read_leb128 (abfd, &line_ptr,
3017
202k
               true, line_end);
3018
202k
        break;
3019
25.0k
      case DW_LNS_set_file:
3020
25.0k
        {
3021
25.0k
    unsigned int filenum;
3022
3023
    /* The file and directory tables are 0
3024
       based, the references are 1 based.  */
3025
25.0k
    filenum = _bfd_safe_read_leb128 (abfd, &line_ptr,
3026
25.0k
             false, line_end);
3027
25.0k
    free (filename);
3028
25.0k
    filename = concat_filename (table, filenum);
3029
25.0k
    break;
3030
27.2k
        }
3031
144k
      case DW_LNS_set_column:
3032
144k
        column = _bfd_safe_read_leb128 (abfd, &line_ptr,
3033
144k
                false, line_end);
3034
144k
        break;
3035
89.4k
      case DW_LNS_negate_stmt:
3036
89.4k
        is_stmt = (!is_stmt);
3037
89.4k
        break;
3038
28
      case DW_LNS_set_basic_block:
3039
28
        break;
3040
97.8k
      case DW_LNS_const_add_pc:
3041
97.8k
        if (lh.line_range == 0)
3042
0
    goto line_fail;
3043
97.8k
        if (lh.maximum_ops_per_insn == 1)
3044
95.7k
    address += (lh.minimum_instruction_length
3045
95.7k
          * ((255 - lh.opcode_base) / lh.line_range));
3046
2.13k
        else
3047
2.13k
    {
3048
2.13k
      bfd_vma adjust = ((255 - lh.opcode_base) / lh.line_range);
3049
2.13k
      address += (lh.minimum_instruction_length
3050
2.13k
            * ((op_index + adjust)
3051
2.13k
         / lh.maximum_ops_per_insn));
3052
2.13k
      op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
3053
2.13k
    }
3054
97.8k
        break;
3055
17
      case DW_LNS_fixed_advance_pc:
3056
17
        address += read_2_bytes (abfd, &line_ptr, line_end);
3057
17
        op_index = 0;
3058
17
        break;
3059
1.83k
      default:
3060
        /* Unknown standard opcode, ignore it.  */
3061
4.20k
        for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
3062
2.36k
    (void) _bfd_safe_read_leb128 (abfd, &line_ptr,
3063
2.36k
                false, line_end);
3064
1.83k
        break;
3065
681k
      }
3066
1.18M
  }
3067
3068
3.74k
      free (filename);
3069
3.74k
    }
3070
3071
2.27k
  if (unit->line_offset == 0)
3072
282
    file->line_table = table;
3073
2.27k
  if (sort_line_sequences (table))
3074
2.27k
    return table;
3075
3076
134
 fail:
3077
300
  while (table->sequences != NULL)
3078
166
    {
3079
166
      struct line_sequence* seq = table->sequences;
3080
166
      table->sequences = table->sequences->prev_sequence;
3081
166
      free (seq);
3082
166
    }
3083
134
  free (table->files);
3084
134
  free (table->dirs);
3085
134
  return NULL;
3086
2.27k
}
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.7k
{
3100
12.7k
  struct line_sequence *seq = NULL;
3101
12.7k
  struct line_info *info;
3102
12.7k
  int low, high, mid;
3103
3104
  /* Binary search the array of sequences.  */
3105
12.7k
  low = 0;
3106
12.7k
  high = table->num_sequences;
3107
33.9k
  while (low < high)
3108
28.9k
    {
3109
28.9k
      mid = (low + high) / 2;
3110
28.9k
      seq = &table->sequences[mid];
3111
28.9k
      if (addr < seq->low_pc)
3112
12.1k
  high = mid;
3113
16.8k
      else if (addr >= seq->last_line->address)
3114
9.11k
  low = mid + 1;
3115
7.73k
      else
3116
7.73k
  break;
3117
28.9k
    }
3118
3119
  /* Check for a valid sequence.  */
3120
12.7k
  if (!seq || addr < seq->low_pc || addr >= seq->last_line->address)
3121
4.99k
    goto fail;
3122
3123
7.73k
  if (!build_line_info_table (table, seq))
3124
0
    goto fail;
3125
3126
  /* Binary search the array of line information.  */
3127
7.73k
  low = 0;
3128
7.73k
  high = seq->num_lines;
3129
7.73k
  info = NULL;
3130
55.5k
  while (low < high)
3131
55.5k
    {
3132
55.5k
      mid = (low + high) / 2;
3133
55.5k
      info = seq->line_info_lookup[mid];
3134
55.5k
      if (addr < info->address)
3135
32.4k
  high = mid;
3136
23.1k
      else if (addr >= seq->line_info_lookup[mid + 1]->address)
3137
15.4k
  low = mid + 1;
3138
7.73k
      else
3139
7.73k
  break;
3140
55.5k
    }
3141
3142
  /* Check for a valid line information entry.  */
3143
7.73k
  if (info
3144
7.73k
      && addr >= info->address
3145
7.73k
      && addr < seq->line_info_lookup[mid + 1]->address
3146
7.73k
      && !(info->end_sequence || info == seq->last_line))
3147
7.73k
    {
3148
7.73k
      *filename_ptr = info->filename;
3149
7.73k
      *linenumber_ptr = info->line;
3150
7.73k
      if (discriminator_ptr)
3151
0
  *discriminator_ptr = info->discriminator;
3152
7.73k
      return true;
3153
7.73k
    }
3154
3155
4.99k
 fail:
3156
4.99k
  *filename_ptr = NULL;
3157
4.99k
  return false;
3158
7.73k
}
3159
3160
/* Read in the .debug_ranges section for future reference.  */
3161
3162
static bool
3163
read_debug_ranges (struct comp_unit * unit)
3164
204
{
3165
204
  struct dwarf2_debug *stash = unit->stash;
3166
204
  struct dwarf2_debug_file *file = unit->file;
3167
3168
204
  return read_section (unit->abfd, &stash->debug_sections[debug_ranges],
3169
204
           file->syms, 0,
3170
204
           &file->dwarf_ranges_buffer, &file->dwarf_ranges_size);
3171
204
}
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
65.0k
{
3191
65.0k
  const struct lookup_funcinfo * lookup1 = a;
3192
65.0k
  const struct lookup_funcinfo * lookup2 = b;
3193
3194
65.0k
  if (lookup1->low_addr < lookup2->low_addr)
3195
30.1k
    return -1;
3196
34.9k
  if (lookup1->low_addr > lookup2->low_addr)
3197
14.0k
    return 1;
3198
20.8k
  if (lookup1->high_addr < lookup2->high_addr)
3199
595
    return -1;
3200
20.2k
  if (lookup1->high_addr > lookup2->high_addr)
3201
3.89k
    return 1;
3202
3203
16.3k
  if (lookup1->idx < lookup2->idx)
3204
16.3k
    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.3k
{
3213
11.3k
  struct lookup_funcinfo *lookup_funcinfo_table = unit->lookup_funcinfo_table;
3214
11.3k
  unsigned int number_of_functions = unit->number_of_functions;
3215
11.3k
  struct funcinfo *each;
3216
11.3k
  struct lookup_funcinfo *entry;
3217
11.3k
  size_t func_index;
3218
11.3k
  struct arange *range;
3219
11.3k
  bfd_vma low_addr, high_addr;
3220
3221
11.3k
  if (lookup_funcinfo_table || number_of_functions == 0)
3222
10.7k
    return true;
3223
3224
  /* Create the function info lookup table.  */
3225
557
  lookup_funcinfo_table = (struct lookup_funcinfo *)
3226
557
    bfd_malloc (number_of_functions * sizeof (struct lookup_funcinfo));
3227
557
  if (lookup_funcinfo_table == NULL)
3228
0
    return false;
3229
3230
  /* Populate the function info lookup table.  */
3231
557
  func_index = number_of_functions;
3232
15.0k
  for (each = unit->function_table; each; each = each->prev_func)
3233
14.5k
    {
3234
14.5k
      entry = &lookup_funcinfo_table[--func_index];
3235
14.5k
      entry->funcinfo = each;
3236
14.5k
      entry->idx = func_index;
3237
3238
      /* Calculate the lowest and highest address for this function entry.  */
3239
14.5k
      low_addr  = entry->funcinfo->arange.low;
3240
14.5k
      high_addr = entry->funcinfo->arange.high;
3241
3242
145k
      for (range = entry->funcinfo->arange.next; range; range = range->next)
3243
131k
  {
3244
131k
    if (range->low < low_addr)
3245
1.93k
      low_addr = range->low;
3246
131k
    if (range->high > high_addr)
3247
6.77k
      high_addr = range->high;
3248
131k
  }
3249
3250
14.5k
      entry->low_addr = low_addr;
3251
14.5k
      entry->high_addr = high_addr;
3252
14.5k
    }
3253
3254
557
  BFD_ASSERT (func_index == 0);
3255
3256
  /* Sort the function by address.  */
3257
557
  qsort (lookup_funcinfo_table,
3258
557
   number_of_functions,
3259
557
   sizeof (struct lookup_funcinfo),
3260
557
   compare_lookup_funcinfos);
3261
3262
  /* Calculate the high watermark for each function in the lookup table.  */
3263
557
  high_addr = lookup_funcinfo_table[0].high_addr;
3264
14.5k
  for (func_index = 1; func_index < number_of_functions; func_index++)
3265
13.9k
    {
3266
13.9k
      entry = &lookup_funcinfo_table[func_index];
3267
13.9k
      if (entry->high_addr > high_addr)
3268
2.05k
  high_addr = entry->high_addr;
3269
11.8k
      else
3270
11.8k
  entry->high_addr = high_addr;
3271
13.9k
    }
3272
3273
557
  unit->lookup_funcinfo_table = lookup_funcinfo_table;
3274
557
  return true;
3275
557
}
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.7k
{
3287
12.7k
  unsigned int number_of_functions = unit->number_of_functions;
3288
12.7k
  struct lookup_funcinfo* lookup_funcinfo = NULL;
3289
12.7k
  struct funcinfo* funcinfo = NULL;
3290
12.7k
  struct funcinfo* best_fit = NULL;
3291
12.7k
  bfd_vma best_fit_len = (bfd_vma) -1;
3292
12.7k
  bfd_size_type low, high, mid, first;
3293
12.7k
  struct arange *arange;
3294
3295
12.7k
  if (number_of_functions == 0)
3296
1.39k
    return false;
3297
3298
11.3k
  if (!build_lookup_funcinfo_table (unit))
3299
0
    return false;
3300
3301
11.3k
  if (unit->lookup_funcinfo_table[number_of_functions - 1].high_addr < addr)
3302
1.73k
    return false;
3303
3304
  /* Find the first function in the lookup table which may contain the
3305
     specified address.  */
3306
9.60k
  low = 0;
3307
9.60k
  high = number_of_functions;
3308
9.60k
  first = high;
3309
64.5k
  while (low < high)
3310
54.9k
    {
3311
54.9k
      mid = (low + high) / 2;
3312
54.9k
      lookup_funcinfo = &unit->lookup_funcinfo_table[mid];
3313
54.9k
      if (addr < lookup_funcinfo->low_addr)
3314
11.6k
  high = mid;
3315
43.2k
      else if (addr >= lookup_funcinfo->high_addr)
3316
26.0k
  low = mid + 1;
3317
17.2k
      else
3318
17.2k
  high = first = mid;
3319
54.9k
    }
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
220k
  while (first < number_of_functions)
3327
216k
    {
3328
216k
      if (addr < unit->lookup_funcinfo_table[first].low_addr)
3329
5.68k
  break;
3330
210k
      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.6k
      {
3344
38.6k
        best_fit = funcinfo;
3345
38.6k
        best_fit_len = arange->high - arange->low;
3346
38.6k
      }
3347
2.16M
  }
3348
3349
210k
      first++;
3350
210k
    }
3351
3352
9.60k
  if (!best_fit)
3353
1.27k
    return false;
3354
3355
8.33k
  *function_ptr = best_fit;
3356
8.33k
  return true;
3357
9.60k
}
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
11.2k
{
3444
11.2k
  bfd *abfd = unit->abfd;
3445
11.2k
  bfd_byte *info_ptr = NULL;
3446
11.2k
  bfd_byte *info_ptr_end;
3447
11.2k
  unsigned int abbrev_number, i;
3448
11.2k
  struct abbrev_info *abbrev;
3449
11.2k
  uint64_t die_ref = attr_ptr->u.val;
3450
11.2k
  struct attribute attr;
3451
3452
11.2k
  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
11.2k
  if (attr_ptr->form == DW_FORM_ref_addr)
3463
2
    {
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
2
      size_t total;
3480
3481
2
      info_ptr = unit->file->dwarf_info_buffer;
3482
2
      info_ptr_end = info_ptr + unit->file->dwarf_info_size;
3483
2
      total = info_ptr_end - info_ptr;
3484
2
      if (!die_ref)
3485
0
  return true;
3486
2
      else if (die_ref >= total)
3487
1
  {
3488
1
    _bfd_error_handler
3489
1
      (_("DWARF error: invalid abstract instance DIE ref"));
3490
1
    bfd_set_error (bfd_error_bad_value);
3491
1
    return false;
3492
1
  }
3493
1
      info_ptr += die_ref;
3494
1
    }
3495
11.2k
  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
11.2k
  if (attr_ptr->form == DW_FORM_ref_addr
3517
11.2k
      || 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
11.2k
  else
3567
11.2k
    {
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
11.2k
      size_t total;
3572
3573
11.2k
      info_ptr = unit->info_ptr_unit;
3574
11.2k
      info_ptr_end = unit->end_ptr;
3575
11.2k
      total = info_ptr_end - info_ptr;
3576
11.2k
      if (!die_ref || die_ref >= total)
3577
8
  {
3578
8
    _bfd_error_handler
3579
8
      (_("DWARF error: invalid abstract instance DIE ref"));
3580
8
    bfd_set_error (bfd_error_bad_value);
3581
8
    return false;
3582
8
  }
3583
11.2k
      info_ptr += die_ref;
3584
11.2k
    }
3585
3586
11.2k
  abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
3587
11.2k
           false, info_ptr_end);
3588
11.2k
  if (abbrev_number)
3589
11.2k
    {
3590
11.2k
      abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
3591
11.2k
      if (! abbrev)
3592
4
  {
3593
4
    _bfd_error_handler
3594
4
      (_("DWARF error: could not find abbrev number %u"), abbrev_number);
3595
4
    bfd_set_error (bfd_error_bad_value);
3596
4
    return false;
3597
4
  }
3598
11.2k
      else
3599
11.2k
  {
3600
63.0k
    for (i = 0; i < abbrev->num_attrs; ++i)
3601
51.8k
      {
3602
51.8k
        info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit,
3603
51.8k
           info_ptr, info_ptr_end);
3604
51.8k
        if (info_ptr == NULL)
3605
0
    break;
3606
51.8k
        switch (attr.name)
3607
51.8k
    {
3608
11.2k
    case DW_AT_name:
3609
      /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
3610
         over DW_AT_name.  */
3611
11.2k
      if (*pname == NULL && is_str_form (&attr))
3612
11.1k
        {
3613
11.1k
          *pname = attr.u.str;
3614
11.1k
          if (mangle_style (unit->lang) == 0)
3615
11.1k
      *is_linkage = true;
3616
11.1k
        }
3617
11.2k
      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
0
    case DW_AT_linkage_name:
3626
0
    case DW_AT_MIPS_linkage_name:
3627
      /* PR 16949:  Corrupt debug info can place
3628
         non-string forms into these attributes.  */
3629
0
      if (is_str_form (&attr))
3630
0
        {
3631
0
          *pname = attr.u.str;
3632
0
          *is_linkage = true;
3633
0
        }
3634
0
      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
28.7k
    default:
3650
28.7k
      break;
3651
51.8k
    }
3652
51.8k
      }
3653
11.2k
  }
3654
11.2k
    }
3655
11.2k
  return true;
3656
11.2k
}
3657
3658
static bool
3659
read_ranges (struct comp_unit *unit, struct arange *arange,
3660
       struct trie_node **trie_root, uint64_t offset)
3661
7.36k
{
3662
7.36k
  bfd_byte *ranges_ptr;
3663
7.36k
  bfd_byte *ranges_end;
3664
7.36k
  bfd_vma base_address = unit->base_address;
3665
3666
7.36k
  if (! unit->file->dwarf_ranges_buffer)
3667
204
    {
3668
204
      if (! read_debug_ranges (unit))
3669
15
  return false;
3670
204
    }
3671
3672
7.34k
  if (offset > unit->file->dwarf_ranges_size)
3673
3
    return false;
3674
7.34k
  ranges_ptr = unit->file->dwarf_ranges_buffer + offset;
3675
7.34k
  ranges_end = unit->file->dwarf_ranges_buffer + unit->file->dwarf_ranges_size;
3676
3677
7.34k
  for (;;)
3678
294k
    {
3679
294k
      bfd_vma low_pc;
3680
294k
      bfd_vma high_pc;
3681
3682
      /* PR 17512: file: 62cada7d.  */
3683
294k
      if (2u * unit->addr_size > (size_t) (ranges_end - ranges_ptr))
3684
27
  return false;
3685
3686
294k
      low_pc = read_address (unit, &ranges_ptr, ranges_end);
3687
294k
      high_pc = read_address (unit, &ranges_ptr, ranges_end);
3688
3689
294k
      if (low_pc == 0 && high_pc == 0)
3690
7.31k
  break;
3691
286k
      if (low_pc == -1UL && high_pc != -1UL)
3692
13
  base_address = high_pc;
3693
286k
      else
3694
286k
  {
3695
286k
    if (!arange_add (unit, arange, trie_root,
3696
286k
         base_address + low_pc, base_address + high_pc))
3697
0
      return false;
3698
286k
  }
3699
286k
    }
3700
7.31k
  return true;
3701
7.34k
}
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
7.36k
{
3788
7.36k
  if (unit->version <= 4)
3789
7.36k
    return read_ranges (unit, arange, trie_root, offset);
3790
0
  else
3791
0
    return read_rnglists (unit, arange, trie_root, offset);
3792
7.36k
}
3793
3794
static struct funcinfo *
3795
lookup_func_by_offset (uint64_t offset, struct funcinfo * table)
3796
1.87k
{
3797
1.87k
  for (; table != NULL; table = table->prev_func)
3798
1.87k
    if (table->unit_offset == offset)
3799
1.87k
      return table;
3800
0
  return NULL;
3801
1.87k
}
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.61k
{
3822
5.61k
  struct funcinfo *rhead;
3823
5.61k
  struct funcinfo *temp;
3824
3825
81.8k
  for (rhead = NULL; head; head = temp)
3826
76.2k
    {
3827
76.2k
      temp = head->prev_func;
3828
76.2k
      head->prev_func = rhead;
3829
76.2k
      rhead = head;
3830
76.2k
    }
3831
5.61k
  return rhead;
3832
5.61k
}
3833
3834
static struct varinfo *
3835
reverse_varinfo_list (struct varinfo *head)
3836
5.61k
{
3837
5.61k
  struct varinfo *rhead;
3838
5.61k
  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.61k
  return rhead;
3847
5.61k
}
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.26k
{
3855
2.26k
  bfd *abfd = unit->abfd;
3856
2.26k
  bfd_byte *info_ptr = unit->first_child_die_ptr;
3857
2.26k
  bfd_byte *info_ptr_end = unit->end_ptr;
3858
2.26k
  int nesting_level = 0;
3859
2.26k
  struct nest_funcinfo
3860
2.26k
  {
3861
2.26k
    struct funcinfo *func;
3862
2.26k
  } *nested_funcs;
3863
2.26k
  int nested_funcs_size;
3864
2.26k
  struct funcinfo *last_func;
3865
2.26k
  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.26k
  nested_funcs_size = 32;
3870
2.26k
  nested_funcs = (struct nest_funcinfo *)
3871
2.26k
    bfd_malloc (nested_funcs_size * sizeof (*nested_funcs));
3872
2.26k
  if (nested_funcs == NULL)
3873
0
    return false;
3874
2.26k
  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
259k
  while (nesting_level >= 0)
3881
257k
    {
3882
257k
      unsigned int abbrev_number, i;
3883
257k
      struct abbrev_info *abbrev;
3884
257k
      struct funcinfo *func;
3885
257k
      struct varinfo *var;
3886
257k
      uint64_t current_offset;
3887
3888
      /* PR 17512: file: 9f405d9d.  */
3889
257k
      if (info_ptr >= info_ptr_end)
3890
5
  goto fail;
3891
3892
257k
      current_offset = info_ptr - unit->info_ptr_unit;
3893
257k
      abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
3894
257k
               false, info_ptr_end);
3895
257k
      if (abbrev_number == 0)
3896
42.9k
  {
3897
42.9k
    nesting_level--;
3898
42.9k
    continue;
3899
42.9k
  }
3900
3901
214k
      abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
3902
214k
      if (! abbrev)
3903
88
  {
3904
88
    static unsigned int previous_failed_abbrev = -1U;
3905
3906
    /* Avoid multiple reports of the same missing abbrev.  */
3907
88
    if (abbrev_number != previous_failed_abbrev)
3908
81
      {
3909
81
        _bfd_error_handler
3910
81
    (_("DWARF error: could not find abbrev number %u"),
3911
81
     abbrev_number);
3912
81
        previous_failed_abbrev = abbrev_number;
3913
81
      }
3914
88
    bfd_set_error (bfd_error_bad_value);
3915
88
    goto fail;
3916
88
  }
3917
3918
214k
      if (abbrev->tag == DW_TAG_subprogram
3919
214k
    || abbrev->tag == DW_TAG_entry_point
3920
214k
    || abbrev->tag == DW_TAG_inlined_subroutine)
3921
27.5k
  {
3922
27.5k
    size_t amt = sizeof (struct funcinfo);
3923
3924
27.5k
    var = NULL;
3925
27.5k
    func = (struct funcinfo *) bfd_zalloc (abfd, amt);
3926
27.5k
    if (func == NULL)
3927
0
      goto fail;
3928
27.5k
    func->tag = abbrev->tag;
3929
27.5k
    func->prev_func = unit->function_table;
3930
27.5k
    func->unit_offset = current_offset;
3931
27.5k
    unit->function_table = func;
3932
27.5k
    unit->number_of_functions++;
3933
27.5k
    BFD_ASSERT (!unit->cached);
3934
3935
27.5k
    if (func->tag == DW_TAG_inlined_subroutine)
3936
18.5k
      for (i = nesting_level; i-- != 0; )
3937
18.5k
        if (nested_funcs[i].func)
3938
12.6k
    {
3939
12.6k
      func->caller_func = nested_funcs[i].func;
3940
12.6k
      break;
3941
12.6k
    }
3942
27.5k
    nested_funcs[nesting_level].func = func;
3943
27.5k
  }
3944
186k
      else
3945
186k
  {
3946
186k
    func = NULL;
3947
186k
    if (abbrev->tag == DW_TAG_variable
3948
186k
        || 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
121k
    else
3964
121k
      var = NULL;
3965
3966
    /* No inline function in scope at this nesting level.  */
3967
186k
    nested_funcs[nesting_level].func = 0;
3968
186k
  }
3969
3970
994k
      for (i = 0; i < abbrev->num_attrs; ++i)
3971
780k
  {
3972
780k
    struct attribute attr;
3973
3974
780k
    info_ptr = read_attribute (&attr, &abbrev->attrs[i],
3975
780k
             unit, info_ptr, info_ptr_end);
3976
780k
    if (info_ptr == NULL)
3977
40
      goto fail;
3978
780k
  }
3979
3980
213k
      if (abbrev->has_children)
3981
41.3k
  {
3982
41.3k
    nesting_level++;
3983
3984
41.3k
    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
41.3k
    nested_funcs[nesting_level].func = 0;
3997
41.3k
  }
3998
213k
    }
3999
4000
2.13k
  unit->function_table = reverse_funcinfo_list (unit->function_table);
4001
2.13k
  unit->variable_table = reverse_varinfo_list (unit->variable_table);
4002
4003
  /* This is the second pass over the abbrevs.  */      
4004
2.13k
  info_ptr = unit->first_child_die_ptr;
4005
2.13k
  nesting_level = 0;
4006
  
4007
2.13k
  last_func = NULL;
4008
2.13k
  last_var = NULL;
4009
4010
228k
  while (nesting_level >= 0)
4011
226k
    {
4012
226k
      unsigned int abbrev_number, i;
4013
226k
      struct abbrev_info *abbrev;
4014
226k
      struct attribute attr;
4015
226k
      struct funcinfo *func;
4016
226k
      struct varinfo *var;
4017
226k
      bfd_vma low_pc = 0;
4018
226k
      bfd_vma high_pc = 0;
4019
226k
      bool high_pc_relative = false;
4020
226k
      uint64_t current_offset;
4021
4022
      /* PR 17512: file: 9f405d9d.  */
4023
226k
      if (info_ptr >= info_ptr_end)
4024
0
  goto fail;
4025
4026
226k
      current_offset = info_ptr - unit->info_ptr_unit;
4027
226k
      abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
4028
226k
               false, info_ptr_end);
4029
226k
      if (! abbrev_number)
4030
36.8k
  {
4031
36.8k
    nesting_level--;
4032
36.8k
    continue;
4033
36.8k
  }
4034
4035
189k
      abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
4036
      /* This should have been handled above.  */
4037
189k
      BFD_ASSERT (abbrev != NULL);
4038
4039
189k
      func = NULL;
4040
189k
      var = NULL;
4041
189k
      if (abbrev->tag == DW_TAG_subprogram
4042
189k
    || abbrev->tag == DW_TAG_entry_point
4043
189k
    || abbrev->tag == DW_TAG_inlined_subroutine)
4044
23.6k
  {
4045
23.6k
    if (last_func
4046
23.6k
        && last_func->prev_func
4047
23.6k
        && last_func->prev_func->unit_offset == current_offset)
4048
21.7k
      func = last_func->prev_func;
4049
1.87k
    else
4050
1.87k
      func = lookup_func_by_offset (current_offset, unit->function_table);
4051
4052
23.6k
    if (func == NULL)
4053
0
      goto fail;
4054
4055
23.6k
    last_func = func;
4056
23.6k
  }
4057
165k
      else if (abbrev->tag == DW_TAG_variable
4058
165k
         || 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
880k
      for (i = 0; i < abbrev->num_attrs; ++i)
4074
691k
  {
4075
691k
    info_ptr = read_attribute (&attr, &abbrev->attrs[i],
4076
691k
             unit, info_ptr, info_ptr_end);
4077
691k
    if (info_ptr == NULL)
4078
0
      goto fail;
4079
4080
691k
    if (func)
4081
143k
      {
4082
143k
        switch (attr.name)
4083
143k
    {
4084
10.2k
    case DW_AT_call_file:
4085
10.2k
      if (is_int_form (&attr))
4086
10.2k
        {
4087
10.2k
          free (func->caller_file);
4088
10.2k
          func->caller_file = concat_filename (unit->line_table,
4089
10.2k
                 attr.u.val);
4090
10.2k
        }
4091
10.2k
      break;
4092
4093
10.2k
    case DW_AT_call_line:
4094
10.2k
      if (is_int_form (&attr))
4095
10.2k
        func->caller_line = attr.u.val;
4096
10.2k
      break;
4097
4098
11.2k
    case DW_AT_abstract_origin:
4099
11.2k
    case DW_AT_specification:
4100
11.2k
      if (is_int_form (&attr)
4101
11.2k
          && !find_abstract_instance (unit, &attr, 0,
4102
11.2k
              &func->name,
4103
11.2k
              &func->is_linkage,
4104
11.2k
              &func->file,
4105
11.2k
              &func->line))
4106
10
        goto fail;
4107
11.2k
      break;
4108
4109
12.2k
    case DW_AT_name:
4110
      /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
4111
         over DW_AT_name.  */
4112
12.2k
      if (func->name == NULL && is_str_form (&attr))
4113
12.1k
        {
4114
12.1k
          func->name = attr.u.str;
4115
12.1k
          if (mangle_style (unit->lang) == 0)
4116
11.9k
      func->is_linkage = true;
4117
12.1k
        }
4118
12.2k
      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
10.8k
    case DW_AT_low_pc:
4132
10.8k
      if (is_int_form (&attr))
4133
10.8k
        low_pc = attr.u.val;
4134
10.8k
      break;
4135
4136
10.8k
    case DW_AT_high_pc:
4137
10.8k
      if (is_int_form (&attr))
4138
10.8k
        {
4139
10.8k
          high_pc = attr.u.val;
4140
10.8k
          high_pc_relative = attr.form != DW_FORM_addr;
4141
10.8k
        }
4142
10.8k
      break;
4143
4144
7.25k
    case DW_AT_ranges:
4145
7.25k
      if (is_int_form (&attr)
4146
7.25k
          && !read_rangelist (unit, &func->arange,
4147
7.24k
            &unit->file->trie_root, attr.u.val))
4148
39
        goto fail;
4149
7.22k
      break;
4150
4151
10.0k
    case DW_AT_decl_file:
4152
10.0k
      if (is_int_form (&attr))
4153
10.0k
        {
4154
10.0k
          free (func->file);
4155
10.0k
          func->file = concat_filename (unit->line_table,
4156
10.0k
                attr.u.val);
4157
10.0k
        }
4158
10.0k
      break;
4159
4160
10.0k
    case DW_AT_decl_line:
4161
10.0k
      if (is_int_form (&attr))
4162
10.0k
        func->line = attr.u.val;
4163
10.0k
      break;
4164
4165
50.6k
    default:
4166
50.6k
      break;
4167
143k
    }
4168
143k
      }
4169
547k
    else if (var)
4170
255k
      {
4171
255k
        switch (attr.name)
4172
255k
    {
4173
12
    case DW_AT_specification:
4174
12
      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
9
      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
691k
  }
4252
4253
189k
      if (abbrev->has_children)
4254
34.8k
  nesting_level++;
4255
4256
189k
      if (high_pc_relative)
4257
2.33k
  high_pc += low_pc;
4258
4259
189k
      if (func && high_pc != 0)
4260
10.8k
  {
4261
10.8k
    if (!arange_add (unit, &func->arange, &unit->file->trie_root,
4262
10.8k
         low_pc, high_pc))
4263
0
      goto fail;
4264
10.8k
  }
4265
189k
    }
4266
4267
2.08k
  unit->function_table = reverse_funcinfo_list (unit->function_table);
4268
2.08k
  unit->variable_table = reverse_varinfo_list (unit->variable_table);
4269
4270
2.08k
  free (nested_funcs);
4271
2.08k
  return true;
4272
4273
182
 fail:
4274
182
  free (nested_funcs);
4275
182
  return false;
4276
2.13k
}
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
177
{
4288
177
  if (is_strx_form (attr->form))
4289
71
    attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
4290
177
  if (is_addrx_form (attr->form))
4291
106
    attr->u.val = read_indexed_address (attr->u.val, unit);
4292
4293
177
  switch (attr->name)
4294
177
    {
4295
35
    case DW_AT_stmt_list:
4296
35
      unit->stmtlist = 1;
4297
35
      unit->line_offset = attr->u.val;
4298
35
      break;
4299
4300
10
    case DW_AT_name:
4301
10
      if (is_str_form (attr))
4302
6
  unit->name = attr->u.str;
4303
10
      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
79
    default:
4348
79
      break;
4349
177
    }
4350
177
}
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.62k
{
4369
3.62k
  struct comp_unit* unit;
4370
3.62k
  unsigned int version;
4371
3.62k
  uint64_t abbrev_offset = 0;
4372
  /* Initialize it just to avoid a GCC false warning.  */
4373
3.62k
  unsigned int addr_size = -1;
4374
3.62k
  struct abbrev_info** abbrevs;
4375
3.62k
  unsigned int abbrev_number, i;
4376
3.62k
  struct abbrev_info *abbrev;
4377
3.62k
  struct attribute attr;
4378
3.62k
  bfd_byte *end_ptr = info_ptr + unit_length;
4379
3.62k
  size_t amt;
4380
3.62k
  bfd_vma low_pc = 0;
4381
3.62k
  bfd_vma high_pc = 0;
4382
3.62k
  bfd *abfd = file->bfd_ptr;
4383
3.62k
  bool high_pc_relative = false;
4384
3.62k
  enum dwarf_unit_type unit_type;
4385
3.62k
  struct attribute *str_addrp = NULL;
4386
3.62k
  size_t str_count = 0;
4387
3.62k
  size_t str_alloc = 0;
4388
3.62k
  bool compunit_flag = false;
4389
4390
3.62k
  version = read_2_bytes (abfd, &info_ptr, end_ptr);
4391
3.62k
  if (version < 2 || version > 5)
4392
26
    {
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
26
      if (version)
4398
11
  {
4399
11
    _bfd_error_handler
4400
11
      (_("DWARF error: found dwarf version '%u', this reader"
4401
11
         " only handles version 2, 3, 4 and 5 information"), version);
4402
11
    bfd_set_error (bfd_error_bad_value);
4403
11
  }
4404
26
      return NULL;
4405
26
    }
4406
4407
3.59k
  if (version < 5)
4408
3.59k
    unit_type = DW_UT_compile;
4409
3
  else
4410
3
    {
4411
3
      unit_type = read_1_byte (abfd, &info_ptr, end_ptr);
4412
3
      addr_size = read_1_byte (abfd, &info_ptr, end_ptr);
4413
3
    }
4414
4415
3.59k
  BFD_ASSERT (offset_size == 4 || offset_size == 8);
4416
3.59k
  if (offset_size == 4)
4417
3.59k
    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.59k
  if (version < 5)
4422
3.59k
    addr_size = read_1_byte (abfd, &info_ptr, end_ptr);
4423
4424
3.59k
  switch (unit_type)
4425
3.59k
    {
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.59k
    default:
4440
3.59k
      break;
4441
3.59k
    }
4442
4443
3.59k
  if (addr_size > sizeof (bfd_vma))
4444
5
    {
4445
5
      _bfd_error_handler
4446
  /* xgettext: c-format */
4447
5
  (_("DWARF error: found address size '%u', this reader"
4448
5
     " can not handle sizes greater than '%u'"),
4449
5
   addr_size,
4450
5
   (unsigned int) sizeof (bfd_vma));
4451
5
      bfd_set_error (bfd_error_bad_value);
4452
5
      return NULL;
4453
5
    }
4454
4455
3.59k
  if (addr_size != 2 && addr_size != 4 && addr_size != 8)
4456
25
    {
4457
25
      _bfd_error_handler
4458
25
  ("DWARF error: found address size '%u', this reader"
4459
25
   " can only handle address sizes '2', '4' and '8'", addr_size);
4460
25
      bfd_set_error (bfd_error_bad_value);
4461
25
      return NULL;
4462
25
    }
4463
4464
  /* Read the abbrevs for this compilation unit into a table.  */
4465
3.56k
  abbrevs = read_abbrevs (abfd, abbrev_offset, stash, file);
4466
3.56k
  if (! abbrevs)
4467
3
    return NULL;
4468
4469
3.56k
  abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
4470
3.56k
           false, end_ptr);
4471
3.56k
  if (! abbrev_number)
4472
1
    {
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
1
      return NULL;
4478
1
    }
4479
4480
3.56k
  abbrev = lookup_abbrev (abbrev_number, abbrevs);
4481
3.56k
  if (! abbrev)
4482
13
    {
4483
13
      _bfd_error_handler (_("DWARF error: could not find abbrev number %u"),
4484
13
        abbrev_number);
4485
13
      bfd_set_error (bfd_error_bad_value);
4486
13
      return NULL;
4487
13
    }
4488
4489
3.55k
  amt = sizeof (struct comp_unit);
4490
3.55k
  unit = (struct comp_unit *) bfd_zalloc (abfd, amt);
4491
3.55k
  if (unit == NULL)
4492
0
    return NULL;
4493
3.55k
  unit->abfd = abfd;
4494
3.55k
  unit->version = version;
4495
3.55k
  unit->addr_size = addr_size;
4496
3.55k
  unit->offset_size = offset_size;
4497
3.55k
  unit->abbrevs = abbrevs;
4498
3.55k
  unit->end_ptr = end_ptr;
4499
3.55k
  unit->stash = stash;
4500
3.55k
  unit->file = file;
4501
3.55k
  unit->info_ptr_unit = info_ptr_unit;
4502
4503
3.55k
  if (abbrev->tag == DW_TAG_compile_unit)
4504
3.47k
    compunit_flag = true;
4505
4506
28.0k
  for (i = 0; i < abbrev->num_attrs; ++i)
4507
24.5k
    {
4508
24.5k
      info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr, end_ptr);
4509
24.5k
      if (info_ptr == NULL)
4510
16
  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
24.4k
      if ((unit->dwarf_str_offset == 0 && is_strx_form (attr.form))
4516
24.4k
    || (unit->dwarf_addr_offset == 0 && is_addrx_form (attr.form)))
4517
186
  {
4518
186
    if (str_count <= str_alloc)
4519
186
      {
4520
186
        str_alloc = 2 * str_alloc + 200;
4521
186
        str_addrp = bfd_realloc (str_addrp,
4522
186
               str_alloc * sizeof (*str_addrp));
4523
186
        if (str_addrp == NULL)
4524
0
    goto err_exit;
4525
186
      }
4526
186
    str_addrp[str_count] = attr;
4527
186
    str_count++;
4528
186
    continue;
4529
186
  }
4530
4531
      /* Store the data if it is of an attribute we want to keep in a
4532
   partial symbol table.  */
4533
24.3k
      switch (attr.name)
4534
24.3k
  {
4535
3.49k
  case DW_AT_stmt_list:
4536
3.49k
    if (is_int_form (&attr))
4537
3.48k
      {
4538
3.48k
        unit->stmtlist = 1;
4539
3.48k
        unit->line_offset = attr.u.val;
4540
3.48k
      }
4541
3.49k
    break;
4542
4543
3.49k
  case DW_AT_name:
4544
3.49k
    if (is_str_form (&attr))
4545
3.48k
      unit->name = attr.u.str;
4546
3.49k
    break;
4547
4548
3.43k
  case DW_AT_low_pc:
4549
3.43k
    if (is_int_form (&attr))
4550
3.40k
      {
4551
3.40k
        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.40k
        if (compunit_flag)
4556
3.35k
    unit->base_address = low_pc;
4557
3.40k
      }
4558
3.43k
    break;
4559
4560
3.29k
  case DW_AT_high_pc:
4561
3.29k
    if (is_int_form (&attr))
4562
3.29k
      {
4563
3.29k
        high_pc = attr.u.val;
4564
3.29k
        high_pc_relative = attr.form != DW_FORM_addr;
4565
3.29k
      }
4566
3.29k
    break;
4567
4568
107
  case DW_AT_ranges:
4569
107
    if (is_int_form (&attr)
4570
107
        && !read_rangelist (unit, &unit->arange,
4571
107
          &unit->file->trie_root, attr.u.val))
4572
4
      goto err_exit;
4573
103
    break;
4574
4575
3.46k
  case DW_AT_comp_dir:
4576
3.46k
    {
4577
3.46k
      char *comp_dir = attr.u.str;
4578
4579
      /* PR 17512: file: 1fe726be.  */
4580
3.46k
      if (!is_str_form (&attr))
4581
38
        {
4582
38
    _bfd_error_handler
4583
38
      (_("DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"));
4584
38
    comp_dir = NULL;
4585
38
        }
4586
4587
3.46k
      if (comp_dir)
4588
2.87k
        {
4589
    /* Irix 6.2 native cc prepends <machine>.: to the compilation
4590
       directory, get rid of it.  */
4591
2.87k
    char *cp = strchr (comp_dir, ':');
4592
4593
2.87k
    if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
4594
0
      comp_dir = cp + 1;
4595
2.87k
        }
4596
3.46k
      unit->comp_dir = comp_dir;
4597
3.46k
      break;
4598
107
    }
4599
4600
3.50k
  case DW_AT_language:
4601
3.50k
    if (is_int_form (&attr))
4602
3.46k
      unit->lang = attr.u.val;
4603
3.50k
    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.49k
  default:
4614
3.49k
    break;
4615
24.3k
  }
4616
24.3k
    }
4617
4618
3.70k
  for (i = 0; i < str_count; ++i)
4619
177
    reread_attribute (unit, &str_addrp[i], &low_pc, &high_pc,
4620
177
          &high_pc_relative, compunit_flag);
4621
4622
3.53k
  if (high_pc_relative)
4623
156
    high_pc += low_pc;
4624
3.53k
  if (high_pc != 0)
4625
3.28k
    {
4626
3.28k
      if (!arange_add (unit, &unit->arange, &unit->file->trie_root,
4627
3.28k
           low_pc, high_pc))
4628
0
  goto err_exit;
4629
3.28k
    }
4630
4631
3.53k
  unit->first_child_die_ptr = info_ptr;
4632
4633
3.53k
  free (str_addrp);
4634
3.53k
  return unit;
4635
4636
20
 err_exit:
4637
20
  unit->error = 1;
4638
20
  free (str_addrp);
4639
20
  return NULL;
4640
3.53k
}
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
457k
{
4651
457k
  struct arange *arange;
4652
4653
457k
  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.1k
    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.2k
{
4680
20.2k
  bool line_p, func_p;
4681
4682
20.2k
  if (!comp_unit_maybe_decode_line_info (unit))
4683
7.49k
    return false;
4684
4685
12.7k
  *function_ptr = NULL;
4686
12.7k
  func_p = lookup_address_in_function_table (unit, addr, function_ptr);
4687
4688
12.7k
  if (func_p && (*function_ptr)->tag == DW_TAG_inlined_subroutine)
4689
2.99k
    unit->stash->inliner_chain = *function_ptr;
4690
4691
12.7k
  line_p = lookup_address_in_line_info_table (unit->line_table, addr,
4692
12.7k
                filename_ptr,
4693
12.7k
                linenumber_ptr,
4694
12.7k
                discriminator_ptr);
4695
12.7k
  return line_p || func_p;
4696
20.2k
}
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
767k
{
4705
767k
  if (unit->error)
4706
275k
    return false;
4707
4708
491k
  if (! unit->line_table)
4709
3.53k
    {
4710
3.53k
      if (! unit->stmtlist)
4711
23
  {
4712
23
    unit->error = 1;
4713
23
    return false;
4714
23
  }
4715
4716
3.50k
      unit->line_table = decode_line_info (unit);
4717
4718
3.50k
      if (! unit->line_table)
4719
1.21k
  {
4720
1.21k
    unit->error = 1;
4721
1.21k
    return false;
4722
1.21k
  }
4723
4724
2.28k
      if (unit->first_child_die_ptr < unit->end_ptr
4725
2.28k
    && ! scan_unit_for_symbols (unit))
4726
182
  {
4727
182
    unit->error = 1;
4728
182
    return false;
4729
182
  }
4730
2.28k
    }
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
41.3k
#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
2.07k
{
4844
2.07k
  asection *msec;
4845
2.07k
  const char *look;
4846
4847
2.07k
  if (after_sec == NULL)
4848
1.18k
    {
4849
1.18k
      look = debug_sections[debug_info].uncompressed_name;
4850
1.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
1.18k
      if (msec != NULL && (msec->flags & SEC_HAS_CONTENTS) != 0)
4854
575
  return msec;
4855
4856
608
      look = debug_sections[debug_info].compressed_name;
4857
608
      msec = bfd_get_section_by_name (abfd, look);
4858
608
      if (msec != NULL && (msec->flags & SEC_HAS_CONTENTS) != 0)
4859
1
        return msec;
4860
4861
9.15k
      for (msec = abfd->sections; msec != NULL; msec = msec->next)
4862
8.61k
  if ((msec->flags & SEC_HAS_CONTENTS) != 0
4863
8.61k
      && startswith (msec->name, GNU_LINKONCE_INFO))
4864
62
    return msec;
4865
4866
545
      return NULL;
4867
607
    }
4868
4869
5.58k
  for (msec = after_sec->next; msec != NULL; msec = msec->next)
4870
4.95k
    {
4871
4.95k
      if ((msec->flags & SEC_HAS_CONTENTS) == 0)
4872
33
  continue;
4873
4874
4.92k
      look = debug_sections[debug_info].uncompressed_name;
4875
4.92k
      if (strcmp (msec->name, look) == 0)
4876
137
  return msec;
4877
4878
4.78k
      look = debug_sections[debug_info].compressed_name;
4879
4.78k
      if (look != NULL && strcmp (msec->name, look) == 0)
4880
0
  return msec;
4881
4882
4.78k
      if (startswith (msec->name, GNU_LINKONCE_INFO))
4883
132
  return msec;
4884
4.78k
    }
4885
4886
625
  return NULL;
4887
894
}
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
191k
{
4921
191k
  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
191k
}
4947
4948
/* Unset vmas for adjusted sections in STASH.  */
4949
4950
static void
4951
unset_sections (struct dwarf2_debug *stash)
4952
237k
{
4953
237k
  int i;
4954
237k
  struct adjusted_section *p;
4955
4956
237k
  i = stash->adjusted_section_count;
4957
237k
  p = stash->adjusted_sections;
4958
22.1M
  for (; i > 0; i--, p++)
4959
21.9M
    p->section->vma = p->orig_vma;
4960
237k
}
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
192k
{
4975
192k
  bfd *abfd;
4976
192k
  struct adjusted_section *p;
4977
192k
  int i;
4978
192k
  const char *debug_info_name;
4979
4980
192k
  if (stash->adjusted_section_count != 0)
4981
191k
    {
4982
191k
      i = stash->adjusted_section_count;
4983
191k
      p = stash->adjusted_sections;
4984
22.0M
      for (; i > 0; i--, p++)
4985
21.8M
  p->section->vma = p->adj_vma;
4986
191k
      return true;
4987
191k
    }
4988
4989
363
  debug_info_name = stash->debug_sections[debug_info].uncompressed_name;
4990
363
  i = 0;
4991
363
  abfd = orig_bfd;
4992
363
  while (1)
4993
363
    {
4994
363
      asection *sect;
4995
4996
15.8k
      for (sect = abfd->sections; sect != NULL; sect = sect->next)
4997
15.4k
  {
4998
15.4k
    int is_debug_info;
4999
5000
15.4k
    if (sect->output_section != NULL
5001
15.4k
        && sect->output_section != sect
5002
15.4k
        && (sect->flags & SEC_DEBUGGING) == 0)
5003
0
      continue;
5004
5005
15.4k
    is_debug_info = (strcmp (sect->name, debug_info_name) == 0
5006
15.4k
         || startswith (sect->name, GNU_LINKONCE_INFO));
5007
5008
15.4k
    if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd)
5009
15.4k
        && !is_debug_info)
5010
5.22k
      continue;
5011
5012
10.2k
    i++;
5013
10.2k
  }
5014
363
      if (abfd == stash->f.bfd_ptr)
5015
363
  break;
5016
0
      abfd = stash->f.bfd_ptr;
5017
0
    }
5018
5019
363
  if (i <= 1)
5020
0
    stash->adjusted_section_count = -1;
5021
363
  else
5022
363
    {
5023
363
      bfd_vma last_vma = 0, last_dwarf = 0;
5024
363
      size_t amt = i * sizeof (struct adjusted_section);
5025
5026
363
      p = (struct adjusted_section *) bfd_malloc (amt);
5027
363
      if (p == NULL)
5028
0
  return false;
5029
5030
363
      stash->adjusted_sections = p;
5031
363
      stash->adjusted_section_count = i;
5032
5033
363
      abfd = orig_bfd;
5034
363
      while (1)
5035
363
  {
5036
363
    asection *sect;
5037
5038
15.8k
    for (sect = abfd->sections; sect != NULL; sect = sect->next)
5039
15.4k
      {
5040
15.4k
        bfd_size_type sz;
5041
15.4k
        int is_debug_info;
5042
5043
15.4k
        if (sect->output_section != NULL
5044
15.4k
      && sect->output_section != sect
5045
15.4k
      && (sect->flags & SEC_DEBUGGING) == 0)
5046
0
    continue;
5047
5048
15.4k
        is_debug_info = (strcmp (sect->name, debug_info_name) == 0
5049
15.4k
             || startswith (sect->name, GNU_LINKONCE_INFO));
5050
5051
15.4k
        if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd)
5052
15.4k
      && !is_debug_info)
5053
5.22k
    continue;
5054
5055
10.2k
        sz = sect->rawsize ? sect->rawsize : sect->size;
5056
5057
10.2k
        p->section = sect;
5058
10.2k
        p->orig_vma = sect->vma;
5059
5060
10.2k
        bfd_vma *v = is_debug_info ? &last_dwarf : &last_vma;
5061
        /* Align the new address to the current section
5062
     alignment.  */
5063
10.2k
        bfd_vma mask = -(bfd_vma) 1 << sect->alignment_power;
5064
10.2k
        *v = (*v + ~mask) & mask;
5065
10.2k
        sect->vma = *v;
5066
10.2k
        *v += sz;
5067
5068
10.2k
        p->adj_vma = sect->vma;
5069
10.2k
        p++;
5070
10.2k
      }
5071
363
    if (abfd == stash->f.bfd_ptr)
5072
363
      break;
5073
0
    abfd = stash->f.bfd_ptr;
5074
0
  }
5075
363
    }
5076
5077
363
  if (orig_bfd != stash->f.bfd_ptr)
5078
0
    set_debug_vma (orig_bfd, stash->f.bfd_ptr);
5079
5080
363
  return true;
5081
363
}
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
1.11k
{
5309
1.11k
  asection *s;
5310
1.11k
  unsigned int i;
5311
5312
1.11k
  if (abfd->section_count == 0)
5313
0
    return true;
5314
1.11k
  stash->sec_vma = bfd_malloc (sizeof (*stash->sec_vma) * abfd->section_count);
5315
1.11k
  if (stash->sec_vma == NULL)
5316
0
    return false;
5317
1.11k
  stash->sec_vma_count = abfd->section_count;
5318
1.11k
  for (i = 0, s = abfd->sections;
5319
29.9k
       s != NULL && i < abfd->section_count;
5320
28.8k
       i++, s = s->next)
5321
28.8k
    {
5322
28.8k
      if (s->output_section != NULL)
5323
0
  stash->sec_vma[i] = s->output_section->vma + s->output_offset;
5324
28.8k
      else
5325
28.8k
  stash->sec_vma[i] = s->vma;
5326
28.8k
    }
5327
1.11k
  return true;
5328
1.11k
}
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
310k
{
5340
310k
  asection *s;
5341
310k
  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
310k
  if (abfd->section_count != stash->sec_vma_count)
5347
0
    return false;
5348
5349
310k
  for (i = 0, s = abfd->sections;
5350
34.3M
       s != NULL && i < abfd->section_count;
5351
34.0M
       i++, s = s->next)
5352
34.0M
    {
5353
34.0M
      bfd_vma vma;
5354
5355
34.0M
      if (s->output_section != NULL)
5356
0
  vma = s->output_section->vma + s->output_offset;
5357
34.0M
      else
5358
34.0M
  vma = s->vma;
5359
34.0M
      if (vma != stash->sec_vma[i])
5360
0
  return false;
5361
34.0M
    }
5362
310k
  return true;
5363
310k
}
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
311k
{
5377
311k
  bfd_size_type total_size;
5378
311k
  asection *msec;
5379
311k
  struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
5380
5381
311k
  if (stash != NULL)
5382
310k
    {
5383
310k
      if (stash->orig_bfd == abfd
5384
310k
    && section_vma_same (abfd, stash))
5385
310k
  {
5386
    /* Check that we did previously find some debug information
5387
       before attempting to make use of it.  */
5388
310k
    if (stash->f.dwarf_info_size != 0)
5389
236k
      {
5390
236k
        if (do_place && !place_sections (abfd, stash))
5391
0
    return false;
5392
236k
        return true;
5393
236k
      }
5394
5395
73.4k
    return false;
5396
310k
  }
5397
0
      _bfd_dwarf2_cleanup_debug_info (abfd, pinfo);
5398
0
      memset (stash, 0, sizeof (*stash));
5399
0
    }
5400
1.11k
  else
5401
1.11k
    {
5402
1.11k
      stash = (struct dwarf2_debug *) bfd_zalloc (abfd, sizeof (*stash));
5403
1.11k
      if (! stash)
5404
0
  return false;
5405
1.11k
      *pinfo = stash;
5406
1.11k
    }
5407
1.11k
  stash->orig_bfd = abfd;
5408
1.11k
  stash->debug_sections = debug_sections;
5409
1.11k
  stash->f.syms = symbols;
5410
1.11k
  if (!save_section_vma (abfd, stash))
5411
0
    return false;
5412
5413
1.11k
  stash->f.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev,
5414
1.11k
                 del_abbrev, calloc, free);
5415
1.11k
  if (!stash->f.abbrev_offsets)
5416
0
    return false;
5417
5418
1.11k
  stash->alt.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev,
5419
1.11k
             del_abbrev, calloc, free);
5420
1.11k
  if (!stash->alt.abbrev_offsets)
5421
0
    return false;
5422
5423
1.11k
  stash->f.trie_root = alloc_trie_leaf (abfd);
5424
1.11k
  if (!stash->f.trie_root)
5425
0
    return false;
5426
5427
1.11k
  stash->alt.trie_root = alloc_trie_leaf (abfd);
5428
1.11k
  if (!stash->alt.trie_root)
5429
0
    return false;
5430
5431
1.11k
  if (debug_bfd == NULL)
5432
1.11k
    debug_bfd = abfd;
5433
5434
1.11k
  msec = find_debug_info (debug_bfd, debug_sections, NULL);
5435
1.11k
  if (msec == NULL && abfd == debug_bfd)
5436
545
    {
5437
545
      char * debug_filename;
5438
5439
545
      debug_filename = bfd_follow_build_id_debuglink (abfd, DEBUGDIR);
5440
545
      if (debug_filename == NULL)
5441
545
  debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
5442
5443
545
      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
545
  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
569
  stash->f.bfd_ptr = debug_bfd;
5472
5473
569
  if (do_place
5474
569
      && !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
569
  if (! find_debug_info (debug_bfd, debug_sections, msec))
5486
490
    {
5487
      /* Case 1: only one info section.  */
5488
490
      total_size = msec->size;
5489
490
      if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
5490
490
        symbols, 0,
5491
490
        &stash->f.dwarf_info_buffer, &total_size))
5492
83
  goto restore_vma;
5493
490
    }
5494
79
  else
5495
79
    {
5496
      /* Case 2: multiple sections.  */
5497
79
      for (total_size = 0;
5498
253
     msec;
5499
174
     msec = find_debug_info (debug_bfd, debug_sections, msec))
5500
184
  {
5501
184
    if (_bfd_section_size_insane (debug_bfd, msec))
5502
10
      goto restore_vma;
5503
    /* Catch PR25070 testcase overflowing size calculation here.  */
5504
174
    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
174
    total_size += msec->size;
5510
174
  }
5511
5512
69
      stash->f.dwarf_info_buffer = (bfd_byte *) bfd_malloc (total_size);
5513
69
      if (stash->f.dwarf_info_buffer == NULL)
5514
0
  goto restore_vma;
5515
5516
69
      total_size = 0;
5517
69
      for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
5518
220
     msec;
5519
151
     msec = find_debug_info (debug_bfd, debug_sections, msec))
5520
154
  {
5521
154
    bfd_size_type size;
5522
5523
154
    size = msec->size;
5524
154
    if (size == 0)
5525
30
      continue;
5526
5527
124
    if (!(bfd_simple_get_relocated_section_contents
5528
124
    (debug_bfd, msec, stash->f.dwarf_info_buffer + total_size,
5529
124
     symbols)))
5530
3
      goto restore_vma;
5531
5532
121
    total_size += size;
5533
121
  }
5534
69
    }
5535
5536
473
  stash->f.info_ptr = stash->f.dwarf_info_buffer;
5537
473
  stash->f.dwarf_info_size = total_size;
5538
473
  return true;
5539
5540
96
 restore_vma:
5541
96
  unset_sections (stash);
5542
96
  return false;
5543
569
}
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
226k
{
5550
226k
  bfd_size_type length;
5551
226k
  unsigned int offset_size;
5552
226k
  bfd_byte *info_ptr_unit = file->info_ptr;
5553
226k
  bfd_byte *info_ptr_end = file->dwarf_info_buffer + file->dwarf_info_size;
5554
5555
226k
  if (file->info_ptr >= info_ptr_end)
5556
222k
    return NULL;
5557
5558
3.71k
  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
3.71k
  if (length == 0xffffffff)
5562
6
    {
5563
6
      offset_size = 8;
5564
6
      length = read_8_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
5565
6
    }
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
3.71k
  else if (length == 0)
5570
13
    {
5571
13
      offset_size = 8;
5572
13
      length = read_4_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
5573
13
    }
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
3.69k
  else
5584
3.69k
    offset_size = 4;
5585
5586
3.71k
  if (length != 0
5587
3.71k
      && length <= (size_t) (info_ptr_end - file->info_ptr))
5588
3.62k
    {
5589
3.62k
      struct comp_unit *each = parse_comp_unit (stash, file,
5590
3.62k
            file->info_ptr, length,
5591
3.62k
            info_ptr_unit, offset_size);
5592
3.62k
      if (each)
5593
3.53k
  {
5594
3.53k
    if (file->comp_unit_tree == NULL)
5595
387
      file->comp_unit_tree
5596
387
        = splay_tree_new (splay_tree_compare_addr_range,
5597
387
        splay_tree_free_addr_range, NULL);
5598
5599
3.53k
    struct addr_range *r
5600
3.53k
      = (struct addr_range *)bfd_malloc (sizeof (struct addr_range));
5601
3.53k
    r->start = each->info_ptr_unit;
5602
3.53k
    r->end = each->end_ptr;
5603
3.53k
    splay_tree_node v = splay_tree_lookup (file->comp_unit_tree,
5604
3.53k
             (splay_tree_key)r);
5605
3.53k
    if (v != NULL || r->end <= r->start)
5606
0
      abort ();
5607
3.53k
    splay_tree_insert (file->comp_unit_tree, (splay_tree_key)r,
5608
3.53k
           (splay_tree_value)each);
5609
5610
3.53k
    if (file->all_comp_units)
5611
3.14k
      file->all_comp_units->prev_unit = each;
5612
387
    else
5613
387
      file->last_comp_unit = each;
5614
5615
3.53k
    each->next_unit = file->all_comp_units;
5616
3.53k
    file->all_comp_units = each;
5617
5618
3.53k
    if (each->arange.high == 0)
5619
424
      {
5620
424
        each->next_unit_without_ranges = file->all_comp_units_without_ranges;
5621
424
        file->all_comp_units_without_ranges = each->next_unit_without_ranges;
5622
424
      }
5623
5624
3.53k
    file->info_ptr += length;
5625
3.53k
    return each;
5626
3.53k
  }
5627
3.62k
    }
5628
5629
  /* Don't trust any of the DWARF info after a corrupted length or
5630
     parse error.  */
5631
188
  file->info_ptr = info_ptr_end;
5632
188
  return NULL;
5633
3.71k
}
5634
5635
/* Hash function for an asymbol.  */
5636
5637
static hashval_t
5638
hash_asymbol (const void *sym)
5639
202
{
5640
202
  const asymbol *asym = sym;
5641
202
  return htab_hash_string (asym->name);
5642
202
}
5643
5644
/* Equality function for asymbols.  */
5645
5646
static int
5647
eq_asymbol (const void *a, const void *b)
5648
23
{
5649
23
  const asymbol *sa = a;
5650
23
  const asymbol *sb = b;
5651
23
  return strcmp (sa->name, sb->name) == 0;
5652
23
}
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
488
{
5662
488
  struct dwarf2_debug *stash;
5663
488
  struct comp_unit * unit;
5664
488
  htab_t sym_hash;
5665
488
  bfd_signed_vma result = 0;
5666
488
  asymbol ** psym;
5667
5668
488
  stash = (struct dwarf2_debug *) *pinfo;
5669
5670
488
  if (stash == NULL || symbols == NULL)
5671
0
    return 0;
5672
5673
488
  sym_hash = htab_create_alloc (10, hash_asymbol, eq_asymbol,
5674
488
        NULL, xcalloc, free);
5675
5.74k
  for (psym = symbols; * psym != NULL; psym++)
5676
5.25k
    {
5677
5.25k
      asymbol * sym = * psym;
5678
5679
5.25k
      if (sym->flags & BSF_FUNCTION && sym->section != NULL)
5680
202
  {
5681
202
    void **slot = htab_find_slot (sym_hash, sym, INSERT);
5682
202
    *slot = sym;
5683
202
  }
5684
5.25k
    }
5685
5686
488
  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
488
 done:
5711
488
  htab_delete (sym_hash);
5712
488
  return result;
5713
488
}
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
94.9k
{
5730
94.9k
  return _bfd_dwarf2_find_nearest_line_with_alt
5731
94.9k
    (abfd, NULL, symbols, symbol, section, offset, filename_ptr,
5732
94.9k
     functionname_ptr, linenumber_ptr, discriminator_ptr, debug_sections,
5733
94.9k
     pinfo);
5734
94.9k
}
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
311k
{
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
311k
  struct dwarf2_debug *stash;
5776
  /* What address are we looking for?  */
5777
311k
  bfd_vma addr;
5778
311k
  struct comp_unit* each;
5779
311k
  struct funcinfo *function = NULL;
5780
311k
  int found = false;
5781
311k
  bool do_line;
5782
5783
311k
  *filename_ptr = NULL;
5784
311k
  if (functionname_ptr != NULL)
5785
266k
    *functionname_ptr = NULL;
5786
311k
  *linenumber_ptr = 0;
5787
311k
  if (discriminator_ptr)
5788
0
    *discriminator_ptr = 0;
5789
5790
311k
  if (! _bfd_dwarf2_slurp_debug_info (abfd, NULL, debug_sections,
5791
311k
              symbols, pinfo,
5792
311k
              (abfd->flags & (EXEC_P | DYNAMIC)) == 0))
5793
74.0k
    return false;
5794
5795
237k
  stash = (struct dwarf2_debug *) *pinfo;
5796
5797
237k
  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
237k
  do_line = symbol != NULL;
5815
237k
  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
199k
  else
5822
199k
    {
5823
199k
      BFD_ASSERT (section != NULL && functionname_ptr != NULL);
5824
199k
      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
199k
      if (symbols != NULL && (section->flags & SEC_CODE) == 0)
5840
176k
  {
5841
176k
    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
176k
  }
5857
199k
    }
5858
5859
237k
  if (section->output_section)
5860
0
    addr += section->output_section->vma + section->output_offset;
5861
237k
  else
5862
237k
    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
237k
  if (! stash->f.info_ptr)
5867
0
    return false;
5868
5869
237k
  stash->inliner_chain = NULL;
5870
5871
  /* Check the previously read comp. units first.  */
5872
237k
  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
178k
  else
5905
178k
    {
5906
178k
      struct trie_node *trie = stash->f.trie_root;
5907
178k
      unsigned int bits = VMA_BITS - 8;
5908
178k
      struct comp_unit **prev_each;
5909
5910
      /* Traverse interior nodes until we get to a leaf.  */
5911
260k
      while (trie && trie->num_room_in_leaf == 0)
5912
81.9k
  {
5913
81.9k
    int ch = (addr >> bits) & 0xff;
5914
81.9k
    trie = ((struct trie_interior *) trie)->children[ch];
5915
81.9k
    bits -= 8;
5916
81.9k
  }
5917
5918
178k
      if (trie)
5919
178k
  {
5920
178k
    const struct trie_leaf *leaf = (struct trie_leaf *) trie;
5921
178k
    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.33M
    for (i = 0; i < leaf->num_stored_in_leaf; ++i)
5927
2.16M
      {
5928
2.16M
        struct comp_unit *unit = leaf->ranges[i].unit;
5929
2.16M
        if (unit->mark
5930
2.16M
      || addr < leaf->ranges[i].low_pc
5931
2.16M
      || addr >= leaf->ranges[i].high_pc)
5932
2.14M
          continue;
5933
19.9k
        unit->mark = true;
5934
5935
19.9k
        found = comp_unit_find_nearest_line (unit, addr,
5936
19.9k
               filename_ptr,
5937
19.9k
               &function,
5938
19.9k
               linenumber_ptr,
5939
19.9k
               discriminator_ptr);
5940
19.9k
        if (found)
5941
10.4k
    goto done;
5942
19.9k
     }
5943
178k
  }
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
168k
      prev_each = &stash->f.all_comp_units_without_ranges;
5949
168k
      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
168k
    }
5967
5968
  /* Read each remaining comp. units checking each as they are read.  */
5969
226k
  while ((each = stash_comp_unit (stash, &stash->f)) != NULL)
5970
3.53k
    {
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.53k
      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
236
      else
5982
236
  found = (comp_unit_may_contain_address (each, addr)
5983
236
     && comp_unit_find_nearest_line (each, addr,
5984
236
             filename_ptr,
5985
236
             &function,
5986
236
             linenumber_ptr,
5987
236
             discriminator_ptr));
5988
5989
3.53k
      if (found)
5990
95
  break;
5991
3.53k
    }
5992
5993
237k
 done:
5994
237k
  if (functionname_ptr && function && function->is_linkage)
5995
8.25k
    {
5996
8.25k
      *functionname_ptr = function->name;
5997
8.25k
      if (!found)
5998
0
        found = 2;
5999
8.25k
    }
6000
228k
  else if (functionname_ptr
6001
228k
     && (!*functionname_ptr
6002
191k
         || (function && !function->is_linkage)))
6003
191k
    {
6004
191k
      asymbol *fun;
6005
191k
      asymbol **syms = symbols;
6006
191k
      asection *sec = section;
6007
6008
191k
      _bfd_dwarf2_stash_syms (stash, abfd, &sec, &syms);
6009
191k
      fun = _bfd_elf_find_function (abfd, syms, sec, offset,
6010
191k
            *filename_ptr ? NULL : filename_ptr,
6011
191k
            functionname_ptr);
6012
6013
191k
      if (!found && fun != NULL)
6014
15.2k
  found = 2;
6015
6016
191k
      if (function && !function->is_linkage)
6017
71
  {
6018
71
    bfd_vma sec_vma;
6019
6020
71
    sec_vma = section->vma;
6021
71
    if (section->output_section != NULL)
6022
0
      sec_vma = section->output_section->vma + section->output_offset;
6023
71
    if (fun == NULL)
6024
17
      *functionname_ptr = function->name;
6025
54
    else if (fun->value + sec_vma == function->arange.low)
6026
32
      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
71
    function->is_linkage = true;
6030
71
  }
6031
191k
    }
6032
6033
237k
  unset_sections (stash);
6034
6035
237k
  return found;
6036
222k
}
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
6.49k
{
6068
6.49k
  struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
6069
6.49k
  struct comp_unit *each;
6070
6.49k
  struct dwarf2_debug_file *file;
6071
6072
6.49k
  if (abfd == NULL || stash == NULL)
6073
5.37k
    return;
6074
6075
1.11k
  if (stash->varinfo_hash_table)
6076
148
    bfd_hash_table_free (&stash->varinfo_hash_table->base);
6077
1.11k
  if (stash->funcinfo_hash_table)
6078
148
    bfd_hash_table_free (&stash->funcinfo_hash_table->base);
6079
6080
1.11k
  file = &stash->f;
6081
2.22k
  while (1)
6082
2.22k
    {
6083
5.75k
      for (each = file->all_comp_units; each; each = each->next_unit)
6084
3.53k
  {
6085
3.53k
    struct funcinfo *function_table = each->function_table;
6086
3.53k
    struct varinfo *variable_table = each->variable_table;
6087
6088
3.53k
    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.53k
    free (each->lookup_funcinfo_table);
6095
3.53k
    each->lookup_funcinfo_table = NULL;
6096
6097
31.0k
    while (function_table)
6098
27.5k
      {
6099
27.5k
        free (function_table->file);
6100
27.5k
        function_table->file = NULL;
6101
27.5k
        free (function_table->caller_file);
6102
27.5k
        function_table->caller_file = NULL;
6103
27.5k
        function_table = function_table->prev_func;
6104
27.5k
      }
6105
6106
68.0k
    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.53k
  }
6113
6114
2.22k
      if (file->line_table)
6115
282
  {
6116
282
    free (file->line_table->files);
6117
282
    free (file->line_table->dirs);
6118
282
  }
6119
2.22k
      htab_delete (file->abbrev_offsets);
6120
2.22k
      if (file->comp_unit_tree != NULL)
6121
387
  splay_tree_delete (file->comp_unit_tree);
6122
6123
2.22k
      free (file->dwarf_line_str_buffer);
6124
2.22k
      free (file->dwarf_str_buffer);
6125
2.22k
      free (file->dwarf_ranges_buffer);
6126
2.22k
      free (file->dwarf_line_buffer);
6127
2.22k
      free (file->dwarf_abbrev_buffer);
6128
2.22k
      free (file->dwarf_info_buffer);
6129
2.22k
      if (file == &stash->alt)
6130
1.11k
  break;
6131
1.11k
      file = &stash->alt;
6132
1.11k
    }
6133
1.11k
  free (stash->sec_vma);
6134
1.11k
  free (stash->adjusted_sections);
6135
1.11k
  if (stash->close_on_cleanup)
6136
0
    bfd_close (stash->f.bfd_ptr);
6137
1.11k
  if (stash->alt.bfd_ptr)
6138
0
    bfd_close (stash->alt.bfd_ptr);
6139
1.11k
}
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.32M
    return false;
6171
6172
  /* On the other hand, if it is closer, then use it.  */
6173
350k
  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.0k
  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.4k
    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.55k
  if (code_off + code_size <= offset)
6189
33
    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
121
    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
382k
{
6228
382k
  if (symbols == NULL)
6229
0
    return NULL;
6230
6231
382k
  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6232
0
    return NULL;
6233
6234
382k
  elf_find_function_cache * cache = elf_tdata (abfd)->elf_find_function_cache;
6235
6236
382k
  if (cache == NULL)
6237
832
    {
6238
832
      cache = bfd_zalloc (abfd, sizeof (*cache));
6239
832
      elf_tdata (abfd)->elf_find_function_cache = cache;
6240
832
      if (cache == NULL)
6241
0
  return NULL;
6242
832
    }
6243
6244
382k
  if (cache->last_section != section
6245
382k
      || cache->func == NULL
6246
382k
      || offset < cache->func->value
6247
382k
      || offset >= cache->func->value + cache->code_size)
6248
375k
    {
6249
375k
      asymbol *file;
6250
375k
      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
375k
      enum { nothing_seen, symbol_seen, file_after_symbol_seen } state;
6260
375k
      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6261
6262
375k
      file = NULL;
6263
375k
      state = nothing_seen;
6264
375k
      cache->filename = NULL;
6265
375k
      cache->func = NULL;
6266
375k
      cache->code_size = 0;
6267
375k
      cache->code_off = 0;
6268
375k
      cache->last_section = section;
6269
6270
154M
      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
42.4k
    state = file_after_symbol_seen;
6281
1.95M
        continue;
6282
1.95M
      }
6283
6284
152M
    if (state == nothing_seen)
6285
375k
      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
347k
      {
6294
347k
        cache->func = sym;
6295
347k
        cache->code_size = size;
6296
347k
        cache->code_off = code_off;
6297
347k
        cache->filename = NULL;
6298
6299
347k
        if (file != NULL
6300
347k
      && ((sym->flags & BSF_LOCAL) != 0
6301
313k
          || state != file_after_symbol_seen))
6302
294k
    cache->filename = bfd_asymbol_name (file);
6303
347k
      }
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.25k
      {
6312
1.25k
        cache->code_size = code_off - cache->code_off;
6313
1.25k
      }
6314
3.44M
  }
6315
375k
    }
6316
6317
382k
  if (cache->func == NULL)
6318
351k
    return NULL;
6319
6320
30.5k
  if (filename_ptr)
6321
28.3k
    *filename_ptr = cache->filename;
6322
30.5k
  if (functionname_ptr)
6323
30.5k
    *functionname_ptr = bfd_asymbol_name (cache->func);
6324
6325
30.5k
  return cache->func;
6326
382k
}