broken testing caused by r248546

Romanova, Katya via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 25 11:32:25 PDT 2015


Hi Eric,

One new test was failing on the different bots (I have deleted this test last night before the investigation is complete). A whole bunch of tests failed on PS4 bot, because PS4 compiler driver expects SDK directory (at least a dummy one) to be present. If it’s not present, the warnings are reported. If some of these tests have –Werror, these tests failed. PS4 buildbot didn’t have SDK directory set up…

Because the PS4 bot was set up last week only, so we didn’t catch this issue ahead of time. Sorry about that.

Since the discussion about the proper solution was taking a while, Greg reverted the fix this morning.

Katya.



From: Eric Christopher [mailto:echristo at gmail.com]
Sent: Friday, September 25, 2015 10:51 AM
To: Greg Bedwell; Romanova, Katya
Cc: cfe-commits at lists.llvm.org
Subject: Re: broken testing caused by r248546

I seem to have missed what the problem was on the various bots, what happened?

-eric

On Fri, Sep 25, 2015 at 9:24 AM Greg Bedwell via cfe-commits <cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>> wrote:
Hi Katya,

As we discussed internally, before you're able to get into the office to do it yourself I've temporarily reverted r248546 to get the PS4 bot green again (r248578) while we discuss the best way to resolve the failure properly.  Hopefully we can recommit soon!

-Greg

On 25 September 2015 at 10:20, Romanova, Katya via cfe-commits <cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>> wrote:
Hi Yaron,

The single test that was causing the problem for many Windows bots was removed in r248567. Hopefully, after that there won’t be any failures on the bots, other than ours (PS4). We will fix the problem with PS4 buildbot and if during this timeframe a regression is introduced - we will take care of it.

If some other test files will cause the problems for non-PS4 bots, I think it will be better to revert r248567.
Thank you for your help!

Katya.

From: Yaron Keren [mailto:yaron.keren at gmail.com<mailto:yaron.keren at gmail.com>]
Sent: Friday, September 25, 2015 1:58 AM

To: Romanova, Katya
Cc: cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>
Subject: Re: broken testing caused by r248546

Hi Katya,

Either option is OK, as long as the bots are green again.Once they are OK you can take your time to figure out how to best solve the issue.

The problem with failing bots is that they stop reporting new failures so if some commit is breaking more tests on failing bot the committer will not even get a notification.

Yaron


2015-09-25 11:24 GMT+03:00 Romanova, Katya <Katya_Romanova at playstation.sony.com<mailto:Katya_Romanova at playstation.sony.com>>:
Thank you, Yaron!


We might have to change or remove one newly added test (namely, ps4-linker-win.c) while we investigating. It looks like that’s the only test that creates problems for non-PS4 buildbots.

Hopefully, nobody outside SCE is concerned about PS4 buildbot (llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast) test failures. We are trying to come up with an acceptable solution internally. Hopefully, it will involve PS4 builtbot infrastructure changes only.



Do you think I should revert r248546 completely or just remove the new ‘ps4-linker-win.c’ test that fails on non-PS4 Windows bots.



Hopefully, we could resolve PS4 buildbot issues tomorrow.



Katya.






From: Yaron Keren [mailto:yaron.keren at gmail.com<mailto:yaron.keren at gmail.com>]
Sent: Friday, September 25, 2015 12:09 AM
To: Romanova, Katya
Cc: cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>
Subject: Re: broken testing caused by r248546

Here too:

http://bb.pgr.jp/builders/ninja-clang-i686-msc18-R/builds/3285

http://bb.pgr.jp/builders/ninja-clang-i686-msc18-R/builds/3285/steps/test-clang/logs/Clang%20%3A%3A%20Driver__ps4-linker-win.c


2015-09-25 2:10 GMT+03:00 Romanova, Katya via cfe-commits <cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>>:

Hi,



My today’s commit  r248546 caused some problem for PS4 bot:

http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/builds/342

and for x64-ninja-win7 bot

http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/5355



It was a single problem that caused all the failures.  The tests (or PS4 bot setup) will be changed to adjust accordingly. The compiler will not be changed.



If all other platforms, except PS4, are not affected, please do not revert the change! We are looking into this problem.



I saw that sanitizer-windows bot failed too. However, it looks like it’s a svn timeout problem and it’s not related to our patch.

http://lab.llvm.org:8011/builders/sanitizer-windows/builds/10285



Katya.













-----Original Message-----

From: cfe-commits [mailto:cfe-commits-bounces at lists.llvm.org] On Behalf Of Ekaterina Romanova via cfe-commits

Sent: Thursday, September 24, 2015 15:07

To: cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>

Subject: r248546 - This patch adds missing pieces to clang, including the PS4 toolchain



Author: kromanova

Date: Thu Sep 24 17:06:52 2015

New Revision: 248546



URL: http://llvm.org/viewvc/llvm-project?rev=248546&view=rev

Log:

This patch adds missing pieces to clang, including the PS4 toolchain definition, added warnings, PS4 defaults, and Driver changes needed for our compiler.



A patch by Filipe Cabecinhas, Pierre Gousseau and Katya Romanova!



Differential Revision: http://reviews.llvm.org/D11279





Added:

    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/

    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/

    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include/

    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include/.keep

    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/

    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/.keep

    cfe/trunk/test/Driver/ps4-header-search.c

    cfe/trunk/test/Driver/ps4-linker-non-win.c

    cfe/trunk/test/Driver/ps4-linker-win.c

    cfe/trunk/test/Driver/ps4-pic.c

    cfe/trunk/test/Driver/ps4-sdk-root.c

Modified:

    cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td

    cfe/trunk/include/clang/Basic/DiagnosticGroups.td

    cfe/trunk/lib/Driver/Driver.cpp

    cfe/trunk/lib/Driver/ToolChains.cpp

    cfe/trunk/lib/Driver/ToolChains.h

    cfe/trunk/lib/Driver/Tools.cpp

    cfe/trunk/lib/Driver/Tools.h

    cfe/trunk/lib/Frontend/InitHeaderSearch.cpp

    cfe/trunk/test/Driver/debug-options.c

    cfe/trunk/test/Driver/rtti-options.cpp

    cfe/trunk/test/Driver/stack-protector.c



Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=248546&r1=248545&r2=248546&view=diff

==============================================================================

--- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original)

+++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Thu Sep 24

+++ 17:06:52 2015

@@ -192,4 +192,18 @@ def warn_target_unsupported_nan2008 : Wa  def warn_target_unsupported_nanlegacy : Warning<

   "ignoring '-mnan=legacy' option because the '%0' architecture does not support it">,

   InGroup<UnsupportedNan>;

+

+def warn_drv_unable_to_find_directory_expected : Warning<

