summaryrefslogtreecommitdiffstats
path: root/lld/ELF/LinkerScript.h
diff options
context:
space:
mode:
Diffstat (limited to 'lld/ELF/LinkerScript.h')
-rw-r--r--lld/ELF/LinkerScript.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/lld/ELF/LinkerScript.h b/lld/ELF/LinkerScript.h
index 7542191643e..57536203a71 100644
--- a/lld/ELF/LinkerScript.h
+++ b/lld/ELF/LinkerScript.h
@@ -39,12 +39,16 @@ class InputSectionData;
// with the value of special context variable ".".
struct Expr {
std::function<uint64_t(uint64_t)> Val;
- bool IsAbsolute;
+ std::function<bool()> IsAbsolute;
uint64_t operator()(uint64_t Dot) const { return Val(Dot); }
operator bool() const { return (bool)Val; }
template <typename T>
- Expr(T Val, bool IsAbsolute) : Val(Val), IsAbsolute(IsAbsolute) {}
+ Expr(T Val, std::function<bool()> IsAbsolute)
+ : Val(Val), IsAbsolute(IsAbsolute) {}
+ template <typename T> Expr(T Val, bool IsAbsolute) : Val(Val) {
+ this->IsAbsolute = [=]() { return IsAbsolute; };
+ }
template <typename T> Expr(T V) : Expr(V, false) {}
Expr() : Expr(nullptr) {}
};
@@ -184,6 +188,7 @@ public:
virtual uint64_t getHeaderSize() = 0;
virtual uint64_t getSymbolValue(StringRef S) = 0;
virtual bool isDefined(StringRef S) = 0;
+ virtual bool isAbsolute(StringRef S) = 0;
};
// ScriptConfiguration holds linker script parse results.
@@ -231,6 +236,7 @@ public:
uint64_t getHeaderSize() override;
uint64_t getSymbolValue(StringRef S) override;
bool isDefined(StringRef S) override;
+ bool isAbsolute(StringRef S) override;
std::vector<OutputSectionBase<ELFT> *> *OutputSections;
OpenPOWER on IntegriCloud