Line 88... |
Line 88... |
// be NULL. Note that the returned value is still an absolute
|
// be NULL. Note that the returned value is still an absolute
|
// value; to get a section relative value the caller must subtract
|
// value; to get a section relative value the caller must subtract
|
// the section address. If RESULT_ALIGNMENT is not NULL, this sets
|
// the section address. If RESULT_ALIGNMENT is not NULL, this sets
|
// *RESULT_ALIGNMENT to the alignment of the value of that alignment
|
// *RESULT_ALIGNMENT to the alignment of the value of that alignment
|
// is larger than *RESULT_ALIGNMENT; this will only be non-zero if
|
// 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
|
uint64_t
|
eval_with_dot(const Symbol_table*, const Layout*, bool check_assertions,
|
eval_with_dot(const Symbol_table*, const Layout*, bool check_assertions,
|
uint64_t dot_value, Output_section* dot_section,
|
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
|
// Return the value of an expression which may or may not be
|
// permitted to refer to the dot symbol, depending on
|
// 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
|
uint64_t
|
eval_maybe_dot(const Symbol_table*, const Layout*, bool check_assertions,
|
eval_maybe_dot(const Symbol_table*, const Layout*, bool check_assertions,
|
bool is_dot_available, uint64_t dot_value,
|
bool is_dot_available, uint64_t dot_value,
|
Output_section* dot_section,
|
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);
|
|
|
// Print the expression to the FILE. This is for debugging.
|
// Print the expression to the FILE. This is for debugging.
|
virtual void
|
virtual void
|
print(FILE*) const = 0;
|
print(FILE*) const = 0;
|
|
|
Line 337... |
Line 345... |
// Finalize the symbol value when it can refer to the dot symbol.
|
// Finalize the symbol value when it can refer to the dot symbol.
|
void
|
void
|
finalize_with_dot(Symbol_table*, const Layout*, uint64_t dot_value,
|
finalize_with_dot(Symbol_table*, const Layout*, uint64_t dot_value,
|
Output_section* dot_section);
|
Output_section* dot_section);
|
|
|
// Set the symbol value, but only if the value is absolute. This is
|
// Set the symbol value, but only if the value is absolute or relative to
|
// used while processing a SECTIONS clause. We assume that dot is
|
// DOT_SECTION. This is used while processing a SECTIONS clause.
|
// an absolute value here. We do not check assertions.
|
// We assume that dot is an absolute value here. We do not check assertions.
|
void
|
void
|
set_if_absolute(Symbol_table*, const Layout*, bool is_dot_available,
|
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&
|
const std::string&
|
name() const
|
name() const
|
{ return this->name_; }
|
{ return this->name_; }
|
|
|