summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorZinovy Nis <zinovy.nis@gmail.com>2014-07-11 14:28:45 +0000
committerZinovy Nis <zinovy.nis@gmail.com>2014-07-11 14:28:45 +0000
commit3d163874138feb4d1039a14df72eeaa650cd9625 (patch)
treed83de78559843aa4366c06cbbbbca4c441315409 /clang/lib
parentbc4d1a36047bae030871accdaf51c943304ef342 (diff)
downloadbcm5719-llvm-3d163874138feb4d1039a14df72eeaa650cd9625.tar.gz
bcm5719-llvm-3d163874138feb4d1039a14df72eeaa650cd9625.zip
[PATCH] [x32] Introduce -mx32 flag enforcing x32 mode for other triplets. By Pavel Chupin (@pavel.v.chupin).
-mx32 flag setup target environment to GNUX32 and can be used for other 32/64-bit triplets (i386-unknown-linux, x86_64-unknown-linux) to turn on x32 mode. Compatible with GCC -mx32 flag. Differential Revision: http://reviews.llvm.org/D4470 llvm-svn: 212817
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Driver/Driver.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 284403306f4..ef26bfacdd6 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -1913,14 +1913,18 @@ static llvm::Triple computeTargetTriple(StringRef DefaultTargetTriple,
Target.getOS() == llvm::Triple::Minix)
return Target;
- // Handle pseudo-target flags '-m64', '-m32' and '-m16'.
- if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_m32,
- options::OPT_m16)) {
+ // Handle pseudo-target flags '-m64', '-mx32', '-m32' and '-m16'.
+ if (Arg *A = Args.getLastArg(options::OPT_m64, options::OPT_mx32,
+ options::OPT_m32, options::OPT_m16)) {
llvm::Triple::ArchType AT = llvm::Triple::UnknownArch;
if (A->getOption().matches(options::OPT_m64))
AT = Target.get64BitArchVariant().getArch();
- else if (A->getOption().matches(options::OPT_m32))
+ 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))
AT = Target.get32BitArchVariant().getArch();
else if (A->getOption().matches(options::OPT_m16) &&
Target.get32BitArchVariant().getArch() == llvm::Triple::x86) {
OpenPOWER on IntegriCloud