+  "unable to find %0 directory, expected to be in '%1'">,

+  InGroup<InvalidOrNonExistentDirectory>;

+

+def warn_drv_ps4_force_pic : Warning<

+  "option '%0' was ignored by the PS4 toolchain, using '-fPIC'">,

+  InGroup<OptionIgnored>;

+

+def warn_drv_ps4_sdk_dir : Warning<

+  "environment variable SCE_PS4_SDK_DIR is set, but points to invalid

+or nonexistent directory '%0'">,

+  InGroup<InvalidOrNonExistentDirectory>;

+

+def err_drv_unsupported_linker : Error<"unsupported value '%0' for

+-linker option">;

}



Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=248546&r1=248545&r2=248546&view=diff

==============================================================================

--- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)

+++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Thu Sep 24

+++ 17:06:52 2015

@@ -820,3 +820,7 @@ def CudaCompat : DiagGroup<"cuda-compat"

 // A warning group for things that will change semantics in the future.

def FutureCompat : DiagGroup<"future-compat">;

+

+def InvalidOrNonExistentDirectory :

+DiagGroup<"invalid-or-nonexistent-directory">;

+

+def OptionIgnored : DiagGroup<"option-ignored">;



Modified: cfe/trunk/lib/Driver/Driver.cpp

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=248546&r1=248545&r2=248546&view=diff

==============================================================================

--- cfe/trunk/lib/Driver/Driver.cpp (original)

+++ cfe/trunk/lib/Driver/Driver.cpp Thu Sep 24 17:06:52 2015

@@ -2254,6 +2254,9 @@ const ToolChain &Driver::getToolChain(co

     case llvm::Triple::CUDA:

       TC = new toolchains::CudaToolChain(*this, Target, Args);

       break;

+    case llvm::Triple::PS4:

+      TC = new toolchains::PS4CPU(*this, Target, Args);

+      break;

     default:

       // Of these targets, Hexagon is the only one that might have

       // an OS of Linux, in which case it got handled above already.



Modified: cfe/trunk/lib/Driver/ToolChains.cpp

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=248546&r1=248545&r2=248546&view=diff

==============================================================================

--- cfe/trunk/lib/Driver/ToolChains.cpp (original)

+++ cfe/trunk/lib/Driver/ToolChains.cpp Thu Sep 24 17:06:52 2015

@@ -4065,3 +4065,69 @@ void WebAssembly::addClangTargetOptions(

                          options::OPT_fno_use_init_array, true))

     CC1Args.push_back("-fuse-init-array");

}

+

+PS4CPU::PS4CPU(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)

+    : Generic_ELF(D, Triple, Args) {

+  if (Args.hasArg(options::OPT_static))

+    D.Diag(diag::err_drv_unsupported_opt_for_target) << "-static" <<

+"PS4";

+

+  // Determine where to find the PS4 libraries. We use SCE_PS4_SDK_DIR

+ // if it exists; otherwise use the driver's installation path, which

+ // should be <SDK_DIR>/host_tools/bin.

+  const char *EnvValue = getenv("SCE_PS4_SDK_DIR");  if (EnvValue &&

+ !llvm::sys::fs::exists(EnvValue))

+    getDriver().Diag(clang::diag::warn_drv_ps4_sdk_dir) << EnvValue;

+

+  std::string PS4SDKDir = (EnvValue ? EnvValue : getDriver().Dir +

+ "/../..");

+

+  // Report a warning if we can't find the include or lib directories

+ from  // the SDK.

+  // If -isysroot was passed, use that as the SDK base path.

+  std::string PrefixDir;

+  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {

+    PrefixDir = A->getValue();

+    if (!llvm::sys::fs::exists(PrefixDir))

+      getDriver().Diag(clang::diag::warn_missing_sysroot) << PrefixDir;

+ } else

+    PrefixDir = PS4SDKDir;

+

+  std::string PS4SDKIncludeDir = PrefixDir + "/target/include";  if

+ (!Args.hasArg(options::OPT_nostdinc) &&

+      !Args.hasArg(options::OPT_nostdlibinc) &&

+      !Args.hasArg(options::OPT_isysroot) &&

+      !Args.hasArg(options::OPT__sysroot_EQ) &&

+      !llvm::sys::fs::exists(PS4SDKIncludeDir)) {

+    getDriver().Diag(clang::diag::warn_drv_unable_to_find_directory_expected)

+        << "PS4 system headers" << PS4SDKIncludeDir;  }

+

+  std::string PS4SDKLibDir = PS4SDKDir + "/target/lib";

+  if (!Args.hasArg(options::OPT_nostdlib) &&

+      !Args.hasArg(options::OPT_nodefaultlibs) &&

+      !Args.hasArg(options::OPT__sysroot_EQ) && !Args.hasArg(options::OPT_E) &&

+      !Args.hasArg(options::OPT_c) && !Args.hasArg(options::OPT_S) &&

+      !Args.hasArg(options::OPT_emit_ast) &&

+      !llvm::sys::fs::exists(PS4SDKLibDir)) {

+    getDriver().Diag(clang::diag::warn_drv_unable_to_find_directory_expected)

+        << "PS4 system libraries" << PS4SDKLibDir;

+    return;

+  }

+  getFilePaths().push_back(PS4SDKLibDir);

+}

+

+Tool *PS4CPU::buildAssembler() const {

+  return new tools::PS4cpu::Assemble(*this); }

+

+Tool *PS4CPU::buildLinker() const { return new

+tools::PS4cpu::Link(*this); }

+

+bool PS4CPU::isPICDefault() const { return true; }

+

+bool PS4CPU::HasNativeLLVMSupport() const { return true; }

+

+SanitizerMask PS4CPU::getSupportedSanitizers() const {

+  SanitizerMask Res = ToolChain::getSupportedSanitizers();

+  Res |= SanitizerKind::Address;

+  Res |= SanitizerKind::Vptr;

+  return Res;

+}



Modified: cfe/trunk/lib/Driver/ToolChains.h

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=248546&r1=248545&r2=248546&view=diff

==============================================================================

--- cfe/trunk/lib/Driver/ToolChains.h (original)

+++ cfe/trunk/lib/Driver/ToolChains.h Thu Sep 24 17:06:52 2015

@@ -1002,6 +1002,27 @@ private:

                              llvm::opt::ArgStringList &CC1Args) const override;  };

