Coverage Report

Created: 2023-08-28 06:28

/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
51.8k
#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
25.9k
{
151
25.9k
  struct trie_leaf *leaf;
152
25.9k
  size_t amt = sizeof (*leaf) + TRIE_LEAF_SIZE * sizeof (leaf->ranges[0]);
153
25.9k
  leaf = bfd_zalloc (abfd, amt);
154
25.9k
  if (leaf == NULL)
155
0
    return NULL;
156
25.9k
  leaf->head.num_room_in_leaf = TRIE_LEAF_SIZE;
157
25.9k
  return &leaf->head;
158
25.9k
}
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
112
{
171
112
  return (r1->start <= r2->start && r2->start < r1->end)
172
112
    || (r1->start <= (r2->end - 1) && (r2->end - 1) < r1->end);
173
112
}
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
56
{
180
56
  struct addr_range *r1 = (struct addr_range *) xa;
181
56
  struct addr_range *r2 = (struct addr_range *) xb;
182
183
56
  if (addr_range_intersects (r1, r2) || addr_range_intersects (r2, r1))
184
0
    return 0;
185
56
  else if (r1->end <= r2->start)
186
28
    return -1;
187
28
  else
188
28
    return 1;
189
56
}
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
278
{
196
278
  free ((struct addr_range *)key);
197
278
}
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
0
#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
0
#define STASH_INFO_HASH_OFF    0
336
0
#define STASH_INFO_HASH_ON     1
337
0
#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
104k
#define ABBREV_HASH_SIZE 121
546
#endif
547
#ifndef ATTR_ALLOC_CHUNK
548
11.7k
#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
0
{
583
0
  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
0
  if (ret == NULL)
588
0
    {
589
0
      ret = (struct info_hash_entry *) bfd_hash_allocate (table,
590
0
                sizeof (* ret));
591
0
      if (ret == NULL)
592
0
  return NULL;
593
0
    }
594
595
  /* Call the allocation method of the base class.  */
596
0
  ret = ((struct info_hash_entry *)
597
0
   bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
598
599
  /* Initialize the local fields here.  */
600
0
  if (ret)
601
0
    ret->head = NULL;
602
603
0
  return (struct bfd_hash_entry *) ret;
604
0
}
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
0
{
613
0
  struct info_hash_table *hash_table;
614
615
0
  hash_table = ((struct info_hash_table *)
616
0
    bfd_alloc (abfd, sizeof (struct info_hash_table)));
617
0
  if (!hash_table)
618
0
    return hash_table;
619
620
0
  if (!bfd_hash_table_init (&hash_table->base, info_hash_table_newfunc,
621
0
          sizeof (struct info_hash_entry)))
622
0
    {
623
0
      bfd_release (abfd, hash_table);
624
0
      return NULL;
625
0
    }
626
627
0
  return hash_table;
628
0
}
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
0
{
641
0
  struct info_hash_entry *entry;
642
0
  struct info_list_node *node;
643
644
0
  entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base,
645
0
                 key, true, copy_p);
646
0
  if (!entry)
647
0
    return false;
648
649
0
  node = (struct info_list_node *) bfd_hash_allocate (&hash_table->base,
650
0
                  sizeof (*node));
651
0
  if (!node)
652
0
    return false;
653
654
0
  node->info = info;
655
0
  node->next = entry->head;
656
0
  entry->head = node;
657
658
0
  return true;
659
0
}
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
0
{
667
0
  struct info_hash_entry *entry;
668
669
0
  entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base, key,
670
0
                 false, false);
671
0
  return entry ? entry->head : NULL;
672
0
}
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
21.4k
{
688
21.4k
  const char *section_name = sec->uncompressed_name;
689
21.4k
  bfd_byte *contents = *section_buffer;
690
691
  /* The section may have already been read.  */
692
21.4k
  if (contents == NULL)
693
1.69k
    {
694
1.69k
      bfd_size_type amt;
695
1.69k
      asection *msec;
696
697
1.69k
      msec = bfd_get_section_by_name (abfd, section_name);
698
1.69k
      if (msec == NULL)
699
148
  {
700
148
    section_name = sec->compressed_name;
701
148
          msec = bfd_get_section_by_name (abfd, section_name);
702
148
  }
703
1.69k
      if (msec == NULL)
704
148
  {
705
148
    _bfd_error_handler (_("DWARF error: can't find %s section."),
706
148
            sec->uncompressed_name);
707
148
    bfd_set_error (bfd_error_bad_value);
708
148
    return false;
709
148
  }
710
711
1.54k
      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
1.53k
      if (_bfd_section_size_insane (abfd, msec))
720
206
  {
721
    /* PR 26946 */
722
206
    _bfd_error_handler (_("DWARF error: section %s is too big"),
723
206
            section_name);
724
206
    return false;
725
206
  }
726
1.33k
      amt = bfd_get_section_limit_octets (abfd, msec);
727
1.33k
      *section_size = amt;
728
      /* Paranoia - alloc one extra so that we can make sure a string
729
   section is NUL terminated.  */
730
1.33k
      amt += 1;
731
1.33k
      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.33k
      contents = (bfd_byte *) bfd_malloc (amt);
738
1.33k
      if (contents == NULL)
739
0
  return false;
740
1.33k
      if (syms
741
1.33k
    ? !bfd_simple_get_relocated_section_contents (abfd, msec, contents,
742
1.20k
              syms)
743
1.33k
    : !bfd_get_section_contents (abfd, msec, contents, 0, *section_size))
744
143
  {
745
143
    free (contents);
746
143
    return false;
747
143
  }
748
1.19k
      contents[*section_size] = 0;
749
1.19k
      *section_buffer = contents;
750
1.19k
    }
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
20.9k
  if (offset != 0 && offset >= *section_size)
755
87
    {
756
      /* xgettext: c-format */
757
87
      _bfd_error_handler (_("DWARF error: offset (%" PRIu64 ")"
758
87
          " greater than or equal to %s size (%" PRIu64 ")"),
759
87
        (uint64_t) offset, section_name,
760
87
        (uint64_t) *section_size);
761
87
      bfd_set_error (bfd_error_bad_value);
762
87
      return false;
763
87
    }
764
765
20.8k
  return true;
766
20.9k
}
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
1.13M
{
773
1.13M
  bfd_byte *buf = *ptr;
774
1.13M
  if (end - buf < n)
775
40
    {
776
40
      *ptr = end;
777
40
      return 0;
778
40
    }
779
1.13M
  *ptr = buf + n;
780
1.13M
  return bfd_get (n * 8, abfd, buf);
781
1.13M
}
782
783
static unsigned int
784
read_1_byte (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
785
1.02M
{
786
1.02M
  return read_n_bytes (abfd, ptr, end, 1);
787
1.02M
}
788
789
static int
790
read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte **ptr, bfd_byte *end)
791
234
{
792
234
  bfd_byte *buf = *ptr;
793
234
  if (end - buf < 1)
794
0
    {
795
0
      *ptr = end;
796
0
      return 0;
797
0
    }
798
234
  *ptr = buf + 1;
799
234
  return bfd_get_signed_8 (abfd, buf);
800
234
}
801
802
static unsigned int
803
read_2_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
804
18.3k
{
805
18.3k
  return read_n_bytes (abfd, ptr, end, 2);
806
18.3k
}
807
808
static unsigned int
809
read_3_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
810
9
{
811
9
  unsigned int val = read_1_byte (abfd, ptr, end);
812
9
  val <<= 8;
813
9
  val |= read_1_byte (abfd, ptr, end);
814
9
  val <<= 8;
815
9
  val |= read_1_byte (abfd, ptr, end);
816
9
  if (bfd_little_endian (abfd))
817
9
    val = (((val >> 16) & 0xff)
818
9
     | (val & 0xff00)
819
9
     | ((val & 0xff) << 16));
820
9
  return val;
821
9
}
822
823
static unsigned int
824
read_4_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
825
84.0k
{
826
84.0k
  return read_n_bytes (abfd, ptr, end, 4);
827
84.0k
}
828
829
static uint64_t
830
read_8_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
831
15
{
832
15
  return read_n_bytes (abfd, ptr, end, 8);
833
15
}
834
835
static struct dwarf_block *
836
read_blk (bfd *abfd, bfd_byte **ptr, bfd_byte *end, size_t size)
837
2.08k
{
838
2.08k
  bfd_byte *buf = *ptr;
839
2.08k
  struct dwarf_block *block;
840
841
2.08k
  block = (struct dwarf_block *) bfd_alloc (abfd, sizeof (*block));
842
2.08k
  if (block == NULL)
843
0
    return NULL;
844
845
2.08k
  if (size > (size_t) (end - buf))
846
2
    {
847
2
      *ptr = end;
848
2
      block->data = NULL;
849
2
      block->size = 0;
850
2
    }
851
2.08k
  else
852
2.08k
    {
853
2.08k
      *ptr = buf + size;
854
2.08k
      block->data = buf;
855
2.08k
      block->size = size;
856
2.08k
    }
857
2.08k
  return block;
858
2.08k
}
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
2.34k
{
869
2.34k
  bfd_byte *buf = *ptr;
870
2.34k
  bfd_byte *str = buf;
871
872
25.0k
  while (buf < buf_end)
873
25.0k
    if (*buf++ == 0)
874
2.32k
      {
875
2.32k
  if (str == buf - 1)
876
446
    break;
877
1.88k
  *ptr = buf;
878
1.88k
  return (char *) str;
879
2.32k
      }
880
881
469
  *ptr = buf;
882
469
  return NULL;
883
2.34k
}
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
20.2k
{
898
20.2k
  uint64_t offset;
899
20.2k
  struct dwarf2_debug *stash = unit->stash;
900
20.2k
  struct dwarf2_debug_file *file = unit->file;
901
20.2k
  char *str;
902
903
20.2k
  if (unit->offset_size > (size_t) (buf_end - *ptr))
904
0
    {
905
0
      *ptr = buf_end;
906
0
      return NULL;
907
0
    }
908
909
20.2k
  if (unit->offset_size == 4)
910
20.2k
    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
20.2k
  if (! read_section (unit->abfd, &stash->debug_sections[debug_str],
915
20.2k
          file->syms, offset,
916
20.2k
          &file->dwarf_str_buffer, &file->dwarf_str_size))
917
452
    return NULL;
918
919
19.8k
  str = (char *) file->dwarf_str_buffer + offset;
920
19.8k
  if (*str == '\0')
921
33
    return NULL;
922
19.8k
  return str;
923
19.8k
}
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
4
{
932
4
  uint64_t offset;
933
4
  struct dwarf2_debug *stash = unit->stash;
934
4
  struct dwarf2_debug_file *file = unit->file;
935
4
  char *str;
936
937
4
  if (unit->offset_size > (size_t) (buf_end - *ptr))
938
0
    {
939
0
      *ptr = buf_end;
940
0
      return NULL;
941
0
    }
942
943
4
  if (unit->offset_size == 4)
944
4
    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
4
  if (! read_section (unit->abfd, &stash->debug_sections[debug_line_str],
949
4
          file->syms, offset,
950
4
          &file->dwarf_line_str_buffer,
951
4
          &file->dwarf_line_str_size))
952
4
    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
101k
{
1064
101k
  bfd_byte *buf = *ptr;
1065
101k
  int signed_vma = 0;
1066
1067
101k
  if (bfd_get_flavour (unit->abfd) == bfd_target_elf_flavour)
1068
101k
    signed_vma = get_elf_backend_data (unit->abfd)->sign_extend_vma;
1069
1070
101k
  if (unit->addr_size > (size_t) (buf_end - buf))
1071
1
    {
1072
1
      *ptr = buf_end;
1073
1
      return 0;
1074
1
    }
1075
1076
101k
  *ptr = buf + unit->addr_size;
1077
101k
  if (signed_vma)
1078
354
    {
1079
354
      switch (unit->addr_size)
1080
354
  {
1081
354
  case 8:
1082
354
    return bfd_get_signed_64 (unit->abfd, buf);
1083
0
  case 4:
1084
0
    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
354
  }
1090
354
    }
1091
100k
  else
1092
100k
    {
1093
100k
      switch (unit->addr_size)
1094
100k
  {
1095
100k
  case 8:
1096
100k
    return bfd_get_64 (unit->abfd, buf);
1097
0
  case 4:
1098
0
    return bfd_get_32 (unit->abfd, buf);
1099
12
  case 2:
1100
12
    return bfd_get_16 (unit->abfd, buf);
1101
0
  default:
1102
0
    abort ();
1103
100k
  }
1104
100k
    }
1105
101k
}
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
67.5k
{
1112
67.5k
  unsigned int hash_number;
1113
67.5k
  struct abbrev_info *abbrev;
1114
1115
67.5k
  hash_number = number % ABBREV_HASH_SIZE;
1116
67.5k
  abbrev = abbrevs[hash_number];
1117
1118
67.6k
  while (abbrev)
1119
65.6k
    {
1120
65.6k
      if (abbrev->number == number)
1121
65.5k
  return abbrev;
1122
72
      else
1123
72
  abbrev = abbrev->next;
1124
65.6k
    }
1125
1126
1.96k
  return NULL;
1127
67.5k
}
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
309
{
1142
309
  const struct abbrev_offset_entry *ent = p;
1143
309
  return htab_hash_pointer ((void *) ent->offset);
1144
309
}
1145
1146
static int
1147
eq_abbrev (const void *pa, const void *pb)
1148
14
{
1149
14
  const struct abbrev_offset_entry *a = pa;
1150
14
  const struct abbrev_offset_entry *b = pb;
1151
14
  return a->offset == b->offset;
1152
14
}
1153
1154
static void
1155
del_abbrev (void *p)
1156
286
{
1157
286
  struct abbrev_offset_entry *ent = p;
1158
286
  struct abbrev_info **abbrevs = ent->abbrevs;
1159
286
  size_t i;
1160
1161
34.8k
  for (i = 0; i < ABBREV_HASH_SIZE; i++)
1162
34.6k
    {
1163
34.6k
      struct abbrev_info *abbrev = abbrevs[i];
1164
1165
36.5k
      while (abbrev)
1166
1.97k
  {
1167
1.97k
    free (abbrev->attrs);
1168
1.97k
    abbrev = abbrev->next;
1169
1.97k
  }
1170
34.6k
    }
1171
286
  free (ent);
1172
286
}
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
309
{
1183
309
  struct abbrev_info **abbrevs;
1184
309
  bfd_byte *abbrev_ptr;
1185
309
  bfd_byte *abbrev_end;
1186
309
  struct abbrev_info *cur_abbrev;
1187
309
  unsigned int abbrev_number, abbrev_name;
1188
309
  unsigned int abbrev_form, hash_number;
1189
309
  size_t amt;
1190
309
  void **slot;
1191
309
  struct abbrev_offset_entry ent = { offset, NULL };
1192
1193
309
  if (ent.offset != offset)
1194
0
    return NULL;
1195
1196
309
  slot = htab_find_slot (file->abbrev_offsets, &ent, INSERT);
1197
309
  if (slot == NULL)
1198
0
    return NULL;
1199
309
  if (*slot != NULL)
1200
14
    return ((struct abbrev_offset_entry *) (*slot))->abbrevs;
1201
1202
295
  if (! read_section (abfd, &stash->debug_sections[debug_abbrev],
1203
295
          file->syms, offset,
1204
295
          &file->dwarf_abbrev_buffer,
1205
295
          &file->dwarf_abbrev_size))
1206
9
    return NULL;
1207
1208
286
  amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
1209
286
  abbrevs = (struct abbrev_info **) bfd_zalloc (abfd, amt);
1210
286
  if (abbrevs == NULL)
1211
0
    return NULL;
1212
1213
286
  abbrev_ptr = file->dwarf_abbrev_buffer + offset;
1214
286
  abbrev_end = file->dwarf_abbrev_buffer + file->dwarf_abbrev_size;
1215
286
  abbrev_number = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1216
286
           false, abbrev_end);
1217
1218
  /* Loop until we reach an abbrev number of 0.  */
1219
2.22k
  while (abbrev_number)
1220
1.97k
    {
1221
1.97k
      amt = sizeof (struct abbrev_info);
1222
1.97k
      cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt);
1223
1.97k
      if (cur_abbrev == NULL)
1224
0
  goto fail;
1225
1226
      /* Read in abbrev header.  */
1227
1.97k
      cur_abbrev->number = abbrev_number;
1228
1.97k
      cur_abbrev->tag = (enum dwarf_tag)
1229
1.97k
  _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1230
1.97k
             false, abbrev_end);
1231
1.97k
      cur_abbrev->has_children = read_1_byte (abfd, &abbrev_ptr, abbrev_end);
1232
1233
      /* Now read in declarations.  */
1234
1.97k
      for (;;)
1235
10.7k
  {
1236
    /* Initialize it just to avoid a GCC false warning.  */
1237
10.7k
    bfd_vma implicit_const = -1;
1238
1239
10.7k
    abbrev_name = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1240
10.7k
                 false, abbrev_end);
1241
10.7k
    abbrev_form = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1242
10.7k
                 false, abbrev_end);
1243
10.7k
    if (abbrev_form == DW_FORM_implicit_const)
1244
3
      implicit_const = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1245
3
                true, abbrev_end);
1246
10.7k
    if (abbrev_name == 0)
1247
1.97k
      break;
1248
1249
8.74k
    if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
1250
3.02k
      {
1251
3.02k
        struct attr_abbrev *tmp;
1252
1253
3.02k
        amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
1254
3.02k
        amt *= sizeof (struct attr_abbrev);
1255
3.02k
        tmp = (struct attr_abbrev *) bfd_realloc (cur_abbrev->attrs, amt);
1256
3.02k
        if (tmp == NULL)
1257
0
    goto fail;
1258
3.02k
        cur_abbrev->attrs = tmp;
1259
3.02k
      }
1260
1261
8.74k
    cur_abbrev->attrs[cur_abbrev->num_attrs].name
1262
8.74k
      = (enum dwarf_attribute) abbrev_name;
1263
8.74k
    cur_abbrev->attrs[cur_abbrev->num_attrs].form
1264
8.74k
      = (enum dwarf_form) abbrev_form;
1265
8.74k
    cur_abbrev->attrs[cur_abbrev->num_attrs].implicit_const
1266
8.74k
      = implicit_const;
1267
8.74k
    ++cur_abbrev->num_attrs;
1268
8.74k
  }
1269
1270
1.97k
      hash_number = abbrev_number % ABBREV_HASH_SIZE;
1271
1.97k
      cur_abbrev->next = abbrevs[hash_number];
1272
1.97k
      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
1.97k
      if ((size_t) (abbrev_ptr - file->dwarf_abbrev_buffer)
1282
1.97k
    >= file->dwarf_abbrev_size)
1283
26
  break;
1284
1.95k
      abbrev_number = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1285
1.95k
               false, abbrev_end);
1286
1.95k
      if (lookup_abbrev (abbrev_number, abbrevs) != NULL)
1287
11
  break;
1288
1.95k
    }
1289
1290
286
  *slot = bfd_malloc (sizeof ent);
1291
286
  if (!*slot)
1292
0
    goto fail;
1293
286
  ent.abbrevs = abbrevs;
1294
286
  memcpy (*slot, &ent, sizeof ent);
1295
286
  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
