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