ports/devel/llvm90/files/lld/patch-freebsd-r352600
Brooks Davis a751f5cd7c Rollup of fixes since the 9.0.0 release.
- Change the default -march for i386 from i486 to i586.  This avoids
  the need for libatomics and had been the defacto default for some
  time. [0]

- Add -m(no)-spe to clang. (powerpc)

- Deduce MIPS specific ELF header flags from `emulation`. (mips)

- Fix a variety of assertions and compile/link errors including crashes
  with CPUTYPE=haswell. [1]

- Switch back to https for downloads. [2]

The new patches were initially committed to FreeBSD src by dim@.

PR:		240918 [0], 240759 [1], 240870 [2]
Reported by:	jbeich [0,1],  Miyashita Touka <imagin8r@protonmail.com> [2]
2019-10-09 20:36:04 +00:00

54 lines
1.6 KiB
Text

commit 2dfd6210dcc3782d0f298b7bb996cc313d53c3a6
Author: dim <dim@FreeBSD.org>
Date: Sun Sep 22 17:31:27 2019 +0000
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 :)
Notes:
svn path=/projects/clang900-import/; revision=352600
diff --git tools/lld/ELF/Arch/MipsArchTree.cpp tools/lld/ELF/Arch/MipsArchTree.cpp
index f64d03756457..20e07e1114eb 100644
--- tools/lld/ELF/Arch/MipsArchTree.cpp
+++ 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);
}