286
}
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
13.7k
{
1322
13.7k
  switch (attr->form)
1323
13.7k
    {
1324
0
    case DW_FORM_string:
1325
13.6k
    case DW_FORM_strp:
1326
13.6k
    case DW_FORM_strx:
1327
13.7k
    case DW_FORM_strx1:
1328
13.7k
    case DW_FORM_strx2:
1329
13.7k
    case DW_FORM_strx3:
1330
13.7k
    case DW_FORM_strx4:
1331
13.7k
    case DW_FORM_line_strp:
1332
13.7k
    case DW_FORM_GNU_strp_alt:
1333
13.7k
      return true;
1334
1335
15
    default:
1336
15
      return false;
1337
13.7k
    }
1338
13.7k
}
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
41.3k
{
1345
41.3k
  switch (attr->form)
1346
41.3k
    {
1347
3.14k
    case DW_FORM_addr:
1348
11.7k
    case DW_FORM_data2:
1349
14.8k
    case DW_FORM_data4:
1350
14.8k
    case DW_FORM_data8:
1351
27.1k
    case DW_FORM_data1:
1352
27.1k
    case DW_FORM_flag:
1353
27.1k
    case DW_FORM_sdata:
1354
27.1k
    case DW_FORM_udata:
1355
27.1k
    case DW_FORM_ref_addr:
1356
27.1k
    case DW_FORM_ref1:
1357
27.1k
    case DW_FORM_ref2:
1358
34.9k
    case DW_FORM_ref4:
1359
34.9k
    case DW_FORM_ref8:
1360
34.9k
    case DW_FORM_ref_udata:
1361
41.1k
    case DW_FORM_sec_offset:
1362
41.1k
    case DW_FORM_flag_present:
1363
41.1k
    case DW_FORM_ref_sig8:
1364
41.1k
    case DW_FORM_addrx:
1365
41.1k
    case DW_FORM_implicit_const:
1366
41.2k
    case DW_FORM_addrx1:
1367
41.2k
    case DW_FORM_addrx2:
1368
41.2k
    case DW_FORM_addrx3:
1369
41.2k
    case DW_FORM_addrx4:
1370
41.2k
    case DW_FORM_GNU_ref_alt:
1371
41.2k
      return true;
1372
1373
127
    default:
1374
127
      return false;
1375
41.3k
    }
1376
41.3k
}
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
1.92k
{
1383
1.92k
  return (form == DW_FORM_strx
1384
1.92k
    || form == DW_FORM_strx1
1385
1.92k
    || form == DW_FORM_strx2
1386
1.92k
    || form == DW_FORM_strx3
1387
1.92k
    || form == DW_FORM_strx4);
1388
1.92k
}
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
1.91k
{
1395
1.91k
  return (form == DW_FORM_addrx
1396
1.91k
    || form == DW_FORM_addrx1
1397
1.91k
    || form == DW_FORM_addrx2
1398
1.91k
    || form == DW_FORM_addrx3
1399
1.91k
    || form == DW_FORM_addrx4);
1400
1.91k
}
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
20
{
1407
20
  struct dwarf2_debug *stash = unit->stash;
1408
20
  struct dwarf2_debug_file *file = unit->file;
1409
20
  bfd_byte *info_ptr;
1410
20
  size_t offset;
1411
1412
20
  if (stash == NULL)
1413
0
    return 0;
1414
1415
20
  if (!read_section (unit->abfd, &stash->debug_sections[debug_addr],
1416
20
         file->syms, 0,
1417
20
         &file->dwarf_addr_buffer, &file->dwarf_addr_size))
1418
20
    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
11
{
1444
11
  struct dwarf2_debug *stash = unit->stash;
1445
11
  struct dwarf2_debug_file *file = unit->file;
1446
11
  bfd_byte *info_ptr;
1447
11
  uint64_t str_offset;
1448
11
  size_t offset;
1449
1450
11
  if (stash == NULL)
1451
0
    return NULL;
1452
1453
11
  if (!read_section (unit->abfd, &stash->debug_sections[debug_str],
1454
11
         file->syms, 0,
1455
11
         &file->dwarf_str_buffer, &file->dwarf_str_size))
1456
10
    return NULL;
1457
1458
1
  if (!read_section (unit->abfd, &stash->debug_sections[debug_str_offsets],
1459
1
         file->syms, 0,
1460
1
         &file->dwarf_str_offsets_buffer,
1461
1
         &file->dwarf_str_offsets_size))
1462
1
    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
210k
{
1499
210k
  bfd *abfd = unit->abfd;
1500
210k
  size_t amt;
1501
1502
210k
  if (info_ptr >= info_ptr_end && form != DW_FORM_flag_present)
1503
2
    {
1504
2
      _bfd_error_handler (_("DWARF error: info pointer extends beyond end of attributes"));
1505
2
      bfd_set_error (bfd_error_bad_value);
1506
2
      return NULL;
1507
2
    }
1508
1509
210k
  attr->form = (enum dwarf_form) form;
1510
1511
210k
  switch (form)
1512
210k
    {
1513
18.9k
    case DW_FORM_flag_present:
1514
18.9k
      attr->u.val = 1;
1515
18.9k
      break;
1516
3
    case DW_FORM_ref_addr:
1517
      /* DW_FORM_ref_addr is an address in DWARF2, and an offset in
1518
   DWARF3.  */
1519
3
      if (unit->version >= 3)
1520
3
  {
1521
3
    if (unit->offset_size == 4)
1522
3
      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
3
    break;
1526
3
  }
1527
      /* FALLTHROUGH */
1528
35.7k
    case DW_FORM_addr:
1529
35.7k
      attr->u.val = read_address (unit, &info_ptr, info_ptr_end);
1530
35.7k
      break;
1531
0
    case DW_FORM_GNU_ref_alt:
1532
12.6k
    case DW_FORM_sec_offset:
1533
12.6k
      if (unit->offset_size == 4)
1534
12.6k
  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
12.6k
      break;
1538
16
    case DW_FORM_block2:
1539
16
      amt = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1540
16
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1541
16
      if (attr->u.blk == NULL)
1542
0
  return NULL;
1543
16
      break;
1544
16
    case DW_FORM_block4:
1545
1
      amt = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1546
1
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1547
1
      if (attr->u.blk == NULL)
1548
0
  return NULL;
1549
1
      break;
1550
1
    case DW_FORM_ref1:
1551
2
    case DW_FORM_flag:
1552
53.1k
    case DW_FORM_data1:
1553
53.1k
      attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
1554
53.1k
      break;
1555
55
    case DW_FORM_addrx1:
1556
55
      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
55
      if (unit->dwarf_addr_offset != 0)
1560
0
  attr->u.val = read_indexed_address (attr->u.val, unit);
1561
55
      break;
1562
17.7k
    case DW_FORM_data2:
1563
17.7k
    case DW_FORM_ref2:
1564
17.7k
      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1565
17.7k
      break;
1566
0
    case DW_FORM_addrx2:
1567
0
      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1568
0
      if (unit->dwarf_addr_offset != 0)
1569
0
  attr->u.val = read_indexed_address (attr->u.val, unit);
1570
0
      break;
1571
3
    case DW_FORM_addrx3:
1572
3
      attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
1573
3
      if (unit->dwarf_addr_offset != 0)
1574
0
  attr->u.val = read_indexed_address(attr->u.val, unit);
1575
3
      break;
1576
43.3k
    case DW_FORM_ref4:
1577
49.6k
    case DW_FORM_data4:
1578
49.6k
      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1579
49.6k
      break;
1580
140
    case DW_FORM_addrx4:
1581
140
      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1582
140
      if (unit->dwarf_addr_offset != 0)
1583
0
  attr->u.val = read_indexed_address (attr->u.val, unit);
1584
140
      break;
1585
6
    case DW_FORM_data8:
1586
6
    case DW_FORM_ref8:
1587
8
    case DW_FORM_ref_sig8:
1588
8
      attr->u.val = read_8_bytes (abfd, &info_ptr, info_ptr_end);
1589
8
      break;
1590
0
    case DW_FORM_string:
1591
0
      attr->u.str = read_string (&info_ptr, info_ptr_end);
1592
0
      break;
1593
20.2k
    case DW_FORM_strp:
1594
20.2k
      attr->u.str = read_indirect_string (unit, &info_ptr, info_ptr_end);
1595
20.2k
      break;
1596
4
    case DW_FORM_line_strp:
1597
4
      attr->u.str = read_indirect_line_string (unit, &info_ptr, info_ptr_end);
1598
4
      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
4
    case DW_FORM_strx1:
1603
4
      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
4
      if (unit->dwarf_str_offset != 0)
1607
0
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1608
4
      else
1609
4
  attr->u.str = NULL;
1610
4
      break;
1611
6
    case DW_FORM_strx2:
1612
6
      attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1613
6
      if (unit->dwarf_str_offset != 0)
1614
0
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1615
6
      else
1616
6
  attr->u.str = NULL;
1617
6
      break;
1618
6
    case DW_FORM_strx3:
1619
6
      attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
1620
6
      if (unit->dwarf_str_offset != 0)
1621
0
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1622
6
      else
1623
6
  attr->u.str = NULL;
1624
6
      break;
1625
69
    case DW_FORM_strx4:
1626
69
      attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1627
69
      if (unit->dwarf_str_offset != 0)
1628
0
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1629
69
      else
1630
69
  attr->u.str = NULL;
1631
69
      break;
1632
1
    case DW_FORM_strx:
1633
1
      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1634
1
             false, info_ptr_end);
1635
1
      if (unit->dwarf_str_offset != 0)
1636
0
  attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1637
1
      else
1638
1
  attr->u.str = NULL;
1639
1
      break;
1640
2.06k
    case DW_FORM_exprloc:
1641
2.06k
    case DW_FORM_block:
1642
2.06k
      amt = _bfd_safe_read_leb128 (abfd, &info_ptr,
1643
2.06k
           false, info_ptr_end);
1644
2.06k
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1645
2.06k
      if (attr->u.blk == NULL)
1646
0
  return NULL;
1647
2.06k
      break;
1648
2.06k
    case DW_FORM_block1:
1649
7
      amt = read_1_byte (abfd, &info_ptr, info_ptr_end);
1650
7
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1651
7
      if (attr->u.blk == NULL)
1652
0
  return NULL;
1653
7
      break;
1654
7
    case DW_FORM_sdata:
1655
5
      attr->u.sval = _bfd_safe_read_leb128 (abfd, &info_ptr,
1656
5
              true, info_ptr_end);
1657
5
      break;
1658
1659
0
    case DW_FORM_rnglistx:
1660
4
    case DW_FORM_loclistx:
1661
      /* FIXME: Add support for these forms!  */
1662
      /* Fall through.  */
1663
35
    case DW_FORM_ref_udata:
1664
45
    case DW_FORM_udata:
1665
45
      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1666
45
             false, info_ptr_end);
1667
45
      break;
1668
14
    case DW_FORM_addrx:
1669
14
      attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1670
14
             false, info_ptr_end);
1671
14
      if (unit->dwarf_addr_offset != 0)
1672
0
  attr->u.val = read_indexed_address (attr->u.val, unit);
1673
14
      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
0
    case DW_FORM_implicit_const:
1684
0
      attr->form = DW_FORM_sdata;
1685
0
      attr->u.sval = implicit_const;
1686
0
      break;
1687
0
    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
0
      attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, 16);
1691
0
      if (attr->u.blk == NULL)
1692
0
  return NULL;
1693
0
      break;
1694
1695
19
    default:
1696
19
      _bfd_error_handler (_("DWARF error: invalid or unhandled FORM value: %#x"),
1697
19
        form);
1698
19
      bfd_set_error (bfd_error_bad_value);
1699
19
      return NULL;
1700
210k
    }
1701
210k
  return info_ptr;
1702
210k
}
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
210k
{
1713
210k
  attr->name = abbrev->name;
1714
210k
  info_ptr = read_attribute_value (attr, abbrev->form, abbrev->implicit_const,
1715
210k
           unit, info_ptr, info_ptr_end);
1716
210k
  return info_ptr;
1717
210k
}
1718
1719
/* Return mangling style given LANG.  */
1720
1721
static int
1722
mangle_style (int lang)
1723
13.3k
{
1724
13.3k
  switch (lang)
1725
13.3k
    {
1726
0
    case DW_LANG_Ada83:
1727
0
    case DW_LANG_Ada95:
1728
0
      return DMGL_GNAT;
1729
1730
0
    case DW_LANG_C_plus_plus:
1731
0
    case DW_LANG_C_plus_plus_03:
1732
2
    case DW_LANG_C_plus_plus_11:
1733
2
    case DW_LANG_C_plus_plus_14:
1734
2
      return DMGL_GNU_V3;
1735
1736
26
    case DW_LANG_Java:
1737
26
      return DMGL_JAVA;
1738
1739
5
    case DW_LANG_D:
1740
5
      return DMGL_DLANG;
1741
1742
0
    case DW_LANG_Rust:
1743
18
    case DW_LANG_Rust_old:
1744
18
      return DMGL_RUST;
1745
1746
46
    default:
1747
46
      return DMGL_AUTO;
1748
1749
0
    case DW_LANG_C89:
1750
0
    case DW_LANG_C:
1751
0
    case DW_LANG_Cobol74:
1752
0
    case DW_LANG_Cobol85:
1753
0
    case DW_LANG_Fortran77:
1754
0
    case DW_LANG_Pascal83:
1755
0
    case DW_LANG_PLI:
1756
13.2k
    case DW_LANG_C99:
1757
13.2k
    case DW_LANG_UPC:
1758
13.2k
    case DW_LANG_C11:
1759
13.2k
    case DW_LANG_Mips_Assembler:
1760
13.2k
    case DW_LANG_Upc:
1761
13.2k
    case DW_LANG_HP_Basic91:
1762
13.2k
    case DW_LANG_HP_IMacro:
1763
13.2k
    case DW_LANG_HP_Assembler:
1764
13.2k
      return 0;
1765
13.3k
    }
1766
13.3k
}
1767
1768
/* Source line information table routines.  */
1769
1770
1.65k
#define FILE_ALLOC_CHUNK 5
1771
795
#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
350k
{
1884
350k
  return (new_line->address > line->address
1885
350k
    || (new_line->address == line->address
1886
45.0k
        && new_line->op_index > line->op_index));
1887
350k
}
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
310k
{
1905
310k
  size_t amt = sizeof (struct line_info);
1906
310k
  struct line_sequence* seq = table->sequences;
1907
310k
  struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt);
1908
1909
310k
  if (info == NULL)
1910
0
    return false;
1911
1912
  /* Set member data of 'info'.  */
1913
310k
  info->prev_line = NULL;
1914
310k
  info->address = address;
1915
310k
  info->op_index = op_index;
1916
310k
  info->line = line;
1917
310k
  info->column = column;
1918
310k
  info->discriminator = discriminator;
1919
310k
  info->end_sequence = end_sequence;
1920
1921
310k
  if (filename && filename[0])
1922
310k
    {
1923
310k
      info->filename = (char *) bfd_alloc (table->abfd, strlen (filename) + 1);
1924
310k
      if (info->filename == NULL)
1925
0
  return false;
1926
310k
      strcpy (info->filename, filename);
1927
310k
    }
1928
64
  else
1929
64
    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
310k
  if (seq
1947
310k
      && seq->last_line->address == address
1948
310k
      && seq->last_line->op_index == op_index
1949
310k
      && seq->last_line->end_sequence == end_sequence)
1950
240
    {
1951
      /* We only keep the last entry with the same address and end
1952
   sequence.  See PR ld/4986.  */
1953
240
      if (table->lcl_head == seq->last_line)
1954
69
  table->lcl_head = info;
1955
240
      info->prev_line = seq->last_line->prev_line;
1956
240
      seq->last_line = info;
1957
240
    }
1958
310k
  else if (!seq || seq->last_line->end_sequence)
1959
2.40k
    {
1960
      /* Start a new line sequence.  */
1961
2.40k
      amt = sizeof (struct line_sequence);
1962
2.40k
      seq = (struct line_sequence *) bfd_malloc (amt);
1963
2.40k
      if (seq == NULL)
1964
0
  return false;
1965
2.40k
      seq->low_pc = address;
1966
2.40k
      seq->prev_sequence = table->sequences;
1967
2.40k
      seq->last_line = info;
1968
2.40k
      table->lcl_head = info;
1969
2.40k
      table->sequences = seq;
1970
2.40k
      table->num_sequences++;
1971
2.40k
    }
1972
308k
  else if (info->end_sequence
1973
308k
     || new_line_sorts_after (info, seq->last_line))
1974
305k
    {
1975
      /* Normal case: add 'info' to the beginning of the current sequence.  */
1976
305k
      info->prev_line = seq->last_line;
1977
305k
      seq->last_line = info;
1978
1979
      /* lcl_head: initialize to head a *possible* sequence at the end.  */
1980
305k
      if (!table->lcl_head)
1981
0
  table->lcl_head = info;
1982
305k
    }
1983
3.11k
  else if (!new_line_sorts_after (info, table->lcl_head)
1984
3.11k
     && (!table->lcl_head->prev_line
1985
2.58k
         || new_line_sorts_after (info, table->lcl_head->prev_line)))
1986
2.32k
    {
1987
      /* Abnormal but easy: lcl_head is the head of 'info'.  */
1988
2.32k
      info->prev_line = table->lcl_head->prev_line;
1989
2.32k
      table->lcl_head->prev_line = info;
1990
2.32k
    }
1991
795
  else
1992
795
    {
1993
      /* Abnormal and hard: Neither 'last_line' nor 'lcl_head'
1994
   are valid heads for 'info'.  Reset 'lcl_head'.  */
1995
795
      struct line_info* li2 = seq->last_line; /* Always non-NULL.  */
1996
795
      struct line_info* li1 = li2->prev_line;
1997
1998
19.4k
      while (li1)
1999
19.2k
  {
2000
19.2k
    if (!new_line_sorts_after (info, li2)
2001
19.2k
        && new_line_sorts_after (info, li1))
2002
682
      break;
2003
2004
18.6k
    li2 = li1; /* always non-NULL */
2005
18.6k
    li1 = li1->prev_line;
2006
18.6k
  }
2007
795
      table->lcl_head = li2;
2008
795
      info->prev_line = table->lcl_head->prev_line;
2009
795
      table->lcl_head->prev_line = info;
2010
795
      if (address < seq->low_pc)
2011
81
  seq->low_pc = address;
2012
795
    }
2013
310k
  return true;
