diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2019-09-22 17:31:27 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2019-09-22 17:31:27 +0000 |
| commit | 6d3bb28257f65040cdb561448eb51ddf43b4c90c (patch) | |
| tree | 26562c4b9442916c0ad15a000836836ced9b22f0 /contrib | |
| parent | f05b9584faacf79684e60b09155afa016b5ec4cf (diff) | |
Notes
Diffstat (limited to 'contrib')
| -rw-r--r-- | contrib/llvm/tools/lld/ELF/Arch/MipsArchTree.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/contrib/llvm/tools/lld/ELF/Arch/MipsArchTree.cpp b/contrib/llvm/tools/lld/ELF/Arch/MipsArchTree.cpp index f64d03756457..20e07e1114eb 100644 --- a/contrib/llvm/tools/lld/ELF/Arch/MipsArchTree.cpp +++ b/contrib/llvm/tools/lld/ELF/Arch/MipsArchTree.cpp @@ -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); } |
