svn commit: r352600 - projects/clang900-import/contrib/llvm/tools/lld/ELF/Arch
Dimitry Andric
dim at FreeBSD.org
Sun Sep 22 17:31:28 UTC 2019
Author: dim
Date: Sun Sep 22 17:31:27 2019
New Revision: 352600
URL: https://svnweb.freebsd.org/changeset/base/352600
Log:
Pull in r372513 from upstream lld trunk (by Simon Atanasyan):
[mips] Deduce MIPS specific ELF header flags from `emulation`
In case of linking binary blobs which do not have any ELF headers, we
can deduce MIPS ABI ELF header flags from an `emulation` option.
Patch by Kyle Evans.
Requested by: kevans :)
Modified:
projects/clang900-import/contrib/llvm/tools/lld/ELF/Arch/MipsArchTree.cpp
Modified: projects/clang900-import/contrib/llvm/tools/lld/ELF/Arch/MipsArchTree.cpp
==============================================================================
--- projects/clang900-import/contrib/llvm/tools/lld/ELF/Arch/MipsArchTree.cpp Sun Sep 22 16:10:25 2019 (r352599)
+++ projects/clang900-import/contrib/llvm/tools/lld/ELF/Arch/MipsArchTree.cpp Sun Sep 22 17:31:27 2019 (r352600)
@@ -294,12 +294,30 @@ static uint32_t getArchFlags(ArrayRef<FileFlags> files
return ret;
}
+// If we don't have any input files, we'll have to rely on the information we
+// can derive from emulation information, since this at least gets us ABI.
+static uint32_t getFlagsFromEmulation() {
+ uint32_t ret = 0;
+
+ if (config->emulation.empty())
+ return 0;
+
+ if (config->ekind == ELF32BEKind || config->ekind == ELF32LEKind) {
+ if (config->mipsN32Abi)
+ ret |= EF_MIPS_ABI2;
+ else
+ ret |= EF_MIPS_ABI_O32;
+ }
+
+ return ret;
+}
+
template <class ELFT> uint32_t elf::calcMipsEFlags() {
std::vector<FileFlags> v;
for (InputFile *f : objectFiles)
v.push_back({f, cast<ObjFile<ELFT>>(f)->getObj().getHeader()->e_flags});
if (v.empty())
- return 0;
+ return getFlagsFromEmulation();
checkFlags(v);
return getMiscFlags(v) | getPicFlags(v) | getArchFlags(v);
}
More information about the svn-src-projects
mailing list