2014
310k
}
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
29.5k
{
2023
29.5k
  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
29.5k
  if (! table->use_dir_and_file_0)
2033
29.5k
    {
2034
      /* Pre DWARF-5, FILE == 0 means unknown.  */
2035
29.5k
      if (file == 0)
2036
6
  return strdup ("<unknown>");
2037
29.5k
      -- file;
2038
29.5k
    }
2039
2040
29.5k
  if (table == NULL || file >= table->num_files)
2041
49
    {
2042
49
      _bfd_error_handler
2043
49
  (_("DWARF error: mangled line number section (bad file number)"));
2044
49
      return strdup ("<unknown>");
2045
49
    }
2046
2047
29.5k
  filename = table->files[file].name;
2048
2049
29.5k
  if (filename == NULL)
2050
0
    return strdup ("<unknown>");
2051
2052
29.5k
  if (!IS_ABSOLUTE_PATH (filename))
2053
29.5k
    {
2054
29.5k
      char *dir_name = NULL;
2055
29.5k
      char *subdir_name = NULL;
2056
29.5k
      char *name;
2057
29.5k
      size_t len;
2058
29.5k
      unsigned int dir = table->files[file].dir;
2059
2060
29.5k
      if (!table->use_dir_and_file_0)
2061
29.5k
  --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
29.5k
      if (dir < table->num_dirs)
2067
19.9k
  subdir_name = table->dirs[dir];
2068
2069
29.5k
      if (!subdir_name || !IS_ABSOLUTE_PATH (subdir_name))
2070
27.9k
  dir_name = table->comp_dir;
2071
2072
29.5k
      if (!dir_name)
2073
1.82k
  {
2074
1.82k
    dir_name = subdir_name;
2075
1.82k
    subdir_name = NULL;
2076
1.82k
  }
2077
2078
29.5k
      if (!dir_name)
2079
268
  return strdup (filename);
2080
2081
29.2k
      len = strlen (dir_name) + strlen (filename) + 2;
2082
2083
29.2k
      if (subdir_name)
2084
18.4k
  {
2085
18.4k
    len += strlen (subdir_name) + 1;
2086
18.4k
    name = (char *) bfd_malloc (len);
2087
18.4k
    if (name)
2088
18.4k
      sprintf (name, "%s/%s/%s", dir_name, subdir_name, filename);
2089
18.4k
  }
2090
10.8k
      else
2091
10.8k
  {
2092
10.8k
    name = (char *) bfd_malloc (len);
2093
10.8k
    if (name)
2094
10.8k
      sprintf (name, "%s/%s", dir_name, filename);
2095
10.8k
  }
2096
2097
29.2k
      return name;
2098
29.5k
    }
2099
2100
21
  return strdup (filename);
2101
29.5k
}
2102
2103
/* Number of bits in a bfd_vma.  */
2104
976k
#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
611k
{
2115
611k
  if (low1 == low2 || high1 == high2)
2116
465k
    return true;
2117
2118
  /* Sort so that low1 is below low2. */
2119
146k
  if (low1 > low2)
2120
141k
    {
2121
141k
      bfd_vma tmp;
2122
2123
141k
      tmp = low1;
2124
141k
      low1 = low2;
2125
141k
      low2 = tmp;
2126
2127
141k
      tmp = high1;
2128
141k
      high1 = high2;
2129
141k
      high2 = tmp;
2130
141k
    }
2131
2132
  /* We touch iff low2 == high1.
2133
     We overlap iff low2 is within [low1, high1). */
2134
146k
  return low2 <= high1;
2135
611k
}
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
699k
{
2151
699k
  bfd_vma clamped_low_pc, clamped_high_pc;
2152
699k
  int ch, from_ch, to_ch;
2153
699k
  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
699k
  if (trie->num_room_in_leaf > 0)
2159
545k
    {
2160
545k
      struct trie_leaf *leaf = (struct trie_leaf *) trie;
2161
545k
      unsigned int i;
2162
2163
638k
      for (i = 0; i < leaf->num_stored_in_leaf; ++i)
2164
611k
  {
2165
611k
    if (leaf->ranges[i].unit == unit
2166
611k
        && ranges_overlap (low_pc, high_pc,
2167
611k
         leaf->ranges[i].low_pc,
2168
611k
         leaf->ranges[i].high_pc))
2169
518k
      {
2170
518k
        if (low_pc < leaf->ranges[i].low_pc)
2171
5.16k
    leaf->ranges[i].low_pc = low_pc;
2172
518k
        if (high_pc > leaf->ranges[i].high_pc)
2173
245k
    leaf->ranges[i].high_pc = high_pc;
2174
518k
        return trie;
2175
518k
      }
2176
611k
  }
2177
2178
26.7k
      is_full_leaf = leaf->num_stored_in_leaf == trie->num_room_in_leaf;
2179
26.7k
    }
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
181k
  if (is_full_leaf && trie_pc_bits < VMA_BITS)
2184
328
    {
2185
328
      const struct trie_leaf *leaf = (struct trie_leaf *) trie;
2186
328
      unsigned int i;
2187
2188
328
      trie = bfd_zalloc (abfd, sizeof (struct trie_interior));
2189
328
      if (!trie)
2190
0
  return NULL;
2191
328
      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
5.57k
      for (i = 0; i < leaf->num_stored_in_leaf; ++i)
2197
5.24k
        {
2198
5.24k
    if (!insert_arange_in_trie (abfd, trie, trie_pc, trie_pc_bits,
2199
5.24k
              leaf->ranges[i].unit, leaf->ranges[i].low_pc,
2200
5.24k
              leaf->ranges[i].high_pc))
2201
0
      return NULL;
2202
5.24k
  }
2203
328
    }
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
181k
  if (is_full_leaf)
2208
0
    {
2209
0
      const struct trie_leaf *leaf = (struct trie_leaf *) trie;
2210
0
      unsigned int new_room_in_leaf = trie->num_room_in_leaf * 2;
2211
0
      struct trie_leaf *new_leaf;
2212
0
      size_t amt = sizeof (*leaf) + new_room_in_leaf * sizeof (leaf->ranges[0]);
2213
0
      new_leaf = bfd_zalloc (abfd, amt);
2214
0
      new_leaf->head.num_room_in_leaf = new_room_in_leaf;
2215
0
      new_leaf->num_stored_in_leaf = leaf->num_stored_in_leaf;
2216
2217
0
      memcpy (new_leaf->ranges,
2218
0
        leaf->ranges,
2219
0
        leaf->num_stored_in_leaf * sizeof (leaf->ranges[0]));
2220
0
      trie = &new_leaf->head;
2221
0
      is_full_leaf = false;
2222
2223
      /* Now the insert below will go through.  */
2224
0
    }
2225
2226
  /* If we're a leaf (now with room), we can just insert at the end.  */
2227
181k
  if (trie->num_room_in_leaf > 0)
2228
26.4k
    {
2229
26.4k
      struct trie_leaf *leaf = (struct trie_leaf *) trie;
2230
2231
26.4k
      unsigned int i = leaf->num_stored_in_leaf++;
2232
26.4k
      leaf->ranges[i].unit = unit;
2233
26.4k
      leaf->ranges[i].low_pc = low_pc;
2234
26.4k
      leaf->ranges[i].high_pc = high_pc;
2235
26.4k
      return trie;
2236
26.4k
    }
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
155k
  clamped_low_pc = low_pc;
2243
155k
  clamped_high_pc = high_pc;
2244
155k
  if (trie_pc_bits > 0)
2245
130k
    {
2246
130k
      bfd_vma bucket_high_pc =
2247
130k
  trie_pc + ((bfd_vma) -1 >> trie_pc_bits);  /* Inclusive.  */
2248
130k
      if (clamped_low_pc < trie_pc)
2249
77
  clamped_low_pc = trie_pc;
2250
130k
      if (clamped_high_pc > bucket_high_pc)
2251
912
  clamped_high_pc = bucket_high_pc;
2252
130k
    }
2253
2254
  /* Insert the ranges in all buckets that it spans.  */
2255
155k
  from_ch = (clamped_low_pc >> (VMA_BITS - trie_pc_bits - 8)) & 0xff;
2256
155k
  to_ch = ((clamped_high_pc - 1) >> (VMA_BITS - trie_pc_bits - 8)) & 0xff;
2257
818k
  for (ch = from_ch; ch <= to_ch; ++ch)
2258
663k
    {
2259
663k
      struct trie_interior *interior = (struct trie_interior *) trie;
2260
663k
      struct trie_node *child = interior->children[ch];
2261
2262
663k
      if (child == NULL)
2263
18.0k
        {
2264
18.0k
    child = alloc_trie_leaf (abfd);
2265
18.0k
    if (!child)
2266
0
      return NULL;
2267
18.0k
  }
2268
663k
      bfd_vma bucket = (bfd_vma) ch << (VMA_BITS - trie_pc_bits - 8);
2269
663k
      child = insert_arange_in_trie (abfd,
2270
663k
             child,
2271
663k
             trie_pc + bucket,
2272
663k
             trie_pc_bits + 8,
2273
663k
             unit,
2274
663k
             low_pc,
2275
663k
             high_pc);
2276
663k
      if (!child)
2277
0
  return NULL;
2278
2279
663k
      interior->children[ch] = child;
2280
663k
    }
2281
2282
155k
    return trie;
2283
155k
}
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
30.7k
{
2289
30.7k
  struct arange *arange;
2290
2291
  /* Ignore empty ranges.  */
2292
30.7k
  if (low_pc == high_pc)
2293
27
    return true;
2294
2295
30.7k
  if (trie_root != NULL)
2296
30.7k
    {
2297
30.7k
      *trie_root = insert_arange_in_trie (unit->file->bfd_ptr,
2298
30.7k
            *trie_root,
2299
30.7k
            0,
2300
30.7k
            0,
2301
30.7k
            unit,
2302
30.7k
            low_pc,
2303
30.7k
            high_pc);
2304
30.7k
      if (*trie_root == NULL)
2305
0
  return false;
2306
30.7k
    }
2307
2308
  /* If the first arange is empty, use it.  */
2309
30.7k
  if (first_arange->high == 0)
2310
8.45k
    {
2311
8.45k
      first_arange->low = low_pc;
2312
8.45k
      first_arange->high = high_pc;
2313
8.45k
      return true;
2314
8.45k
    }
2315
2316
  /* Next see if we can cheaply extend an existing range.  */
2317
22.2k
  arange = first_arange;
2318
22.2k
  do
2319
575k
    {
2320
575k
      if (low_pc == arange->high)
2321
609
  {
2322
609
    arange->high = high_pc;
2323
609
    return true;
2324
609
  }
2325
575k
      if (high_pc == arange->low)
2326
430
  {
2327
430
    arange->low = low_pc;
2328
430
    return true;
2329
430
  }
2330
574k
      arange = arange->next;
2331
574k
    }
2332
574k
  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
21.2k
  arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange));
2337
21.2k
  if (arange == NULL)
2338
0
    return false;
2339
21.2k
  arange->low = low_pc;
2340
21.2k
  arange->high = high_pc;
2341
21.2k
  arange->next = first_arange->next;
2342
21.2k
  first_arange->next = arange;
2343
21.2k
  return true;
