// layout.h -- lay out output file sections for gold -*- C++ -*-
-// Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
-// Free Software Foundation, Inc.
+// Copyright (C) 2006-2015 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
const Output_data_reloc_generic* dyn_rel,
bool add_debug, bool dynrel_includes_plt);
+ // If a treehash is necessary to compute the build ID, then queue
+ // the necessary tasks and return a blocker that will unblock when
+ // they finish. Otherwise return BUILD_ID_BLOCKER.
+ Task_token*
+ queue_build_id_tasks(Workqueue* workqueue, Task_token* build_id_blocker,
+ Output_file* of);
+
// Compute and write out the build ID if needed.
void
write_build_id(Output_file*) const;
// be mapped to an output section that should be KEPT.
bool
keep_input_section(const Relobj*, const char*);
-
+
+ // Add a special output object that will be recreated afresh
+ // if there is another relaxation iteration.
+ void
+ add_relax_output(Output_data* data)
+ { this->relax_output_list_.push_back(data); }
+
+ // Clear out (and free) everything added by add_relax_output.
+ void
+ reset_relax_output();
+
private:
Layout(const Layout&);
Layout& operator=(const Layout&);
// Check that sections and special data are in reset states.
void
check_output_data_for_reset_values(const Layout::Section_list&,
- const Layout::Data_list&);
+ const Layout::Data_list& special_outputs,
+ const Layout::Data_list& relax_outputs);
// Record information of a section list.
void
// The list of unattached Output_data objects which require special
// handling because they are not Output_sections.
Data_list special_output_list_;
+ // Like special_output_list_, but cleared and recreated on each
+ // iteration of relaxation.
+ Data_list relax_output_list_;
// The section headers.
Output_section_headers* section_headers_;
// A pointer to the PT_TLS segment if there is one.
Gdb_index* gdb_index_data_;
// The space for the build ID checksum if there is one.
Output_section_data* build_id_note_;
+ // Temporary storage for tree hash of build ID.
+ unsigned char* array_of_hashes_;
+ // Size of array_of_hashes_ (in bytes).
+ size_t size_of_array_of_hashes_;
+ // Input view for computing tree hash of build ID. Freed in write_build_id().
+ const unsigned char* input_view_;
// The output section containing dwarf abbreviations
Output_reduced_debug_abbrev_section* debug_abbrev_;
// The output section containing the dwarf debug info tree
public:
Write_sections_task(const Layout* layout, Output_file* of,
Task_token* output_sections_blocker,
+ Task_token* input_sections_blocker,
Task_token* final_blocker)
: layout_(layout), of_(of),
output_sections_blocker_(output_sections_blocker),
+ input_sections_blocker_(input_sections_blocker),
final_blocker_(final_blocker)
{ }
const Layout* layout_;
Output_file* of_;
Task_token* output_sections_blocker_;
+ Task_token* input_sections_blocker_;
Task_token* final_blocker_;
};
{
public:
Write_symbols_task(const Layout* layout, const Symbol_table* symtab,
- const Input_objects* input_objects,
+ const Input_objects* /*input_objects*/,
const Stringpool* sympool, const Stringpool* dynpool,
Output_file* of, Task_token* final_blocker)
- : layout_(layout), symtab_(symtab), input_objects_(input_objects),
+ : layout_(layout), symtab_(symtab),
sympool_(sympool), dynpool_(dynpool), of_(of),
final_blocker_(final_blocker)
{ }
private:
const Layout* layout_;
const Symbol_table* symtab_;
- const Input_objects* input_objects_;
const Stringpool* sympool_;
const Stringpool* dynpool_;
Output_file* of_;