mirror of
https://git.freebsd.org/ports.git
synced 2025-06-22 21:20:31 -04:00
- 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]
54 lines
1.6 KiB
Text
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);
|
|
}
|