2344
21.2k
}
2345
2346
/* Compare function for line sequences.  */
2347
2348
static int
2349
compare_sequences (const void* a, const void* b)
2350
6.17k
{
2351
6.17k
  const struct line_sequence* seq1 = a;
2352
6.17k
  const struct line_sequence* seq2 = b;
2353
2354
  /* Sort by low_pc as the primary key.  */
2355
6.17k
  if (seq1->low_pc < seq2->low_pc)
2356
134
    return -1;
2357
6.03k
  if (seq1->low_pc > seq2->low_pc)
2358
5.20k
    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
837
  if (seq1->last_line->address < seq2->last_line->address)
2363
415
    return 1;
2364
422
  if (seq1->last_line->address > seq2->last_line->address)
2365
407
    return -1;
2366
2367
15
  if (seq1->last_line->op_index < seq2->last_line->op_index)
2368
6
    return 1;
2369
9
  if (seq1->last_line->op_index > seq2->last_line->op_index)
2370
0
    return -1;
2371
2372
  /* num_lines is initially an index, to make the sort stable.  */
2373
9
  if (seq1->num_lines < seq2->num_lines)
2374
9
    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
103
{
2386
103
  size_t amt;
2387
103
  struct line_info **line_info_lookup;
2388
103
  struct line_info *each_line;
2389
103
  unsigned int num_lines;
2390
103
  unsigned int line_index;
2391
2392
103
  if (seq->line_info_lookup != NULL)
2393
10
    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
93
  num_lines = 0;
2400
42.9k
  for (each_line = seq->last_line; each_line; each_line = each_line->prev_line)
2401
42.8k
    num_lines++;
2402
2403
93
  seq->num_lines = num_lines;
2404
93
  if (num_lines == 0)
2405
0
    return true;
2406
2407
  /* Allocate space for the line information lookup table.  */
2408
93
  amt = sizeof (struct line_info*) * num_lines;
2409
93
  line_info_lookup = (struct line_info**) bfd_alloc (table->abfd, amt);
2410
93
  seq->line_info_lookup = line_info_lookup;
2411
93
  if (line_info_lookup == NULL)
2412
0
    return false;
2413
2414
  /* Create the line information lookup table.  */
2415
93
  line_index = num_lines;
2416
42.9k
  for (each_line = seq->last_line; each_line; each_line = each_line->prev_line)
2417
42.8k
    line_info_lookup[--line_index] = each_line;
2418
2419
93
  BFD_ASSERT (line_index == 0);
2420
93
  return true;
2421
93
}
2422
2423
/* Sort the line sequences for quick lookup.  */
2424
2425
static bool
2426
sort_line_sequences (struct line_info_table* table)
2427
172
{
2428
172
  size_t amt;
2429
172
  struct line_sequence *sequences;
2430
172
  struct line_sequence *seq;
2431
172
  unsigned int n = 0;
2432
172
  unsigned int num_sequences = table->num_sequences;
2433
172
  bfd_vma last_high_pc;
2434
2435
172
  if (num_sequences == 0)
2436
13
    return true;
2437
2438
  /* Allocate space for an array of sequences.  */
2439
159
  amt = sizeof (struct line_sequence) * num_sequences;
2440
159
  sequences = (struct line_sequence *) bfd_alloc (table->abfd, amt);
2441
159
  if (sequences == NULL)
2442
0
    return false;
2443
2444
  /* Copy the linked list into the array, freeing the original nodes.  */
2445
159
  seq = table->sequences;
2446
2.37k
  for (n = 0; n < num_sequences; n++)
2447
2.21k
    {
2448
2.21k
      struct line_sequence* last_seq = seq;
2449
2450
2.21k
      BFD_ASSERT (seq);
2451
2.21k
      sequences[n].low_pc = seq->low_pc;
2452
2.21k
      sequences[n].prev_sequence = NULL;
2453
2.21k
      sequences[n].last_line = seq->last_line;
2454
2.21k
      sequences[n].line_info_lookup = NULL;
2455
2.21k
      sequences[n].num_lines = n;
2456
2.21k
      seq = seq->prev_sequence;
2457
2.21k
      free (last_seq);
2458
2.21k
    }
2459
159
  BFD_ASSERT (seq == NULL);
2460
2461
159
  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
159
  num_sequences = 1;
2466
159
  last_high_pc = sequences[0].last_line->address;
2467
2.21k
  for (n = 1; n < table->num_sequences; n++)
2468
2.05k
    {
2469
2.05k
      if (sequences[n].low_pc < last_high_pc)
2470
284
  {
2471
284
    if (sequences[n].last_line->address <= last_high_pc)
2472
      /* Skip nested entries.  */
2473
261
      continue;
2474
2475
    /* Trim overlapping entries.  */
2476
23
    sequences[n].low_pc = last_high_pc;
2477
23
  }
2478
1.79k
      last_high_pc = sequences[n].last_line->address;
2479
1.79k
      if (n > num_sequences)
2480
234
  {
2481
    /* Close up the gap.  */
2482
234
    sequences[num_sequences].low_pc = sequences[n].low_pc;
2483
234
    sequences[num_sequences].last_line = sequences[n].last_line;
2484
234
  }
2485
1.79k
      num_sequences++;
2486
1.79k
    }
2487
2488
159
  table->sequences = sequences;
2489
159
  table->num_sequences = num_sequences;
2490
159
  return true;
2491
159
}
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
600
{
2498
600
  if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
2499
195
    {
2500
195
      char **tmp;
2501
195
      size_t amt;
2502
2503
195
      amt = table->num_dirs + DIR_ALLOC_CHUNK;
2504
195
      amt *= sizeof (char *);
2505
2506
195
      tmp = (char **) bfd_realloc (table->dirs, amt);
2507
195
      if (tmp == NULL)
2508
0
  return false;
2509
195
      table->dirs = tmp;
2510
195
    }
2511
2512
600
  table->dirs[table->num_dirs++] = cur_dir;
2513
600
  return true;
2514
600
}
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
2
{
2522
2
  return line_info_add_include_dir (table, cur_dir);
2523
2
}
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
1.28k
{
2532
1.28k
  if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
2533
365
    {
2534
365
      struct fileinfo *tmp;
2535
365
      size_t amt;
2536
2537
365
      amt = table->num_files + FILE_ALLOC_CHUNK;
2538
365
      amt *= sizeof (struct fileinfo);
2539
2540
365
      tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
2541
365
      if (tmp == NULL)
2542
0
  return false;
2543
365
      table->files = tmp;
2544
365
    }
2545
2546
1.28k
  table->files[table->num_files].name = cur_file;
2547
1.28k
  table->files[table->num_files].dir = dir;
2548
1.28k
  table->files[table->num_files].time = xtime;
2549
1.28k
  table->files[table->num_files].size = size;
2550
1.28k
  table->num_files++;
2551
1.28k
  return true;
2552
1.28k
}
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
5
{
2568
5
  bfd *abfd = unit->abfd;
2569
5
  bfd_byte format_count, formati;
2570
5
  bfd_vma data_count, datai;
2571
5
  bfd_byte *buf = *bufp;
2572
5
  bfd_byte *format_header_data;
2573
2574
5
  format_count = read_1_byte (abfd, &buf, buf_end);
2575
5
  format_header_data = buf;
2576
8
  for (formati = 0; formati < format_count; formati++)
2577
3
    {
2578
3
      _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
2579
3
      _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
2580
3
    }
2581
2582
5
  data_count = _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
2583
5
  if (format_count == 0 && data_count != 0)
2584
2
    {
2585
2
      _bfd_error_handler (_("DWARF error: zero format count"));
2586
2
      bfd_set_error (bfd_error_bad_value);
2587
2
      return false;
2588
2
    }
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
3
  if (data_count > (bfd_vma) (buf_end - buf))
2593
0
    {
2594
0
      _bfd_error_handler
2595
0
  (_("DWARF error: data count (%" PRIx64 ") larger than buffer size"),
2596
0
   (uint64_t) data_count);
2597
0
      bfd_set_error (bfd_error_bad_value);
2598
0
      return false;
2599
0
    }
2600
2601
5
  for (datai = 0; datai < data_count; datai++)
2602
3
    {
2603
3
      bfd_byte *format = format_header_data;
2604
3
      struct fileinfo fe;
2605
2606
3
      memset (&fe, 0, sizeof fe);
2607
5
      for (formati = 0; formati < format_count; formati++)
2608
3
  {
2609
3
    bfd_vma content_type, form;
2610
3
    char *string_trash;
2611
3
    char **stringp = &string_trash;
2612
3
    unsigned int uint_trash, *uintp = &uint_trash;
2613
3
    struct attribute attr;
2614
2615
3
    content_type = _bfd_safe_read_leb128 (abfd, &format, false, buf_end);
2616
3
    switch (content_type)
2617
3
      {
2618
0
      case DW_LNCT_path:
2619
0
        stringp = &fe.name;
2620
0
        break;
2621
2
      case DW_LNCT_directory_index:
2622
2
        uintp = &fe.dir;
2623
2
        break;
2624
0
      case DW_LNCT_timestamp:
2625
0
        uintp = &fe.time;
2626
0
        break;
2627
1
      case DW_LNCT_size:
2628
1
        uintp = &fe.size;
2629
1
        break;
2630
0
      case DW_LNCT_MD5:
2631
0
        break;
2632
0
      default:
2633
0
        _bfd_error_handler
2634
0
    (_("DWARF error: unknown format content type %" PRIu64),
2635
0
     (uint64_t) content_type);
2636
0
        bfd_set_error (bfd_error_bad_value);
2637
0
        return false;
2638
3
      }
2639
2640
3
    form = _bfd_safe_read_leb128 (abfd, &format, false, buf_end);
2641
3
    buf = read_attribute_value (&attr, form, 0, unit, buf, buf_end);
2642
3
    if (buf == NULL)
2643
1
      return false;
2644
2
    switch (form)
2645
2
      {
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
0
      case DW_FORM_strx3:
2652
0
      case DW_FORM_strx4:
2653
0
        *stringp = attr.u.str;
2654
0
        break;
2655
2656
0
      case DW_FORM_data1:
2657
0
      case DW_FORM_data2:
2658
0
      case DW_FORM_data4:
2659
0
      case DW_FORM_data8:
2660
0
      case DW_FORM_udata:
2661
0
        *uintp = attr.u.val;
2662
0
        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
2
      }
2668
2
  }
2669
2670
2
      if (!callback (table, fe.name, fe.dir, fe.time, fe.size))
2671
0
  return false;
2672
2
    }
2673
2674
2
  *bufp = buf;
2675
2
  return true;
2676
3
}
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
269
{
2683
269
  bfd *abfd = unit->abfd;
2684
269
  struct dwarf2_debug *stash = unit->stash;
2685
269
  struct dwarf2_debug_file *file = unit->file;
2686
269
  struct line_info_table* table;
2687
269
  bfd_byte *line_ptr;
2688
269
  bfd_byte *line_end;
2689
269
  struct line_head lh;
2690
269
  unsigned int i, offset_size;
2691
269
  char *cur_file, *cur_dir;
2692
269
  unsigned char op_code, extended_op, adj_opcode;
2693
269
  unsigned int exop_len;
2694
269
  size_t amt;
2695
2696
269
  if (unit->line_offset == 0 && file->line_table)
2697
6
    return file->line_table;
2698
2699
263
  if (! read_section (abfd, &stash->debug_sections[debug_line],
2700
263
          file->syms, unit->line_offset,
2701
263
          &file->dwarf_line_buffer, &file->dwarf_line_size))
2702
13
    return NULL;
2703
2704
250
  if (file->dwarf_line_size < 16)
2705
2
    {
2706
2
      _bfd_error_handler
2707
2
  (_("DWARF error: line info section is too small (%" PRId64 ")"),
2708
2
   (int64_t) file->dwarf_line_size);
2709
2
      bfd_set_error (bfd_error_bad_value);
2710
2
      return NULL;
2711
2
    }
2712
248
  line_ptr = file->dwarf_line_buffer + unit->line_offset;
2713
248
  line_end = file->dwarf_line_buffer + file->dwarf_line_size;
2714
2715
  /* Read in the prologue.  */
2716
248
  lh.total_length = read_4_bytes (abfd, &line_ptr, line_end);
2717
248
  offset_size = 4;
2718
248
  if (lh.total_length == 0xffffffff)
2719
2
    {
2720
2
      lh.total_length = read_8_bytes (abfd, &line_ptr, line_end);
2721
2
      offset_size = 8;
2722
2
    }
2723
246
  else if (lh.total_length == 0 && unit->addr_size == 8)
2724
3
    {
2725
      /* Handle (non-standard) 64-bit DWARF2 formats.  */
2726
3
      lh.total_length = read_4_bytes (abfd, &line_ptr, line_end);
2727
3
      offset_size = 8;
2728
3
    }
2729
2730
248
  if (lh.total_length > (size_t) (line_end - line_ptr))
2731
6
    {
2732
6
      _bfd_error_handler
2733
  /* xgettext: c-format */
2734
6
  (_("DWARF error: line info data is bigger (%#" PRIx64 ")"
2735
6
     " than the space remaining in the section (%#lx)"),
2736
6
   (uint64_t) lh.total_length, (unsigned long) (line_end - line_ptr));
2737
6
      bfd_set_error (bfd_error_bad_value);
2738
6
      return NULL;
2739
6
    }
2740
2741
242
  line_end = line_ptr + lh.total_length;
2742
2743
242
  lh.version = read_2_bytes (abfd, &line_ptr, line_end);
2744
242
  if (lh.version < 2 || lh.version > 5)
2745
4
    {
2746
4
      _bfd_error_handler
2747
4
  (_("DWARF error: unhandled .debug_line version %d"), lh.version);
2748
4
      bfd_set_error (bfd_error_bad_value);
2749
4
      return NULL;
2750
4
    }
2751
2752
238
  if (line_ptr + offset_size + (lh.version >= 5 ? 8 : (lh.version >= 4 ? 6 : 5))
2753
238
      >= line_end)
2754
2
    {
2755
2
      _bfd_error_handler
2756
2
  (_("DWARF error: ran out of room reading prologue"));
2757
2
      bfd_set_error (bfd_error_bad_value);
2758
2
      return NULL;
2759
2
    }
2760
2761
236
  if (lh.version >= 5)
2762
4
    {
2763
4
      unsigned int segment_selector_size;
2764
2765
      /* Skip address size.  */
2766
4
      read_1_byte (abfd, &line_ptr, line_end);
2767
2768
4
      segment_selector_size = read_1_byte (abfd, &line_ptr, line_end);
2769
4
      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
4
    }
2778
2779
235
  if (offset_size == 4)
2780
233
    lh.prologue_length = read_4_bytes (abfd, &line_ptr, line_end);
2781
2
  else
2782
2
    lh.prologue_length = read_8_bytes (abfd, &line_ptr, line_end);
2783
2784
235
  lh.minimum_instruction_length = read_1_byte (abfd, &line_ptr, line_end);
2785
2786
235
  if (lh.version >= 4)
2787
230
    lh.maximum_ops_per_insn = read_1_byte (abfd, &line_ptr, line_end);
2788
5
  else
2789
5
    lh.maximum_ops_per_insn = 1;
2790
2791
235
  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
234
  lh.default_is_stmt = read_1_byte (abfd, &line_ptr, line_end);
2800
234
  lh.line_base = read_1_signed_byte (abfd, &line_ptr, line_end);
2801
234
  lh.line_range = read_1_byte (abfd, &line_ptr, line_end);
2802
234
  lh.opcode_base = read_1_byte (abfd, &line_ptr, line_end);
2803
2804
234
  if (line_ptr + (lh.opcode_base - 1) >= line_end)
2805
0
    {
2806
0
      _bfd_error_handler (_("DWARF error: ran out of room reading opcodes"));
2807
0
      bfd_set_error (bfd_error_bad_value);
2808
0
      return NULL;
2809
0
    }
2810
2811
234
  amt = lh.opcode_base * sizeof (unsigned char);
2812
234
  lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt);
2813
2814
234
  lh.standard_opcode_lengths[0] = 1;
2815
2816
5.46k
  for (i = 1; i < lh.opcode_base; ++i)
2817
5.22k
    lh.standard_opcode_lengths[i] = read_1_byte (abfd, &line_ptr, line_end);
2818
2819
234
  amt = sizeof (struct line_info_table);
2820
234
  table = (struct line_info_table *) bfd_alloc (abfd, amt);
2821
234
  if (table == NULL)
2822
0
    return NULL;
2823
234
  table->abfd = abfd;
2824
234
  table->comp_dir = unit->comp_dir;
2825
2826
234
  table->num_files = 0;
2827
234
  table->files = NULL;
2828
2829
234
  table->num_dirs = 0;
2830
234
  table->dirs = NULL;
2831
2832
234
  table->num_sequences = 0;
2833
234
  table->sequences = NULL;
2834
2835
234
  table->lcl_head = NULL;
2836
2837
234
  if (lh.version >= 5)
2838
3
    {
2839
      /* Read directory table.  */
2840
3
      if (!read_formatted_entries (unit, &line_ptr, line_end, table,
2841
3
           line_info_add_include_dir_stub))
2842
1
  goto fail;
2843
2844
      /* Read file name table.  */
2845
2
      if (!read_formatted_entries (unit, &line_ptr, line_end, table,
2846
2
           line_info_add_file_name))
2847
2
  goto fail;
2848
0
      table->use_dir_and_file_0 = true;
2849
0
    }
2850
231
  else
2851
231
    {
2852
      /* Read directory table.  */
2853
829
      while ((cur_dir = read_string (&line_ptr, line_end)) != NULL)
2854
598
  {
2855
598
    if (!line_info_add_include_dir (table, cur_dir))
2856
0
      goto fail;
2857
598
  }
2858
2859
      /* Read file name table.  */
2860
1.48k
      while ((cur_file = read_string (&line_ptr, line_end)) != NULL)
2861
1.25k
  {
2862
1.25k
    unsigned int dir, xtime, size;
2863
2864
1.25k
    dir = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2865
1.25k
    xtime = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2866
1.25k
    size = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2867
2868
1.25k
    if (!line_info_add_file_name (table, cur_file, dir, xtime, size))
2869
0
      goto fail;
2870
1.25k
  }
2871
231
      table->use_dir_and_file_0 = false;
2872
231
    }
2873
2874
  /* Read the statement sequences until there's nothing left.  */
2875
2.59k
  while (line_ptr < line_end)
2876
2.42k
    {
2877
      /* State machine registers.  */
2878
2.42k
      bfd_vma address = 0;
2879
2.42k
      unsigned char op_index = 0;
2880
2.42k
      char * filename = NULL;
2881
2.42k
      unsigned int line = 1;
2882
2.42k
      unsigned int column = 0;
2883
2.42k
      unsigned int discriminator = 0;
2884
2.42k
      int is_stmt = lh.default_is_stmt;
2885
2.42k
      int end_sequence = 0;
2886
2.42k
      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
2.42k
      bfd_vma low_pc  = (bfd_vma) -1;
2893
2.42k
      bfd_vma high_pc = 0;
2894
2895
2.42k
      if (table->num_files)
2896
2.40k
  {
2897
2.40k
    if (table->use_dir_and_file_0)
2898
0
      filename = concat_filename (table, 0);
2899
2.40k
    else
2900
2.40k
      filename = concat_filename (table, 1);
2901
2.40k
  }
2902
2903
      /* Decode the table.  */
2904
964k
      while (!end_sequence && line_ptr < line_end)
2905
962k
  {
2906
962k
    op_code = read_1_byte (abfd, &line_ptr, line_end);
2907
2908
962k
    if (op_code >= lh.opcode_base)
2909
300k
      {
2910
        /* Special operand.  */
2911
300k
        adj_opcode = op_code - lh.opcode_base;
2912
300k
        if (lh.line_range == 0)
2913
1
    goto line_fail;
2914
300k
        if (lh.maximum_ops_per_insn == 1)
2915
294k
    address += (adj_opcode / lh.line_range
2916
294k
          * lh.minimum_instruction_length);
2917
5.62k
        else
2918
5.62k
    {
2919
5.62k
      address += ((op_index + adj_opcode / lh.line_range)
2920
5.62k
            / lh.maximum_ops_per_insn
2921
5.62k
            * lh.minimum_instruction_length);
2922
5.62k
      op_index = ((op_index + adj_opcode / lh.line_range)
2923
5.62k
            % lh.maximum_ops_per_insn);
2924
5.62k
    }
2925
300k
        line += lh.line_base + (adj_opcode % lh.line_range);
2926
        /* Append row to matrix using current values.  */
2927
300k
        if (!add_line_info (table, address, op_index, filename,
2928
300k
          line, column, discriminator, 0))
2929
0
    goto line_fail;
2930
300k
        discriminator = 0;
2931
300k
        if (address < low_pc)
2932
181
    low_pc = address;
2933
300k
        if (address > high_pc)
2934
296k
    high_pc = address;
2935
300k
      }
2936
662k
    else switch (op_code)
2937
662k
      {
2938
4.75k
      case DW_LNS_extended_op:
2939
4.75k
        exop_len = _bfd_safe_read_leb128 (abfd, &line_ptr,
2940
4.75k
            false, line_end);
2941
4.75k
        extended_op = read_1_byte (abfd, &line_ptr, line_end);
2942
2943
4.75k
        switch (extended_op)
2944
4.75k
    {
2945
2.30k
    case DW_LNE_end_sequence:
2946
2.30k
      end_sequence = 1;
2947
2.30k
      if (!add_line_info (table, address, op_index, filename, line,
2948
2.30k
              column, discriminator, end_sequence))
2949
0
        goto line_fail;
2950
2.30k
      discriminator = 0;
2951
2.30k
      if (address < low_pc)
2952
4
        low_pc = address;
2953
2.30k
      if (address > high_pc)
2954
2.24k
        high_pc = address;
2955
2.30k
      if (!arange_add (unit, &unit->arange, &unit->file->trie_root,
2956
2.30k
           low_pc, high_pc))
2957
0
        goto line_fail;
2958
2.30k
      break;
2959
2.36k
    case DW_LNE_set_address:
2960
2.36k
      address = read_address (unit, &line_ptr, line_end);
2961
2.36k
      op_index = 0;
2962
2.36k
      break;
2963
31
    case DW_LNE_define_file:
2964
31
      cur_file = read_string (&line_ptr, line_end);
2965
31
      dir = _bfd_safe_read_leb128 (abfd, &line_ptr,
2966
31
                 false, line_end);
2967
31
      xtime = _bfd_safe_read_leb128 (abfd, &line_ptr,
2968
31
             false, line_end);
2969
31
      size = _bfd_safe_read_leb128 (abfd, &line_ptr,
2970
31
            false, line_end);
2971
31
      if (!line_info_add_file_name (table, cur_file, dir,
2972
31
            xtime, size))
2973
0
        goto line_fail;
2974
31
      break;
2975
31
    case DW_LNE_set_discriminator:
2976
3
      discriminator = _bfd_safe_read_leb128 (abfd, &line_ptr,
2977
3
               false, line_end);
2978
3
      break;
2979
0
    case DW_LNE_HP_source_file_correlation:
2980
0
      line_ptr += exop_len - 1;
2981
0
      break;
2982
57
    default:
2983
57
      _bfd_error_handler
2984
57
        (_("DWARF error: mangled line number section"));
2985
57
      bfd_set_error (bfd_error_bad_value);
2986
59
    line_fail:
2987
59
      free (filename);
2988
59
      goto fail;
2989
4.75k
    }
2990
4.69k
        break;
2991
8.54k
      case DW_LNS_copy:
2992
8.54k
        if (!add_line_info (table, address, op_index,
2993
8.54k
          filename, line, column, discriminator, 0))
2994
0
    goto line_fail;
2995
8.54k
        discriminator = 0;
2996
8.54k
        if (address < low_pc)
2997
2.34k
    low_pc = address;
2998
8.54k
        if (address > high_pc)
2999
8.04k
    high_pc = address;
3000
8.54k
        break;
3001
15.4k
      case DW_LNS_advance_pc:
3002
15.4k
        if (lh.maximum_ops_per_insn == 1)
3003
15.1k
    address += (lh.minimum_instruction_length
3004
15.1k
          * _bfd_safe_read_leb128 (abfd, &line_ptr,
3005
15.1k
                 false, line_end));
3006
271
        else
3007
271
    {
3008
271
      bfd_vma adjust = _bfd_safe_read_leb128 (abfd, &line_ptr,
3009
271
                false, line_end);
3010
271
      address = ((op_index + adjust) / lh.maximum_ops_per_insn
3011
271
           * lh.minimum_instruction_length);
3012
271
      op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
3013
271
    }
3014
15.4k
        break;
3015
147k
      case DW_LNS_advance_line:
3016
147k
        line += _bfd_safe_read_leb128 (abfd, &line_ptr,
3017
147k
               true, line_end);
3018
147k
        break;
3019
16.8k
      case DW_LNS_set_file:
3020
16.8k
        {
3021
16.8k
    unsigned int filenum;
3022
3023
    /* The file and directory tables are 0
3024
       based, the references are 1 based.  */
3025
16.8k
    filenum = _bfd_safe_read_leb128 (abfd, &line_ptr,
3026
16.8k
             false, line_end);
3027
16.8k
    free (filename);
3028
16.8k
    filename = concat_filename (table, filenum);
3029
16.8k
    break;
3030
8.54k
        }
3031
234k
      case DW_LNS_set_column:
3032
234k
        column = _bfd_safe_read_leb128 (abfd, &line_ptr,
3033
234k
                false, line_end);
3034
234k
        break;
3035
148k
      case DW_LNS_negate_stmt:
3036
148k
        is_stmt = (!is_stmt);
3037
148k
        break;
3038
12
      case DW_LNS_set_basic_block:
3039
12
        break;
3040
83.1k
      case DW_LNS_const_add_pc:
3041
83.1k
        if (lh.line_range == 0)
3042
1
    goto line_fail;
3043
83.1k
        if (lh.maximum_ops_per_insn == 1)
3044
81.2k
    address += (lh.minimum_instruction_length
3045
81.2k
          * ((255 - lh.opcode_base) / lh.line_range));
3046
1.83k
        else
3047
1.83k
    {
3048
1.83k
      bfd_vma adjust = ((255 - lh.opcode_base) / lh.line_range);
3049
1.83k
      address += (lh.minimum_instruction_length
3050
1.83k
            * ((op_index + adjust)
3051
1.83k
         / lh.maximum_ops_per_insn));
3052
1.83k
      op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
3053
1.83k
    }
3054
83.1k
        break;
3055
32
      case DW_LNS_fixed_advance_pc:
3056
32
        address += read_2_bytes (abfd, &line_ptr, line_end);
3057
32
        op_index = 0;
3058
32
        break;
3059
2.54k
      default:
3060
        /* Unknown standard opcode, ignore it.  */
3061
4.38k
        for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
3062
1.83k
    (void) _bfd_safe_read_leb128 (abfd, &line_ptr,
3063
1.83k
                false, line_end);
3064
2.54k
        break;
3065
662k
      }
3066
962k
  }
3067
3068
2.36k
      free (filename);
3069
2.36k
    }
3070
3071
172
  if (unit->line_offset == 0)
3072
172
    file->line_table = table;
3073
172
  if (sort_line_sequences (table))
3074
172
    return table;
3075
3076
62
 fail:
3077
258
  while (table->sequences != NULL)
3078
196
    {
3079
196
      struct line_sequence* seq = table->sequences;
3080
196
      table->sequences = table->sequences->prev_sequence;
3081
196
      free (seq);
3082
196
    }
3083
62
  free (table->files);
3084
62
  free (table->dirs);
3085
62
  return NULL;
3086
172
}
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
247
{
3100
247
  struct line_sequence *seq = NULL;
3101
247
  struct line_info *info;
3102
247
  int low, high, mid;
3103
3104
  /* Binary search the array of sequences.  */
3105
247
  low = 0;
3106
247
  high = table->num_sequences;
3107
595
  while (low < high)
3108
451
    {
3109
451
      mid = (low + high) / 2;
3110
451
      seq = &table->sequences[mid];
3111
451
      if (addr < seq->low_pc)
3112
159
  high = mid;
3113
292
      else if (addr >= seq->last_line->address)
3114
189
  low = mid + 1;
3115
103
      else
3116
103
  break;
3117
451
    }
3118
3119
  /* Check for a valid sequence.  */
3120
247
  if (!seq || addr < seq->low_pc || addr >= seq->last_line->address)
3121
144
    goto fail;
3122
3123
103
  if (!build_line_info_table (table, seq))
3124
0
    goto fail;
3125
3126
  /* Binary search the array of line information.  */
3127
103
  low = 0;
3128
103
  high = seq->num_lines;
3129
103
  info = NULL;
3130
704
  while (low < high)
3131
704
    {
3132
704
      mid = (low + high) / 2;
3133
704
      info = seq->line_info_lookup[mid];
3134
704
      if (addr < info->address)
3135
318
  high = mid;
3136
386
      else if (addr >= seq->line_info_lookup[mid + 1]->address)
3137
283
  low = mid + 1;
3138
103
      else
3139
103
  break;
3140
704
    }
3141
3142
  /* Check for a valid line information entry.  */
3143
103
  if (info
3144
103
      && addr >= info->address
3145
103
      && addr < seq->line_info_lookup[mid + 1]->address
3146
103
      && !(info->end_sequence || info == seq->last_line))
3147
103
    {
3148
103
      *filename_ptr = info->filename;
3149
103
      *linenumber_ptr = info->line;
3150
103
      if (discriminator_ptr)
3151
103
  *discriminator_ptr = info->discriminator;
3152
103
      return true;
3153
103
    }
3154
3155
144
 fail:
3156
144
  *filename_ptr = NULL;
3157
144
  return false;
3158
103
}
3159
3160
/* Read in the .debug_ranges section for future reference.  */
3161
3162
static bool
3163
read_debug_ranges (struct comp_unit * unit)
3164
164
{
3165
164
  struct dwarf2_debug *stash = unit->stash;
3166
164
  struct dwarf2_debug_file *file = unit->file;
3167
3168
164
  return read_section (unit->abfd, &stash->debug_sections[debug_ranges],
3169
164
           file->syms, 0,
3170
164
           &file->dwarf_ranges_buffer, &file->dwarf_ranges_size);
3171
164
}
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.1k
{
3191
65.1k
  const struct lookup_funcinfo * lookup1 = a;
3192
65.1k
  const struct lookup_funcinfo * lookup2 = b;
3193
3194
65.1k
  if (lookup1->low_addr < lookup2->low_addr)
3195
28.4k
    return -1;
3196
36.7k
  if (lookup1->low_addr > lookup2->low_addr)
3197
13.4k
    return 1;
3198
23.3k
  if (lookup1->high_addr < lookup2->high_addr)
3199
619
    return -1;
3200
22.6k
  if (lookup1->high_addr > lookup2->high_addr)
3201
4.80k
    return 1;
3202
3203
17.8k
  if (lookup1->idx < lookup2->idx)
3204
17.8k
    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
227
{
3213
227
  struct lookup_funcinfo *lookup_funcinfo_table = unit->lookup_funcinfo_table;
3214
227
  unsigned int number_of_functions = unit->number_of_functions;
3215
227
  struct funcinfo *each;
3216
227
  struct lookup_funcinfo *entry;
3217
227
  size_t func_index;
3218
227
  struct arange *range;
3219
227
  bfd_vma low_addr, high_addr;
3220
3221
227
  if (lookup_funcinfo_table || number_of_functions == 0)
3222
114
    return true;
3223
3224
  /* Create the function info lookup table.  */
3225
113
  lookup_funcinfo_table = (struct lookup_funcinfo *)
3226
113
    bfd_malloc (number_of_functions * sizeof (struct lookup_funcinfo));
3227
113
  if (lookup_funcinfo_table == NULL)
3228
0
    return false;
3229
3230
  /* Populate the function info lookup table.  */
3231
113
  func_index = number_of_functions;
3232
12.9k
  for (each = unit->function_table; each; each = each->prev_func)
3233
12.7k
    {
3234
12.7k
      entry = &lookup_funcinfo_table[--func_index];
3235
12.7k
      entry->funcinfo = each;
3236
12.7k
      entry->idx = func_index;
3237
3238
      /* Calculate the lowest and highest address for this function entry.  */
3239
12.7k
      low_addr  = entry->funcinfo->arange.low;
3240
12.7k
      high_addr = entry->funcinfo->arange.high;
3241
3242
27.1k
      for (range = entry->funcinfo->arange.next; range; range = range->next)
3243
14.3k
  {
3244
14.3k
    if (range->low < low_addr)
3245
31
      low_addr = range->low;
3246
14.3k
    if (range->high > high_addr)
3247
5.01k
      high_addr = range->high;
3248
14.3k
  }
3249
3250
12.7k
      entry->low_addr = low_addr;
3251
12.7k
      entry->high_addr = high_addr;
3252
12.7k
    }
3253
3254
113
  BFD_ASSERT (func_index == 0);
3255
3256
  /* Sort the function by address.  */
3257
113
  qsort (lookup_funcinfo_table,
3258
113
   number_of_functions,
3259
113
   sizeof (struct lookup_funcinfo),
3260
113
   compare_lookup_funcinfos);
3261
3262
  /* Calculate the high watermark for each function in the lookup table.  */
3263
113
  high_addr = lookup_funcinfo_table[0].high_addr;
3264
12.7k
  for (func_index = 1; func_index < number_of_functions; func_index++)
3265
12.6k
    {
3266
12.6k
      entry = &lookup_funcinfo_table[func_index];
3267
12.6k
      if (entry->high_addr > high_addr)
3268
1.04k
  high_addr = entry->high_addr;
3269
11.6k
      else
3270
11.6k
  entry->high_addr = high_addr;
3271
12.6k
    }
3272
3273
113
  unit->lookup_funcinfo_table = lookup_funcinfo_table;
3274
113
  return true;
3275
113
}
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
247
{
3287
247
  unsigned int number_of_functions = unit->number_of_functions;
3288
247
  struct lookup_funcinfo* lookup_funcinfo = NULL;
3289
247
  struct funcinfo* funcinfo = NULL;
3290
247
  struct funcinfo* best_fit = NULL;
3291
247
  bfd_vma best_fit_len = (bfd_vma) -1;
3292
247
  bfd_size_type low, high, mid, first;
3293
247
  struct arange *arange;
3294
3295
247
  if (number_of_functions == 0)
3296
20
    return false;
3297
3298
227
  if (!build_lookup_funcinfo_table (unit))
3299
0
    return false;
3300
3301
227
  if (unit->lookup_funcinfo_table[number_of_functions - 1].high_addr < addr)
3302
35
    return false;
3303
3304
  /* Find the first function in the lookup table which may contain the
3305
     specified address.  */
3306
192
  low = 0;
3307
192
  high = number_of_functions;
3308
192
  first = high;
3309
951
  while (low < high)
3310
759
    {
3311
759
      mid = (low + high) / 2;
3312
759
      lookup_funcinfo = &unit->lookup_funcinfo_table[mid];
3313
759
      if (addr < lookup_funcinfo->low_addr)
3314
170
  high = mid;
3315
589
      else if (addr >= lookup_funcinfo->high_addr)
3316
346
  low = mid + 1;
3317
243
      else
3318
243
  high = first = mid;
3319
759
    }
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
883
  while (first < number_of_functions)
3327
766
    {
3328
766
      if (addr < unit->lookup_funcinfo_table[first].low_addr)
3329
75
  break;
3330
691
      funcinfo = unit->lookup_funcinfo_table[first].funcinfo;
3331
3332
6.83k
      for (arange = &funcinfo->arange; arange; arange = arange->next)
3333
6.14k
  {
3334
6.14k
    if (addr < arange->low || addr >= arange->high)
3335
5.85k
      continue;
3336
3337
289
    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
289
        || (arange->high - arange->low == best_fit_len
3342
111
      && funcinfo > best_fit))
3343
184
      {
3344
184
        best_fit = funcinfo;
3345
184
        best_fit_len = arange->high - arange->low;
3346
184
      }
3347
289
  }
3348
3349
691
      first++;
3350
691
    }
3351
3352
192
  if (!best_fit)
3353
81
    return false;
3354
3355
111
  *function_ptr = best_fit;
3356
111
  return true;
3357
192
}
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
0
{
3369
0
  struct funcinfo* each;
3370
0
  struct funcinfo* best_fit = NULL;
3371
0
  bfd_vma best_fit_len = (bfd_vma) -1;
3372
0
  struct arange *arange;
3373
0
  const char *name = bfd_asymbol_name (sym);
3374
3375
0
  for (each = unit->function_table; each; each = each->prev_func)
3376
0
    for (arange = &each->arange; arange; arange = arange->next)
3377
0
      if (addr >= arange->low
3378
0
    && addr < arange->high
3379
0
    && arange->high - arange->low < best_fit_len
3380
0
    && each->file
3381
0
    && each->name
3382
0
    && strstr (name, each->name) != NULL)
3383
0
  {
3384
0
    best_fit = each;
3385
0
    best_fit_len = arange->high - arange->low;
3386
0
  }
3387
3388
0
  if (best_fit)
3389
0
    {
3390
0
      *filename_ptr = best_fit->file;
3391
0
      *linenumber_ptr = best_fit->line;
3392
0
      return true;
3393
0
    }
3394
3395
0
  return false;
3396
0
}
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
0
{
3410
0
  struct varinfo* each;
3411
0
  const char *name = bfd_asymbol_name (sym);
3412
3413
0
  for (each = unit->variable_table; each; each = each->prev_var)
3414
0
    if (each->addr == addr
3415
0
  && !each->stack
3416
0
  && each->file != NULL
3417
0
  && each->name != NULL
3418
0
  && strstr (name, each->name) != NULL)
3419
0
      break;
3420
3421
0
  if (each)
3422
0
    {
3423
0
      *filename_ptr = each->file;
3424
0
      *linenumber_ptr = each->line;
3425
0
      return true;
3426
0
    }
3427
3428
0
  return false;
3429
0
}
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
7.75k
{
3444
7.75k
  bfd *abfd = unit->abfd;
3445
7.75k
  bfd_byte *info_ptr = NULL;
3446
7.75k
  bfd_byte *info_ptr_end;
3447
7.75k
  unsigned int abbrev_number, i;
3448
7.75k
  struct abbrev_info *abbrev;
3449
7.75k
  uint64_t die_ref = attr_ptr->u.val;
3450
7.75k
  struct attribute attr;
3451
3452
7.75k
  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
7.75k
  if (attr_ptr->form == DW_FORM_ref_addr)
3463
1
    {
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
1
      size_t total;
3480
3481
1
      info_ptr = unit->file->dwarf_info_buffer;
3482
1
      info_ptr_end = info_ptr + unit->file->dwarf_info_size;
3483
1
      total = info_ptr_end - info_ptr;
3484
1
      if (!die_ref)
3485
0
  return true;
3486
1
      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
0
      info_ptr += die_ref;
3494
0
    }
3495
7.74k
  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
7.74k
  if (attr_ptr->form == DW_FORM_ref_addr
3517
7.74k
      || attr_ptr->form == DW_FORM_GNU_ref_alt)
3518
0
    {
3519
      /* Now find the CU containing this pointer.  */
3520
0
      if (info_ptr >= unit->info_ptr_unit && info_ptr < unit->end_ptr)
3521
0
  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
0
    }
3566
7.74k
  else
3567
7.74k
    {
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
7.74k
      size_t total;
3572
3573
7.74k
      info_ptr = unit->info_ptr_unit;
3574
7.74k
      info_ptr_end = unit->end_ptr;
3575
7.74k
      total = info_ptr_end - info_ptr;
3576
7.74k
      if (!die_ref || die_ref >= total)
3577
9
  {
3578
9
    _bfd_error_handler
3579
9
      (_("DWARF error: invalid abstract instance DIE ref"));
3580
9
    bfd_set_error (bfd_error_bad_value);
3581
9
    return false;
3582
9
  }
3583
7.74k
      info_ptr += die_ref;
3584
7.74k
    }
3585
3586
7.74k
  abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
3587
7.74k
           false, info_ptr_end);
3588
7.74k
  if (abbrev_number)
3589
7.72k
    {
3590
7.72k
      abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
3591
7.72k
      if (! abbrev)
3592
2
  {
3593
2
    _bfd_error_handler
3594
2
      (_("DWARF error: could not find abbrev number %u"), abbrev_number);
3595
2
    bfd_set_error (bfd_error_bad_value);
3596
2
    return false;
3597
2
  }
3598
7.72k
      else
3599
7.72k
  {
3600
23.2k
    for (i = 0; i < abbrev->num_attrs; ++i)
3601
15.4k
      {
3602
15.4k
        info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit,
3603
15.4k
           info_ptr, info_ptr_end);
3604
15.4k
        if (info_ptr == NULL)
3605
0
    break;
3606
15.4k
        switch (attr.name)
3607
15.4k
    {
3608
7.72k
    case DW_AT_name:
3609
      /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
3610
         over DW_AT_name.  */
3611
7.72k
      if (*pname == NULL && is_str_form (&attr))
3612
7.72k
        {
3613
7.72k
          *pname = attr.u.str;
3614
7.72k
          if (mangle_style (unit->lang) == 0)
3615
7.68k
      *is_linkage = true;
3616
7.72k
        }
3617
7.72k
      break;
3618
0
    case DW_AT_specification:
3619
0
      if (is_int_form (&attr)
3620
0
          && !find_abstract_instance (unit, &attr, recur_count + 1,
3621
0
              pname, is_linkage,
3622
0
              filename_ptr, linenumber_ptr))
3623
0
        return false;
3624
0
      break;
3625
7
    case DW_AT_linkage_name:
3626
7
    case DW_AT_MIPS_linkage_name:
3627
      /* PR 16949:  Corrupt debug info can place
3628
         non-string forms into these attributes.  */
3629
7
      if (is_str_form (&attr))
3630
0
        {
3631
0
          *pname = attr.u.str;
3632
0
          *is_linkage = true;
3633
0
        }
3634
7
      break;
3635
0
    case DW_AT_decl_file:
3636
0
      if (!comp_unit_maybe_decode_line_info (unit))
3637
0
        return false;
3638
0
      if (is_int_form (&attr))
3639
0
        {
3640
0
          free (*filename_ptr);
3641
0
          *filename_ptr = concat_filename (unit->line_table,
3642
0
                   attr.u.val);
3643
0
        }
3644
0
      break;
3645
2
    case DW_AT_decl_line:
3646
2
      if (is_int_form (&attr))
3647
2
        *linenumber_ptr = attr.u.val;
3648
2
      break;
3649
7.75k
    default:
3650
7.75k
      break;
3651
15.4k
    }
3652
15.4k
      }
3653
7.72k
  }
3654
7.72k
    }
3655
7.73k
  return true;
3656
7.74k
}
3657
3658
static bool
3659
read_ranges (struct comp_unit *unit, struct arange *arange,
3660
       struct trie_node **trie_root, uint64_t offset)
3661
6.02k
{
3662
6.02k
  bfd_byte *ranges_ptr;
3663
6.02k
  bfd_byte *ranges_end;
3664
6.02k
  bfd_vma base_address = unit->base_address;
3665
3666
6.02k
  if (! unit->file->dwarf_ranges_buffer)
3667
164
    {
3668
164
      if (! read_debug_ranges (unit))
3669
1
  return false;
3670
164
    }
3671
3672
6.02k
  if (offset > unit->file->dwarf_ranges_size)
3673
5
    return false;
3674
6.01k
  ranges_ptr = unit->file->dwarf_ranges_buffer + offset;
3675
6.01k
  ranges_end = unit->file->dwarf_ranges_buffer + unit->file->dwarf_ranges_size;
3676
3677
6.01k
  for (;;)
3678
31.4k
    {
3679
31.4k
      bfd_vma low_pc;
3680
31.4k
      bfd_vma high_pc;
3681
3682
      /* PR 17512: file: 62cada7d.  */
3683
31.4k
      if (2u * unit->addr_size > (size_t) (ranges_end - ranges_ptr))
3684
9
  return false;
3685
3686
31.4k
      low_pc = read_address (unit, &ranges_ptr, ranges_end);
3687
31.4k
      high_pc = read_address (unit, &ranges_ptr, ranges_end);
3688
3689
31.4k
      if (low_pc == 0 && high_pc == 0)
3690
6.01k
  break;
3691
25.4k
      if (low_pc == -1UL && high_pc != -1UL)
3692
46
  base_address = high_pc;
3693
25.4k
      else
3694
25.4k
  {
3695
25.4k
    if (!arange_add (unit, arange, trie_root,
3696
25.4k
         base_address + low_pc, base_address + high_pc))
3697
0
      return false;
3698
25.4k
  }
3699
25.4k
    }
3700
6.01k
  return true;
3701
6.01k
}
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
6.02k
{
3788
6.02k
  if (unit->version <= 4)
3789
6.02k
    return read_ranges (unit, arange, trie_root, offset);
3790
0
  else
3791
0
    return read_rnglists (unit, arange, trie_root, offset);
3792
6.02k
}
3793
3794
static struct funcinfo *
3795
lookup_func_by_offset (uint64_t offset, struct funcinfo * table)
3796
135
{
3797
135
  for (; table != NULL; table = table->prev_func)
3798
135
    if (table->unit_offset == offset)
3799
135
      return table;
3800
0
  return NULL;
3801
135
}
3802
3803
static struct varinfo *
3804
lookup_var_by_offset (uint64_t offset, struct varinfo * table)
3805
1
{
3806
1
  while (table)
3807
1
    {
3808
1
      if (table->unit_offset == offset)
3809
1
  return table;
3810
0
      table = table->prev_var;
3811
0
    }
3812
3813
0
  return NULL;
3814
1
}
3815
3816
3817
/* DWARF2 Compilation unit functions.  */
3818
3819
static struct funcinfo *
3820
reverse_funcinfo_list (struct funcinfo *head)
3821
262
{
3822
262
  struct funcinfo *rhead;
3823
262
  struct funcinfo *temp;
3824
3825
26.9k
  for (rhead = NULL; head; head = temp)
3826
26.7k
    {
3827
26.7k
      temp = head->prev_func;
3828
26.7k
      head->prev_func = rhead;
3829
26.7k
      rhead = head;
3830
26.7k
    }
3831
262
  return rhead;
3832
262
}
3833
3834
static struct varinfo *
3835
reverse_varinfo_list (struct varinfo *head)
3836
262
{
3837
262
  struct varinfo *rhead;
3838
262
  struct varinfo *temp;
3839
3840
264
  for (rhead = NULL; head; head = temp)
3841
2
    {
3842
2
      temp = head->prev_var;
3843
2
      head->prev_var = rhead;
3844
2
      rhead = head;
3845
2
    }
3846
262
  return rhead;
3847
262
}
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
172
{
3855
172
  bfd *abfd = unit->abfd;
3856
172
  bfd_byte *info_ptr = unit->first_child_die_ptr;
3857
172
  bfd_byte *info_ptr_end = unit->end_ptr;
3858
172
  int nesting_level = 0;
3859
172
  struct nest_funcinfo
3860
172
  {
3861
172
    struct funcinfo *func;
3862
172
  } *nested_funcs;
3863
172
  int nested_funcs_size;
3864
172
  struct funcinfo *last_func;
3865
172
  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
172
  nested_funcs_size = 32;
3870
172
  nested_funcs = (struct nest_funcinfo *)
3871
172
    bfd_malloc (nested_funcs_size * sizeof (*nested_funcs));
3872
172
  if (nested_funcs == NULL)
3873
0
    return false;
3874
172
  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
32.6k
  while (nesting_level >= 0)
3881
32.4k
    {
3882
32.4k
      unsigned int abbrev_number, i;
3883
32.4k
      struct abbrev_info *abbrev;
3884
32.4k
      struct funcinfo *func;
3885
32.4k
      struct varinfo *var;
3886
32.4k
      uint64_t current_offset;
3887
3888
      /* PR 17512: file: 9f405d9d.  */
3889
32.4k
      if (info_ptr >= info_ptr_end)
3890
6
  goto fail;
3891
3892
32.4k
      current_offset = info_ptr - unit->info_ptr_unit;
3893
32.4k
      abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
3894
32.4k
               false, info_ptr_end);
3895
32.4k
      if (abbrev_number == 0)
3896
2.58k
  {
3897
2.58k
    nesting_level--;
3898
2.58k
    continue;
3899
2.58k
  }
3900
3901
29.8k
      abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
3902
29.8k
      if (! abbrev)
3903
15
  {
3904
15
    static unsigned int previous_failed_abbrev = -1U;
3905
3906
    /* Avoid multiple reports of the same missing abbrev.  */
3907
15
    if (abbrev_number != previous_failed_abbrev)
3908
12
      {
3909
12
        _bfd_error_handler
3910
12
    (_("DWARF error: could not find abbrev number %u"),
3911
12
     abbrev_number);
3912
12
        previous_failed_abbrev = abbrev_number;
3913
12
      }
3914
15
    bfd_set_error (bfd_error_bad_value);
3915
15
    goto fail;
3916
15
  }
3917
3918
29.8k
      if (abbrev->tag == DW_TAG_subprogram
3919
29.8k
    || abbrev->tag == DW_TAG_entry_point
3920
29.8k
    || abbrev->tag == DW_TAG_inlined_subroutine)
3921
14.5k
  {
3922
14.5k
    size_t amt = sizeof (struct funcinfo);
3923
3924
14.5k
    var = NULL;
3925
14.5k
    func = (struct funcinfo *) bfd_zalloc (abfd, amt);
3926
14.5k
    if (func == NULL)
3927
0
      goto fail;
3928
14.5k
    func->tag = abbrev->tag;
3929
14.5k
    func->prev_func = unit->function_table;
3930
14.5k
    func->unit_offset = current_offset;
3931
14.5k
    unit->function_table = func;
3932
14.5k
    unit->number_of_functions++;
3933
14.5k
    BFD_ASSERT (!unit->cached);
3934
3935
14.5k
    if (func->tag == DW_TAG_inlined_subroutine)
3936
8.39k
      for (i = nesting_level; i-- != 0; )
3937
8.31k
        if (nested_funcs[i].func)
3938
8.24k
    {
3939
8.24k
      func->caller_func = nested_funcs[i].func;
3940
8.24k
      break;
3941
8.24k
    }
3942
14.5k
    nested_funcs[nesting_level].func = func;
3943
14.5k
  }
3944
15.3k
      else
3945
15.3k
  {
3946
15.3k
    func = NULL;
3947
15.3k
    if (abbrev->tag == DW_TAG_variable
3948
15.3k
        || abbrev->tag == DW_TAG_member)
3949
5
      {
3950
5
        size_t amt = sizeof (struct varinfo);
3951
3952
5
        var = (struct varinfo *) bfd_zalloc (abfd, amt);
3953
5
        if (var == NULL)
3954
0
    goto fail;
3955
5
        var->tag = abbrev->tag;
3956
5
        var->stack = true;
3957
5
        var->prev_var = unit->variable_table;
3958
5
        unit->variable_table = var;
3959
5
        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
5
      }
3963
15.3k
    else
3964
15.3k
      var = NULL;
3965
3966
    /* No inline function in scope at this nesting level.  */
3967
15.3k
    nested_funcs[nesting_level].func = 0;
3968
15.3k
  }
3969
3970
130k
      for (i = 0; i < abbrev->num_attrs; ++i)
3971
100k
  {
3972
100k
    struct attribute attr;
3973
3974
100k
    info_ptr = read_attribute (&attr, &abbrev->attrs[i],
3975
100k
             unit, info_ptr, info_ptr_end);
3976
100k
    if (info_ptr == NULL)
3977
9
      goto fail;
3978
100k
  }
3979
3980
29.8k
      if (abbrev->has_children)
3981
2.45k
  {
3982
2.45k
    nesting_level++;
3983
3984
2.45k
    if (nesting_level >= nested_funcs_size)
3985
0
      {
3986
0
        struct nest_funcinfo *tmp;
3987
3988
0
        nested_funcs_size *= 2;
3989
0
        tmp = (struct nest_funcinfo *)
3990
0
    bfd_realloc (nested_funcs,
3991
0
           nested_funcs_size * sizeof (*nested_funcs));
3992
0
        if (tmp == NULL)
3993
0
    goto fail;
3994
0
        nested_funcs = tmp;
3995
0
      }
3996
2.45k
    nested_funcs[nesting_level].func = 0;
3997
2.45k
  }
3998
29.8k
    }
3999
4000
142
  unit->function_table = reverse_funcinfo_list (unit->function_table);
4001
142
  unit->variable_table = reverse_varinfo_list (unit->variable_table);
4002
4003
  /* This is the second pass over the abbrevs.  */      
4004
142
  info_ptr = unit->first_child_die_ptr;
4005
142
  nesting_level = 0;
4006
  
4007
142
  last_func = NULL;
4008
142
  last_var = NULL;
4009
4010
30.1k
  while (nesting_level >= 0)
4011
30.0k
    {
4012
30.0k
      unsigned int abbrev_number, i;
4013
30.0k
      struct abbrev_info *abbrev;
4014
30.0k
      struct attribute attr;
4015
30.0k
      struct funcinfo *func;
4016
30.0k
      struct varinfo *var;
4017
30.0k
      bfd_vma low_pc = 0;
4018
30.0k
      bfd_vma high_pc = 0;
4019
30.0k
      bool high_pc_relative = false;
4020
30.0k
      uint64_t current_offset;
4021
4022
      /* PR 17512: file: 9f405d9d.  */
4023
30.0k
      if (info_ptr >= info_ptr_end)
4024
0
  goto fail;
4025
4026
30.0k
      current_offset = info_ptr - unit->info_ptr_unit;
4027
30.0k
      abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
4028
30.0k
               false, info_ptr_end);
4029
30.0k
      if (! abbrev_number)
4030
2.37k
  {
4031
2.37k
    nesting_level--;
4032
2.37k
    continue;
4033
2.37k
  }
4034
4035
27.6k
      abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
4036
      /* This should have been handled above.  */
4037
27.6k
      BFD_ASSERT (abbrev != NULL);
4038
4039
27.6k
      func = NULL;
4040
27.6k
      var = NULL;
4041
27.6k
      if (abbrev->tag == DW_TAG_subprogram
4042
27.6k
    || abbrev->tag == DW_TAG_entry_point
4043
27.6k
    || abbrev->tag == DW_TAG_inlined_subroutine)
