diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp --- 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 @@ } template static ErrorPlace getErrPlace(const uint8_t *loc) { - if (!Out::bufferStart) - return {}; - + assert(loc != nullptr); for (InputSectionBase *d : inputSections) { auto *isec = cast(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(isec) && "No data but not synthetic?"); + continue; + } if (isecLoc <= loc && loc < isecLoc + isec->getSize()) return {isec, isec->template getLocation(loc - isecLoc) + ": "}; } diff --git a/lld/test/ELF/mips-jalr-non-functions.s b/lld/test/ELF/mips-jalr-non-functions.s --- a/lld/test/ELF/mips-jalr-non-functions.s +++ b/lld/test/ELF/mips-jalr-non-functions.s @@ -15,13 +15,13 @@ .Ltmp1: jr $t9 nop -# WARNING-MESSAGE: warning: found R_MIPS_JALR relocation against non-function symbol tls_obj. This is invalid and most likely a compiler bug. +# WARNING-MESSAGE: warning: {{.+}}.tmp.o:(.text+0x0): found R_MIPS_JALR relocation against non-function symbol tls_obj. This is invalid and most likely a compiler bug. .reloc .Ltmp2, R_MIPS_JALR, reg_obj .Ltmp2: jr $t9 nop -# WARNING-MESSAGE: warning: found R_MIPS_JALR relocation against non-function symbol reg_obj. This is invalid and most likely a compiler bug. +# WARNING-MESSAGE: warning: {{.+}}.tmp.o:(.text+0x8): found R_MIPS_JALR relocation against non-function symbol reg_obj. This is invalid and most likely a compiler bug. .reloc .Ltmp3, R_MIPS_JALR, untyped .Ltmp3: