X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gold%2Fscript.h;h=d81391bb95459fa73047dfdfe8ed9fec903f7522;hb=405b757bdf23ea6612e0943bca05297049291612;hp=e1134ca2861d38b01fff4efe6ac6999aaa6970bf;hpb=e597fa086665187c4d0dea1c45d5c044e297af66;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/script.h b/gold/script.h index e1134ca286..d81391bb95 100644 --- a/gold/script.h +++ b/gold/script.h @@ -1,6 +1,6 @@ // script.h -- handle linker scripts for gold -*- C++ -*- -// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2006-2016 Free Software Foundation, Inc. // Written by Ian Lance Taylor . // This file is part of gold. @@ -34,6 +34,7 @@ #include #include +#include "elfcpp.h" #include "script-sections.h" namespace gold @@ -57,6 +58,7 @@ struct Version_expression_list; struct Version_tree; struct Version_expression; class Lazy_demangler; +class Incremental_script_entry; // This class represents an expression in a linker script. @@ -89,20 +91,29 @@ class Expression // the section address. If RESULT_ALIGNMENT is not NULL, this sets // *RESULT_ALIGNMENT to the alignment of the value of that alignment // is larger than *RESULT_ALIGNMENT; this will only be non-zero if - // this is an ALIGN expression. + // this is an ALIGN expression. If IS_SECTION_DOT_ASSIGMENT is true, + // we are evaluating an assignment to dot within an output section, + // and an absolute value should be interpreted as an offset within + // the section. uint64_t eval_with_dot(const Symbol_table*, const Layout*, bool check_assertions, uint64_t dot_value, Output_section* dot_section, - Output_section** result_section, uint64_t* result_alignment); + Output_section** result_section, uint64_t* result_alignment, + bool is_section_dot_assignment); // Return the value of an expression which may or may not be // permitted to refer to the dot symbol, depending on - // is_dot_available. + // is_dot_available. If IS_SECTION_DOT_ASSIGMENT is true, + // we are evaluating an assignment to dot within an output section, + // and an absolute value should be interpreted as an offset within + // the section. uint64_t eval_maybe_dot(const Symbol_table*, const Layout*, bool check_assertions, bool is_dot_available, uint64_t dot_value, Output_section* dot_section, - Output_section** result_section, uint64_t* result_alignment); + Output_section** result_section, uint64_t* result_alignment, + elfcpp::STT* type, elfcpp::STV* vis, unsigned char* nonvis, + bool is_section_dot_assignment, bool* is_valid_pointer); // Print the expression to the FILE. This is for debugging. virtual void @@ -338,12 +349,12 @@ class Symbol_assignment finalize_with_dot(Symbol_table*, const Layout*, uint64_t dot_value, Output_section* dot_section); - // Set the symbol value, but only if the value is absolute. This is - // used while processing a SECTIONS clause. We assume that dot is - // an absolute value here. We do not check assertions. + // Set the symbol value, but only if the value is absolute or relative to + // DOT_SECTION. This is used while processing a SECTIONS clause. + // We assume that dot is an absolute value here. We do not check assertions. void set_if_absolute(Symbol_table*, const Layout*, bool is_dot_available, - uint64_t dot_value); + uint64_t dot_value, Output_section* dot_section); const std::string& name() const @@ -547,26 +558,6 @@ class Script_options Script_sections script_sections_; }; -// Information about a script input that will persist during the whole linker -// run. Needed only during an incremental build to retrieve the input files -// added by this script. - -class Script_info -{ - public: - Script_info(Input_arguments* inputs) - : inputs_(inputs) - { } - - // Returns the input files included because of this script. - Input_arguments* - inputs() - { return this->inputs_; } - - private: - Input_arguments* inputs_; -}; - // FILE was found as an argument on the command line, but was not // recognized as an ELF file. Try to read it as a script. Return // true if the file was handled. This has to handle /usr/lib/libc.so