| // mapfile.h -- map file generation for gold -*- C++ -*- | |
| // Copyright (C) 2008-2015 Free Software Foundation, Inc. | |
| // Written by Ian Lance Taylor <iant@google.com>. | |
| // This file is part of gold. | |
| // This program is free software; you can redistribute it and/or modify | |
| // it under the terms of the GNU General Public License as published by | |
| // the Free Software Foundation; either version 3 of the License, or | |
| // (at your option) any later version. | |
| // This program is distributed in the hope that it will be useful, | |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| // GNU General Public License for more details. | |
| // You should have received a copy of the GNU General Public License | |
| // along with this program; if not, write to the Free Software | |
| // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, | |
| // MA 02110-1301, USA. | |
| #ifndef GOLD_MAP_H | |
| #define GOLD_MAP_H | |
| #include <cstdio> | |
| #include <string> | |
| namespace gold | |
| { | |
| class Archive; | |
| class Symbol; | |
| class Relobj; | |
| template<int size, bool big_endian> | |
| class Sized_relobj_file; | |
| class Output_section; | |
| class Output_data; | |
| // This class manages map file output. | |
| class Mapfile | |
| { | |
| public: | |
| Mapfile(); | |
| ~Mapfile(); | |
| // Open the map file. Return whether the open succeed. | |
| bool | |
| open(const char* map_filename); | |
| // Close the map file. | |
| void | |
| close(); | |
| // Return the underlying file. | |
| FILE* | |
| file() | |
| { return this->map_file_; } | |
| // Report that we are including a member from an archive. This is | |
| // called by the archive reading code. | |
| void | |
| report_include_archive_member(const std::string& member_name, | |
| const Symbol* sym, const char* why); | |
| // Report allocating a common symbol. | |
| void | |
| report_allocate_common(const Symbol*, uint64_t symsize); | |
| // Print discarded input sections. | |
| void | |
| print_discarded_sections(const Input_objects*); | |
| // Print an output section. | |
| void | |
| print_output_section(const Output_section*); | |
| // Print an input section. | |
| void | |
| print_input_section(Relobj*, unsigned int shndx); | |
| // Print an Output_data. | |
| void | |
| print_output_data(const Output_data*, const char* name); | |
| private: | |
| // The space we allow for a section name. | |
| static const size_t section_name_map_length; | |
| // Advance to a column. | |
| void | |
| advance_to_column(size_t from, size_t to); | |
| // Print the memory map header. | |
| void | |
| print_memory_map_header(); | |
| // Print symbols for an input section. | |
| template<int size, bool big_endian> | |
| void | |
| print_input_section_symbols(const Sized_relobj_file<size, big_endian>*, | |
| unsigned int shndx); | |
| // Map file to write to. | |
| FILE* map_file_; | |
| // Whether we have printed the archive member header. | |
| bool printed_archive_header_; | |
| // Whether we have printed the allocated common header. | |
| bool printed_common_header_; | |
| // Whether we have printed the memory map header. | |
| bool printed_memory_map_header_; | |
| }; | |
| } // End namespace gold. | |
| #endif // !defined(GOLD_MAP_H) |