+class LLVM_LIBRARY_VISIBILITY PS4CPU : public Generic_ELF {

+public:

+  PS4CPU(const Driver &D, const llvm::Triple &Triple,

+         const llvm::opt::ArgList &Args);

+

+  bool IsMathErrnoDefault() const override { return false; }  bool

+ IsObjCNonFragileABIDefault() const override { return true; }  bool

+ HasNativeLLVMSupport() const override;  bool isPICDefault() const

+ override;

+

+  unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override {

+    return 2; // SSPStrong

+  }

+

+  SanitizerMask getSupportedSanitizers() const override;

+

+protected:

+  Tool *buildAssembler() const override;

+  Tool *buildLinker() const override;

+};

+

} // end namespace toolchains

} // end namespace driver

} // end namespace clang



Modified: cfe/trunk/lib/Driver/Tools.cpp

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=248546&r1=248545&r2=248546&view=diff

==============================================================================

--- cfe/trunk/lib/Driver/Tools.cpp (original)

+++ cfe/trunk/lib/Driver/Tools.cpp Thu Sep 24 17:06:52 2015

@@ -3102,15 +3102,23 @@ ParsePICArgs(const ToolChain &ToolChain,

             O.matches(options::OPT_fPIE) || O.matches(options::OPT_fPIC);

       } else {

         PIE = PIC = false;

+        if (Triple.isPS4CPU()) {

+          Arg *ModelArg = Args.getLastArg(options::OPT_mcmodel_EQ);

+          StringRef Model = ModelArg ? ModelArg->getValue() : "";

+          if (Model != "kernel") {

+            PIC = true;

+            ToolChain.getDriver().Diag(diag::warn_drv_ps4_force_pic)

+                << LastPICArg->getSpelling();

+          }

+        }

       }

     }

   }

-  // Introduce a Darwin-specific hack. If the default is PIC, but the

-  // PIC level would've been set to level 1, force it back to level 2

-  // PIC instead. This matches the behavior of Darwin GCC (based on

-  // chandlerc's informal testing in 2012).

-  if (PIC && ToolChain.getTriple().isOSDarwin())

+  // Introduce a Darwin and PS4-specific hack. If the default is PIC,

+ but the  // PIC level would've been set to level 1, force it back to

+ level 2 PIC  // instead.

+  if (PIC && (ToolChain.getTriple().isOSDarwin() || Triple.isPS4CPU()))

     IsPICLevelTwo |= ToolChain.isPICDefault();

   // This kernel flags are a trump-card: they will disable PIC/PIE @@ -3182,6 +3190,7 @@ void Clang::ConstructJob(Compilation &C,

   bool IsWindowsCygnus =

       getToolChain().getTriple().isWindowsCygwinEnvironment();

   bool IsWindowsMSVC = getToolChain().getTriple().isWindowsMSVCEnvironment();

+  bool IsPS4CPU = getToolChain().getTriple().isPS4CPU();

   // Check number of inputs for sanity. We need at least one input.

   assert(Inputs.size() >= 1 && "Must have at least one input."); @@ -3823,8 +3832,10 @@ void Clang::ConstructJob(Compilation &C,

   // We ignore flags -gstrict-dwarf and -grecord-gcc-switches for now.

   Args.ClaimAllArgs(options::OPT_g_flags_Group);

+

+  // PS4 defaults to no column info

   if (Args.hasFlag(options::OPT_gcolumn_info, options::OPT_gno_column_info,

-                   /*Default*/ true))

+                   /*Default=*/ !IsPS4CPU))

     CmdArgs.push_back("-dwarf-column-info");

   // FIXME: Move backend command line options to the module.

@@ -3851,7 +3862,8 @@ void Clang::ConstructJob(Compilation &C,

   // -gdwarf-aranges turns on the emission of the aranges section in the

   // backend.

-  if (Args.hasArg(options::OPT_gdwarf_aranges)) {

+  // Always enabled on the PS4.

+  if (Args.hasArg(options::OPT_gdwarf_aranges) || IsPS4CPU) {

     CmdArgs.push_back("-backend-option");

     CmdArgs.push_back("-generate-arange-section");

   }

@@ -9846,3 +9858,320 @@ void tools::Myriad::Linker::ConstructJob

   C.addCommand(llvm::make_unique<Command>(JA, *this, Args.MakeArgString(Exec),

                                           CmdArgs, Inputs));  }

+

+void PS4cpu::Assemble::ConstructJob(Compilation &C, const JobAction &JA,

+                                    const InputInfo &Output,

+                                    const InputInfoList &Inputs,

+                                    const ArgList &Args,

+                                    const char *LinkingOutput) const {

+  claimNoWarnArgs(Args);

+  ArgStringList CmdArgs;

+

+  Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA,

+ options::OPT_Xassembler);

+

+  CmdArgs.push_back("-o");

+  CmdArgs.push_back(Output.getFilename());

+

+  const char *Exec =

+      Args.MakeArgString(getToolChain().GetProgramPath("ps4-as"));

+  C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs,

+Inputs)); }

+

+static void AddPS4ProfileRT(const ToolChain &TC, const ArgList &Args,

+                            ArgStringList &CmdArgs) {

+  if (!(Args.hasFlag(options::OPT_fprofile_arcs, options::OPT_fno_profile_arcs,

+                     false) ||

+        Args.hasArg(options::OPT_fprofile_generate) ||

+        Args.hasArg(options::OPT_fprofile_instr_generate) ||

+        Args.hasArg(options::OPT_fcreate_profile) ||

+        Args.hasArg(options::OPT_coverage)))

+    return;

+

+  assert(TC.getTriple().isPS4CPU() &&

+         "Profiling libraries are only implemented for the PS4 CPU");

+  CmdArgs.push_back("-lclang_rt.profile-x86_64");

+}

+

+static void AddPS4SanitizerArgs(const ToolChain &TC, ArgStringList

+&CmdArgs) {

+  const SanitizerArgs &SanArgs = TC.getSanitizerArgs();

+  if (SanArgs.needsUbsanRt()) {

+    CmdArgs.push_back("-lSceDbgUBSanitizer_stub_weak");

+  }

+  if (SanArgs.needsAsanRt()) {

+    CmdArgs.push_back("-lSceDbgAddressSanitizer_stub_weak");

+  }

+}

+

+static void ConstructPS4LinkJob(const Tool &T, Compilation &C,

+                                const JobAction &JA, const InputInfo &Output,

+                                const InputInfoList &Inputs,

+                                const ArgList &Args,

+                                const char *LinkingOutput) {

+  const toolchains::FreeBSD &ToolChain =

+      static_cast<const toolchains::FreeBSD &>(T.getToolChain());

+  const Driver &D = ToolChain.getDriver();

+  ArgStringList CmdArgs;

+

+  // Silence warning for "clang -g foo.o -o foo"

+  Args.ClaimAllArgs(options::OPT_g_Group);

+  // and "clang -emit-llvm foo.o -o foo"

+  Args.ClaimAllArgs(options::OPT_emit_llvm);

+  // and for "clang -w foo.o -o foo". Other warning options are already

+ // handled somewhere else.

+  Args.ClaimAllArgs(options::OPT_w);

+

+  if (!D.SysRoot.empty())

+    CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));