4044
13.5k
  {
4045
13.5k
    if (last_func
4046
13.5k
        && last_func->prev_func
4047
13.5k
        && last_func->prev_func->unit_offset == current_offset)
4048
13.4k
      func = last_func->prev_func;
4049
135
    else
4050
135
      func = lookup_func_by_offset (current_offset, unit->function_table);
4051
4052
13.5k
    if (func == NULL)
4053
0
      goto fail;
4054
4055
13.5k
    last_func = func;
4056
13.5k
  }
4057
14.1k
      else if (abbrev->tag == DW_TAG_variable
4058
14.1k
         || abbrev->tag == DW_TAG_member)
4059
1
  {
4060
1
    if (last_var
4061
1
        && last_var->prev_var
4062
1
        && last_var->prev_var->unit_offset == current_offset)
4063
0
      var = last_var->prev_var;
4064
1
    else
4065
1
      var = lookup_var_by_offset (current_offset, unit->variable_table);
4066
4067
1
    if (var == NULL)
4068
0
      goto fail;
4069
4070
1
    last_var = var;
4071
1
  }
4072
4073
120k
      for (i = 0; i < abbrev->num_attrs; ++i)
4074
93.0k
  {
4075
93.0k
    info_ptr = read_attribute (&attr, &abbrev->attrs[i],
4076
93.0k
             unit, info_ptr, info_ptr_end);
4077
93.0k
    if (info_ptr == NULL)
4078
0
      goto fail;
4079
4080
93.0k
    if (func)
4081
64.6k
      {
4082
64.6k
        switch (attr.name)
4083
64.6k
    {
4084
7.70k
    case DW_AT_call_file:
4085
7.70k
      if (is_int_form (&attr))
4086
7.70k
        {
4087
7.70k
          free (func->caller_file);
4088
7.70k
          func->caller_file = concat_filename (unit->line_table,
4089
7.70k
                 attr.u.val);
4090
7.70k
        }
4091
7.70k
      break;
4092
4093
7.71k
    case DW_AT_call_line:
4094
7.71k
      if (is_int_form (&attr))
4095
7.71k
        func->caller_line = attr.u.val;
4096
7.71k
      break;
4097
4098
7.75k
    case DW_AT_abstract_origin:
4099
7.75k
    case DW_AT_specification:
4100
7.75k
      if (is_int_form (&attr)
4101
7.75k
          && !find_abstract_instance (unit, &attr, 0,
4102
7.75k
              &func->name,
4103
7.75k
              &func->is_linkage,
4104
7.75k
              &func->file,
4105
7.75k
              &func->line))
4106
12
        goto fail;
4107
7.74k
      break;
4108
4109
7.74k
    case DW_AT_name:
4110
      /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
4111
         over DW_AT_name.  */
4112
5.58k
      if (func->name == NULL && is_str_form (&attr))
4113
5.58k
        {
4114
5.58k
          func->name = attr.u.str;
4115
5.58k
          if (mangle_style (unit->lang) == 0)
4116
5.53k
      func->is_linkage = true;
4117
5.58k
        }
4118
5.58k
      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
2.91k
    case DW_AT_low_pc:
4132
2.91k
      if (is_int_form (&attr))
4133
2.91k
        low_pc = attr.u.val;
4134
2.91k
      break;
4135
4136
2.94k
    case DW_AT_high_pc:
4137
2.94k
      if (is_int_form (&attr))
4138
2.91k
        {
4139
2.91k
          high_pc = attr.u.val;
4140
2.91k
          high_pc_relative = attr.form != DW_FORM_addr;
4141
2.91k
        }
4142
2.94k
      break;
4143
4144
5.89k
    case DW_AT_ranges:
4145
5.89k
      if (is_int_form (&attr)
4146
5.89k
          && !read_rangelist (unit, &func->arange,
4147
5.89k
            &unit->file->trie_root, attr.u.val))
4148
10
        goto fail;
4149
5.88k
      break;
4150
4151
5.88k
    case DW_AT_decl_file:
4152
2.67k
      if (is_int_form (&attr))
4153
2.67k
        {
4154
2.67k
          free (func->file);
4155
2.67k
          func->file = concat_filename (unit->line_table,
4156
2.67k
                attr.u.val);
4157
2.67k
        }
4158
2.67k
      break;
4159
4160
2.67k
    case DW_AT_decl_line:
4161
2.67k
      if (is_int_form (&attr))
4162
2.67k
        func->line = attr.u.val;
4163
2.67k
      break;
4164
4165
18.7k
    default:
4166
18.7k
      break;
4167
64.6k
    }
4168
64.6k
      }
4169
28.4k
    else if (var)
4170
6
      {
4171
6
        switch (attr.name)
4172
6
    {
4173
1
    case DW_AT_specification:
4174
1
      if (is_int_form (&attr) && attr.u.val)
4175
0
        {
4176
0
          bool is_linkage;
4177
0
          if (!find_abstract_instance (unit, &attr, 0,
4178
0
               &var->name,
4179
0
               &is_linkage,
4180
0
               &var->file,
4181
0
               &var->line))
4182
0
      {
4183
0
        _bfd_error_handler (_("DWARF error: could not find "
4184
0
            "variable specification "
4185
0
            "at offset 0x%lx"),
4186
0
                (unsigned long) attr.u.val);
4187
0
        break;
4188
0
      }
4189
0
        }
4190
1
      break;
4191
4192
1
    case DW_AT_name:
4193
1
      if (is_str_form (&attr))
4194
0
        var->name = attr.u.str;
4195
1
      break;
4196
4197
0
    case DW_AT_decl_file:
4198
0
      if (is_int_form (&attr))
4199
0
        {
4200
0
          free (var->file);
4201
0
          var->file = concat_filename (unit->line_table,
4202
0
               attr.u.val);
4203
0
        }
4204
0
      break;
4205
4206
1
    case DW_AT_decl_line:
4207
1
      if (is_int_form (&attr))
4208
0
        var->line = attr.u.val;
4209
1
      break;
4210
4211
1
    case DW_AT_external:
4212
1
      if (is_int_form (&attr) && attr.u.val != 0)
4213
0
        var->stack = false;
4214
1
      break;
4215
4216
1
    case DW_AT_location:
4217
1
      switch (attr.form)
4218
1
        {
4219
0
        case DW_FORM_block:
4220
0
        case DW_FORM_block1:
4221
0
        case DW_FORM_block2:
4222
0
        case DW_FORM_block4:
4223
0
        case DW_FORM_exprloc:
4224
0
          if (attr.u.blk->data != NULL
4225
0
        && *attr.u.blk->data == DW_OP_addr)
4226
0
      {
4227
0
        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
0
        if (attr.u.blk->size == unit->addr_size + 1U)
4236
0
          var->addr = bfd_get (unit->addr_size * 8,
4237
0
             unit->abfd,
4238
0
             attr.u.blk->data + 1);
4239
0
      }
4240
0
          break;
4241
4242
1
        default:
4243
1
          break;
4244
1
        }
4245
1
      break;
4246
4247
1
    default:
4248
1
      break;
4249
6
    }
4250
6
      }
4251
93.0k
  }
4252
4253
27.6k
      if (abbrev->has_children)
4254
2.28k
  nesting_level++;
4255
4256
27.6k
      if (high_pc_relative)
4257
2.91k
  high_pc += low_pc;
4258
4259
27.6k
      if (func && high_pc != 0)
4260
2.91k
  {
4261
2.91k
    if (!arange_add (unit, &func->arange, &unit->file->trie_root,
4262
2.91k
         low_pc, high_pc))
4263
0
      goto fail;
4264
2.91k
  }
4265
27.6k
    }
4266
4267
120
  unit->function_table = reverse_funcinfo_list (unit->function_table);
4268
120
  unit->variable_table = reverse_varinfo_list (unit->variable_table);
4269
4270
120
  free (nested_funcs);
4271
120
  return true;
4272
4273
52
 fail:
4274
52
  free (nested_funcs);
4275
52
  return false;
4276
142
}
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
31
{
4288
31
  if (is_strx_form (attr->form))
4289
11
    attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
4290
31
  if (is_addrx_form (attr->form))
4291
20
    attr->u.val = read_indexed_address (attr->u.val, unit);
4292
4293
31
  switch (attr->name)
4294
31
    {
4295
6
    case DW_AT_stmt_list:
4296
6
      unit->stmtlist = 1;
4297
6
      unit->line_offset = attr->u.val;
4298
6
      break;
4299
4300
3
    case DW_AT_name:
4301
3
      if (is_str_form (attr))
4302
2
  unit->name = attr->u.str;
4303
3
      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
0
    case DW_AT_high_pc:
4312
0
      *high_pc = attr->u.val;
4313
0
      *high_pc_relative = attr->form != DW_FORM_addr;
4314
0
      break;
4315
4316
0
    case DW_AT_ranges:
4317
0
      if (!read_rangelist (unit, &unit->arange,
4318
0
         &unit->file->trie_root, attr->u.val))
4319
0
  return;
4320
0
      break;
4321
4322
0
    case DW_AT_comp_dir:
4323
0
      {
4324
0
  char *comp_dir = attr->u.str;
4325
4326
0
  if (!is_str_form (attr))
4327
0
    {
4328
0
      _bfd_error_handler
4329
0
        (_("DWARF error: DW_AT_comp_dir attribute encountered "
4330
0
     "with a non-string form"));
4331
0
      comp_dir = NULL;
4332
0
    }
4333
4334
0
  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
0
  unit->comp_dir = comp_dir;
4342
0
  break;
4343
0
      }
4344
4345
0
    case DW_AT_language:
4346
0
      unit->lang = attr->u.val;
4347
22
    default:
4348
22
      break;
4349
31
    }
4350
31
}
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
320
{
4369
320
  struct comp_unit* unit;
4370
320
  unsigned int version;
4371
320
  uint64_t abbrev_offset = 0;
4372
  /* Initialize it just to avoid a GCC false warning.  */
4373
320
  unsigned int addr_size = -1;
4374
320
  struct abbrev_info** abbrevs;
4375
320
  unsigned int abbrev_number, i;
4376
320
  struct abbrev_info *abbrev;
4377
320
  struct attribute attr;
4378
320
  bfd_byte *end_ptr = info_ptr + unit_length;
4379
320
  size_t amt;
4380
320
  bfd_vma low_pc = 0;
4381
320
  bfd_vma high_pc = 0;
4382
320
  bfd *abfd = file->bfd_ptr;
4383
320
  bool high_pc_relative = false;
4384
320
  enum dwarf_unit_type unit_type;
4385
320
  struct attribute *str_addrp = NULL;
4386
320
  size_t str_count = 0;
4387
320
  size_t str_alloc = 0;
4388
320
  bool compunit_flag = false;
4389
4390
320
  version = read_2_bytes (abfd, &info_ptr, end_ptr);
4391
320
  if (version < 2 || version > 5)
4392
7
    {
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
7
      if (version)
4398
1
  {
4399
1
    _bfd_error_handler
4400
1
      (_("DWARF error: found dwarf version '%u', this reader"
4401
1
         " only handles version 2, 3, 4 and 5 information"), version);
4402
1
    bfd_set_error (bfd_error_bad_value);
4403
1
  }
4404
7
      return NULL;
4405
7
    }
4406
4407
313
  if (version < 5)
4408
312
    unit_type = DW_UT_compile;
4409
1
  else
4410
1
    {
4411
1
      unit_type = read_1_byte (abfd, &info_ptr, end_ptr);
4412
1
      addr_size = read_1_byte (abfd, &info_ptr, end_ptr);
4413
1
    }
4414
4415
313
  BFD_ASSERT (offset_size == 4 || offset_size == 8);
4416
313
  if (offset_size == 4)
4417
313
    abbrev_offset = read_4_bytes (abfd, &info_ptr, end_ptr);
4418
0
  else
4419
0
    abbrev_offset = read_8_bytes (abfd, &info_ptr, end_ptr);
4420
4421
313
  if (version < 5)
4422
312
    addr_size = read_1_byte (abfd, &info_ptr, end_ptr);
4423
4424
313
  switch (unit_type)
4425
313
    {
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
313
    default:
4440
313
      break;
4441
313
    }
4442
4443
313
  if (addr_size > sizeof (bfd_vma))
4444
1
    {
4445
1
      _bfd_error_handler
4446
  /* xgettext: c-format */
4447
1
  (_("DWARF error: found address size '%u', this reader"
4448
1
     " can not handle sizes greater than '%u'"),
4449
1
   addr_size,
4450
1
   (unsigned int) sizeof (bfd_vma));
4451
1
      bfd_set_error (bfd_error_bad_value);
4452
1
      return NULL;
4453
1
    }
4454
4455
312
  if (addr_size != 2 && addr_size != 4 && addr_size != 8)
4456
3
    {
4457
3
      _bfd_error_handler
4458
3
  ("DWARF error: found address size '%u', this reader"
4459
3
   " can only handle address sizes '2', '4' and '8'", addr_size);
4460
3
      bfd_set_error (bfd_error_bad_value);
4461
3
      return NULL;
4462
3
    }
4463
4464
  /* Read the abbrevs for this compilation unit into a table.  */
4465
309
  abbrevs = read_abbrevs (abfd, abbrev_offset, stash, file);
4466
309
  if (! abbrevs)
4467
9
    return NULL;
4468
4469
300
  abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
4470
300
           false, end_ptr);
4471
300
  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
299
  abbrev = lookup_abbrev (abbrev_number, abbrevs);
4481
299
  if (! abbrev)
4482
5
    {
4483
5
      _bfd_error_handler (_("DWARF error: could not find abbrev number %u"),
4484
5
        abbrev_number);
4485
5
      bfd_set_error (bfd_error_bad_value);
4486
5
      return NULL;
4487
5
    }
4488
4489
294
  amt = sizeof (struct comp_unit);
4490
294
  unit = (struct comp_unit *) bfd_zalloc (abfd, amt);
4491
294
  if (unit == NULL)
4492
0
    return NULL;
4493
294
  unit->abfd = abfd;
4494
294
  unit->version = version;
4495
294
  unit->addr_size = addr_size;
4496
294
  unit->offset_size = offset_size;
4497
294
  unit->abbrevs = abbrevs;
4498
294
  unit->end_ptr = end_ptr;
4499
294
  unit->stash = stash;
4500
294
  unit->file = file;
4501
294
  unit->info_ptr_unit = info_ptr_unit;
4502
4503
294
  if (abbrev->tag == DW_TAG_compile_unit)
4504
290
    compunit_flag = true;
4505
4506
2.18k
  for (i = 0; i < abbrev->num_attrs; ++i)
4507
1.90k
    {
4508
1.90k
      info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr, end_ptr);
4509
1.90k
      if (info_ptr == NULL)
4510
11
  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
1.89k
      if ((unit->dwarf_str_offset == 0 && is_strx_form (attr.form))
4516
1.89k
    || (unit->dwarf_addr_offset == 0 && is_addrx_form (attr.form)))
4517
35
  {
4518
35
    if (str_count <= str_alloc)
4519
35
      {
4520
35
        str_alloc = 2 * str_alloc + 200;
4521
35
        str_addrp = bfd_realloc (str_addrp,
4522
35
               str_alloc * sizeof (*str_addrp));
4523
35
        if (str_addrp == NULL)
4524
0
    goto err_exit;
4525
35
      }
4526
35
    str_addrp[str_count] = attr;
4527
35
    str_count++;
4528
35
    continue;
4529
35
  }
4530
4531
      /* Store the data if it is of an attribute we want to keep in a
4532
   partial symbol table.  */
4533
1.85k
      switch (attr.name)
4534
1.85k
  {
4535
273
  case DW_AT_stmt_list:
4536
273
    if (is_int_form (&attr))
4537
272
      {
4538
272
        unit->stmtlist = 1;
4539
272
        unit->line_offset = attr.u.val;
4540
272
      }
4541
273
    break;
4542
4543
186
  case DW_AT_name:
4544
186
    if (is_str_form (&attr))
4545
181
      unit->name = attr.u.str;
4546
186
    break;
4547
4548
233
  case DW_AT_low_pc:
4549
233
    if (is_int_form (&attr))
4550
233
      {
4551
233
        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
233
        if (compunit_flag)
4556
232
    unit->base_address = low_pc;
4557
233
      }
4558
233
    break;
4559
4560
180
  case DW_AT_high_pc:
4561
180
    if (is_int_form (&attr))
4562
106
      {
4563
106
        high_pc = attr.u.val;
4564
106
        high_pc_relative = attr.form != DW_FORM_addr;
4565
106
      }
4566
180
    break;
4567
4568
129
  case DW_AT_ranges:
4569
129
    if (is_int_form (&attr)
4570
129
        && !read_rangelist (unit, &unit->arange,
4571
129
          &unit->file->trie_root, attr.u.val))
4572
5
      goto err_exit;
4573
124
    break;
4574
4575
205
  case DW_AT_comp_dir:
4576
205
    {
4577
205
      char *comp_dir = attr.u.str;
4578
4579
      /* PR 17512: file: 1fe726be.  */
4580
205
      if (!is_str_form (&attr))
4581
1
        {
4582
1
    _bfd_error_handler
4583
1
      (_("DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"));
4584
1
    comp_dir = NULL;
4585
1
        }
4586
4587
205
      if (comp_dir)
4588
130
        {
4589
    /* Irix 6.2 native cc prepends <machine>.: to the compilation
4590
       directory, get rid of it.  */
4591
130
    char *cp = strchr (comp_dir, ':');
4592
4593
130
    if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
4594
0
      comp_dir = cp + 1;
4595
130
        }
4596
205
      unit->comp_dir = comp_dir;
4597
205
      break;
4598
129
    }
4599
4600
242
  case DW_AT_language:
4601
242
    if (is_int_form (&attr))
4602
236
      unit->lang = attr.u.val;
4603
242
    break;
4604
4605
0
  case DW_AT_addr_base:
4606
0
    unit->dwarf_addr_offset = attr.u.val;
4607
0
    break;
4608
4609
0
  case DW_AT_str_offsets_base:
4610
0
    unit->dwarf_str_offset = attr.u.val;
4611
0
    break;
4612
4613
409
  default:
4614
409
    break;
4615
1.85k
  }
4616
1.85k
    }
4617
4618
309
  for (i = 0; i < str_count; ++i)
4619
31
    reread_attribute (unit, &str_addrp[i], &low_pc, &high_pc,
4620
31
          &high_pc_relative, compunit_flag);
4621
4622
278
  if (high_pc_relative)
4623
106
    high_pc += low_pc;
4624
278
  if (high_pc != 0)
4625
104
    {
4626
104
      if (!arange_add (unit, &unit->arange, &unit->file->trie_root,
4627
104
           low_pc, high_pc))
4628
0
  goto err_exit;
4629
104
    }
4630
4631
278
  unit->first_child_die_ptr = info_ptr;
4632
4633
278
  free (str_addrp);
4634
278
  return unit;
4635
4636
16
 err_exit:
4637
16
  unit->error = 1;
4638
16
  free (str_addrp);
4639
16
  return NULL;
