]> oss.titaniummirror.com Git - msp430-binutils.git/blobdiff - gold/mapfile.h
Imported binutils-2.20
[msp430-binutils.git] / gold / mapfile.h
diff --git a/gold/mapfile.h b/gold/mapfile.h
new file mode 100644 (file)
index 0000000..ab55c38
--- /dev/null
@@ -0,0 +1,113 @@
+// 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.
+  bool
+  open(const char* map_filename);
+
+  // Close the map file.
+  void
+  close();
+
+  // 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<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)