+

+  if (Args.hasArg(options::OPT_pie))

+    CmdArgs.push_back("-pie");

+

+  if (Args.hasArg(options::OPT_rdynamic))

+    CmdArgs.push_back("-export-dynamic");

+  if (Args.hasArg(options::OPT_shared))

+    CmdArgs.push_back("--oformat=so");

+

+  if (Output.isFilename()) {

+    CmdArgs.push_back("-o");

+    CmdArgs.push_back(Output.getFilename());

+  } else {

+    assert(Output.isNothing() && "Invalid output.");  }

+

+  Args.AddAllArgs(CmdArgs, options::OPT_L);  Args.AddAllArgs(CmdArgs,

+ options::OPT_T_Group);  Args.AddAllArgs(CmdArgs, options::OPT_e);

+ Args.AddAllArgs(CmdArgs, options::OPT_s);  Args.AddAllArgs(CmdArgs,

+ options::OPT_t);  Args.AddAllArgs(CmdArgs, options::OPT_r);

+

+  if (Args.hasArg(options::OPT_Z_Xlinker__no_demangle))

+    CmdArgs.push_back("--no-demangle");

+

+  AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs);

+

+  if (Args.hasArg(options::OPT_pthread)) {

+    CmdArgs.push_back("-lpthread");

+  }

+

+  AddPS4ProfileRT(ToolChain, Args, CmdArgs);

+ AddPS4SanitizerArgs(ToolChain, CmdArgs);

+

+  const char *Exec =

+ Args.MakeArgString(ToolChain.GetProgramPath("ps4-ld"));

+

+  C.addCommand(llvm::make_unique<Command>(JA, T, Exec, CmdArgs,

+Inputs)); }

+

+static void ConstructGoldLinkJob(const Tool &T, Compilation &C,

+                                 const JobAction &JA, const InputInfo &Output,

+                                 const InputInfoList &Inputs,

+                                 const ArgList &Args,

+                                 const char *LinkingOutput) {

+  const toolchains::FreeBSD &ToolChain =

+      static_cast<const toolchains::FreeBSD &>(T.getToolChain());

+  const Driver &D = ToolChain.getDriver();

+  ArgStringList CmdArgs;

+

+  // Silence warning for "clang -g foo.o -o foo"

+  Args.ClaimAllArgs(options::OPT_g_Group);

+  // and "clang -emit-llvm foo.o -o foo"

+  Args.ClaimAllArgs(options::OPT_emit_llvm);

+  // and for "clang -w foo.o -o foo". Other warning options are already

+ // handled somewhere else.

+  Args.ClaimAllArgs(options::OPT_w);

+

+  if (!D.SysRoot.empty())

+    CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));

+

+  if (Args.hasArg(options::OPT_pie))

+    CmdArgs.push_back("-pie");

+

+  if (Args.hasArg(options::OPT_static)) {

+    CmdArgs.push_back("-Bstatic");

+  } else {

+    if (Args.hasArg(options::OPT_rdynamic))

+      CmdArgs.push_back("-export-dynamic");

+    CmdArgs.push_back("--eh-frame-hdr");

+    if (Args.hasArg(options::OPT_shared)) {

+      CmdArgs.push_back("-Bshareable");

+    } else {

+      CmdArgs.push_back("-dynamic-linker");

+      CmdArgs.push_back("/libexec/ld-elf.so.1");

+    }

+    CmdArgs.push_back("--enable-new-dtags");

+  }

+

+  if (Output.isFilename()) {

+    CmdArgs.push_back("-o");

+    CmdArgs.push_back(Output.getFilename());

+  } else {

+    assert(Output.isNothing() && "Invalid output.");  }

+

+  if (!Args.hasArg(options::OPT_nostdlib) &&

+      !Args.hasArg(options::OPT_nostartfiles)) {

+    const char *crt1 = NULL;

+    if (!Args.hasArg(options::OPT_shared)) {

+      if (Args.hasArg(options::OPT_pg))

+        crt1 = "gcrt1.o";

+      else if (Args.hasArg(options::OPT_pie))

+        crt1 = "Scrt1.o";

+      else

+        crt1 = "crt1.o";

+    }

+    if (crt1)

+

+ CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crt1)));

+

+

+ CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o")))

+ ;

+

+    const char *crtbegin = NULL;

+    if (Args.hasArg(options::OPT_static))

+      crtbegin = "crtbeginT.o";

+    else if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))

+      crtbegin = "crtbeginS.o";

+    else

+      crtbegin = "crtbegin.o";

+

+

+ CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin)))

+ ;

+  }

+

+  Args.AddAllArgs(CmdArgs, options::OPT_L);

+

+  const ToolChain::path_list Paths = ToolChain.getFilePaths();  for

+ (ToolChain::path_list::const_iterator i = Paths.begin(), e = Paths.end();

+       i != e; ++i)

+    CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + *i));

+

+  Args.AddAllArgs(CmdArgs, options::OPT_T_Group);

+ Args.AddAllArgs(CmdArgs, options::OPT_e);  Args.AddAllArgs(CmdArgs,

+ options::OPT_s);  Args.AddAllArgs(CmdArgs, options::OPT_t);

+ Args.AddAllArgs(CmdArgs, options::OPT_r);

+

+  if (Args.hasArg(options::OPT_Z_Xlinker__no_demangle))

+    CmdArgs.push_back("--no-demangle");

+

+  AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs);

+

+  if (!Args.hasArg(options::OPT_nostdlib) &&

+      !Args.hasArg(options::OPT_nodefaultlibs)) {

+    // For PS4, we always want to pass libm, libstdc++ and libkernel

+    // libraries for both C and C++ compilations.

+    CmdArgs.push_back("-lkernel");

+    if (D.CCCIsCXX()) {

+      ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs);

+      if (Args.hasArg(options::OPT_pg))

+        CmdArgs.push_back("-lm_p");

+      else

+        CmdArgs.push_back("-lm");

+    }

+    // FIXME: For some reason GCC passes -lgcc and -lgcc_s before adding

+    // the default system libraries. Just mimic this for now.

+    if (Args.hasArg(options::OPT_pg))

+      CmdArgs.push_back("-lgcc_p");

+    else

+      CmdArgs.push_back("-lcompiler_rt");