4640
278
}
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
278
{
4651
278
  struct arange *arange;
4652
4653
278
  if (unit->error)
4654
0
    return false;
4655
4656
278
  if (unit->arange.high == 0 /* No ranges have been computed yet.  */
4657
278
      || unit->line_table == NULL) /* The line info table has not been loaded.  */
4658
278
    return true;
4659
4660
0
  for (arange = &unit->arange; arange != NULL; arange = arange->next)
4661
0
    if (addr >= arange->low && addr < arange->high)
4662
0
      return true;
4663
4664
0
  return false;
4665
0
}
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
538
{
4680
538
  bool line_p, func_p;
4681
4682
538
  if (!comp_unit_maybe_decode_line_info (unit))
4683
291
    return false;
4684
4685
247
  *function_ptr = NULL;
4686
247
  func_p = lookup_address_in_function_table (unit, addr, function_ptr);
4687
4688
247
  if (func_p && (*function_ptr)->tag == DW_TAG_inlined_subroutine)
4689
74
    unit->stash->inliner_chain = *function_ptr;
4690
4691
247
  line_p = lookup_address_in_line_info_table (unit->line_table, addr,
4692
247
                filename_ptr,
4693
247
                linenumber_ptr,
4694
247
                discriminator_ptr);
4695
247
  return line_p || func_p;
4696
538
}
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
538
{
4705
538
  if (unit->error)
4706
139
    return false;
4707
4708
399
  if (! unit->line_table)
4709
278
    {
4710
278
      if (! unit->stmtlist)
4711
9
  {
4712
9
    unit->error = 1;
4713
9
    return false;
4714
9
  }
4715
4716
269
      unit->line_table = decode_line_info (unit);
4717
4718
269
      if (! unit->line_table)
4719
91
  {
4720
91
    unit->error = 1;
4721
91
    return false;
4722
91
  }
4723
4724
178
      if (unit->first_child_die_ptr < unit->end_ptr
4725
178
    && ! scan_unit_for_symbols (unit))
4726
52
  {
4727
52
    unit->error = 1;
4728
52
    return false;
4729
52
  }
4730
178
    }
4731
4732
247
  return true;
4733
399
}
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
0
{
4750
0
  if (!comp_unit_maybe_decode_line_info (unit))
4751
0
    return false;
4752
4753
0
  if (sym->flags & BSF_FUNCTION)
4754
0
    return lookup_symbol_in_function_table (unit, sym, addr,
4755
0
              filename_ptr,
4756
0
              linenumber_ptr);
4757
4758
0
  return lookup_symbol_in_variable_table (unit, sym, addr,
4759
0
            filename_ptr,
4760
0
            linenumber_ptr);
4761
0
}
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
0
{
4773
0
  struct funcinfo* each_func;
4774
0
  struct varinfo* each_var;
4775
0
  bool okay = true;
4776
4777
0
  BFD_ASSERT (stash->info_hash_status != STASH_INFO_HASH_DISABLED);
4778
4779
0
  if (!comp_unit_maybe_decode_line_info (unit))
4780
0
    return false;
4781
4782
0
  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
0
  unit->function_table = reverse_funcinfo_list (unit->function_table);
4790
0
  for (each_func = unit->function_table;
4791
0
       each_func && okay;
4792
0
       each_func = each_func->prev_func)
4793
0
    {
4794
      /* Skip nameless functions.  */
4795
0
      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
0
  okay = insert_info_hash_table (funcinfo_hash_table, each_func->name,
4800
0
               (void*) each_func, false);
4801
0
    }
4802
0
  unit->function_table = reverse_funcinfo_list (unit->function_table);
4803
0
  if (!okay)
4804
0
    return false;
4805
4806
  /* We do the same for variable infos.  */
4807
0
  unit->variable_table = reverse_varinfo_list (unit->variable_table);
4808
0
  for (each_var = unit->variable_table;
4809
0
       each_var && okay;
4810
0
       each_var = each_var->prev_var)
4811
0
    {
4812
      /* Skip stack vars and vars with no files or names.  */
4813
0
      if (! each_var->stack
4814
0
    && each_var->file != NULL
4815
0
    && 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
0
  okay = insert_info_hash_table (varinfo_hash_table, each_var->name,
4820
0
               (void*) each_var, false);
4821
0
    }
4822
4823
0
  unit->variable_table = reverse_varinfo_list (unit->variable_table);
4824
0
  unit->cached = true;
4825
0
  return okay;
4826
0
}
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
888k
#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
4.75k
{
4844
4.75k
  asection *msec;
4845
4.75k
  const char *look;
4846
4847
4.75k
  if (after_sec == NULL)
4848
4.00k
    {
4849
4.00k
      look = debug_sections[debug_info].uncompressed_name;
4850
4.00k
      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
4.00k
      if (msec != NULL && (msec->flags & SEC_HAS_CONTENTS) != 0)
4854
525
  return msec;
4855
4856
3.47k
      look = debug_sections[debug_info].compressed_name;
4857
3.47k
      msec = bfd_get_section_by_name (abfd, look);
4858
3.47k
      if (msec != NULL && (msec->flags & SEC_HAS_CONTENTS) != 0)
4859
0
        return msec;
4860
4861
1.04M
      for (msec = abfd->sections; msec != NULL; msec = msec->next)
4862
1.04M
  if ((msec->flags & SEC_HAS_CONTENTS) != 0
4863
1.04M
      && startswith (msec->name, GNU_LINKONCE_INFO))
4864
7
    return msec;
4865
4866
3.46k
      return NULL;
4867
3.47k
    }
4868
4869
4.80k
  for (msec = after_sec->next; msec != NULL; msec = msec->next)
4870
4.32k
    {
4871
4.32k
      if ((msec->flags & SEC_HAS_CONTENTS) == 0)
4872
14
  continue;
4873
4874
4.30k
      look = debug_sections[debug_info].uncompressed_name;
4875
4.30k
      if (strcmp (msec->name, look) == 0)
4876
256
  return msec;
4877
4878
4.05k
      look = debug_sections[debug_info].compressed_name;
4879
4.05k
      if (look != NULL && strcmp (msec->name, look) == 0)
4880
0
  return msec;
4881
4882
4.05k
      if (startswith (msec->name, GNU_LINKONCE_INFO))
4883
11
  return msec;
4884
4.05k
    }
4885
4886
483
  return NULL;
4887
750
}
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
2.08k
{
4921
2.08k
  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
2.08k
}
4947
4948
/* Unset vmas for adjusted sections in STASH.  */
4949
4950
static void
4951
unset_sections (struct dwarf2_debug *stash)
4952
2.30k
{
4953
2.30k
  int i;
4954
2.30k
  struct adjusted_section *p;
4955
4956
2.30k
  i = stash->adjusted_section_count;
4957
2.30k
  p = stash->adjusted_sections;
4958
43.4k
  for (; i > 0; i--, p++)
4959
41.1k
    p->section->vma = p->orig_vma;
4960
2.30k
}
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
2.29k
{
4975
2.29k
  bfd *abfd;
4976
2.29k
  struct adjusted_section *p;
4977
2.29k
  int i;
4978
2.29k
  const char *debug_info_name;
4979
4980
2.29k
  if (stash->adjusted_section_count != 0)
4981
1.84k
    {
4982
1.84k
      i = stash->adjusted_section_count;
4983
1.84k
      p = stash->adjusted_sections;
4984
28.6k
      for (; i > 0; i--, p++)
4985
26.7k
  p->section->vma = p->adj_vma;
4986
1.84k
      return true;
4987
1.84k
    }
4988
4989
450
  debug_info_name = stash->debug_sections[debug_info].uncompressed_name;
4990
450
  i = 0;
4991
450
  abfd = orig_bfd;
4992
450
  while (1)
4993
450
    {
4994
450
      asection *sect;
4995
4996
22.2k
      for (sect = abfd->sections; sect != NULL; sect = sect->next)
4997
21.7k
  {
4998
21.7k
    int is_debug_info;
4999
5000
21.7k
    if (sect->output_section != NULL
5001
21.7k
        && sect->output_section != sect
5002
21.7k
        && (sect->flags & SEC_DEBUGGING) == 0)
5003
0
      continue;
5004
5005
21.7k
    is_debug_info = (strcmp (sect->name, debug_info_name) == 0
5006
21.7k
         || startswith (sect->name, GNU_LINKONCE_INFO));
5007
5008
21.7k
    if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd)
5009
21.7k
        && !is_debug_info)
5010
7.40k
      continue;
5011
5012
14.3k
    i++;
5013
14.3k
  }
5014
450
      if (abfd == stash->f.bfd_ptr)
5015
450
  break;
5016
0
      abfd = stash->f.bfd_ptr;
5017
0
    }
5018
5019
450
  if (i <= 1)
5020
0
    stash->adjusted_section_count = -1;
5021
450
  else
5022
450
    {
5023
450
      bfd_vma last_vma = 0, last_dwarf = 0;
5024
450
      size_t amt = i * sizeof (struct adjusted_section);
5025
5026
450
      p = (struct adjusted_section *) bfd_malloc (amt);
5027
450
      if (p == NULL)
5028
0
  return false;
5029
5030
450
      stash->adjusted_sections = p;
5031
450
      stash->adjusted_section_count = i;
5032
5033
450
      abfd = orig_bfd;
5034
450
      while (1)
5035
450
  {
5036
450
    asection *sect;
5037
5038
22.2k
    for (sect = abfd->sections; sect != NULL; sect = sect->next)
5039
21.7k
      {
5040
21.7k
        bfd_size_type sz;
5041
21.7k
        int is_debug_info;
5042
5043
21.7k
        if (sect->output_section != NULL
5044
21.7k
      && sect->output_section != sect
5045
21.7k
      && (sect->flags & SEC_DEBUGGING) == 0)
5046
0
    continue;
5047
5048
21.7k
        is_debug_info = (strcmp (sect->name, debug_info_name) == 0
5049
21.7k
             || startswith (sect->name, GNU_LINKONCE_INFO));
5050
5051
21.7k
        if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd)
5052
21.7k
      && !is_debug_info)
5053
7.40k
    continue;
5054
5055
14.3k
        sz = sect->rawsize ? sect->rawsize : sect->size;
5056
5057
14.3k
        p->section = sect;
5058
14.3k
        p->orig_vma = sect->vma;
5059
5060
14.3k
        bfd_vma *v = is_debug_info ? &last_dwarf : &last_vma;
5061
        /* Align the new address to the current section
5062
     alignment.  */
5063
14.3k
        bfd_vma mask = -(bfd_vma) 1 << sect->alignment_power;
5064
14.3k
        *v = (*v + ~mask) & mask;
5065
14.3k
        sect->vma = *v;
5066
14.3k
        *v += sz;
5067
5068
14.3k
        p->adj_vma = sect->vma;
5069
14.3k
        p++;
5070
14.3k
      }
5071
450
    if (abfd == stash->f.bfd_ptr)
5072
450
      break;
5073
0
    abfd = stash->f.bfd_ptr;
5074
0
  }
5075
450
    }
5076
5077
450
  if (orig_bfd != stash->f.bfd_ptr)
5078
0
    set_debug_vma (orig_bfd, stash->f.bfd_ptr);
5079
5080
450
  return true;
5081
450
}
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
0
{
5096
0
  struct funcinfo* each_func;
5097
0
  struct funcinfo* best_fit = NULL;
5098
0
  bfd_vma best_fit_len = (bfd_vma) -1;
5099
0
  struct info_list_node *node;
5100
0
  struct arange *arange;
5101
0
  const char *name = bfd_asymbol_name (sym);
5102
5103
0
  for (node = lookup_info_hash_table (hash_table, name);
5104
0
       node;
5105
0
       node = node->next)
5106
0
    {
5107
0
      each_func = (struct funcinfo *) node->info;
5108
0
      for (arange = &each_func->arange;
5109
0
     arange;
5110
0
     arange = arange->next)
5111
0
  {
5112
0
    if (addr >= arange->low
5113
0
        && addr < arange->high
5114
0
        && arange->high - arange->low < best_fit_len)
5115
0
      {
5116
0
        best_fit = each_func;
5117
0
        best_fit_len = arange->high - arange->low;
5118
0
      }
5119
0
  }
5120
0
    }
5121
5122
0
  if (best_fit)
5123
0
    {
5124
0
      *filename_ptr = best_fit->file;
5125
0
      *linenumber_ptr = best_fit->line;
5126
0
      return true;
5127
0
    }
5128
5129
0
  return false;
5130
0
}
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
0
{
5145
0
  struct varinfo* each;
5146
0
  struct info_list_node *node;
5147
0
  const char *name = bfd_asymbol_name (sym);
5148
5149
0
  for (node = lookup_info_hash_table (hash_table, name);
5150
0
       node;
5151
0
       node = node->next)
5152
0
    {
5153
0
      each = (struct varinfo *) node->info;
5154
0
      if (each->addr == addr)
5155
0
  {
5156
0
    *filename_ptr = each->file;
5157
0
    *linenumber_ptr = each->line;
5158
0
    return true;
5159
0
  }
5160
0
    }
5161
5162
0
  return false;
5163
0
}
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
0
{
5172
0
  struct comp_unit *each;
5173
5174
  /* Exit if hash tables are up-to-date.  */
5175
0
  if (stash->f.all_comp_units == stash->hash_units_head)
5176
0
    return true;
5177
5178
0
  if (stash->hash_units_head)
5179
0
    each = stash->hash_units_head->prev_unit;
5180
0
  else
5181
0
    each = stash->f.last_comp_unit;
5182
5183
0
  while (each)
5184
0
    {
5185
0
      if (!comp_unit_hash_info (stash, each, stash->funcinfo_hash_table,
5186
0
        stash->varinfo_hash_table))
5187
0
  {
5188
0
    stash->info_hash_status = STASH_INFO_HASH_DISABLED;
5189
0
    return false;
5190
0
  }
5191
0
      each = each->prev_unit;
5192
0
    }
5193
5194
0
  stash->hash_units_head = stash->f.all_comp_units;
5195
0
  return true;
5196
0
}
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
0
{
5259
0
  BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_OFF);
5260
5261
0
  if (stash->info_hash_count++ < STASH_INFO_HASH_TRIGGER)
5262
0
    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
0
  stash->funcinfo_hash_table = create_info_hash_table (abfd);
5269
0
  stash->varinfo_hash_table = create_info_hash_table (abfd);
5270
0
  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
0
  if (stash_maybe_update_info_hash_tables (stash))
5280
0
    stash->info_hash_status = STASH_INFO_HASH_ON;
5281
0
}
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
0
{
5295
0
  BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_ON);
5296
5297
0
  if (sym->flags & BSF_FUNCTION)
5298
0
    return info_hash_lookup_funcinfo (stash->funcinfo_hash_table, sym, addr,
5299
0
              filename_ptr, linenumber_ptr);
5300
0
  return info_hash_lookup_varinfo (stash->varinfo_hash_table, sym, addr,
5301
0
           filename_ptr, linenumber_ptr);
5302
0
}
5303
5304
/* Save current section VMAs.  */
5305
5306
static bool
5307
save_section_vma (const bfd *abfd, struct dwarf2_debug *stash)
5308
3.92k
{
5309
3.92k
  asection *s;
5310
3.92k
  unsigned int i;
5311
5312
3.92k
  if (abfd->section_count == 0)
5313
0
    return true;
5314
3.92k
  stash->sec_vma = bfd_malloc (sizeof (*stash->sec_vma) * abfd->section_count);
5315
3.92k
  if (stash->sec_vma == NULL)
5316
0
    return false;
5317
3.92k
  stash->sec_vma_count = abfd->section_count;
5318
3.92k
  for (i = 0, s = abfd->sections;
5319
1.06M
       s != NULL && i < abfd->section_count;
5320
1.06M
       i++, s = s->next)
5321
1.06M
    {
5322
1.06M
      if (s->output_section != NULL)
5323
0
  stash->sec_vma[i] = s->output_section->vma + s->output_offset;
5324
1.06M
      else
5325
1.06M
  stash->sec_vma[i] = s->vma;
5326
1.06M
    }
5327
3.92k
  return true;
5328
3.92k
}
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
231k
{
5340
231k
  asection *s;
5341
231k
  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
231k
  if (abfd->section_count != stash->sec_vma_count)
5347
0
    return false;
5348
5349
231k
  for (i = 0, s = abfd->sections;
5350
838M
       s != NULL && i < abfd->section_count;
5351
838M
       i++, s = s->next)
5352
838M
    {
5353
838M
      bfd_vma vma;
5354
5355
838M
      if (s->output_section != NULL)
5356
0
  vma = s->output_section->vma + s->output_offset;
5357
838M
      else
5358
838M
  vma = s->vma;
5359
838M
      if (vma != stash->sec_vma[i])
5360
0
  return false;
5361
838M
    }
5362
231k
  return true;
5363
231k
}
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
235k
{
5377
235k
  bfd_size_type total_size;
5378
235k
  asection *msec;
5379
235k
  struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
5380
5381
235k
  if (stash != NULL)
5382
231k
    {
5383
231k
      if (stash->orig_bfd == abfd
5384
231k
    && section_vma_same (abfd, stash))
5385
231k
  {
5386
    /* Check that we did previously find some debug information
5387
       before attempting to make use of it.  */
5388
231k
    if (stash->f.dwarf_info_size != 0)
5389
1.85k
      {
5390
1.85k
        if (do_place && !place_sections (abfd, stash))
5391
0
    return false;
5392
1.85k
        return true;
5393
1.85k
      }
5394
5395
229k
    return false;
5396
231k
  }
5397
0
      _bfd_dwarf2_cleanup_debug_info (abfd, pinfo);
5398
0
      memset (stash, 0, sizeof (*stash));
5399
0
    }
5400
3.92k
  else
5401
3.92k
    {
5402
3.92k
      stash = (struct dwarf2_debug *) bfd_zalloc (abfd, sizeof (*stash));
5403
3.92k
      if (! stash)
5404
0
  return false;
5405
3.92k
      *pinfo = stash;
5406
3.92k
    }
5407
3.92k
  stash->orig_bfd = abfd;
5408
3.92k
  stash->debug_sections = debug_sections;
5409
3.92k
  stash->f.syms = symbols;
5410
3.92k
  if (!save_section_vma (abfd, stash))
5411
0
    return false;
5412
5413
3.92k
  stash->f.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev,
5414
3.92k
                 del_abbrev, calloc, free);
5415
3.92k
  if (!stash->f.abbrev_offsets)
5416
0
    return false;
5417
5418
3.92k
  stash->alt.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev,
5419
3.92k
             del_abbrev, calloc, free);
5420
3.92k
  if (!stash->alt.abbrev_offsets)
5421
0
    return false;
5422
5423
3.92k
  stash->f.trie_root = alloc_trie_leaf (abfd);
5424
3.92k
  if (!stash->f.trie_root)
5425
0
    return false;
5426
5427
3.92k
  stash->alt.trie_root = alloc_trie_leaf (abfd);
5428
3.92k
  if (!stash->alt.trie_root)
5429
0
    return false;
5430
5431
3.92k
  if (debug_bfd == NULL)
5432
3.92k
    debug_bfd = abfd;
5433
5434
3.92k
  msec = find_debug_info (debug_bfd, debug_sections, NULL);
5435
3.92k
  if (msec == NULL && abfd == debug_bfd)
5436
3.46k
    {
5437
3.46k
      char * debug_filename;
5438
5439
3.46k
      debug_filename = bfd_follow_build_id_debuglink (abfd, DEBUGDIR);
5440
3.46k
      if (debug_filename == NULL)
5441
3.46k
  debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
5442
5443
3.46k
      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
3.46k
  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
454
  stash->f.bfd_ptr = debug_bfd;
5472
5473
454
  if (do_place
5474
454
      && !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
454
  if (! find_debug_info (debug_bfd, debug_sections, msec))
5486
362
    {
5487
      /* Case 1: only one info section.  */
5488
362
      total_size = msec->size;
5489
362
      if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
5490
362
        symbols, 0,
5491
362
        &stash->f.dwarf_info_buffer, &total_size))
5492
80
  goto restore_vma;
5493
362
    }
5494
92
  else
5495
92
    {
5496
      /* Case 2: multiple sections.  */
5497
92
      for (total_size = 0;
5498
277
     msec;
5499
185
     msec = find_debug_info (debug_bfd, debug_sections, msec))
5500
199
  {
5501
199
    if (_bfd_section_size_insane (debug_bfd, msec))
5502
14
      goto restore_vma;
5503
    /* Catch PR25070 testcase overflowing size calculation here.  */
5504
185
    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
185
    total_size += msec->size;
5510
185
  }
5511
5512
78
      stash->f.dwarf_info_buffer = (bfd_byte *) bfd_malloc (total_size);
5513
78
      if (stash->f.dwarf_info_buffer == NULL)
5514
0
  goto restore_vma;
5515
5516
78
      total_size = 0;
5517
78
      for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
5518
189
     msec;
5519
111
     msec = find_debug_info (debug_bfd, debug_sections, msec))
5520
146
  {
5521
146
    bfd_size_type size;
5522
5523
146
    size = msec->size;
5524
146
    if (size == 0)
5525
10
      continue;
5526
5527
136
    if (!(bfd_simple_get_relocated_section_contents
5528
136
    (debug_bfd, msec, stash->f.dwarf_info_buffer + total_size,
5529
136
     symbols)))
5530
35
      goto restore_vma;
5531
5532
101
    total_size += size;
5533
101
  }
5534
78
    }
5535
5536
325
  stash->f.info_ptr = stash->f.dwarf_info_buffer;
5537
325
  stash->f.dwarf_info_size = total_size;
5538
325
  return true;
5539
5540
129
 restore_vma:
5541
129
  unset_sections (stash);
5542
129
  return false;
