r288327 - Fix crash with unsupported architectures in Linux/Gnu target triples.

Florian Hahn via cfe-commits cfe-commits at lists.llvm.org
Thu Dec 1 03:03:00 PST 2016


Author: fhahn
Date: Thu Dec  1 05:02:59 2016
New Revision: 288327

URL: http://llvm.org/viewvc/llvm-project?rev=288327&view=rev
Log:
Fix crash with unsupported architectures in Linux/Gnu target triples.

Summary: This patch adds a check and an error message to gnutools::Linker::ConstructJob in case the architecture is not supported. For most other operating systems, the error message is created in lib/Basic/Targets.cpp:AllocateTarget, but when construction the linker arguments for the gnutools linker a supported architecture is required.

Reviewers: rafael, joerg, echristo

Subscribers: mehdi_amini, joerg, dschuff, cfe-commits

Differential Revision: https://reviews.llvm.org/D27066

Added:
    cfe/trunk/test/Driver/unsupported-target-arch.c
Modified:
    cfe/trunk/lib/Driver/Tools.cpp

Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=288327&r1=288326&r2=288327&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Thu Dec  1 05:02:59 2016
@@ -9941,7 +9941,7 @@ static const char *getLDMOption(const ll
       return "elf32_x86_64";
     return "elf_x86_64";
   default:
-    llvm_unreachable("Unexpected arch");
+    return nullptr;
   }
 }
 
@@ -10014,8 +10014,13 @@ void gnutools::Linker::ConstructJob(Comp
     CmdArgs.push_back("--eh-frame-hdr");
   }
 
-  CmdArgs.push_back("-m");
-  CmdArgs.push_back(getLDMOption(ToolChain.getTriple(), Args));
+  if (const char *LDMOption = getLDMOption(ToolChain.getTriple(), Args)) {
+    CmdArgs.push_back("-m");
+    CmdArgs.push_back(LDMOption);
+  } else {
+    D.Diag(diag::err_target_unknown_triple) << Triple.str();
+    return;
+  }
 
   if (Args.hasArg(options::OPT_static)) {
     if (Arch == llvm::Triple::arm || Arch == llvm::Triple::armeb ||

Added: cfe/trunk/test/Driver/unsupported-target-arch.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/unsupported-target-arch.c?rev=288327&view=auto
==============================================================================
--- cfe/trunk/test/Driver/unsupported-target-arch.c (added)
+++ cfe/trunk/test/Driver/unsupported-target-arch.c Thu Dec  1 05:02:59 2016
@@ -0,0 +1,25 @@
+// Tests that clang does not crash with invalid architectures in target triples.
+//
+// RUN: not %clang --target=noarch-unknown-linux -o %t.o %s 2> %t.err
+// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-LINUX %s
+// CHECK-NOARCH-LINUX: error: unknown target triple 'noarch-unknown-linux', please use -triple or -arch
+//
+// RUN: not %clang --target=noarch-unknown-darwin -o %t.o %s 2> %t.err
+// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-DARWIN %s
+// CHECK-NOARCH-DARWIN: error: unknown target triple 'unknown-unknown-macosx{{.+}}', please use -triple or -arch
+//
+// RUN: not %clang --target=noarch-unknown-windows -o %t.o %s 2> %t.err
+// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-WINDOWS %s
+// CHECK-NOARCH-WINDOWS: error: unknown target triple 'noarch-unknown-windows-{{.+}}', please use -triple or -arch
+//
+// RUN: not %clang --target=noarch-unknown-freebsd -o %t.o %s 2> %t.err
+// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-FREEBSD %s
+// CHECK-NOARCH-FREEBSD: error: unknown target triple 'noarch-unknown-freebsd', please use -triple or -arch
+//
+// RUN: not %clang --target=noarch-unknown-netbsd -o %t.o %s 2> %t.err
+// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-NETBSD %s
+// CHECK-NOARCH-NETBSD: error: unknown target triple 'noarch-unknown-netbsd', please use -triple or -arch
+//
+// RUN: not %clang --target=noarch-unknown-nacl -o %t.o %s 2> %t.err
+// RUN: FileCheck --input-file=%t.err --check-prefix=CHECK-NOARCH-NACL %s
+// CHECK-NOARCH-NACL:  error: the target architecture 'noarch' is not supported by the target 'Native Client'




More information about the cfe-commits mailing list