+    if (Args.hasArg(options::OPT_static)) {

+      CmdArgs.push_back("-lstdc++");

+    } else if (Args.hasArg(options::OPT_pg)) {

+      CmdArgs.push_back("-lgcc_eh_p");

+    } else {

+      CmdArgs.push_back("--as-needed");

+      CmdArgs.push_back("-lstdc++");

+      CmdArgs.push_back("--no-as-needed");

+    }

+

+    if (Args.hasArg(options::OPT_pthread)) {

+      if (Args.hasArg(options::OPT_pg))

+        CmdArgs.push_back("-lpthread_p");

+      else

+        CmdArgs.push_back("-lpthread");

+    }

+

+    if (Args.hasArg(options::OPT_pg)) {

+      if (Args.hasArg(options::OPT_shared))

+        CmdArgs.push_back("-lc");

+      else {

+        if (Args.hasArg(options::OPT_static)) {

+          CmdArgs.push_back("--start-group");

+          CmdArgs.push_back("-lc_p");

+          CmdArgs.push_back("-lpthread_p");

+          CmdArgs.push_back("--end-group");

+        } else {

+          CmdArgs.push_back("-lc_p");

+        }

+      }

+      CmdArgs.push_back("-lgcc_p");

+    } else {

+      if (Args.hasArg(options::OPT_static)) {

+        CmdArgs.push_back("--start-group");

+        CmdArgs.push_back("-lc");

+        CmdArgs.push_back("-lpthread");

+        CmdArgs.push_back("--end-group");

+      } else {

+        CmdArgs.push_back("-lc");

+      }

+      CmdArgs.push_back("-lcompiler_rt");

+    }

+

+    if (Args.hasArg(options::OPT_static)) {

+      CmdArgs.push_back("-lstdc++");

+    } else if (Args.hasArg(options::OPT_pg)) {

+      CmdArgs.push_back("-lgcc_eh_p");

+    } else {

+      CmdArgs.push_back("--as-needed");

+      CmdArgs.push_back("-lstdc++");

+      CmdArgs.push_back("--no-as-needed");

+    }

+  }

+

+  if (!Args.hasArg(options::OPT_nostdlib) &&

+      !Args.hasArg(options::OPT_nostartfiles)) {

+    if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))

+      CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtendS.o")));

+    else

+      CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtend.o")));

+

+ CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o")))

+ ;

+  }

+

+  AddPS4ProfileRT(ToolChain, Args, CmdArgs);

+ AddPS4SanitizerArgs(ToolChain, CmdArgs);

+

+  const char *Exec =

+#ifdef LLVM_ON_WIN32

+      Args.MakeArgString(ToolChain.GetProgramPath("ps4-ld.gold.exe"));

+#else

+      Args.MakeArgString(ToolChain.GetProgramPath("ps4-ld"));

+#endif

+

+  C.addCommand(llvm::make_unique<Command>(JA, T, Exec, CmdArgs,

+Inputs)); }

+

+void PS4cpu::Link::ConstructJob(Compilation &C, const JobAction &JA,

+                                const InputInfo &Output,

+                                const InputInfoList &Inputs,

+                                const ArgList &Args,

+                                const char *LinkingOutput) const {

+  const toolchains::FreeBSD &ToolChain =

+      static_cast<const toolchains::FreeBSD &>(getToolChain());

+  const Driver &D = ToolChain.getDriver();

+  bool PS4Linker;

+  StringRef LinkerOptName;

+  if (const Arg *A = Args.getLastArg(options::OPT_fuse_ld_EQ)) {

+    LinkerOptName = A->getValue();

+    if (LinkerOptName != "ps4" && LinkerOptName != "gold")

+      D.Diag(diag::err_drv_unsupported_linker) << LinkerOptName;

+  }

+

+  if (LinkerOptName == "gold")

+    PS4Linker = false;

+  else if (LinkerOptName == "ps4")

+    PS4Linker = true;

+  else

+    PS4Linker = !Args.hasArg(options::OPT_shared);

+

+  if (PS4Linker)

+    ConstructPS4LinkJob(*this, C, JA, Output, Inputs, Args,

+LinkingOutput);

+  else

+    ConstructGoldLinkJob(*this, C, JA, Output, Inputs, Args,

+LinkingOutput); }



Modified: cfe/trunk/lib/Driver/Tools.h

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=248546&r1=248545&r2=248546&view=diff

==============================================================================

--- cfe/trunk/lib/Driver/Tools.h (original)

+++ cfe/trunk/lib/Driver/Tools.h Thu Sep 24 17:06:52 2015

@@ -827,6 +827,36 @@ public:

};

} // end namespace Myriad

+namespace PS4cpu {

+class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {

+public:

+  Assemble(const ToolChain &TC)

+      : Tool("PS4cpu::Assemble", "assembler", TC, RF_Full) {}

+

+  virtual bool hasIntegratedCPP() const { return false; }

+

+  virtual void ConstructJob(Compilation &C, const JobAction &JA,

+                            const InputInfo &Output,

+                            const InputInfoList &Inputs,

+                            const llvm::opt::ArgList &TCArgs,

+                            const char *LinkingOutput) const; };

+

+class LLVM_LIBRARY_VISIBILITY Link : public Tool {

+public:

+  Link(const ToolChain &TC) : Tool("PS4cpu::Link", "linker", TC,

+RF_Full) {}

+

+  virtual bool hasIntegratedCPP() const { return false; }  virtual bool

+ isLinkJob() const { return true; }

+

+  virtual void ConstructJob(Compilation &C, const JobAction &JA,

+                            const InputInfo &Output,

+                            const InputInfoList &Inputs,

+                            const llvm::opt::ArgList &TCArgs,

+                            const char *LinkingOutput) const; }; } //

+end namespace PS4cpu

+

} // end namespace tools

} // end namespace driver

} // end namespace clang



Modified: cfe/trunk/lib/Frontend/InitHeaderSearch.cpp

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitHeaderSearch.cpp?rev=248546&r1=248545&r2=248546&view=diff

==============================================================================

--- cfe/trunk/lib/Frontend/InitHeaderSearch.cpp (original)

+++ cfe/trunk/lib/Frontend/InitHeaderSearch.cpp Thu Sep 24 17:06:52 2015

@@ -215,6 +215,7 @@ void InitHeaderSearch::AddDefaultCInclud

     case llvm::Triple::OpenBSD:

     case llvm::Triple::Bitrig:

     case llvm::Triple::NaCl:

+    case llvm::Triple::PS4:

       break;

     case llvm::Triple::Win32:

       if (triple.getEnvironment() != llvm::Triple::Cygnus) @@ -320,6 +321,28 @@ void InitHeaderSearch::AddDefaultCInclud

   case llvm::Triple::RTEMS:

   case llvm::Triple::NaCl:

     break;

