summaryrefslogtreecommitdiffstats
path: root/lld/ELF/Target.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/ELF/Target.cpp')
-rw-r--r--lld/ELF/Target.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index e1e99556ec7..aaae89bd087 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -28,6 +28,7 @@
#include "OutputSections.h"
#include "SymbolTable.h"
#include "Symbols.h"
+#include "SyntheticSections.h"
#include "lld/Common/ErrorHandler.h"
#include "llvm/Object/ELF.h"
@@ -91,15 +92,20 @@ TargetInfo *getTarget() {
}
template <class ELFT> static ErrorPlace getErrPlace(const uint8_t *loc) {
- if (!Out::bufferStart)
- return {};
-
+ assert(loc != nullptr);
for (InputSectionBase *d : inputSections) {
auto *isec = cast<InputSection>(d);
if (!isec->getParent())
continue;
- uint8_t *isecLoc = Out::bufferStart + isec->getParent()->offset + isec->outSecOff;
+ const uint8_t *isecLoc =
+ Out::bufferStart
+ ? (Out::bufferStart + isec->getParent()->offset + isec->outSecOff)
+ : isec->data().data();
+ if (isecLoc == nullptr) {
+ assert(isa<SyntheticSection>(isec) && "No data but not synthetic?");
+ continue;
+ }
if (isecLoc <= loc && loc < isecLoc + isec->getSize())
return {isec, isec->template getLocation<ELFT>(loc - isecLoc) + ": "};
}
OpenPOWER on IntegriCloud