1 // mapfile.h -- map file generation for gold -*- C++ -*- 2 3 // Copyright 2008 Free Software Foundation, Inc. 4 // Written by Ian Lance Taylor <iant@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 #ifndef GOLD_MAP_H 24 #define GOLD_MAP_H 25 26 #include <cstdio> 27 #include <string> 28 29 namespace gold 30 { 31 32 class Archive; 33 class Symbol; 34 class Relobj; 35 template<int size, bool big_endian> 36 class Sized_relobj; 37 class Output_section; 38 class Output_data; 39 40 // This class manages map file output. 41 42 class Mapfile 43 { 44 public: 45 Mapfile(); 46 47 ~Mapfile(); 48 49 // Open the map file. Return whether the open succeed. 50 bool 51 open(const char* map_filename); 52 53 // Close the map file. 54 void 55 close(); 56 57 // Report that we are including a member from an archive. This is 58 // called by the archive reading code. 59 void 60 report_include_archive_member(const std::string& member_name, 61 const Symbol* sym, const char* why); 62 63 // Report allocating a common symbol. 64 void 65 report_allocate_common(const Symbol*, uint64_t symsize); 66 67 // Print discarded input sections. 68 void 69 print_discarded_sections(const Input_objects*); 70 71 // Print an output section. 72 void 73 print_output_section(const Output_section*); 74 75 // Print an input section. 76 void 77 print_input_section(Relobj*, unsigned int shndx); 78 79 // Print an Output_data. 80 void 81 print_output_data(const Output_data*, const char* name); 82 83 private: 84 // The space we allow for a section name. 85 static const size_t section_name_map_length; 86 87 // Advance to a column. 88 void 89 advance_to_column(size_t from, size_t to); 90 91 // Print the memory map header. 92 void 93 print_memory_map_header(); 94 95 // Print symbols for an input section. 96 template<int size, bool big_endian> 97 void 98 print_input_section_symbols(const Sized_relobj<size, big_endian>*, 99 unsigned int shndx); 100 101 // Map file to write to. 102 FILE* map_file_; 103 // Whether we have printed the archive member header. 104 bool printed_archive_header_; 105 // Whether we have printed the allocated common header. 106 bool printed_common_header_; 107 // Whether we have printed the memory map header. 108 bool printed_memory_map_header_; 109 }; 110 111 } // End namespace gold. 112 113 #endif // !defined(GOLD_MAP_H) 114