+  case llvm::Triple::PS4: {

+    // <isysroot> gets prepended later in AddPath().

+    std::string BaseSDKPath = "";

+    if (!HasSysroot) {

+      const char *envValue = getenv("SCE_PS4_SDK_DIR");

+      if (envValue)

+        BaseSDKPath = envValue;

+      else {

+        // HSOpts.ResourceDir variable contains the location of Clang's

+        // resource files.

+        // Assuming that Clang is configured for PS4 without

+        // --with-clang-resource-dir option, the location of Clang's resource

+        // files is <SDK_DIR>/host_tools/lib/clang

+        SmallString<128> P = StringRef(HSOpts.ResourceDir);

+        llvm::sys::path::append(P, "../../..");

+        BaseSDKPath = P.str();

+      }

+    }

+    AddPath(BaseSDKPath + "/target/include", System, false);

+    if (triple.isPS4CPU())

+      AddPath(BaseSDKPath + "/target/include_common", System, false);

+ }

   default:

     AddPath("/usr/include", ExternCSystem, false);

     break;



Added: cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include/.keep

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include/.keep?rev=248546&view=auto

==============================================================================

    (empty)



Added: cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/.keep

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/.keep?rev=248546&view=auto

==============================================================================

--- cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/.keep (added)

+++ cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/.ke

+++ ep Thu Sep 24 17:06:52 2015

@@ -0,0 +1 @@

+



Modified: cfe/trunk/test/Driver/debug-options.c

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/debug-options.c?rev=248546&r1=248545&r2=248546&view=diff

==============================================================================

--- cfe/trunk/test/Driver/debug-options.c (original)

+++ cfe/trunk/test/Driver/debug-options.c Thu Sep 24 17:06:52 2015

@@ -27,6 +27,17 @@

// RUN: %clang -### -c -ggdb3 %s -target x86_64-apple-darwin 2>&1 \

// RUN:             | FileCheck -check-prefix=G_DARWIN %s

+// On the PS4, -g defaults to -gno-column-info, and we always generate

+the // arange section.

+// RUN: %clang -### -c %s -target x86_64-scei-ps4 2>&1 \

+// RUN:             | FileCheck -check-prefix=G_PS4 %s

+// RUN: %clang -### -c %s -g -target x86_64-scei-ps4 2>&1 \

+// RUN:             | FileCheck -check-prefix=G_PS4 %s

+// RUN: %clang -### -c %s -g -target x86_64-scei-ps4 2>&1 \

+// RUN:             | FileCheck -check-prefix=NOCI %s

+// RUN: %clang -### -c %s -g -gcolumn-info -target x86_64-scei-ps4 2>&1 \

+// RUN:             | FileCheck -check-prefix=CI %s

+

// RUN: %clang -### -c -gdwarf-2 %s 2>&1 | FileCheck -check-prefix=G_D2 %s  //  // RUN: %clang -### -c -gfoo %s 2>&1 | FileCheck -check-prefix=G_NO %s @@ -86,6 +97,9 @@  // G_DARWIN: "-cc1"

// G_DARWIN: "-gdwarf-2"

//

+// G_PS4: "-cc1"

+// G_PS4: "-generate-arange-section"

+//

// G_D2: "-cc1"

// G_D2: "-gdwarf-2"

//



Added: cfe/trunk/test/Driver/ps4-header-search.c

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-header-search.c?rev=248546&view=auto

==============================================================================

--- cfe/trunk/test/Driver/ps4-header-search.c (added)

+++ cfe/trunk/test/Driver/ps4-header-search.c Thu Sep 24 17:06:52 2015

@@ -0,0 +1,10 @@

+// REQUIRES: x86-registered-target

+

+// RUN: env SCE_PS4_SDK_DIR=%S/Inputs/scei-ps4_tree %clang -target

+x86_64-scei-ps4 -E -v %s 2>&1 | FileCheck %s --check-prefix=ENVPS4 //

+ENVPS4: Inputs/scei-ps4_tree/target/include{{$}}

+// ENVPS4: Inputs/scei-ps4_tree/target/include_common{{$}}

+

+// RUN: %clang -isysroot %S/Inputs/scei-ps4_tree -target

+x86_64-scei-ps4 -E -v %s 2>&1 | FileCheck %s --check-prefix=SYSROOTPS4 // SYSROOTPS4: "{{[^"]*}}clang{{[^"]*}}"

+// SYSROOTPS4: Inputs/scei-ps4_tree/target/include{{$}}

+// SYSROOTPS4: Inputs/scei-ps4_tree/target/include_common{{$}}



Added: cfe/trunk/test/Driver/ps4-linker-non-win.c

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-linker-non-win.c?rev=248546&view=auto

==============================================================================

--- cfe/trunk/test/Driver/ps4-linker-non-win.c (added)

+++ cfe/trunk/test/Driver/ps4-linker-non-win.c Thu Sep 24 17:06:52 2015

@@ -0,0 +1,18 @@

+// UNSUPPORTED: system-windows

+// REQUIRES: x86-registered-target

+

+// RUN: touch %T/ps4-ld

+

+// RUN: env "PATH=%T" %clang -### -target x86_64-scei-ps4  %s -linker=gold 2>&1 \

+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s

+// RUN: env "PATH=%T" %clang -### -target x86_64-scei-ps4  %s -shared 2>&1 \

+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s

+

+// RUN: env "PATH=%T" %clang -### -target x86_64-scei-ps4  %s 2>&1 \

+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s

+// RUN: env "PATH=%T" %clang -### -target x86_64-scei-ps4  %s -linker=ps4 2>&1 \

+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s

+// RUN: env "PATH=%T" %clang -### -target x86_64-scei-ps4  %s -shared \

+// RUN:     -linker=ps4 2>&1 | FileCheck --check-prefix=CHECK-PS4-LINKER %s

+

+// CHECK-PS4-LINKER: ps4-ld



Added: cfe/trunk/test/Driver/ps4-linker-win.c

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-linker-win.c?rev=248546&view=auto

==============================================================================

--- cfe/trunk/test/Driver/ps4-linker-win.c (added)

+++ cfe/trunk/test/Driver/ps4-linker-win.c Thu Sep 24 17:06:52 2015

@@ -0,0 +1,26 @@

+// The full path to the gold linker was not found on Windows because

+the // driver fails to add an .exe extension to the name.

+// We check that gold linker's full name (with an extension) is

+specified // on the command line if -linker=gold, or -shared with no

+-linker option // are passed. Otherwise, we check that the PS4's

+linker's full name is // specified.

+

+// REQUIRES: system-windows, x86-registered-target

+

+// RUN: touch %T/ps4-ld.exe

+// RUN: touch %T/ps4-ld.gold.exe

+

+// RUN: env "PATH=%T" %clang -target x86_64-scei-ps4  %s -linker=gold -### 2>&1 \

+// RUN:   | FileCheck --check-prefix=CHECK-PS4-GOLD %s

+// RUN: env "PATH=%T" %clang -target x86_64-scei-ps4  %s -shared -### 2>&1 \

+// RUN:   | FileCheck --check-prefix=CHECK-PS4-GOLD %s

+

+// RUN: env "PATH=%T" %clang -target x86_64-scei-ps4  %s -### 2>&1 \

+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s

+// RUN: env "PATH=%T" %clang -target x86_64-scei-ps4  %s -linker=ps4 -### 2>&1 \

+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s

+// RUN: env "PATH=%T" %clang -target x86_64-scei-ps4  %s -shared \

+// RUN:     -linker=ps4 -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-LINKER %s

+

+// CHECK-PS4-GOLD: ps4-ld.gold.exe

+// CHECK-PS4-LINKER: ps4-ld.exe



Added: cfe/trunk/test/Driver/ps4-pic.c

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-pic.c?rev=248546&view=auto

==============================================================================

--- cfe/trunk/test/Driver/ps4-pic.c (added)

+++ cfe/trunk/test/Driver/ps4-pic.c Thu Sep 24 17:06:52 2015

@@ -0,0 +1,106 @@

+// REQUIRES: x86-registered-target

+

+// Test the driver's control over the PIC behavior for PS4 compiler.

+// These consist of tests of the relocation model flags and the // pic

+level flags passed to CC1.

+//

+// CHECK-NO-PIC: "-mrelocation-model" "static"

+// CHECK-NO-PIC-NOT: "-pic-level"

+// CHECK-NO-PIC-NOT: "-pie-level"

+//

+// CHECK-DYNAMIC-NO-PIC2: unsupported option '-mdynamic-no-pic'

+// CHECK-DYNAMIC-NO-PIC2: "-mrelocation-model" "dynamic-no-pic"

+//

+// CHECK-PIC2: "-mrelocation-model" "pic"

+// CHECK-PIC2: "-pic-level" "2"

+//

+// CHECK-PIE2: "-mrelocation-model" "pic"

+// CHECK-PIE2: "-pie-level" "2"

+//

+// CHECK-NOPIC-IGNORED: using '-fPIC'

+// CHECK-NOPIC-IGNORED: "-mrelocation-model" "pic"

+// CHECK-NOPIC-IGNORED: "-pic-level" "2"

+//

+// CHECK-DIAG-PIC: option '-fno-PIC' was ignored by the PS4 toolchain, using '-fPIC'

+// CHECK-DIAG-PIE: option '-fno-PIE' was ignored by the PS4 toolchain, using '-fPIC'

+// CHECK-DIAG-pic: option '-fno-pic' was ignored by the PS4 toolchain, using '-fPIC'

+// CHECK-DIAG-pie: option '-fno-pie' was ignored by the PS4 toolchain, using '-fPIC'

+//

+// CHECK-STATIC-ERR: unsupported option '-static' for target 'PS4'

+

+// RUN: %clang -c %s -target x86_64-scei-ps4 -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIC -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpie -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-PIE2

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIE -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-PIE2

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -fno-pic -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIC -fno-PIC -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -fno-PIC -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIC -fno-pic -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpie -fno-pie -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIE -fno-PIE -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpie -fno-PIE -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIE -fno-pie -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpie -fno-pic -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -fno-pie -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -fPIC -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIC -fpic -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -fPIE -fpie -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-PIE2

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpie -fPIC -fPIE -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-PIE2

+//

+// Defaults change for PS4.

+// RUN: %clang -c %s -target x86_64-scei-ps4 -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-pic -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-PIC -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED

+//

+// Disregard any of the PIC-specific flags if we have a trump-card flag.

+// RUN: %clang -c %s -target x86_64-scei-ps4 -mkernel -fPIC -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC

+// RUN: %clang -c %s -target x86_64-scei-ps4 -mdynamic-no-pic -fPIC -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC2

+//

+// -static not supported at all.

+// RUN: %clang -c %s -target x86_64-scei-ps4 -static -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-STATIC-ERR

+//

+// -fno-PIC etc. is obeyed if -mcmodel=kernel is also present.

+// RUN: %clang -c %s -target x86_64-scei-ps4 -mcmodel=kernel -fno-PIC -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC

+// RUN: %clang -c %s -target x86_64-scei-ps4 -mcmodel=kernel -fno-PIE -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC

+// RUN: %clang -c %s -target x86_64-scei-ps4 -mcmodel=kernel -fno-pic -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC

+// RUN: %clang -c %s -target x86_64-scei-ps4 -mcmodel=kernel -fno-pie -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC

+//

+// Verify that we reflect the option the user specified, when we ignore it.

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-PIC -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-DIAG-PIC

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-PIE -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-DIAG-PIE

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-pic -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-DIAG-pic

+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-pie -### 2>&1 \

+// RUN:   | FileCheck %s --check-prefix=CHECK-DIAG-pie



Added: cfe/trunk/test/Driver/ps4-sdk-root.c

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-sdk-root.c?rev=248546&view=auto

==============================================================================

--- cfe/trunk/test/Driver/ps4-sdk-root.c (added)

+++ cfe/trunk/test/Driver/ps4-sdk-root.c Thu Sep 24 17:06:52 2015

@@ -0,0 +1,48 @@

+// REQUIRES: x86-registered-target

+

+// Check that ps4-clang doesn't report a warning message when locating

+// system header files (either by looking at the value of

+SCE_PS4_SDK_DIR // or relative to the location of the compiler driver),

+if "-nostdinc", // "--sysroot" or "-isysroot" option is specified on the command line.

+// Otherwise, check that ps4-clang reports a warning.

+

+// Check that clang doesn't report a warning message when locating //

+system libraries (either by looking at the value of SCE_PS4_SDK_DIR //

+or relative to the location of the compiler driver), if "-c", "-S",

+"-E", // "--sysroot", "-nostdlib" or "-nodefaultlibs" option is

+specified on // the command line.

+// Otherwise, check that ps4-clang reports a warning.

+

+// setting up SCE_PS4_SDK_DIR to existing location, which is not a PS4 SDK.

+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -target x86_64-scei-ps4 %s

+2>&1 | FileCheck -check-prefix=WARN-SYS-HEADERS

+-check-prefix=WARN-SYS-LIBS -check-prefix=NO-WARN %s

+

+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -c -target x86_64-scei-ps4

+%s 2>&1 | FileCheck -check-prefix=WARN-SYS-HEADERS

+-check-prefix=NO-WARN %s // RUN: env SCE_PS4_SDK_DIR=.. %clang -### -S

