]> granicus.if.org Git - clang/commitdiff
Handle compat support for EABI/old APCS compatibility on NetBSD/ARM.
authorJoerg Sonnenberger <joerg@bec.de>
Sun, 2 Feb 2014 22:47:37 +0000 (22:47 +0000)
committerJoerg Sonnenberger <joerg@bec.de>
Sun, 2 Feb 2014 22:47:37 +0000 (22:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@200665 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/ToolChains.cpp
lib/Driver/Tools.cpp

index 2a1521f7c67a1526addc15d872b6de2cbf54723e..1b447e41e6b33613b3b4425b569031d4428f99a7 100644 (file)
@@ -2230,8 +2230,27 @@ NetBSD::NetBSD(const Driver &D, const llvm::Triple& Triple, const ArgList &Args)
     // doesn't work.
     // FIXME: It'd be nicer to test if this directory exists, but I'm not sure
     // what all logic is needed to emulate the '=' prefix here.
-    if (Triple.getArch() == llvm::Triple::x86)
+    switch (Triple.getArch()) {
+    case llvm::Triple::x86:
       getFilePaths().push_back("=/usr/lib/i386");
+      break;
+    case llvm::Triple::arm:
+    case llvm::Triple::thumb:
+      switch (Triple.getEnvironment()) {
+      case llvm::Triple::EABI:
+      case llvm::Triple::EABIHF:
+      case llvm::Triple::GNUEABI:
+      case llvm::Triple::GNUEABIHF:
+        getFilePaths().push_back("=/usr/lib/eabi");
+        break;
+      default:
+        getFilePaths().push_back("=/usr/lib/oabi");
+        break;
+      }
+      break;
+    default:
+      break;
+    }
 
     getFilePaths().push_back("=/usr/lib");
   }
index d477a6a413299ae50575df08c51caf9844117574..cc0f7795adb8ffcd630da709879af59655bd858f 100644 (file)
@@ -6117,6 +6117,23 @@ void netbsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
     CmdArgs.push_back("elf_i386");
   }
 
+  // On ARM, the linker can generate either EABI or the older APCS.
+  // Instruct it to use the correct emulation.
+  if (getToolChain().getArch() == llvm::Triple::arm) {
+    CmdArgs.push_back("-m");
+    switch (getToolChain().getTriple().getEnvironment()) {
+    case llvm::Triple::EABI:
+    case llvm::Triple::EABIHF:
+    case llvm::Triple::GNUEABI:
+    case llvm::Triple::GNUEABIHF:
+      CmdArgs.push_back("armelf_nbsd_eabi");
+      break;
+    default:
+      CmdArgs.push_back("armelf_nbsd");
+      break;
+    }
+  }
+
   if (Output.isFilename()) {
     CmdArgs.push_back("-o");
     CmdArgs.push_back(Output.getFilename());