Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: src/common/linux/dump_symbols.cc

Issue 1824063002: Have dump_syms output the full symbol table. (Closed) Base URL: https://chromium.googlesource.com/breakpad/breakpad.git@master
Patch Set: Reverted to #2 plus SHT_DYNSYM fix Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 Google Inc. 1 // Copyright (c) 2011 Google Inc.
2 // All rights reserved. 2 // All rights reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // * Redistributions of source code must retain the above copyright 8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer. 9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above 10 // * Redistributions in binary form must reproduce the above
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 found_usable_info = true; 677 found_usable_info = true;
678 info->LoadedSection(".debug_info"); 678 info->LoadedSection(".debug_info");
679 if (!LoadDwarf<ElfClass>(obj_file, elf_header, big_endian, 679 if (!LoadDwarf<ElfClass>(obj_file, elf_header, big_endian,
680 options.handle_inter_cu_refs, module)) { 680 options.handle_inter_cu_refs, module)) {
681 fprintf(stderr, "%s: \".debug_info\" section found, but failed to load " 681 fprintf(stderr, "%s: \".debug_info\" section found, but failed to load "
682 "DWARF debugging information\n", obj_file.c_str()); 682 "DWARF debugging information\n", obj_file.c_str());
683 } 683 }
684 } 684 }
685 685
686 // See if there are export symbols available. 686 // See if there are export symbols available.
687 const Shdr* dynsym_section = 687 const Shdr* symtab_section =
688 FindElfSectionByName<ElfClass>(".dynsym", SHT_DYNSYM, 688 FindElfSectionByName<ElfClass>(".symtab", SHT_SYMTAB,
689 sections, names, names_end, 689 sections, names, names_end,
690 elf_header->e_shnum); 690 elf_header->e_shnum);
691 const Shdr* dynstr_section = 691 const Shdr* strtab_section =
692 FindElfSectionByName<ElfClass>(".dynstr", SHT_STRTAB, 692 FindElfSectionByName<ElfClass>(".strtab", SHT_STRTAB,
693 sections, names, names_end, 693 sections, names, names_end,
694 elf_header->e_shnum); 694 elf_header->e_shnum);
695 if (dynsym_section && dynstr_section) { 695 if (symtab_section && strtab_section) {
696 info->LoadedSection(".dynsym"); 696 info->LoadedSection(".symtab");
697 697
698 const uint8_t* dynsyms = 698 const uint8_t* symtab =
699 GetOffset<ElfClass, uint8_t>(elf_header, 699 GetOffset<ElfClass, uint8_t>(elf_header,
700 dynsym_section->sh_offset); 700 symtab_section->sh_offset);
701 const uint8_t* dynstrs = 701 const uint8_t* strtab =
702 GetOffset<ElfClass, uint8_t>(elf_header, 702 GetOffset<ElfClass, uint8_t>(elf_header,
703 dynstr_section->sh_offset); 703 strtab_section->sh_offset);
704 bool result = 704 bool result =
705 ELFSymbolsToModule(dynsyms, 705 ELFSymbolsToModule(symtab,
706 dynsym_section->sh_size, 706 symtab_section->sh_size,
707 dynstrs, 707 strtab,
708 dynstr_section->sh_size, 708 strtab_section->sh_size,
709 big_endian, 709 big_endian,
710 ElfClass::kAddrSize, 710 ElfClass::kAddrSize,
711 module); 711 module);
712 found_usable_info = found_usable_info || result; 712 found_usable_info = found_usable_info || result;
713 } else {
714 // Look in dynsym only if full symbol table was not available.
715 const Shdr* dynsym_section =
716 FindElfSectionByName<ElfClass>(".dynsym", SHT_DYNSYM,
717 sections, names, names_end,
718 elf_header->e_shnum);
719 const Shdr* dynstr_section =
720 FindElfSectionByName<ElfClass>(".dynstr", SHT_STRTAB,
721 sections, names, names_end,
722 elf_header->e_shnum);
723 if (dynsym_section && dynstr_section) {
724 info->LoadedSection(".dynsym");
725
726 const uint8_t* dynsyms =
727 GetOffset<ElfClass, uint8_t>(elf_header,
728 dynsym_section->sh_offset);
729 const uint8_t* dynstrs =
730 GetOffset<ElfClass, uint8_t>(elf_header,
731 dynstr_section->sh_offset);
732 bool result =
733 ELFSymbolsToModule(dynsyms,
734 dynsym_section->sh_size,
735 dynstrs,
736 dynstr_section->sh_size,
737 big_endian,
738 ElfClass::kAddrSize,
739 module);
740 found_usable_info = found_usable_info || result;
741 }
713 } 742 }
714 } 743 }
715 744
716 if (options.symbol_data != NO_CFI) { 745 if (options.symbol_data != NO_CFI) {
717 // Dwarf Call Frame Information (CFI) is actually independent from 746 // Dwarf Call Frame Information (CFI) is actually independent from
718 // the other DWARF debugging information, and can be used alone. 747 // the other DWARF debugging information, and can be used alone.
719 const Shdr* dwarf_cfi_section = 748 const Shdr* dwarf_cfi_section =
720 FindElfSectionByName<ElfClass>(".debug_frame", debug_section_type, 749 FindElfSectionByName<ElfClass>(".debug_frame", debug_section_type,
721 sections, names, names_end, 750 sections, names, names_end,
722 elf_header->e_shnum); 751 elf_header->e_shnum);
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1000 MmapWrapper map_wrapper; 1029 MmapWrapper map_wrapper;
1001 void* elf_header = NULL; 1030 void* elf_header = NULL;
1002 if (!LoadELF(obj_file, &map_wrapper, &elf_header)) 1031 if (!LoadELF(obj_file, &map_wrapper, &elf_header))
1003 return false; 1032 return false;
1004 1033
1005 return ReadSymbolDataInternal(reinterpret_cast<uint8_t*>(elf_header), 1034 return ReadSymbolDataInternal(reinterpret_cast<uint8_t*>(elf_header),
1006 obj_file, debug_dirs, options, module); 1035 obj_file, debug_dirs, options, module);
1007 } 1036 }
1008 1037
1009 } // namespace google_breakpad 1038 } // namespace google_breakpad
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698