+-target x86_64-scei-ps4 %s 2>&1 | FileCheck

+-check-prefix=WARN-SYS-HEADERS -check-prefix=NO-WARN %s // RUN: env

+SCE_PS4_SDK_DIR=.. %clang -### -E -target x86_64-scei-ps4 %s 2>&1 |

+FileCheck -check-prefix=WARN-SYS-HEADERS -check-prefix=NO-WARN %s //

+RUN: env SCE_PS4_SDK_DIR=.. %clang -### -emit-ast -target

+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=WARN-SYS-HEADERS

+-check-prefix=NO-WARN %s // RUN: env SCE_PS4_SDK_DIR=.. %clang -###

+-isysroot foo -target x86_64-scei-ps4 %s 2>&1 | FileCheck

+-check-prefix=WARN-ISYSROOT -check-prefix=WARN-SYS-LIBS

+-check-prefix=NO-WARN %s

+

+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -c -nostdinc -target

+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN:

+env SCE_PS4_SDK_DIR=.. %clang -### -S -nostdinc -target x86_64-scei-ps4

+%s 2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN: env

+SCE_PS4_SDK_DIR=.. %clang -### -E -nostdinc -target x86_64-scei-ps4 %s

+2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN: env

+SCE_PS4_SDK_DIR=.. %clang -### -emit-ast -nostdinc -target

+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s

+

+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -c --sysroot=foo/ -target

+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN:

+env SCE_PS4_SDK_DIR=.. %clang -### -S --sysroot=foo/ -target

+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN:

+env SCE_PS4_SDK_DIR=.. %clang -### -E --sysroot=foo/ -target

+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN:

+env SCE_PS4_SDK_DIR=.. %clang -### -emit-ast --sysroot=foo/ -target

+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s

+

+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -c -isysroot foo -target

+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=WARN-ISYSROOT

+-check-prefix=NO-WARN %s // RUN: env SCE_PS4_SDK_DIR=.. %clang -### -S

+-isysroot foo -target x86_64-scei-ps4 %s 2>&1 | FileCheck

+-check-prefix=WARN-ISYSROOT -check-prefix=NO-WARN %s // RUN: env

+SCE_PS4_SDK_DIR=.. %clang -### -E -isysroot foo -target x86_64-scei-ps4

+%s 2>&1 | FileCheck -check-prefix=WARN-ISYSROOT -check-prefix=NO-WARN

+%s // RUN: env SCE_PS4_SDK_DIR=.. %clang -### -emit-ast -isysroot foo

+-target x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=WARN-ISYSROOT

+-check-prefix=NO-WARN %s // RUN: env SCE_PS4_SDK_DIR=.. %clang -###

+--sysroot=foo/ -isysroot foo -target x86_64-scei-ps4 %s 2>&1 |

+FileCheck -check-prefix=WARN-ISYSROOT -check-prefix=NO-WARN %s

+

+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -nostdlib -target

+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=WARN-SYS-HEADERS

+-check-prefix=NO-WARN %s // RUN: env SCE_PS4_SDK_DIR=.. %clang -###

+-nodefaultlibs -target x86_64-scei-ps4 %s 2>&1 | FileCheck

+-check-prefix=WARN-SYS-HEADERS -check-prefix=NO-WARN %s

+

+// NO-WARN-NOT: {{warning:|error:}}

+// WARN-SYS-HEADERS: warning: unable to find PS4 system headers

+directory // WARN-ISYSROOT: warning: no such sysroot directory: 'foo'

+// WARN-SYS-LIBS: warning: unable to find PS4 system libraries

+directory // NO-WARN-NOT: {{warning:|error:}}



Modified: cfe/trunk/test/Driver/rtti-options.cpp

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/rtti-options.cpp?rev=248546&r1=248545&r2=248546&view=diff

==============================================================================

--- cfe/trunk/test/Driver/rtti-options.cpp (original)

+++ cfe/trunk/test/Driver/rtti-options.cpp Thu Sep 24 17:06:52 2015

@@ -34,7 +34,8 @@

// RUN: %clang -x c++ -### -c -target x86_64-unknown-unknown -fexceptions %s 2>&1 | FileCheck -check-prefix=CHECK-OK %s

 // -frtti + exceptions

-// RUN: %clang -### -c -target x86_64-scei-ps4 -fcxx-exceptions -frtti %s 2>&1 | FileCheck -check-prefix=CHECK-OK %s

+// ps4 needs -nostdinc due to having warnings if the SDK is not

+installed // RUN: %clang -### -c -nostdinc -target x86_64-scei-ps4

+-fcxx-exceptions -frtti %s 2>&1 | FileCheck -check-prefix=CHECK-OK %s

// RUN: %clang -### -c -target x86_64-unknown-unknown -fcxx-exceptions -frtti %s 2>&1 | FileCheck -check-prefix=CHECK-OK %s

 // -f{no-,}rtti/default



Modified: cfe/trunk/test/Driver/stack-protector.c

URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/stack-protector.c?rev=248546&r1=248545&r2=248546&view=diff

==============================================================================

--- cfe/trunk/test/Driver/stack-protector.c (original)

+++ cfe/trunk/test/Driver/stack-protector.c Thu Sep 24 17:06:52 2015

@@ -23,3 +23,12 @@

// RUN: %clang -fstack-protector-all -### %s 2>&1 | FileCheck %s -check-prefix=SSP-ALL  // SSP-ALL: "-stack-protector" "3"

// SSP-ALL-NOT: "-stack-protector-buffer-size"

+

+// RUN: %clang -target x86_64-scei-ps4 -### %s 2>&1 | FileCheck %s

+-check-prefix=SSP-PS4 // RUN: %clang -target x86_64-scei-ps4

+-fstack-protector -### %s 2>&1 | FileCheck %s -check-prefix=SSP-PS4 // SSP-PS4: "-stack-protector" "2"

+// SSP-PS4-NOT: "-stack-protector-buffer-size"

+

+// RUN: %clang -target x86_64-scei-ps4 -fstack-protector --param

+ssp-buffer-size=16 -### %s 2>&1 | FileCheck %s -check-prefix=SSP-PS4-BUF // SSP-PS4-BUF: "-stack-protector" "2"

+// SSP-PS4-BUF: "-stack-protector-buffer-size" "16"





_______________________________________________

cfe-commits mailing list

cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>

http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


_______________________________________________
cfe-commits mailing list
cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits



_______________________________________________
cfe-commits mailing list
cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

_______________________________________________
cfe-commits mailing list
cfe-commits at lists.llvm.org<mailto:cfe-commits at lists.llvm.org>
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150925/044ab21d/attachment-0001.html>


More information about the cfe-commits mailing list