5543
454
}
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
2.31k
{
5550
2.31k
  bfd_size_type length;
5551
2.31k
  unsigned int offset_size;
5552
2.31k
  bfd_byte *info_ptr_unit = file->info_ptr;
5553
2.31k
  bfd_byte *info_ptr_end = file->dwarf_info_buffer + file->dwarf_info_size;
5554
5555
2.31k
  if (file->info_ptr >= info_ptr_end)
5556
1.95k
    return NULL;
5557
5558
368
  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
368
  if (length == 0xffffffff)
5562
3
    {
5563
3
      offset_size = 8;
5564
3
      length = read_8_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
5565
3
    }
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
365
  else if (length == 0)
5570
6
    {
5571
6
      offset_size = 8;
5572
6
      length = read_4_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
5573
6
    }
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
359
  else
5584
359
    offset_size = 4;
5585
5586
368
  if (length != 0
5587
368
      && length <= (size_t) (info_ptr_end - file->info_ptr))
5588
320
    {
5589
320
      struct comp_unit *each = parse_comp_unit (stash, file,
5590
320
            file->info_ptr, length,
5591
320
            info_ptr_unit, offset_size);
5592
320
      if (each)
5593
278
  {
5594
278
    if (file->comp_unit_tree == NULL)
5595
264
      file->comp_unit_tree
5596
264
        = splay_tree_new (splay_tree_compare_addr_range,
5597
264
        splay_tree_free_addr_range, NULL);
5598
5599
278
    struct addr_range *r
5600
278
      = (struct addr_range *)bfd_malloc (sizeof (struct addr_range));
5601
278
    r->start = each->info_ptr_unit;
5602
278
    r->end = each->end_ptr;
5603
278
    splay_tree_node v = splay_tree_lookup (file->comp_unit_tree,
5604
278
             (splay_tree_key)r);
5605
278
    if (v != NULL || r->end <= r->start)
5606
0
      abort ();
5607
278
    splay_tree_insert (file->comp_unit_tree, (splay_tree_key)r,
5608
278
           (splay_tree_value)each);
5609
5610
278
    if (file->all_comp_units)
5611
14
      file->all_comp_units->prev_unit = each;
5612
264
    else
5613
264
      file->last_comp_unit = each;
5614
5615
278
    each->next_unit = file->all_comp_units;
5616
278
    file->all_comp_units = each;
5617
5618
278
    if (each->arange.high == 0)
5619
77
      {
5620
77
        each->next_unit_without_ranges = file->all_comp_units_without_ranges;
5621
77
        file->all_comp_units_without_ranges = each->next_unit_without_ranges;
5622
77
      }
5623
5624
278
    file->info_ptr += length;
5625
278
    return each;
5626
278
  }
5627
320
    }
5628
5629
  /* Don't trust any of the DWARF info after a corrupted length or
5630
     parse error.  */
5631
90
  file->info_ptr = info_ptr_end;
5632
90
  return NULL;
5633
368
}
5634
5635
/* Hash function for an asymbol.  */
5636
5637
static hashval_t
5638
hash_asymbol (const void *sym)
5639
39
{
5640
39
  const asymbol *asym = sym;
5641
39
  return htab_hash_string (asym->name);
5642
39
}
5643
5644
/* Equality function for asymbols.  */
5645
5646
static int
5647
eq_asymbol (const void *a, const void *b)
5648
1
{
5649
1
  const asymbol *sa = a;
5650
1
  const asymbol *sb = b;
5651
1
  return strcmp (sa->name, sb->name) == 0;
5652
1
}
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
134
{
5662
134
  struct dwarf2_debug *stash;
5663
134
  struct comp_unit * unit;
5664
134
  htab_t sym_hash;
5665
134
  bfd_signed_vma result = 0;
5666
134
  asymbol ** psym;
5667
5668
134
  stash = (struct dwarf2_debug *) *pinfo;
5669
5670
134
  if (stash == NULL || symbols == NULL)
5671
0
    return 0;
5672
5673
134
  sym_hash = htab_create_alloc (10, hash_asymbol, eq_asymbol,
5674
134
        NULL, xcalloc, free);
5675
349
  for (psym = symbols; * psym != NULL; psym++)
5676
215
    {
5677
215
      asymbol * sym = * psym;
5678
5679
215
      if (sym->flags & BSF_FUNCTION && sym->section != NULL)
5680
39
  {
5681
39
    void **slot = htab_find_slot (sym_hash, sym, INSERT);
5682
39
    *slot = sym;
5683
39
  }
5684
215
    }
5685
5686
134
  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
134
 done:
5711
134
  htab_delete (sym_hash);
5712
134
  return result;
5713
134
}
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
230k
{
5730
230k
  return _bfd_dwarf2_find_nearest_line_with_alt
5731
230k
    (abfd, NULL, symbols, symbol, section, offset, filename_ptr,
5732
230k
     functionname_ptr, linenumber_ptr, discriminator_ptr, debug_sections,
5733
230k
     pinfo);
5734
230k
}
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
235k
{
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
235k
  struct dwarf2_debug *stash;
5776
  /* What address are we looking for?  */
5777
235k
  bfd_vma addr;
5778
235k
  struct comp_unit* each;
5779
235k
  struct funcinfo *function = NULL;
5780
235k
  int found = false;
5781
235k
  bool do_line;
5782
5783
235k
  *filename_ptr = NULL;
5784
235k
  if (functionname_ptr != NULL)
5785
235k
    *functionname_ptr = NULL;
5786
235k
  *linenumber_ptr = 0;
5787
235k
  if (discriminator_ptr)
5788
12.5k
    *discriminator_ptr = 0;
5789
5790
235k
  if (! _bfd_dwarf2_slurp_debug_info (abfd, NULL, debug_sections,
5791
235k
              symbols, pinfo,
5792
235k
              (abfd->flags & (EXEC_P | DYNAMIC)) == 0))
5793
233k
    return false;
5794
5795
2.17k
  stash = (struct dwarf2_debug *) *pinfo;
5796
5797
2.17k
  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
2.17k
  do_line = symbol != NULL;
5815
2.17k
  if (do_line)
5816
0
    {
5817
0
      BFD_ASSERT (section == NULL && offset == 0 && functionname_ptr == NULL);
5818
0
      section = bfd_asymbol_section (symbol);
5819
0
      addr = symbol->value;
5820
0
    }
5821
2.17k
  else
5822
2.17k
    {
5823
2.17k
      BFD_ASSERT (section != NULL && functionname_ptr != NULL);
5824
2.17k
      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
2.17k
      if (symbols != NULL && (section->flags & SEC_CODE) == 0)
5840
547
  {
5841
547
    asymbol **tmp;
5842
5843
34.9k
    for (tmp = symbols; (*tmp) != NULL; ++tmp)
5844
34.4k
      if ((*tmp)->the_bfd == abfd
5845
34.4k
    && (*tmp)->section == section
5846
34.4k
    && (*tmp)->value == offset
5847
34.4k
    && ((*tmp)->flags & BSF_SECTION_SYM) == 0)
5848
0
        {
5849
0
    symbol = *tmp;
5850
0
    do_line = true;
5851
    /* For local symbols, keep going in the hope we find a
5852
       global.  */
5853
0
    if ((symbol->flags & BSF_GLOBAL) != 0)
5854
0
      break;
5855
0
        }
5856
547
  }
5857
2.17k
    }
5858
5859
2.17k
  if (section->output_section)
5860
0
    addr += section->output_section->vma + section->output_offset;
5861
2.17k
  else
5862
2.17k
    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
2.17k
  if (! stash->f.info_ptr)
5867
0
    return false;
5868
5869
2.17k
  stash->inliner_chain = NULL;
5870
5871
  /* Check the previously read comp. units first.  */
5872
2.17k
  if (do_line)
5873
0
    {
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
0
      if (stash->info_hash_status == STASH_INFO_HASH_OFF)
5878
0
  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
0
      if (stash->info_hash_status == STASH_INFO_HASH_ON)
5883
0
  stash_maybe_update_info_hash_tables (stash);
5884
5885
0
      if (stash->info_hash_status == STASH_INFO_HASH_ON)
5886
0
  {
5887
0
    found = stash_find_line_fast (stash, symbol, addr,
5888
0
          filename_ptr, linenumber_ptr);
5889
0
    if (found)
5890
0
      goto done;
5891
0
  }
5892
5893
      /* Check the previously read comp. units first.  */
5894
0
      for (each = stash->f.all_comp_units; each; each = each->next_unit)
5895
0
  if ((symbol->flags & BSF_FUNCTION) == 0
5896
0
      || comp_unit_may_contain_address (each, addr))
5897
0
    {
5898
0
      found = comp_unit_find_line (each, symbol, addr, filename_ptr,
5899
0
           linenumber_ptr);
5900
0
      if (found)
5901
0
        goto done;
5902
0
    }
5903
0
    }
5904
2.17k
  else
5905
2.17k
    {
5906
2.17k
      struct trie_node *trie = stash->f.trie_root;
5907
2.17k
      unsigned int bits = VMA_BITS - 8;
5908
2.17k
      struct comp_unit **prev_each;
5909
5910
      /* Traverse interior nodes until we get to a leaf.  */
5911
2.31k
      while (trie && trie->num_room_in_leaf == 0)
5912
137
  {
5913
137
    int ch = (addr >> bits) & 0xff;
5914
137
    trie = ((struct trie_interior *) trie)->children[ch];
5915
137
    bits -= 8;
5916
137
  }
5917
5918
2.17k
      if (trie)
5919
2.17k
  {
5920
2.17k
    const struct trie_leaf *leaf = (struct trie_leaf *) trie;
5921
2.17k
    unsigned int i;
5922
5923
3.72k
    for (i = 0; i < leaf->num_stored_in_leaf; ++i)
5924
1.55k
      leaf->ranges[i].unit->mark = false;
5925
5926
3.56k
    for (i = 0; i < leaf->num_stored_in_leaf; ++i)
5927
1.45k
      {
5928
1.45k
        struct comp_unit *unit = leaf->ranges[i].unit;
5929
1.45k
        if (unit->mark
5930
1.45k
      || addr < leaf->ranges[i].low_pc
5931
1.45k
      || addr >= leaf->ranges[i].high_pc)
5932
1.19k
          continue;
5933
260
        unit->mark = true;
5934
5935
260
        found = comp_unit_find_nearest_line (unit, addr,
5936
260
               filename_ptr,
5937
260
               &function,
5938
260
               linenumber_ptr,
5939
260
               discriminator_ptr);
5940
260
        if (found)
5941
61
    goto done;
5942
260
     }
5943
2.17k
  }
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
2.11k
      prev_each = &stash->f.all_comp_units_without_ranges;
5949
2.11k
      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
2.11k
    }
5967
5968
  /* Read each remaining comp. units checking each as they are read.  */
5969
2.31k
  while ((each = stash_comp_unit (stash, &stash->f)) != NULL)
5970
278
    {
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
278
      if (do_line)
5977
0
  found = (((symbol->flags & BSF_FUNCTION) == 0
5978
0
      || comp_unit_may_contain_address (each, addr))
5979
0
     && comp_unit_find_line (each, symbol, addr,
5980
0
           filename_ptr, linenumber_ptr));
5981
278
      else
5982
278
  found = (comp_unit_may_contain_address (each, addr)
5983
278
     && comp_unit_find_nearest_line (each, addr,
5984
278
             filename_ptr,
5985
278
             &function,
5986
278
             linenumber_ptr,
5987
278
             discriminator_ptr));
5988
5989
278
      if (found)
5990
77
  break;
5991
278
    }
5992
5993
2.17k
 done:
5994
2.17k
  if (functionname_ptr && function && function->is_linkage)
5995
99
    {
5996
99
      *functionname_ptr = function->name;
5997
99
      if (!found)
5998
0
        found = 2;
5999
99
    }
6000
2.08k
  else if (functionname_ptr
6001
2.08k
     && (!*functionname_ptr
6002
2.08k
         || (function && !function->is_linkage)))
6003
2.08k
    {
6004
2.08k
      asymbol *fun;
6005
2.08k
      asymbol **syms = symbols;
6006
2.08k
      asection *sec = section;
6007
6008
2.08k
      _bfd_dwarf2_stash_syms (stash, abfd, &sec, &syms);
6009
2.08k
      fun = _bfd_elf_find_function (abfd, syms, sec, offset,
6010
2.08k
            *filename_ptr ? NULL : filename_ptr,
6011
2.08k
            functionname_ptr);
6012
6013
2.08k
      if (!found && fun != NULL)
6014
483
  found = 2;
6015
6016
2.08k
      if (function && !function->is_linkage)
6017
12
  {
6018
12
    bfd_vma sec_vma;
6019
6020
12
    sec_vma = section->vma;
6021
12
    if (section->output_section != NULL)
6022
0
      sec_vma = section->output_section->vma + section->output_offset;
6023
12
    if (fun == NULL)
6024
4
      *functionname_ptr = function->name;
6025
8
    else if (fun->value + sec_vma == function->arange.low)
6026
2
      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
12
    function->is_linkage = true;
6030
12
  }
6031
2.08k
    }
6032
6033
2.17k
  unset_sections (stash);
6034
6035
2.17k
  return found;
6036
2.11k
}
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
126k
{
6068
126k
  struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
6069
126k
  struct comp_unit *each;
6070
126k
  struct dwarf2_debug_file *file;
6071
6072
126k
  if (abfd == NULL || stash == NULL)
6073
122k
    return;
6074
6075
3.92k
  if (stash->varinfo_hash_table)
6076
0
    bfd_hash_table_free (&stash->varinfo_hash_table->base);
6077
3.92k
  if (stash->funcinfo_hash_table)
6078
0
    bfd_hash_table_free (&stash->funcinfo_hash_table->base);
6079
6080
3.92k
  file = &stash->f;
6081
7.84k
  while (1)
6082
7.84k
    {
6083
8.12k
      for (each = file->all_comp_units; each; each = each->next_unit)
6084
278
  {
6085
278
    struct funcinfo *function_table = each->function_table;
6086
278
    struct varinfo *variable_table = each->variable_table;
6087
6088
278
    if (each->line_table && each->line_table != file->line_table)
6089
0
      {
6090
0
        free (each->line_table->files);
6091
0
        free (each->line_table->dirs);
6092
0
      }
6093
6094
278
    free (each->lookup_funcinfo_table);
6095
278
    each->lookup_funcinfo_table = NULL;
6096
6097
14.8k
    while (function_table)
6098
14.5k
      {
6099
14.5k
        free (function_table->file);
6100
14.5k
        function_table->file = NULL;
6101
14.5k
        free (function_table->caller_file);
6102
14.5k
        function_table->caller_file = NULL;
6103
14.5k
        function_table = function_table->prev_func;
6104
14.5k
      }
6105
6106
283
    while (variable_table)
6107
5
      {
6108
5
        free (variable_table->file);
6109
5
        variable_table->file = NULL;
6110
5
        variable_table = variable_table->prev_var;
6111
5
      }
6112
278
  }
6113
6114
7.84k
      if (file->line_table)
6115
172
  {
6116
172
    free (file->line_table->files);
6117
172
    free (file->line_table->dirs);
6118
172
  }
6119
7.84k
      htab_delete (file->abbrev_offsets);
6120
7.84k
      if (file->comp_unit_tree != NULL)
6121
264
  splay_tree_delete (file->comp_unit_tree);
6122
6123
7.84k
      free (file->dwarf_line_str_buffer);
6124
7.84k
      free (file->dwarf_str_buffer);
6125
7.84k
      free (file->dwarf_ranges_buffer);
6126
7.84k
      free (file->dwarf_line_buffer);
6127
7.84k
      free (file->dwarf_abbrev_buffer);
6128
7.84k
      free (file->dwarf_info_buffer);
6129
7.84k
      if (file == &stash->alt)
6130
3.92k
  break;
6131
3.92k
      file = &stash->alt;
6132
3.92k
    }
6133
3.92k
  free (stash->sec_vma);
6134
3.92k
  free (stash->adjusted_sections);
6135
3.92k
  if (stash->close_on_cleanup)
6136
0
    bfd_close (stash->f.bfd_ptr);
6137
3.92k
  if (stash->alt.bfd_ptr)
6138
0
    bfd_close (stash->alt.bfd_ptr);
6139
3.92k
}
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
4.90k
{
6163
  /* If the symbol is beyond the desired offset, ignore it.  */
6164
4.90k
  if (code_off > offset)
6165
1.00k
    return false;
6166
6167
  /* If the symbol is further away from the desired
6168
     offset than our current best, then ignore it.  */
6169
3.90k
  if (code_off < cache->code_off)
6170
3.29k
    return false;
6171
6172
  /* On the other hand, if it is closer, then use it.  */
6173
605
  if (code_off > cache->code_off)
6174
106
    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
499
  if (cache->code_off + cache->code_size <= offset)
6181
    /* ... then return whichever candidate covers
6182
       more area and hence gets closer to OFFSET.  */
6183
486
    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
13
  if (code_off + code_size <= offset)
6189
11
    return false;
6190
6191
  /* Both symbols cover OFFSET.  */
6192
6193
  /* Prefer functions over non-functions.  */
6194
2
  flagword cache_flags = cache->func->flags;
6195
2
  flagword sym_flags   = sym->flags;
6196
6197
2
  if ((cache_flags & BSF_FUNCTION) && ((sym_flags & BSF_FUNCTION) == 0))
6198
0
    return false;
6199
2
  if ((sym_flags & BSF_FUNCTION) && ((cache_flags & BSF_FUNCTION) == 0))
6200
2
    return true;
6201
6202
  /* FIXME: Should we choose LOCAL over GLOBAL ?  */
6203
6204
  /* Prefer typed symbols over notyped.  */
6205
0
  int cache_type = ELF_ST_TYPE (((elf_symbol_type *) cache->func)->internal_elf_sym.st_info);
6206
0
  int sym_type   = ELF_ST_TYPE (((elf_symbol_type *) sym)->internal_elf_sym.st_info);
6207
6208
0
  if (cache_type == STT_NOTYPE && sym_type != STT_NOTYPE)
6209
0
    return true;
6210
0
  if (cache_type != STT_NOTYPE && sym_type == STT_NOTYPE)
6211
0
    return false;
6212
6213
  /* Otherwise choose whichever symbol covers a smaller area.  */
6214
0
  return code_size < cache->code_size;
6215
0
}
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
3.88k
{
6228
3.88k
  if (symbols == NULL)
6229
591
    return NULL;
6230
6231
3.29k
  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6232
0
    return NULL;
6233
6234
3.29k
  elf_find_function_cache * cache = elf_tdata (abfd)->elf_find_function_cache;
6235
6236
3.29k
  if (cache == NULL)
6237
391
    {
6238
391
      cache = bfd_zalloc (abfd, sizeof (*cache));
6239
391
      elf_tdata (abfd)->elf_find_function_cache = cache;
6240
391
      if (cache == NULL)
6241
0
  return NULL;
6242
391
    }
6243
6244
3.29k
  if (cache->last_section != section
6245
3.29k
      || cache->func == NULL
6246
3.29k
      || offset < cache->func->value
6247
3.29k
      || offset >= cache->func->value + cache->code_size)
6248
3.16k
    {
6249
3.16k
      asymbol *file;
6250
3.16k
      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
3.16k
      enum { nothing_seen, symbol_seen, file_after_symbol_seen } state;
6260
3.16k
      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6261
6262
3.16k
      file = NULL;
6263
3.16k
      state = nothing_seen;
6264
3.16k
      cache->filename = NULL;
6265
3.16k
      cache->func = NULL;
6266
3.16k
      cache->code_size = 0;
6267
3.16k
      cache->code_off = 0;
6268
3.16k
      cache->last_section = section;
6269
6270
207k
      for (p = symbols; *p != NULL; p++)
6271
204k
  {
6272
204k
    asymbol *sym = *p;
6273
204k
    bfd_vma code_off;
6274
204k
    bfd_size_type size;
6275
6276
204k
    if ((sym->flags & BSF_FILE) != 0)
6277
5.93k
      {
6278
5.93k
        file = sym;
6279
5.93k
        if (state == symbol_seen)
6280
1.04k
    state = file_after_symbol_seen;
6281
5.93k
        continue;
6282
5.93k
      }
6283
6284
198k
    if (state == nothing_seen)
6285
3.16k
      state = symbol_seen;
6286
6287
198k
    size = bed->maybe_function_sym (sym, section, &code_off);
6288
6289
198k
    if (size == 0)
6290
193k
      continue;
6291
6292
4.90k
    if (better_fit (cache, sym, code_off, size, offset))
6293
594
      {
6294
594
        cache->func = sym;
6295
594
        cache->code_size = size;
6296
594
        cache->code_off = code_off;
6297
594
        cache->filename = NULL;
6298
6299
594
        if (file != NULL
6300
594
      && ((sym->flags & BSF_LOCAL) != 0
6301
521
          || state != file_after_symbol_seen))
6302
451
    cache->filename = bfd_asymbol_name (file);
6303
594
      }
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
4.31k
    else if (code_off > offset 
6309
4.31k
       && code_off > cache->code_off
6310
4.31k
       && code_off < cache->code_off + cache->code_size)
6311
7
      {
6312
7
        cache->code_size = code_off - cache->code_off;
6313
7
      }
6314
4.90k
  }
6315
3.16k
    }
6316
6317
3.29k
  if (cache->func == NULL)
6318
2.58k
    return NULL;
6319
6320
714
  if (filename_ptr)
6321
687
    *filename_ptr = cache->filename;
6322
714
  if (functionname_ptr)
6323
714
    *functionname_ptr = bfd_asymbol_name (cache->func);
6324
6325
714
  return cache->func;
6326
3.29k
}