aboutsummaryrefslogtreecommitdiff
path: root/gold/mapfile.h
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2008-05-21 21:37:44 +0000
committerIan Lance Taylor <ian@airs.com>2008-05-21 21:37:44 +0000
commit7d9e3d985416edccb274f0c704901839234cf4a9 (patch)
tree967f5b9545762a0a2ed3cabf4a2e0e4fb1fd6fd3 /gold/mapfile.h
parent9f61f19bbf80ed99be35a8e482b914eabca1b3d8 (diff)
downloadgdb-7d9e3d985416edccb274f0c704901839234cf4a9.zip
gdb-7d9e3d985416edccb274f0c704901839234cf4a9.tar.gz
gdb-7d9e3d985416edccb274f0c704901839234cf4a9.tar.bz2
* mapfile.cc: New file.
* mapfile.h: New file. * options.h (class General_options): Add -M/--print-map and -Map. * options.cc (General_options::finalize): Make -M equivalent to -Map -. * main.cc: Include <cstdio> and "mapfile.h". (main): Open mapfile if requested. * gold.cc (class Middle_runner): Add mapfile_ field. Update constructor. Change caller. (queue_initial_tasks): Add mapfile parameter. Change caller. (queue_middle_tasks): Likewise. * gold.h (queue_initial_tasks, queue_middle_tasks): Update declarations. * archive.cc: Include "mapfile.h". (Archive::add_symbols): Add mapfile parameter. Change all callers. Pass mapfile, symbol, and reason to include_member. (Archive::include_all_members): Add mapfile parameter. Change all callers. (Archive::include_member): Add mapfile, sym, and why parameters. Change all callers. Report inclusion to map file. * archive.h: Include "fileread.h". (class Archive): Update declarations. (Archive::file): New const method. (class Add_archive_symbols): Add mapfile_ field. Update constructor. Change all callers. * readsyms.h (class Read_symbols): Likewise. (class Finish_group): Likewise. (class Read_script): Likewise. * common.cc: Include "mapfile.h". (Symbol_table::allocate_commons): Add mapfile parameter. Change all callers. (Symbol_table::do_allocate_commons): Likewise. (Symbol_table::do_allocate_commons_list): Likewise. Report common symbol allocation to mapfile. * common.h (class Allocate_commons_task): Add mapfile_ field. Update constructor. Change all callers. * symtab.h (class Symbol_table): Update declarations. * layout.cc: Include "mapfile.h". (Layout_task_runner::run): Print information to mapfile. (Layout::create_gold_note): Change Output_data_fixed_space to Output_data_zero_fill. (Layout::create_build_id): Likewise. (Layout::print_to_mapfile): New function. * layout.h (class Layout_task_runner): Add mapfile_ field. Update constructor. Change caller. (class Layout): Declare print_to_mapfile. * output.cc (Output_section::Input_section::print_to_mapfile): New function. (Output_section::add_input_section): If producing a map, always add to input_sections_ list. (Output_section::do_print_to_mapfile): New function. (Output_segment::print_sections_to_mapfile): New function. (Output_segment::print_section_list_to_mapfile): New function. * output.h: Include "mapfile.h". (Output_data::print_to_mapfile): New function. (Output_data::do_print_to_mapfile): New virtual function. (Output_segment_headers::do_print_to_mapfile): New function. (Output_file_header::do_print_to_mapfile): New function. (Output_data_const::do_print_to_mapfile): New function. (class Output_data_const_buffer): Add map_name_ field. Update constructor. Change all callers. Add do_print_to_mapfile function. (class Output_data_fixed_space): Likewise. (class Output_data_space): Likewise. (class Output_data_zero_fill): New class. (Output_data_strtab::do_print_to_mapfile): New function. (Output_data_reloc_base::do_print_to_mapfile): New function. (Output_relocatable_relocs::do_print_to_mapfile): New function. (Output_data_group::do_print_to_mapfile): New function. (Output_data_got::do_print_to_mapfile): New function. (Output_data_dynamic::do_print_to_mapfile): New function. (Output_symtab_xindex::do_print_to_mapfile): New function. (class Output_section): Declare do_print_to_mapflie. Declare print_to_mapfile in Input_section. (class Output_segment): Declare new functions. * object.h (Sized_relobj::symbol_count): New function. * script-sections.cc (Output_section_element_dot_assignment::set_section_addresses): Change Output_data_fixed_space to Output_data_zero_fill. (Output_data_expression::do_print_to_mapfile): New function. * script.cc (read_input_script): Add mapfile parameter. Change all callers. * script.h (read_input_script): Update declaration. * ehframe.h (Eh_frame_hdr::do_print_to_mapfile): New function. (Eh_frame::do_print_to_mapfile): New function. * merge.h (Output_merge_data::do_print_to_mapfile): New function. (Output_merge_string::do_print_to_mapfile): New function. * i386.cc (Output_data_plt_i386::do_print_to_mapfile): New function. * sparc.cc (Output_data_plt_sparc::do_print_to_mapfile): New function. * x86_64.cc (Output_data_plt_x86_64::do_print_to_mapfile): New function. * Makefile.am (CCFILES): Add mapfile.cc. (HFILES): Add mapfile.h. * Makefile.in: Rebuild.
Diffstat (limited to 'gold/mapfile.h')
-rw-r--r--gold/mapfile.h113
1 files changed, 113 insertions, 0 deletions
diff --git a/gold/mapfile.h b/gold/mapfile.h
new file mode 100644
index 0000000..e2cf085
--- /dev/null
+++ b/gold/mapfile.h
@@ -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 Archive*, 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)