diff options
Diffstat (limited to 'lld/ELF/LinkerScript.h')
-rw-r--r-- | lld/ELF/LinkerScript.h | 10 |
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; |