From: Daniel Sanders Date: Wed, 23 Jul 2014 12:06:13 +0000 (+0000) Subject: [mips] -mno-shared should only be given to the assembler when -fPIC/-fpic/-fPIE/... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=51afa4757b8cb7a71ccbcab47cd5697df4b27d00;p=clang [mips] -mno-shared should only be given to the assembler when -fPIC/-fpic/-fPIE/-fpie is not in effect. This fixes compiler recursion on MIPS32r2. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213741 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 0a123a67bf..deca2658a9 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -7049,8 +7049,22 @@ void gnutools::Assemble::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-mabi"); CmdArgs.push_back(ABIName.data()); - // LLVM doesn't support -mabicalls yet and acts as if it is always given. - CmdArgs.push_back("-mno-shared"); + // -mno-shared should be emitted unless -fpic, -fpie, -fPIC, -fPIE, + // or -mshared (not implemented) is in effect. + bool IsPicOrPie = false; + if (Arg *A = Args.getLastArg(options::OPT_fPIC, options::OPT_fno_PIC, + options::OPT_fpic, options::OPT_fno_pic, + options::OPT_fPIE, options::OPT_fno_PIE, + options::OPT_fpie, options::OPT_fno_pie)) { + if (A->getOption().matches(options::OPT_fPIC) || + A->getOption().matches(options::OPT_fpic) || + A->getOption().matches(options::OPT_fPIE) || + A->getOption().matches(options::OPT_fpie)) + IsPicOrPie = true; + } + if (!IsPicOrPie) + CmdArgs.push_back("-mno-shared"); + // LLVM doesn't support -mplt yet and acts as if it is always given. // However, -mplt has no effect with the N64 ABI. CmdArgs.push_back(ABIName == "64" ? "-KPIC" : "-call_nonpic"); diff --git a/test/Driver/mips-as.c b/test/Driver/mips-as.c index fd046c7ffa..ecbe7d668f 100644 --- a/test/Driver/mips-as.c +++ b/test/Driver/mips-as.c @@ -12,7 +12,7 @@ // RUN: %clang -target mips-linux-gnu -### \ // RUN: -no-integrated-as -fPIC -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS32R2-EB-PIC %s -// MIPS32R2-EB-PIC: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-mno-shared" "-call_nonpic" "-EB" +// MIPS32R2-EB-PIC: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-call_nonpic" "-EB" // MIPS32R2-EB-PIC: "-KPIC" // // RUN: %clang -target mipsel-linux-gnu -### \