Use ui_file_as_string in gdb/rust-lang.c
[binutils-gdb.git] / gold / script.h
index 73079a49ac3b82a20911c00cdb540016590e941c..d81391bb95459fa73047dfdfe8ed9fec903f7522 100644 (file)
@@ -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 <iant@google.com>.
 
 // This file is part of gold.
@@ -34,6 +34,7 @@
 #include <string>
 #include <vector>
 
+#include "elfcpp.h"
 #include "script-sections.h"
 
 namespace gold
@@ -90,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
@@ -339,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