1 // gdb-index.cc -- generate .gdb_index section for fast debug lookup 2 3 // Copyright (C) 2012-2016 Free Software Foundation, Inc. 4 // Written by Cary Coutant <ccoutant (at) google.com>. 5 6 // This file is part of gold. 7 8 // This program is free software; you can redistribute it and/or modify 9 // it under the terms of the GNU General Public License as published by 10 // the Free Software Foundation; either version 3 of the License, or 11 // (at your option) any later version. 12 13 // This program is distributed in the hope that it will be useful, 14 // but WITHOUT ANY WARRANTY; without even the implied warranty of 15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 // GNU General Public License for more details. 17 18 // You should have received a copy of the GNU General Public License 19 // along with this program; if not, write to the Free Software 20 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 21 // MA 02110-1301, USA. 22 23 #include "gold.h" 24 25 #include "gdb-index.h" 26 #include "dwarf_reader.h" 27 #include "dwarf.h" 28 #include "object.h" 29 #include "output.h" 30 #include "demangle.h" 31 32 namespace gold 33 { 34 35 const int gdb_index_version = 7; 36 37 // Sizes of various records in the .gdb_index section. 38 const int gdb_index_offset_size = 4; 39 const int gdb_index_hdr_size = 6 * gdb_index_offset_size; 40 const int gdb_index_cu_size = 16; 41 const int gdb_index_tu_size = 24; 42 const int gdb_index_addr_size = 16 + gdb_index_offset_size; 43 const int gdb_index_sym_size = 2 * gdb_index_offset_size; 44 45 // This class manages the hashed symbol table for the .gdb_index section. 46 // It is essentially equivalent to the hashtab implementation in libiberty, 47 // but is copied into gdb sources and here for compatibility because its 48 // data structure is exposed on disk. 49 50 template <typename T> 51 class Gdb_hashtab 52 { 53 public: 54 Gdb_hashtab() 55 : size_(0), capacity_(0), hashtab_(NULL) 56 { } 57 58 ~Gdb_hashtab() 59 { 60 for (size_t i = 0; i < this->capacity_; ++i) 61 if (this->hashtab_[i] != NULL) 62 delete this->hashtab_[i]; 63 delete[] this->hashtab_; 64 } 65 66 // Add a symbol. 67 T* 68 add(T* symbol) 69 { 70 // Resize the hash table if necessary. 71 if (4 * this->size_ / 3 >= this->capacity_) 72 this->expand(); 73 74 T** slot = this->find_slot(symbol); 75 if (*slot == NULL) 76 { 77 ++this->size_; 78 *slot = symbol; 79 } 80 81 return *slot; 82 } 83 84 // Return the current size. 85 size_t 86 size() const 87 { return this->size_; } 88 89 // Return the current capacity. 90 size_t 91 capacity() const 92 { return this->capacity_; } 93 94 // Return the contents of slot N. 95 T* 96 operator[](size_t n) 97 { return this->hashtab_[n]; } 98 99 private: 100 // Find a symbol in the hash table, or return an empty slot if 101 // the symbol is not in the table. 102 T** 103 find_slot(T* symbol) 104 { 105 unsigned int index = symbol->hash() & (this->capacity_ - 1); 106 unsigned int step = ((symbol->hash() * 17) & (this->capacity_ - 1)) | 1; 107 108 for (;;) 109 { 110 if (this->hashtab_[index] == NULL 111 || this->hashtab_[index]->equal(symbol)) 112 return &this->hashtab_[index]; 113 index = (index + step) & (this->capacity_ - 1); 114 } 115 } 116 117 // Expand the hash table. 118 void 119 expand() 120 { 121 if (this->capacity_ == 0) 122 { 123 // Allocate the hash table for the first time. 124 this->capacity_ = Gdb_hashtab::initial_size; 125 this->hashtab_ = new T*[this->capacity_]; 126 memset(this->hashtab_, 0, this->capacity_ * sizeof(T*)); 127 } 128 else 129 { 130 // Expand and rehash. 131 unsigned int old_cap = this->capacity_; 132 T** old_hashtab = this->hashtab_; 133 this->capacity_ *= 2; 134 this->hashtab_ = new T*[this->capacity_]; 135 memset(this->hashtab_, 0, this->capacity_ * sizeof(T*)); 136 for (size_t i = 0; i < old_cap; ++i) 137 { 138 if (old_hashtab[i] != NULL) 139 { 140 T** slot = this->find_slot(old_hashtab[i]); 141 *slot = old_hashtab[i]; 142 } 143 } 144 delete[] old_hashtab; 145 } 146 } 147 148 // Initial size of the hash table; must be a power of 2. 149 static const int initial_size = 1024; 150 size_t size_; 151 size_t capacity_; 152 T** hashtab_; 153 }; 154 155 // The hash function for strings in the mapped index. This is copied 156 // directly from gdb/dwarf2read.c. 157 158 static unsigned int 159 mapped_index_string_hash(const unsigned char* str) 160 { 161 unsigned int r = 0; 162 unsigned char c; 163 164 while ((c = *str++) != 0) 165 { 166 if (gdb_index_version >= 5) 167 c = tolower (c); 168 r = r * 67 + c - 113; 169 } 170 171 return r; 172 } 173 174 // A specialization of Dwarf_info_reader, for building the .gdb_index. 175 176 class Gdb_index_info_reader : public Dwarf_info_reader 177 { 178 public: 179 Gdb_index_info_reader(bool is_type_unit, 180 Relobj* object, 181 const unsigned char* symbols, 182 off_t symbols_size, 183 unsigned int shndx, 184 unsigned int reloc_shndx, 185 unsigned int reloc_type, 186 Gdb_index* gdb_index) 187 : Dwarf_info_reader(is_type_unit, object, symbols, symbols_size, shndx, 188 reloc_shndx, reloc_type), 189 gdb_index_(gdb_index), cu_index_(0), cu_language_(0) 190 { } 191 192 ~Gdb_index_info_reader() 193 { this->clear_declarations(); } 194 195 // Print usage statistics. 196 static void 197 print_stats(); 198 199 protected: 200 // Visit a compilation unit. 201 virtual void 202 visit_compilation_unit(off_t cu_offset, off_t cu_length, Dwarf_die*); 203 204 // Visit a type unit. 205 virtual void 206 visit_type_unit(off_t tu_offset, off_t tu_length, off_t type_offset, 207 uint64_t signature, Dwarf_die*); 208 209 private: 210 // A map for recording DIEs we've seen that may be referred to be 211 // later DIEs (via DW_AT_specification or DW_AT_abstract_origin). 212 // The map is indexed by a DIE offset within the compile unit. 213 // PARENT_OFFSET_ is the offset of the DIE that represents the 214 // outer context, and NAME_ is a pointer to a component of the 215 // fully-qualified name. 216 // Normally, the names we point to are in a string table, so we don't 217 // have to manage them, but when we have a fully-qualified name 218 // computed, we put it in the table, and set PARENT_OFFSET_ to -1 219 // indicate a string that we are managing. 220 struct Declaration_pair 221 { 222 Declaration_pair(off_t parent_offset, const char* name) 223 : parent_offset_(parent_offset), name_(name) 224 { } 225 226 off_t parent_offset_; 227 const char* name_; 228 }; 229 typedef Unordered_map<off_t, Declaration_pair> Declaration_map; 230 231 // Visit a top-level DIE. 232 void 233 visit_top_die(Dwarf_die* die); 234 235 // Visit the children of a DIE. 236 void 237 visit_children(Dwarf_die* die, Dwarf_die* context); 238 239 // Visit a DIE. 240 void 241 visit_die(Dwarf_die* die, Dwarf_die* context); 242 243 // Visit the children of a DIE. 244 void 245 visit_children_for_decls(Dwarf_die* die); 246 247 // Visit a DIE. 248 void 249 visit_die_for_decls(Dwarf_die* die, Dwarf_die* context); 250 251 // Guess a fully-qualified name for a class type, based on member function 252 // linkage names. 253 std::string 254 guess_full_class_name(Dwarf_die* die); 255 256 // Add a declaration DIE to the table of declarations. 257 void 258 add_declaration(Dwarf_die* die, Dwarf_die* context); 259 260 // Add a declaration whose fully-qualified name is already known. 261 void 262 add_declaration_with_full_name(Dwarf_die* die, const char* full_name); 263 264 // Return the context for a DIE whose parent is at DIE_OFFSET. 265 std::string 266 get_context(off_t die_offset); 267 268 // Construct a fully-qualified name for DIE. 269 std::string 270 get_qualified_name(Dwarf_die* die, Dwarf_die* context); 271 272 // Record the address ranges for a compilation unit. 273 void 274 record_cu_ranges(Dwarf_die* die); 275 276 // Wrapper for read_pubtable. 277 bool 278 read_pubnames_and_pubtypes(Dwarf_die* die); 279 280 // Read the .debug_pubnames and .debug_pubtypes tables. 281 bool 282 read_pubtable(Dwarf_pubnames_table* table, off_t offset); 283 284 // Clear the declarations map. 285 void 286 clear_declarations(); 287 288 // The Gdb_index section. 289 Gdb_index* gdb_index_; 290 // The current CU index (negative for a TU). 291 int cu_index_; 292 // The language of the current CU or TU. 293 unsigned int cu_language_; 294 // Map from DIE offset to (parent offset, name) pair, 295 // for DW_AT_specification. 296 Declaration_map declarations_; 297 298 // Statistics. 299 // Total number of DWARF compilation units processed. 300 static unsigned int dwarf_cu_count; 301 // Number of DWARF compilation units with pubnames/pubtypes. 302 static unsigned int dwarf_cu_nopubnames_count; 303 // Total number of DWARF type units processed. 304 static unsigned int dwarf_tu_count; 305 // Number of DWARF type units with pubnames/pubtypes. 306 static unsigned int dwarf_tu_nopubnames_count; 307 }; 308 309 // Total number of DWARF compilation units processed. 310 unsigned int Gdb_index_info_reader::dwarf_cu_count = 0; 311 // Number of DWARF compilation units without pubnames/pubtypes. 312 unsigned int Gdb_index_info_reader::dwarf_cu_nopubnames_count = 0; 313 // Total number of DWARF type units processed. 314 unsigned int Gdb_index_info_reader::dwarf_tu_count = 0; 315 // Number of DWARF type units without pubnames/pubtypes. 316 unsigned int Gdb_index_info_reader::dwarf_tu_nopubnames_count = 0; 317 318 // Process a compilation unit and parse its child DIE. 319 320 void 321 Gdb_index_info_reader::visit_compilation_unit(off_t cu_offset, off_t cu_length, 322 Dwarf_die* root_die) 323 { 324 ++Gdb_index_info_reader::dwarf_cu_count; 325 this->cu_index_ = this->gdb_index_->add_comp_unit(cu_offset, cu_length); 326 this->visit_top_die(root_die); 327 } 328 329 // Process a type unit and parse its child DIE. 330 331 void 332 Gdb_index_info_reader::visit_type_unit(off_t tu_offset, off_t, 333 off_t type_offset, uint64_t signature, 334 Dwarf_die* root_die) 335 { 336 ++Gdb_index_info_reader::dwarf_tu_count; 337 // Use a negative index to flag this as a TU instead of a CU. 338 this->cu_index_ = -1 - this->gdb_index_->add_type_unit(tu_offset, type_offset, 339 signature); 340 this->visit_top_die(root_die); 341 } 342 343 // Process a top-level DIE. 344 // For compile_unit DIEs, record the address ranges. For all 345 // interesting tags, add qualified names to the symbol table 346 // and process interesting children. We may need to process 347 // certain children just for saving declarations that might be 348 // referenced by later DIEs with a DW_AT_specification attribute. 349 350 void 351 Gdb_index_info_reader::visit_top_die(Dwarf_die* die) 352 { 353 this->clear_declarations(); 354 355 switch (die->tag()) 356 { 357 case elfcpp::DW_TAG_compile_unit: 358 case elfcpp::DW_TAG_type_unit: 359 this->cu_language_ = die->int_attribute(elfcpp::DW_AT_language); 360 if (die->tag() == elfcpp::DW_TAG_compile_unit) 361 this->record_cu_ranges(die); 362 // If there is a pubnames and/or pubtypes section for this 363 // compilation unit, use those; otherwise, parse the DWARF 364 // info to extract the names. 365 if (!this->read_pubnames_and_pubtypes(die)) 366 { 367 // Check for languages that require specialized knowledge to 368 // construct fully-qualified names, that we don't yet support. 369 if (this->cu_language_ == elfcpp::DW_LANG_Ada83 370 || this->cu_language_ == elfcpp::DW_LANG_Fortran77 371 || this->cu_language_ == elfcpp::DW_LANG_Fortran90 372 || this->cu_language_ == elfcpp::DW_LANG_Java 373 || this->cu_language_ == elfcpp::DW_LANG_Ada95 374 || this->cu_language_ == elfcpp::DW_LANG_Fortran95 375 || this->cu_language_ == elfcpp::DW_LANG_Fortran03 376 || this->cu_language_ == elfcpp::DW_LANG_Fortran08) 377 { 378 gold_warning(_("%s: --gdb-index currently supports " 379 "only C and C++ languages"), 380 this->object()->name().c_str()); 381 return; 382 } 383 if (die->tag() == elfcpp::DW_TAG_compile_unit) 384 ++Gdb_index_info_reader::dwarf_cu_nopubnames_count; 385 else 386 ++Gdb_index_info_reader::dwarf_tu_nopubnames_count; 387 this->visit_children(die, NULL); 388 } 389 break; 390 default: 391 // The top level DIE should be one of the above. 392 gold_warning(_("%s: top level DIE is not DW_TAG_compile_unit " 393 "or DW_TAG_type_unit"), 394 this->object()->name().c_str()); 395 return; 396 } 397 } 398 399 // Visit the children of PARENT, looking for symbols to add to the index. 400 // CONTEXT points to the DIE to use for constructing the qualified name -- 401 // NULL if PARENT is the top-level DIE; otherwise it is the same as PARENT. 402 403 void 404 Gdb_index_info_reader::visit_children(Dwarf_die* parent, Dwarf_die* context) 405 { 406 off_t next_offset = 0; 407 for (off_t die_offset = parent->child_offset(); 408 die_offset != 0; 409 die_offset = next_offset) 410 { 411 Dwarf_die die(this, die_offset, parent); 412 if (die.tag() == 0) 413 break; 414 this->visit_die(&die, context); 415 next_offset = die.sibling_offset(); 416 } 417 } 418 419 // Visit a child DIE, looking for symbols to add to the index. 420 // CONTEXT is the parent DIE, used for constructing the qualified name; 421 // it is NULL if the parent DIE is the top-level DIE. 422 423 void 424 Gdb_index_info_reader::visit_die(Dwarf_die* die, Dwarf_die* context) 425 { 426 switch (die->tag()) 427 { 428 case elfcpp::DW_TAG_subprogram: 429 case elfcpp::DW_TAG_constant: 430 case elfcpp::DW_TAG_variable: 431 case elfcpp::DW_TAG_enumerator: 432 case elfcpp::DW_TAG_base_type: 433 if (die->is_declaration()) 434 this->add_declaration(die, context); 435 else 436 { 437 // If the DIE is not a declaration, add it to the index. 438 std::string full_name = this->get_qualified_name(die, context); 439 if (!full_name.empty()) 440 this->gdb_index_->add_symbol(this->cu_index_, 441 full_name.c_str(), 0); 442 } 443 break; 444 case elfcpp::DW_TAG_typedef: 445 case elfcpp::DW_TAG_union_type: 446 case elfcpp::DW_TAG_class_type: 447 case elfcpp::DW_TAG_interface_type: 448 case elfcpp::DW_TAG_structure_type: 449 case elfcpp::DW_TAG_enumeration_type: 450 case elfcpp::DW_TAG_subrange_type: 451 case elfcpp::DW_TAG_namespace: 452 { 453 std::string full_name; 454 455 // For classes at the top level, we need to look for a 456 // member function with a linkage name in order to get 457 // the properly-canonicalized name. 458 if (context == NULL 459 && (die->tag() == elfcpp::DW_TAG_class_type 460 || die->tag() == elfcpp::DW_TAG_structure_type 461 || die->tag() == elfcpp::DW_TAG_union_type)) 462 full_name.assign(this->guess_full_class_name(die)); 463 464 // Because we will visit the children, we need to add this DIE 465 // to the declarations table. 466 if (full_name.empty()) 467 this->add_declaration(die, context); 468 else 469 this->add_declaration_with_full_name(die, full_name.c_str()); 470 471 // If the DIE is not a declaration, add it to the index. 472 // Gdb stores a namespace in the index even when it is 473 // a declaration. 474 if (die->tag() == elfcpp::DW_TAG_namespace 475 || !die->is_declaration()) 476 { 477 if (full_name.empty()) 478 full_name = this->get_qualified_name(die, context); 479 if (!full_name.empty()) 480 this->gdb_index_->add_symbol(this->cu_index_, 481 full_name.c_str(), 0); 482 } 483 484 // We're interested in the children only for namespaces and 485 // enumeration types. For enumeration types, we do not include 486 // the enumeration tag as part of the full name. For other tags, 487 // visit the children only to collect declarations. 488 if (die->tag() == elfcpp::DW_TAG_namespace 489 || die->tag() == elfcpp::DW_TAG_enumeration_type) 490 this->visit_children(die, die); 491 else 492 this->visit_children_for_decls(die); 493 } 494 break; 495 default: 496 break; 497 } 498 } 499 500 // Visit the children of PARENT, looking only for declarations that 501 // may be referenced by later specification DIEs. 502 503 void 504 Gdb_index_info_reader::visit_children_for_decls(Dwarf_die* parent) 505 { 506 off_t next_offset = 0; 507 for (off_t die_offset = parent->child_offset(); 508 die_offset != 0; 509 die_offset = next_offset) 510 { 511 Dwarf_die die(this, die_offset, parent); 512 if (die.tag() == 0) 513 break; 514 this->visit_die_for_decls(&die, parent); 515 next_offset = die.sibling_offset(); 516 } 517 } 518 519 // Visit a child DIE, looking only for declarations that 520 // may be referenced by later specification DIEs. 521 522 void 523 Gdb_index_info_reader::visit_die_for_decls(Dwarf_die* die, Dwarf_die* context) 524 { 525 switch (die->tag()) 526 { 527 case elfcpp::DW_TAG_subprogram: 528 case elfcpp::DW_TAG_constant: 529 case elfcpp::DW_TAG_variable: 530 case elfcpp::DW_TAG_enumerator: 531 case elfcpp::DW_TAG_base_type: 532 { 533 if (die->is_declaration()) 534 this->add_declaration(die, context); 535 } 536 break; 537 case elfcpp::DW_TAG_typedef: 538 case elfcpp::DW_TAG_union_type: 539 case elfcpp::DW_TAG_class_type: 540 case elfcpp::DW_TAG_interface_type: 541 case elfcpp::DW_TAG_structure_type: 542 case elfcpp::DW_TAG_enumeration_type: 543 case elfcpp::DW_TAG_subrange_type: 544 case elfcpp::DW_TAG_namespace: 545 { 546 if (die->is_declaration()) 547 this->add_declaration(die, context); 548 this->visit_children_for_decls(die); 549 } 550 break; 551 default: 552 break; 553 } 554 } 555 556 // Extract the class name from the linkage name of a member function. 557 // This code is adapted from ../gdb/cp-support.c. 558 559 #define d_left(dc) (dc)->u.s_binary.left 560 #define d_right(dc) (dc)->u.s_binary.right 561 562 static char* 563 class_name_from_linkage_name(const char* linkage_name) 564 { 565 void* storage; 566 struct demangle_component* tree = 567 cplus_demangle_v3_components(linkage_name, DMGL_NO_OPTS, &storage); 568 if (tree == NULL) 569 return NULL; 570 571 int done = 0; 572 573 // First strip off any qualifiers, if we have a function or 574 // method. 575 while (!done) 576 switch (tree->type) 577 { 578 case DEMANGLE_COMPONENT_CONST: 579 case DEMANGLE_COMPONENT_RESTRICT: 580 case DEMANGLE_COMPONENT_VOLATILE: 581 case DEMANGLE_COMPONENT_CONST_THIS: 582 case DEMANGLE_COMPONENT_RESTRICT_THIS: 583 case DEMANGLE_COMPONENT_VOLATILE_THIS: 584 case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: 585 tree = d_left(tree); 586 break; 587 default: 588 done = 1; 589 break; 590 } 591 592 // If what we have now is a function, discard the argument list. 593 if (tree->type == DEMANGLE_COMPONENT_TYPED_NAME) 594 tree = d_left(tree); 595 596 // If what we have now is a template, strip off the template 597 // arguments. The left subtree may be a qualified name. 598 if (tree->type == DEMANGLE_COMPONENT_TEMPLATE) 599 tree = d_left(tree); 600 601 // What we have now should be a name, possibly qualified. 602 // Additional qualifiers could live in the left subtree or the right 603 // subtree. Find the last piece. 604 done = 0; 605 struct demangle_component* prev_comp = NULL; 606 struct demangle_component* cur_comp = tree; 607 while (!done) 608 switch (cur_comp->type) 609 { 610 case DEMANGLE_COMPONENT_QUAL_NAME: 611 case DEMANGLE_COMPONENT_LOCAL_NAME: 612 prev_comp = cur_comp; 613 cur_comp = d_right(cur_comp); 614 break; 615 case DEMANGLE_COMPONENT_TEMPLATE: 616 case DEMANGLE_COMPONENT_NAME: 617 case DEMANGLE_COMPONENT_CTOR: 618 case DEMANGLE_COMPONENT_DTOR: 619 case DEMANGLE_COMPONENT_OPERATOR: 620 case DEMANGLE_COMPONENT_EXTENDED_OPERATOR: 621 done = 1; 622 break; 623 default: 624 done = 1; 625 cur_comp = NULL; 626 break; 627 } 628 629 char* ret = NULL; 630 if (cur_comp != NULL && prev_comp != NULL) 631 { 632 // We want to discard the rightmost child of PREV_COMP. 633 *prev_comp = *d_left(prev_comp); 634 size_t allocated_size; 635 ret = cplus_demangle_print(DMGL_NO_OPTS, tree, 30, &allocated_size); 636 } 637 638 free(storage); 639 return ret; 640 } 641 642 // Guess a fully-qualified name for a class type, based on member function 643 // linkage names. This is needed for class/struct/union types at the 644 // top level, because GCC does not always properly embed them within 645 // the namespace. As in gdb, we look for a member function with a linkage 646 // name and extract the qualified name from the demangled name. 647 648 std::string 649 Gdb_index_info_reader::guess_full_class_name(Dwarf_die* die) 650 { 651 std::string full_name; 652 off_t next_offset = 0; 653 654 // This routine scans ahead in the DIE structure, possibly advancing 655 // the relocation tracker beyond the current DIE. We need to checkpoint 656 // the tracker and reset it when we're done. 657 uint64_t checkpoint = this->get_reloc_checkpoint(); 658 659 for (off_t child_offset = die->child_offset(); 660 child_offset != 0; 661 child_offset = next_offset) 662 { 663 Dwarf_die child(this, child_offset, die); 664 if (child.tag() == 0) 665 break; 666 if (child.tag() == elfcpp::DW_TAG_subprogram) 667 { 668 const char* linkage_name = child.linkage_name(); 669 if (linkage_name != NULL) 670 { 671 char* guess = class_name_from_linkage_name(linkage_name); 672 if (guess != NULL) 673 { 674 full_name.assign(guess); 675 free(guess); 676 break; 677 } 678 } 679 } 680 next_offset = child.sibling_offset(); 681 } 682 683 this->reset_relocs(checkpoint); 684 return full_name; 685 } 686 687 // Add a declaration DIE to the table of declarations. 688 689 void 690 Gdb_index_info_reader::add_declaration(Dwarf_die* die, Dwarf_die* context) 691 { 692 const char* name = die->name(); 693 694 off_t parent_offset = context != NULL ? context->offset() : 0; 695 696 // If this DIE has a DW_AT_specification or DW_AT_abstract_origin 697 // attribute, use the parent and name from the earlier declaration. 698 off_t spec = die->specification(); 699 if (spec == 0) 700 spec = die->abstract_origin(); 701 if (spec > 0) 702 { 703 Declaration_map::iterator it = this->declarations_.find(spec); 704 if (it != this->declarations_.end()) 705 { 706 parent_offset = it->second.parent_offset_; 707 name = it->second.name_; 708 } 709 } 710 711 if (name == NULL) 712 { 713 if (die->tag() == elfcpp::DW_TAG_namespace) 714 name = "(anonymous namespace)"; 715 else if (die->tag() == elfcpp::DW_TAG_union_type) 716 name = "(anonymous union)"; 717 else 718 name = "(unknown)"; 719 } 720 721 Declaration_pair decl(parent_offset, name); 722 this->declarations_.insert(std::make_pair(die->offset(), decl)); 723 } 724 725 // Add a declaration whose fully-qualified name is already known. 726 // In the case where we had to get the canonical name by demangling 727 // a linkage name, this ensures we use that name instead of the one 728 // provided in DW_AT_name. 729 730 void 731 Gdb_index_info_reader::add_declaration_with_full_name( 732 Dwarf_die* die, 733 const char* full_name) 734 { 735 // We need to copy the name. 736 int len = strlen(full_name); 737 char* copy = new char[len + 1]; 738 memcpy(copy, full_name, len + 1); 739 740 // Flag that we now manage the memory this points to. 741 Declaration_pair decl(-1, copy); 742 this->declarations_.insert(std::make_pair(die->offset(), decl)); 743 } 744 745 // Return the context for a DIE whose parent is at DIE_OFFSET. 746 747 std::string 748 Gdb_index_info_reader::get_context(off_t die_offset) 749 { 750 std::string context; 751 Declaration_map::iterator it = this->declarations_.find(die_offset); 752 if (it != this->declarations_.end()) 753 { 754 off_t parent_offset = it->second.parent_offset_; 755 if (parent_offset > 0) 756 { 757 context = get_context(parent_offset); 758 context.append("::"); 759 } 760 if (it->second.name_ != NULL) 761 context.append(it->second.name_); 762 } 763 return context; 764 } 765 766 // Construct the fully-qualified name for DIE. 767 768 std::string 769 Gdb_index_info_reader::get_qualified_name(Dwarf_die* die, Dwarf_die* context) 770 { 771 std::string full_name; 772 const char* name = die->name(); 773 774 off_t parent_offset = context != NULL ? context->offset() : 0; 775 776 // If this DIE has a DW_AT_specification or DW_AT_abstract_origin 777 // attribute, use the parent and name from the earlier declaration. 778 off_t spec = die->specification(); 779 if (spec == 0) 780 spec = die->abstract_origin(); 781 if (spec > 0) 782 { 783 Declaration_map::iterator it = this->declarations_.find(spec); 784 if (it != this->declarations_.end()) 785 { 786 parent_offset = it->second.parent_offset_; 787 name = it->second.name_; 788 } 789 } 790 791 if (name == NULL && die->tag() == elfcpp::DW_TAG_namespace) 792 name = "(anonymous namespace)"; 793 else if (name == NULL) 794 return full_name; 795 796 // If this is an enumerator constant, skip the immediate parent, 797 // which is the enumeration tag. 798 if (die->tag() == elfcpp::DW_TAG_enumerator) 799 { 800 Declaration_map::iterator it = this->declarations_.find(parent_offset); 801 if (it != this->declarations_.end()) 802 parent_offset = it->second.parent_offset_; 803 } 804 805 if (parent_offset > 0) 806 { 807 full_name.assign(this->get_context(parent_offset)); 808 full_name.append("::"); 809 } 810 full_name.append(name); 811 812 return full_name; 813 } 814 815 // Record the address ranges for a compilation unit. 816 817 void 818 Gdb_index_info_reader::record_cu_ranges(Dwarf_die* die) 819 { 820 unsigned int shndx; 821 unsigned int shndx2; 822 823 off_t ranges_offset = die->ref_attribute(elfcpp::DW_AT_ranges, &shndx); 824 if (ranges_offset != -1) 825 { 826 Dwarf_range_list* ranges = this->read_range_list(shndx, ranges_offset); 827 if (ranges != NULL) 828 this->gdb_index_->add_address_range_list(this->object(), 829 this->cu_index_, ranges); 830 return; 831 } 832 833 off_t low_pc = die->address_attribute(elfcpp::DW_AT_low_pc, &shndx); 834 off_t high_pc = die->address_attribute(elfcpp::DW_AT_high_pc, &shndx2); 835 if (high_pc == -1) 836 { 837 high_pc = die->uint_attribute(elfcpp::DW_AT_high_pc); 838 high_pc += low_pc; 839 shndx2 = shndx; 840 } 841 if ((low_pc != 0 || high_pc != 0) && low_pc != -1) 842 { 843 if (shndx != shndx2) 844 { 845 gold_warning(_("%s: DWARF info may be corrupt; low_pc and high_pc " 846 "are in different sections"), 847 this->object()->name().c_str()); 848 return; 849 } 850 if (shndx == 0 || this->object()->is_section_included(shndx)) 851 { 852 Dwarf_range_list* ranges = new Dwarf_range_list(); 853 ranges->add(shndx, low_pc, high_pc); 854 this->gdb_index_->add_address_range_list(this->object(), 855 this->cu_index_, ranges); 856 } 857 } 858 } 859 860 // Read table and add the relevant names to the index. Returns true 861 // if any names were added. 862 863 bool 864 Gdb_index_info_reader::read_pubtable(Dwarf_pubnames_table* table, off_t offset) 865 { 866 // If we couldn't read the section when building the cu_pubname_map, 867 // then we won't find any pubnames now. 868 if (table == NULL) 869 return false; 870 871 if (!table->read_header(offset)) 872 return false; 873 while (true) 874 { 875 uint8_t flag_byte; 876 const char* name = table->next_name(&flag_byte); 877 if (name == NULL) 878 break; 879 880 this->gdb_index_->add_symbol(this->cu_index_, name, flag_byte); 881 } 882 return true; 883 } 884 885 // Read the .debug_pubnames and .debug_pubtypes tables for the CU or TU. 886 // Returns TRUE if either a pubnames or pubtypes section was found. 887 888 bool 889 Gdb_index_info_reader::read_pubnames_and_pubtypes(Dwarf_die* die) 890 { 891 // If this is a skeleton debug-type die (generated via 892 // -gsplit-dwarf), then the associated pubnames should have been 893 // read along with the corresponding CU. In any case, there isn't 894 // enough info inside to build a gdb index entry. 895 if (die->tag() == elfcpp::DW_TAG_type_unit 896 && die->string_attribute(elfcpp::DW_AT_GNU_dwo_name)) 897 return true; 898 899 // We use stmt_list_off as a unique identifier for the 900 // compilation unit and its associated type units. 901 unsigned int shndx; 902 off_t stmt_list_off = die->ref_attribute (elfcpp::DW_AT_stmt_list, 903 &shndx); 904 // Look for the attr as either a flag or a ref. 905 off_t offset = die->ref_attribute(elfcpp::DW_AT_GNU_pubnames, &shndx); 906 907 // Newer versions of GCC generate CUs, but not TUs, with 908 // DW_AT_FORM_flag_present. 909 unsigned int flag = die->uint_attribute(elfcpp::DW_AT_GNU_pubnames); 910 if (offset == -1 && flag == 0) 911 { 912 // Didn't find the attribute. 913 if (die->tag() == elfcpp::DW_TAG_type_unit) 914 { 915 // If die is a TU, then it might correspond to a CU which we 916 // have read. If it does, then no need to read the pubnames. 917 // If it doesn't, then the caller will have to parse the 918 // dies manually to find the names. 919 return this->gdb_index_->pubnames_read(this->object(), 920 stmt_list_off); 921 } 922 else 923 { 924 // No attribute on the CU means that no pubnames were read. 925 return false; 926 } 927 } 928 929 // We found the attribute, so we can check if the corresponding 930 // pubnames have been read. 931 if (this->gdb_index_->pubnames_read(this->object(), stmt_list_off)) 932 return true; 933 934 this->gdb_index_->set_pubnames_read(this->object(), stmt_list_off); 935 936 // We have an attribute, and the pubnames haven't been read, so read 937 // them. 938 bool names = false; 939 // In some of the cases, we could rely on the previous value of 940 // offset here, but sorting out which cases complicates the logic 941 // enough that it isn't worth it. So just look up the offset again. 942 offset = this->gdb_index_->find_pubname_offset(this->cu_offset()); 943 names = this->read_pubtable(this->gdb_index_->pubnames_table(), offset); 944 945 bool types = false; 946 offset = this->gdb_index_->find_pubtype_offset(this->cu_offset()); 947 types = this->read_pubtable(this->gdb_index_->pubtypes_table(), offset); 948 return names || types; 949 } 950 951 // Clear the declarations map. 952 void 953 Gdb_index_info_reader::clear_declarations() 954 { 955 // Free strings in memory we manage. 956 for (Declaration_map::iterator it = this->declarations_.begin(); 957 it != this->declarations_.end(); 958 ++it) 959 { 960 if (it->second.parent_offset_ == -1) 961 delete[] it->second.name_; 962 } 963 964 this->declarations_.clear(); 965 } 966 967 // Print usage statistics. 968 void 969 Gdb_index_info_reader::print_stats() 970 { 971 fprintf(stderr, _("%s: DWARF CUs: %u\n"), 972 program_name, Gdb_index_info_reader::dwarf_cu_count); 973 fprintf(stderr, _("%s: DWARF CUs without pubnames/pubtypes: %u\n"), 974 program_name, Gdb_index_info_reader::dwarf_cu_nopubnames_count); 975 fprintf(stderr, _("%s: DWARF TUs: %u\n"), 976 program_name, Gdb_index_info_reader::dwarf_tu_count); 977 fprintf(stderr, _("%s: DWARF TUs without pubnames/pubtypes: %u\n"), 978 program_name, Gdb_index_info_reader::dwarf_tu_nopubnames_count); 979 } 980 981 // Class Gdb_index. 982 983 // Construct the .gdb_index section. 984 985 Gdb_index::Gdb_index(Output_section* gdb_index_section) 986 : Output_section_data(4), 987 pubnames_table_(NULL), 988 pubtypes_table_(NULL), 989 gdb_index_section_(gdb_index_section), 990 comp_units_(), 991 type_units_(), 992 ranges_(), 993 cu_vector_list_(), 994 cu_vector_offsets_(NULL), 995 stringpool_(), 996 tu_offset_(0), 997 addr_offset_(0), 998 symtab_offset_(0), 999 cu_pool_offset_(0), 1000 stringpool_offset_(0), 1001 pubnames_object_(NULL), 1002 stmt_list_offset_(-1) 1003 { 1004 this->gdb_symtab_ = new Gdb_hashtab<Gdb_symbol>(); 1005 } 1006 1007 Gdb_index::~Gdb_index() 1008 { 1009 // Free the memory used by the symbol table. 1010 delete this->gdb_symtab_; 1011 // Free the memory used by the CU vectors. 1012 for (unsigned int i = 0; i < this->cu_vector_list_.size(); ++i) 1013 delete this->cu_vector_list_[i]; 1014 } 1015 1016 1017 // Scan the pubnames and pubtypes sections and build a map of the 1018 // various cus and tus they refer to, so we can process the entries 1019 // when we encounter the die for that cu or tu. 1020 // Return the just-read table so it can be cached. 1021 1022 Dwarf_pubnames_table* 1023 Gdb_index::map_pubtable_to_dies(unsigned int attr, 1024 Gdb_index_info_reader* dwinfo, 1025 Relobj* object, 1026 const unsigned char* symbols, 1027 off_t symbols_size) 1028 { 1029 uint64_t section_offset = 0; 1030 Dwarf_pubnames_table* table; 1031 Pubname_offset_map* map; 1032 1033 if (attr == elfcpp::DW_AT_GNU_pubnames) 1034 { 1035 table = new Dwarf_pubnames_table(dwinfo, false); 1036 map = &this->cu_pubname_map_; 1037 } 1038 else 1039 { 1040 table = new Dwarf_pubnames_table(dwinfo, true); 1041 map = &this->cu_pubtype_map_; 1042 } 1043 1044 map->clear(); 1045 if (!table->read_section(object, symbols, symbols_size)) 1046 return NULL; 1047 1048 while (table->read_header(section_offset)) 1049 { 1050 map->insert(std::make_pair(table->cu_offset(), section_offset)); 1051 section_offset += table->subsection_size(); 1052 } 1053 1054 return table; 1055 } 1056 1057 // Wrapper for map_pubtable_to_dies 1058 1059 void 1060 Gdb_index::map_pubnames_and_types_to_dies(Gdb_index_info_reader* dwinfo, 1061 Relobj* object, 1062 const unsigned char* symbols, 1063 off_t symbols_size) 1064 { 1065 // This is a new object, so reset the relevant variables. 1066 this->pubnames_object_ = object; 1067 this->stmt_list_offset_ = -1; 1068 1069 delete this->pubnames_table_; 1070 this->pubnames_table_ 1071 = this->map_pubtable_to_dies(elfcpp::DW_AT_GNU_pubnames, dwinfo, 1072 object, symbols, symbols_size); 1073 delete this->pubtypes_table_; 1074 this->pubtypes_table_ 1075 = this->map_pubtable_to_dies(elfcpp::DW_AT_GNU_pubtypes, dwinfo, 1076 object, symbols, symbols_size); 1077 } 1078 1079 // Given a cu_offset, find the associated section of the pubnames 1080 // table. 1081 1082 off_t 1083 Gdb_index::find_pubname_offset(off_t cu_offset) 1084 { 1085 Pubname_offset_map::iterator it = this->cu_pubname_map_.find(cu_offset); 1086 if (it != this->cu_pubname_map_.end()) 1087 return it->second; 1088 return -1; 1089 } 1090 1091 // Given a cu_offset, find the associated section of the pubnames 1092 // table. 1093 1094 off_t 1095 Gdb_index::find_pubtype_offset(off_t cu_offset) 1096 { 1097 Pubname_offset_map::iterator it = this->cu_pubtype_map_.find(cu_offset); 1098 if (it != this->cu_pubtype_map_.end()) 1099 return it->second; 1100 return -1; 1101 } 1102 1103 // Scan a .debug_info or .debug_types input section. 1104 1105 void 1106 Gdb_index::scan_debug_info(bool is_type_unit, 1107 Relobj* object, 1108 const unsigned char* symbols, 1109 off_t symbols_size, 1110 unsigned int shndx, 1111 unsigned int reloc_shndx, 1112 unsigned int reloc_type) 1113 { 1114 Gdb_index_info_reader dwinfo(is_type_unit, object, 1115 symbols, symbols_size, 1116 shndx, reloc_shndx, 1117 reloc_type, this); 1118 if (object != this->pubnames_object_) 1119 map_pubnames_and_types_to_dies(&dwinfo, object, symbols, symbols_size); 1120 dwinfo.parse(); 1121 } 1122 1123 // Add a symbol. 1124 1125 void 1126 Gdb_index::add_symbol(int cu_index, const char* sym_name, uint8_t flags) 1127 { 1128 unsigned int hash = mapped_index_string_hash( 1129 reinterpret_cast<const unsigned char*>(sym_name)); 1130 Gdb_symbol* sym = new Gdb_symbol(); 1131 this->stringpool_.add(sym_name, true, &sym->name_key); 1132 sym->hashval = hash; 1133 sym->cu_vector_index = 0; 1134 1135 Gdb_symbol* found = this->gdb_symtab_->add(sym); 1136 if (found == sym) 1137 { 1138 // New symbol -- allocate a new CU index vector. 1139 found->cu_vector_index = this->cu_vector_list_.size(); 1140 this->cu_vector_list_.push_back(new Cu_vector()); 1141 } 1142 else 1143 { 1144 // Found an existing symbol -- append to the existing 1145 // CU index vector. 1146 delete sym; 1147 } 1148 1149 // Add the CU index to the vector list for this symbol, 1150 // if it's not already on the list. We only need to 1151 // check the last added entry. 1152 Cu_vector* cu_vec = this->cu_vector_list_[found->cu_vector_index]; 1153 if (cu_vec->size() == 0 1154 || cu_vec->back().first != cu_index 1155 || cu_vec->back().second != flags) 1156 cu_vec->push_back(std::make_pair(cu_index, flags)); 1157 } 1158 1159 // Return TRUE if we have already processed the pubnames associated 1160 // with the statement list at the given OFFSET. 1161 1162 bool 1163 Gdb_index::pubnames_read(const Relobj* object, off_t offset) 1164 { 1165 bool ret = (this->pubnames_object_ == object 1166 && this->stmt_list_offset_ == offset); 1167 return ret; 1168 } 1169 1170 // Record that we have processed the pubnames associated with the 1171 // statement list for OBJECT at the given OFFSET. 1172 1173 void 1174 Gdb_index::set_pubnames_read(const Relobj* object, off_t offset) 1175 { 1176 this->pubnames_object_ = object; 1177 this->stmt_list_offset_ = offset; 1178 } 1179 1180 // Set the size of the .gdb_index section. 1181 1182 void 1183 Gdb_index::set_final_data_size() 1184 { 1185 // Finalize the string pool. 1186 this->stringpool_.set_string_offsets(); 1187 1188 // Compute the total size of the CU vectors. 1189 // For each CU vector, include one entry for the count at the 1190 // beginning of the vector. 1191 unsigned int cu_vector_count = this->cu_vector_list_.size(); 1192 unsigned int cu_vector_size = 0; 1193 this->cu_vector_offsets_ = new off_t[cu_vector_count]; 1194 for (unsigned int i = 0; i < cu_vector_count; ++i) 1195 { 1196 Cu_vector* cu_vec = this->cu_vector_list_[i]; 1197 cu_vector_offsets_[i] = cu_vector_size; 1198 cu_vector_size += gdb_index_offset_size * (cu_vec->size() + 1); 1199 } 1200 1201 // Assign relative offsets to each portion of the index, 1202 // and find the total size of the section. 1203 section_size_type data_size = gdb_index_hdr_size; 1204 data_size += this->comp_units_.size() * gdb_index_cu_size; 1205 this->tu_offset_ = data_size; 1206 data_size += this->type_units_.size() * gdb_index_tu_size; 1207 this->addr_offset_ = data_size; 1208 for (unsigned int i = 0; i < this->ranges_.size(); ++i) 1209 data_size += this->ranges_[i].ranges->size() * gdb_index_addr_size; 1210 this->symtab_offset_ = data_size; 1211 data_size += this->gdb_symtab_->capacity() * gdb_index_sym_size; 1212 this->cu_pool_offset_ = data_size; 1213 data_size += cu_vector_size; 1214 this->stringpool_offset_ = data_size; 1215 data_size += this->stringpool_.get_strtab_size(); 1216 1217 this->set_data_size(data_size); 1218 } 1219 1220 // Write the data to the file. 1221 1222 void 1223 Gdb_index::do_write(Output_file* of) 1224 { 1225 const off_t off = this->offset(); 1226 const off_t oview_size = this->data_size(); 1227 unsigned char* const oview = of->get_output_view(off, oview_size); 1228 unsigned char* pov = oview; 1229 1230 // Write the file header. 1231 // (1) Version number. 1232 elfcpp::Swap<32, false>::writeval(pov, gdb_index_version); 1233 pov += 4; 1234 // (2) Offset of the CU list. 1235 elfcpp::Swap<32, false>::writeval(pov, gdb_index_hdr_size); 1236 pov += 4; 1237 // (3) Offset of the types CU list. 1238 elfcpp::Swap<32, false>::writeval(pov, this->tu_offset_); 1239 pov += 4; 1240 // (4) Offset of the address area. 1241 elfcpp::Swap<32, false>::writeval(pov, this->addr_offset_); 1242 pov += 4; 1243 // (5) Offset of the symbol table. 1244 elfcpp::Swap<32, false>::writeval(pov, this->symtab_offset_); 1245 pov += 4; 1246 // (6) Offset of the constant pool. 1247 elfcpp::Swap<32, false>::writeval(pov, this->cu_pool_offset_); 1248 pov += 4; 1249 1250 gold_assert(pov - oview == gdb_index_hdr_size); 1251 1252 // Write the CU list. 1253 unsigned int comp_units_count = this->comp_units_.size(); 1254 for (unsigned int i = 0; i < comp_units_count; ++i) 1255 { 1256 const Comp_unit& cu = this->comp_units_[i]; 1257 elfcpp::Swap<64, false>::writeval(pov, cu.cu_offset); 1258 elfcpp::Swap<64, false>::writeval(pov + 8, cu.cu_length); 1259 pov += 16; 1260 } 1261 1262 gold_assert(pov - oview == this->tu_offset_); 1263 1264 // Write the types CU list. 1265 for (unsigned int i = 0; i < this->type_units_.size(); ++i) 1266 { 1267 const Type_unit& tu = this->type_units_[i]; 1268 elfcpp::Swap<64, false>::writeval(pov, tu.tu_offset); 1269 elfcpp::Swap<64, false>::writeval(pov + 8, tu.type_offset); 1270 elfcpp::Swap<64, false>::writeval(pov + 16, tu.type_signature); 1271 pov += 24; 1272 } 1273 1274 gold_assert(pov - oview == this->addr_offset_); 1275 1276 // Write the address area. 1277 for (unsigned int i = 0; i < this->ranges_.size(); ++i) 1278 { 1279 int cu_index = this->ranges_[i].cu_index; 1280 // Translate negative indexes, which refer to a TU, to a 1281 // logical index into a concatenated CU/TU list. 1282 if (cu_index < 0) 1283 cu_index = comp_units_count + (-1 - cu_index); 1284 Relobj* object = this->ranges_[i].object; 1285 const Dwarf_range_list& ranges = *this->ranges_[i].ranges; 1286 for (unsigned int j = 0; j < ranges.size(); ++j) 1287 { 1288 const Dwarf_range_list::Range& range = ranges[j]; 1289 uint64_t base = 0; 1290 if (range.shndx > 0) 1291 { 1292 const Output_section* os = object->output_section(range.shndx); 1293 base = (os->address() 1294 + object->output_section_offset(range.shndx)); 1295 } 1296 elfcpp::Swap_aligned32<64, false>::writeval(pov, base + range.start); 1297 elfcpp::Swap_aligned32<64, false>::writeval(pov + 8, 1298 base + range.end); 1299 elfcpp::Swap<32, false>::writeval(pov + 16, cu_index); 1300 pov += 20; 1301 } 1302 } 1303 1304 gold_assert(pov - oview == this->symtab_offset_); 1305 1306 // Write the symbol table. 1307 for (unsigned int i = 0; i < this->gdb_symtab_->capacity(); ++i) 1308 { 1309 const Gdb_symbol* sym = (*this->gdb_symtab_)[i]; 1310 section_offset_type name_offset = 0; 1311 unsigned int cu_vector_offset = 0; 1312 if (sym != NULL) 1313 { 1314 name_offset = (this->stringpool_.get_offset_from_key(sym->name_key) 1315 + this->stringpool_offset_ - this->cu_pool_offset_); 1316 cu_vector_offset = this->cu_vector_offsets_[sym->cu_vector_index]; 1317 } 1318 elfcpp::Swap<32, false>::writeval(pov, name_offset); 1319 elfcpp::Swap<32, false>::writeval(pov + 4, cu_vector_offset); 1320 pov += 8; 1321 } 1322 1323 gold_assert(pov - oview == this->cu_pool_offset_); 1324 1325 // Write the CU vectors into the constant pool. 1326 for (unsigned int i = 0; i < this->cu_vector_list_.size(); ++i) 1327 { 1328 Cu_vector* cu_vec = this->cu_vector_list_[i]; 1329 elfcpp::Swap<32, false>::writeval(pov, cu_vec->size()); 1330 pov += 4; 1331 for (unsigned int j = 0; j < cu_vec->size(); ++j) 1332 { 1333 int cu_index = (*cu_vec)[j].first; 1334 uint8_t flags = (*cu_vec)[j].second; 1335 if (cu_index < 0) 1336 cu_index = comp_units_count + (-1 - cu_index); 1337 cu_index |= flags << 24; 1338 elfcpp::Swap<32, false>::writeval(pov, cu_index); 1339 pov += 4; 1340 } 1341 } 1342 1343 gold_assert(pov - oview == this->stringpool_offset_); 1344 1345 // Write the strings into the constant pool. 1346 this->stringpool_.write_to_buffer(pov, oview_size - this->stringpool_offset_); 1347 1348 of->write_output_view(off, oview_size, oview); 1349 } 1350 1351 // Print usage statistics. 1352 void 1353 Gdb_index::print_stats() 1354 { 1355 if (parameters->options().gdb_index()) 1356 Gdb_index_info_reader::print_stats(); 1357 } 1358 1359 } // End namespace gold. 1360