Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Sep 2019 17:31:27 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r352600 - projects/clang900-import/contrib/llvm/tools/lld/ELF/Arch
Message-ID:  <201909221731.x8MHVRlC083630@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909221731.x8MHVRlC083630>