forked from OSchip/llvm-project
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 llvm-svn: 288327
This commit is contained in:
parent
2ce2216469
commit
15be03a922
|
@ -9941,7 +9941,7 @@ static const char *getLDMOption(const llvm::Triple &T, const ArgList &Args) {
|
|||
return "elf32_x86_64";
|
||||
return "elf_x86_64";
|
||||
default:
|
||||
llvm_unreachable("Unexpected arch");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10014,8 +10014,13 @@ void gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
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 ||
|
||||
|
|
|
@ -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'
|
Loading…
Reference in New Issue