diff options
Diffstat (limited to 'ELF/Target.cpp')
-rw-r--r-- | ELF/Target.cpp | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/ELF/Target.cpp b/ELF/Target.cpp index 11986efc746f..ddd408906d14 100644 --- a/ELF/Target.cpp +++ b/ELF/Target.cpp @@ -25,11 +25,11 @@ //===----------------------------------------------------------------------===// #include "Target.h" -#include "Error.h" #include "InputFiles.h" #include "OutputSections.h" #include "SymbolTable.h" #include "Symbols.h" +#include "lld/Common/ErrorHandler.h" #include "llvm/Object/ELF.h" using namespace llvm; @@ -40,7 +40,7 @@ using namespace lld::elf; TargetInfo *elf::Target; -std::string lld::toString(uint32_t Type) { +std::string lld::toString(RelType Type) { StringRef S = getELFRelocationTypeName(elf::Config->EMachine, Type); if (S == "Unknown") return ("Unknown (" + Twine(Type) + ")").str(); @@ -117,27 +117,26 @@ std::string elf::getErrorLocation(const uint8_t *Loc) { TargetInfo::~TargetInfo() {} -int64_t TargetInfo::getImplicitAddend(const uint8_t *Buf, uint32_t Type) const { +int64_t TargetInfo::getImplicitAddend(const uint8_t *Buf, RelType Type) const { return 0; } -bool TargetInfo::usesOnlyLowPageBits(uint32_t Type) const { return false; } +bool TargetInfo::usesOnlyLowPageBits(RelType Type) const { return false; } -bool TargetInfo::needsThunk(RelExpr Expr, uint32_t RelocType, - const InputFile *File, const SymbolBody &S) const { +bool TargetInfo::needsThunk(RelExpr Expr, RelType Type, const InputFile *File, + uint64_t BranchAddr, const Symbol &S) const { return false; } -bool TargetInfo::inBranchRange(uint32_t RelocType, uint64_t Src, - uint64_t Dst) const { +bool TargetInfo::inBranchRange(RelType Type, uint64_t Src, uint64_t Dst) const { return true; } -void TargetInfo::writeIgotPlt(uint8_t *Buf, const SymbolBody &S) const { +void TargetInfo::writeIgotPlt(uint8_t *Buf, const Symbol &S) const { writeGotPlt(Buf, S); } -RelExpr TargetInfo::adjustRelaxExpr(uint32_t Type, const uint8_t *Data, +RelExpr TargetInfo::adjustRelaxExpr(RelType Type, const uint8_t *Data, RelExpr Expr) const { return Expr; } @@ -146,22 +145,29 @@ void TargetInfo::relaxGot(uint8_t *Loc, uint64_t Val) const { llvm_unreachable("Should not have claimed to be relaxable"); } -void TargetInfo::relaxTlsGdToLe(uint8_t *Loc, uint32_t Type, +void TargetInfo::relaxTlsGdToLe(uint8_t *Loc, RelType Type, uint64_t Val) const { llvm_unreachable("Should not have claimed to be relaxable"); } -void TargetInfo::relaxTlsGdToIe(uint8_t *Loc, uint32_t Type, +void TargetInfo::relaxTlsGdToIe(uint8_t *Loc, RelType Type, uint64_t Val) const { llvm_unreachable("Should not have claimed to be relaxable"); } -void TargetInfo::relaxTlsIeToLe(uint8_t *Loc, uint32_t Type, +void TargetInfo::relaxTlsIeToLe(uint8_t *Loc, RelType Type, uint64_t Val) const { llvm_unreachable("Should not have claimed to be relaxable"); } -void TargetInfo::relaxTlsLdToLe(uint8_t *Loc, uint32_t Type, +void TargetInfo::relaxTlsLdToLe(uint8_t *Loc, RelType Type, uint64_t Val) const { llvm_unreachable("Should not have claimed to be relaxable"); } + +uint64_t TargetInfo::getImageBase() { + // Use -image-base if set. Fall back to the target default if not. + if (Config->ImageBase) + return *Config->ImageBase; + return Config->Pic ? 0 : DefaultImageBase; +} |