[x32] Handle -m64/-m32 switches by Driver in x32 mode
Summary: Adding remaining 2 cases handling: * from x32 to 32 via -m32 * from x32 to 64 via -m64 Test Plan: linux-ld test updated Reviewers: chandlerc, atanasyan Subscribers: cfe-commits, zinovy.nis Differential Revision: http://reviews.llvm.org/D4930 llvm-svn: 215899
This commit is contained in:
parent
b248256089
commit
4a29468dcd
|
@ -1914,15 +1914,19 @@ static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
|
|||
options::OPT_m32, options::OPT_m16)) {
|
||||
llvm::Triple::ArchType AT = llvm::Triple::UnknownArch;
|
||||
|
||||
if (A->getOption().matches(options::OPT_m64))
|
||||
if (A->getOption().matches(options::OPT_m64)) {
|
||||
AT = Target.get64BitArchVariant().getArch();
|
||||
else if (A->getOption().matches(options::OPT_mx32) &&
|
||||
if (Target.getEnvironment() == llvm::Triple::GNUX32)
|
||||
Target.setEnvironment(llvm::Triple::GNU);
|
||||
} else if (A->getOption().matches(options::OPT_mx32) &&
|
||||
Target.get64BitArchVariant().getArch() == llvm::Triple::x86_64) {
|
||||
AT = llvm::Triple::x86_64;
|
||||
Target.setEnvironment(llvm::Triple::GNUX32);
|
||||
} else if (A->getOption().matches(options::OPT_m32))
|
||||
} else if (A->getOption().matches(options::OPT_m32)) {
|
||||
AT = Target.get32BitArchVariant().getArch();
|
||||
else if (A->getOption().matches(options::OPT_m16) &&
|
||||
if (Target.getEnvironment() == llvm::Triple::GNUX32)
|
||||
Target.setEnvironment(llvm::Triple::GNU);
|
||||
} else if (A->getOption().matches(options::OPT_m16) &&
|
||||
Target.get32BitArchVariant().getArch() == llvm::Triple::x86) {
|
||||
AT = llvm::Triple::x86;
|
||||
Target.setEnvironment(llvm::Triple::CODE16);
|
||||
|
|
|
@ -250,6 +250,39 @@
|
|||
// CHECK-32-TO-X32: "-L[[SYSROOT]]/usr/lib"
|
||||
//
|
||||
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
|
||||
// RUN: --target=x86_64-unknown-linux-gnux32 -m64 \
|
||||
// RUN: --sysroot=%S/Inputs/multilib_64bit_linux_tree \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-X32-TO-64 %s
|
||||
// CHECK-X32-TO-64: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
|
||||
// CHECK-X32-TO-64: "{{.*}}/usr/lib/gcc/x86_64-unknown-linux/4.6.0{{/|\\\\}}crtbegin.o"
|
||||
// CHECK-X32-TO-64: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0"
|
||||
// CHECK-X32-TO-64: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../x86_64-unknown-linux/lib/../lib64"
|
||||
// CHECK-X32-TO-64: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../lib64"
|
||||
// CHECK-X32-TO-64: "-L[[SYSROOT]]/lib/../lib64"
|
||||
// CHECK-X32-TO-64: "-L[[SYSROOT]]/usr/lib/../lib64"
|
||||
// CHECK-X32-TO-64: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../x86_64-unknown-linux/lib"
|
||||
// CHECK-X32-TO-64: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../.."
|
||||
// CHECK-X32-TO-64: "-L[[SYSROOT]]/lib"
|
||||
// CHECK-X32-TO-64: "-L[[SYSROOT]]/usr/lib"
|
||||
//
|
||||
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
|
||||
// RUN: --target=x86_64-unknown-linux-gnux32 -m32 \
|
||||
// RUN: --sysroot=%S/Inputs/multilib_64bit_linux_tree \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-X32-TO-32 %s
|
||||
// CHECK-X32-TO-32: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
|
||||
// CHECK-X32-TO-32: "{{.*}}/usr/lib/gcc/x86_64-unknown-linux/4.6.0/32{{/|\\\\}}crtbegin.o"
|
||||
// CHECK-X32-TO-32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0/32"
|
||||
// CHECK-X32-TO-32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../x86_64-unknown-linux/lib/../lib32"
|
||||
// CHECK-X32-TO-32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../lib32"
|
||||
// CHECK-X32-TO-32: "-L[[SYSROOT]]/lib/../lib32"
|
||||
// CHECK-X32-TO-32: "-L[[SYSROOT]]/usr/lib/../lib32"
|
||||
// CHECK-X32-TO-32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0"
|
||||
// CHECK-X32-TO-32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../../../x86_64-unknown-linux/lib"
|
||||
// CHECK-X32-TO-32: "-L[[SYSROOT]]/usr/lib/gcc/x86_64-unknown-linux/4.6.0/../../.."
|
||||
// CHECK-X32-TO-32: "-L[[SYSROOT]]/lib"
|
||||
// CHECK-X32-TO-32: "-L[[SYSROOT]]/usr/lib"
|
||||
//
|
||||
// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
|
||||
// RUN: --target=x86_64-unknown-linux -m32 \
|
||||
// RUN: --gcc-toolchain=%S/Inputs/multilib_64bit_linux_tree/usr \
|
||||
// RUN: --sysroot=%S/Inputs/multilib_32bit_linux_tree \
|
||||
|
|
Loading…
Reference in New Issue