diff options
| author | Zinovy Nis <zinovy.nis@gmail.com> | 2014-07-11 14:28:45 +0000 |
|---|---|---|
| committer | Zinovy Nis <zinovy.nis@gmail.com> | 2014-07-11 14:28:45 +0000 |
| commit | 3d163874138feb4d1039a14df72eeaa650cd9625 (patch) | |
| tree | d83de78559843aa4366c06cbbbbca4c441315409 /clang/lib | |
| parent | bc4d1a36047bae030871accdaf51c943304ef342 (diff) | |
| download | bcm5719-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.cpp | 12 |
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) { |

