// mapfile.h -- map file generation for gold -*- C++ -*-// Copyright 2008 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;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.boolopen(const char* map_filename);// Close the map file.voidclose();// Report that we are including a member from an archive. This is// called by the archive reading code.voidreport_include_archive_member(const std::string& member_name,const Symbol* sym, const char* why);// Report allocating a common symbol.voidreport_allocate_common(const Symbol*, uint64_t symsize);// Print discarded input sections.voidprint_discarded_sections(const Input_objects*);// Print an output section.voidprint_output_section(const Output_section*);// Print an input section.voidprint_input_section(Relobj*, unsigned int shndx);// Print an Output_data.voidprint_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.voidadvance_to_column(size_t from, size_t to);// Print the memory map header.voidprint_memory_map_header();// Print symbols for an input section.template<int size, bool big_endian>voidprint_input_section_symbols(const Sized_relobj<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)