X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gold%2Fscript.h;h=81e45a2df20df2c30f1837537b9d2790dfeb2738;hb=7e05773767820b441b23a16628b55c98cb1aef46;hp=1731985d83ed267d9eda70e2e35a0894b78f0d24;hpb=b90efa5b79ac1524ec260f8eb89d1be37e0219a7;p=deliverable%2Fbinutils-gdb.git diff --git a/gold/script.h b/gold/script.h index 1731985d83..81e45a2df2 100644 --- a/gold/script.h +++ b/gold/script.h @@ -1,6 +1,6 @@ // script.h -- handle linker scripts for gold -*- C++ -*- -// Copyright (C) 2006-2015 Free Software Foundation, Inc. +// Copyright (C) 2006-2020 Free Software Foundation, Inc. // Written by Ian Lance Taylor . // This file is part of gold. @@ -113,7 +113,7 @@ class Expression Output_section* dot_section, Output_section** result_section, uint64_t* result_alignment, elfcpp::STT* type, elfcpp::STV* vis, unsigned char* nonvis, - bool is_section_dot_assignment); + bool is_section_dot_assignment, bool* is_valid_pointer); // Print the expression to the FILE. This is for debugging. virtual void @@ -129,13 +129,17 @@ class Expression virtual uint64_t value(const Expression_eval_info*) = 0; + // Sets all symbols used in expressions as seen in a real ELF object. + virtual void + set_expr_sym_in_real_elf(Symbol_table*) const + { return; } + private: // May not be copied. Expression(const Expression&); Expression& operator=(const Expression&); }; - // Version_script_info stores information parsed from the version // script, either provided by --version-script or as part of a linker // script. A single Version_script_info object per target is owned by @@ -344,6 +348,14 @@ class Symbol_assignment void finalize(Symbol_table*, const Layout*); + bool + is_defsym() const + { return is_defsym_; } + + Expression * + value() const + { return val_; } + // Finalize the symbol value when it can refer to the dot symbol. void finalize_with_dot(Symbol_table*, const Layout*, uint64_t dot_value, @@ -454,6 +466,13 @@ class Script_options bool define_symbol(const char* definition); + // Populates the set with symbol names used in LHS of defsym. + void + find_defsym_defs(Unordered_set&); + + // Set symbols used in defsym expressions as seen in a real ELF object. + void set_defsym_uses_in_real_elf(Symbol_table*) const; + // Create sections required by any linker scripts. void create_script_sections(Layout*); @@ -538,7 +557,7 @@ class Script_options // SECTIONS clause. typedef std::vector Symbol_assignments; - // We keep a list of all assertions whcih occur outside of a + // We keep a list of all assertions which occur outside of a // SECTIONS clause. typedef std::vector Assertions;