<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:Cambria;
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:"\@MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
span.EmailStyle22
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi Eric,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">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…<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Because the PS4 bot was set up last week only, so we didn’t catch this issue ahead of time. Sorry about that.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Since the discussion about the proper solution was taking a while, Greg reverted the fix this morning.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Katya.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Eric Christopher [mailto:echristo@gmail.com]
<br>
<b>Sent:</b> Friday, September 25, 2015 10:51 AM<br>
<b>To:</b> Greg Bedwell; Romanova, Katya<br>
<b>Cc:</b> cfe-commits@lists.llvm.org<br>
<b>Subject:</b> Re: broken testing caused by r248546<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">I seem to have missed what the problem was on the various bots, what happened?<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">-eric<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Fri, Sep 25, 2015 at 9:24 AM Greg Bedwell via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<p class="MsoNormal">Hi Katya,<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">As we discussed internally, before you're able to get into the office to do it yourself I've temporarily reverted <span style="font-size:9.5pt">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!</span><o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:9.5pt">-Greg</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On 25 September 2015 at 10:20, Romanova, Katya via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi Yaron,</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">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.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">If some other test files will cause the problems for non-PS4 bots, I think it will be better to revert
 r248567.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Thank you for your help!</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Katya.</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Yaron Keren [mailto:<a href="mailto:yaron.keren@gmail.com" target="_blank">yaron.keren@gmail.com</a>]
<br>
<b>Sent:</b> Friday, September 25, 2015 1:58 AM</span><o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><br>
<b>To:</b> Romanova, Katya<br>
<b>Cc:</b> <a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<b>Subject:</b> Re: broken testing caused by r248546<o:p></o:p></p>
</div>
</div>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Hi Katya,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">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.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">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.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Yaron<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">2015-09-25 11:24 GMT+03:00 Romanova, Katya <<a href="mailto:Katya_Romanova@playstation.sony.com" target="_blank">Katya_Romanova@playstation.sony.com</a>>:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-family:"Cambria","serif";color:black">Thank you, Yaron!</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-family:"Cambria","serif";color:black"> </span><o:p></o:p></p>
<pre><span style="font-size:12.0pt;font-family:"Cambria","serif";color:black">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.</span><o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Cambria","serif";color:black">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.</span><o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Cambria","serif";color:black"> </span><o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Cambria","serif";color:black">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. </span><o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Cambria","serif";color:black"> </span><o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Cambria","serif";color:black">Hopefully, we could resolve PS4 buildbot issues tomorrow.</span><o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Cambria","serif";color:black"> </span><o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Cambria","serif";color:black">Katya.</span><o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Cambria","serif";color:black"> </span><o:p></o:p></pre>
<pre><span style="font-size:12.0pt;font-family:"Cambria","serif";color:black"> </span><o:p></o:p></pre>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><a name="msg-f:1513303046503765575_15003ce6b5f8e6"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"> </span></a><o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Yaron Keren [mailto:<a href="mailto:yaron.keren@gmail.com" target="_blank">yaron.keren@gmail.com</a>]
<br>
<b>Sent:</b> Friday, September 25, 2015 12:09 AM<br>
<b>To:</b> Romanova, Katya<br>
<b>Cc:</b> <a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<b>Subject:</b> Re: broken testing caused by r248546</span><o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Here too:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><a href="http://bb.pgr.jp/builders/ninja-clang-i686-msc18-R/builds/3285" target="_blank">http://bb.pgr.jp/builders/ninja-clang-i686-msc18-R/builds/3285</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><a href="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" target="_blank">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</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">2015-09-25 2:10 GMT+03:00 Romanova, Katya via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>>:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p>Hi,<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>My today’s commit  r248546 caused some problem for PS4 bot:<o:p></o:p></p>
<p><a href="http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/builds/342" target="_blank">http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/builds/342</a><o:p></o:p></p>
<p>and for x64-ninja-win7 bot<o:p></o:p></p>
<p><a href="http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/5355" target="_blank">http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/5355</a><o:p></o:p></p>
<p> <o:p></o:p></p>
<p>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.<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>If all other platforms, except PS4, are not affected, please do not revert the change! We are looking into this problem.<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>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.<o:p></o:p></p>
<p><a href="http://lab.llvm.org:8011/builders/sanitizer-windows/builds/10285" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-windows/builds/10285</a><o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Katya.<o:p></o:p></p>
<p> <o:p></o:p></p>
<p> <o:p></o:p></p>
<p> <o:p></o:p></p>
<p> <o:p></o:p></p>
<p> <o:p></o:p></p>
<p> <o:p></o:p></p>
<p>-----Original Message-----<o:p></o:p></p>
<p>From: cfe-commits [<a href="mailto:cfe-commits-bounces@lists.llvm.org" target="_blank">mailto:cfe-commits-bounces@lists.llvm.org</a>] On Behalf Of Ekaterina Romanova via cfe-commits<o:p></o:p></p>
<p>Sent: Thursday, September 24, 2015 15:07<o:p></o:p></p>
<p>To: <a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><o:p></o:p></p>
<p>Subject: r248546 - This patch adds missing pieces to clang, including the PS4 toolchain<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Author: kromanova<o:p></o:p></p>
<p>Date: Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>New Revision: 248546<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=248546&view=rev" target="_blank">
http://llvm.org/viewvc/llvm-project?rev=248546&view=rev</a><o:p></o:p></p>
<p>Log:<o:p></o:p></p>
<p>This patch adds missing pieces to clang, including the PS4 toolchain definition, added warnings, PS4 defaults, and Driver changes needed for our compiler.<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>A patch by Filipe Cabecinhas, Pierre Gousseau and Katya Romanova!<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Differential Revision: <a href="http://reviews.llvm.org/D11279" target="_blank">
http://reviews.llvm.org/D11279</a><o:p></o:p></p>
<p> <o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Added:<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include/<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include/.keep<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/.keep<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/ps4-header-search.c<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/ps4-linker-non-win.c<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/ps4-linker-win.c<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/ps4-pic.c<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/ps4-sdk-root.c<o:p></o:p></p>
<p>Modified:<o:p></o:p></p>
<p>    cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td<o:p></o:p></p>
<p>    cfe/trunk/include/clang/Basic/DiagnosticGroups.td<o:p></o:p></p>
<p>    cfe/trunk/lib/Driver/Driver.cpp<o:p></o:p></p>
<p>    cfe/trunk/lib/Driver/ToolChains.cpp<o:p></o:p></p>
<p>    cfe/trunk/lib/Driver/ToolChains.h<o:p></o:p></p>
<p>    cfe/trunk/lib/Driver/Tools.cpp<o:p></o:p></p>
<p>    cfe/trunk/lib/Driver/Tools.h<o:p></o:p></p>
<p>    cfe/trunk/lib/Frontend/InitHeaderSearch.cpp<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/debug-options.c<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/rtti-options.cpp<o:p></o:p></p>
<p>    cfe/trunk/test/Driver/stack-protector.c<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=248546&r1=248545&r2=248546&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=248546&r1=248545&r2=248546&view=diff</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original)<o:p></o:p></p>
<p>+++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Thu Sep 24 <o:p></o:p></p>
<p>+++ 17:06:52 2015<o:p></o:p></p>
<p>@@ -192,4 +192,18 @@ def warn_target_unsupported_nan2008 : Wa  def warn_target_unsupported_nanlegacy : Warning<<o:p></o:p></p>
<p>   "ignoring '-mnan=legacy' option because the '%0' architecture does not support it">,<o:p></o:p></p>
<p>   InGroup<UnsupportedNan>;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+def warn_drv_unable_to_find_directory_expected : Warning<<o:p></o:p></p>
<p>+  "unable to find %0 directory, expected to be in '%1'">,<o:p></o:p></p>
<p>+  InGroup<InvalidOrNonExistentDirectory>;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+def warn_drv_ps4_force_pic : Warning<<o:p></o:p></p>
<p>+  "option '%0' was ignored by the PS4 toolchain, using '-fPIC'">,<o:p></o:p></p>
<p>+  InGroup<OptionIgnored>;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+def warn_drv_ps4_sdk_dir : Warning<<o:p></o:p></p>
<p>+  "environment variable SCE_PS4_SDK_DIR is set, but points to invalid <o:p></o:p></p>
<p>+or nonexistent directory '%0'">,<o:p></o:p></p>
<p>+  InGroup<InvalidOrNonExistentDirectory>;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+def err_drv_unsupported_linker : Error<"unsupported value '%0' for <o:p></o:p></p>
<p>+-linker option">;<o:p></o:p></p>
<p>}<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=248546&r1=248545&r2=248546&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=248546&r1=248545&r2=248546&view=diff</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)<o:p></o:p></p>
<p>+++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Thu Sep 24 <o:p></o:p></p>
<p>+++ 17:06:52 2015<o:p></o:p></p>
<p>@@ -820,3 +820,7 @@ def CudaCompat : DiagGroup<"cuda-compat"<o:p></o:p></p>
<p> // A warning group for things that will change semantics in the future.<o:p></o:p></p>
<p>def FutureCompat : DiagGroup<"future-compat">;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+def InvalidOrNonExistentDirectory : <o:p></o:p></p>
<p>+DiagGroup<"invalid-or-nonexistent-directory">;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+def OptionIgnored : DiagGroup<"option-ignored">;<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Modified: cfe/trunk/lib/Driver/Driver.cpp<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=248546&r1=248545&r2=248546&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=248546&r1=248545&r2=248546&view=diff</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/lib/Driver/Driver.cpp (original)<o:p></o:p></p>
<p>+++ cfe/trunk/lib/Driver/Driver.cpp Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -2254,6 +2254,9 @@ const ToolChain &Driver::getToolChain(co<o:p></o:p></p>
<p>     case llvm::Triple::CUDA:<o:p></o:p></p>
<p>       TC = new toolchains::CudaToolChain(*this, Target, Args);<o:p></o:p></p>
<p>       break;<o:p></o:p></p>
<p>+    case llvm::Triple::PS4:<o:p></o:p></p>
<p>+      TC = new toolchains::PS4CPU(*this, Target, Args);<o:p></o:p></p>
<p>+      break;<o:p></o:p></p>
<p>     default:<o:p></o:p></p>
<p>       // Of these targets, Hexagon is the only one that might have<o:p></o:p></p>
<p>       // an OS of Linux, in which case it got handled above already.<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Modified: cfe/trunk/lib/Driver/ToolChains.cpp<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=248546&r1=248545&r2=248546&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=248546&r1=248545&r2=248546&view=diff</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/lib/Driver/ToolChains.cpp (original)<o:p></o:p></p>
<p>+++ cfe/trunk/lib/Driver/ToolChains.cpp Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -4065,3 +4065,69 @@ void WebAssembly::addClangTargetOptions(<o:p></o:p></p>
<p>                          options::OPT_fno_use_init_array, true))<o:p></o:p></p>
<p>     CC1Args.push_back("-fuse-init-array");<o:p></o:p></p>
<p>}<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+PS4CPU::PS4CPU(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)<o:p></o:p></p>
<p>+    : Generic_ELF(D, Triple, Args) {<o:p></o:p></p>
<p>+  if (Args.hasArg(options::OPT_static))<o:p></o:p></p>
<p>+    D.Diag(diag::err_drv_unsupported_opt_for_target) << "-static" << <o:p></o:p></p>
<p>+"PS4";<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  // Determine where to find the PS4 libraries. We use SCE_PS4_SDK_DIR  <o:p>
</o:p></p>
<p>+ // if it exists; otherwise use the driver's installation path, which  <o:p></o:p></p>
<p>+ // should be <SDK_DIR>/host_tools/bin.<o:p></o:p></p>
<p>+  const char *EnvValue = getenv("SCE_PS4_SDK_DIR");  if (EnvValue && <o:p></o:p></p>
<p>+ !llvm::sys::fs::exists(EnvValue))<o:p></o:p></p>
<p>+    getDriver().Diag(clang::diag::warn_drv_ps4_sdk_dir) << EnvValue;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  std::string PS4SDKDir = (EnvValue ? EnvValue : getDriver().Dir + <o:p></o:p></p>
<p>+ "/../..");<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  // Report a warning if we can't find the include or lib directories <o:p></o:p></p>
<p>+ from  // the SDK.<o:p></o:p></p>
<p>+  // If -isysroot was passed, use that as the SDK base path.<o:p></o:p></p>
<p>+  std::string PrefixDir;<o:p></o:p></p>
<p>+  if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {<o:p></o:p></p>
<p>+    PrefixDir = A->getValue();<o:p></o:p></p>
<p>+    if (!llvm::sys::fs::exists(PrefixDir))<o:p></o:p></p>
<p>+      getDriver().Diag(clang::diag::warn_missing_sysroot) << PrefixDir;  <o:p>
</o:p></p>
<p>+ } else<o:p></o:p></p>
<p>+    PrefixDir = PS4SDKDir;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  std::string PS4SDKIncludeDir = PrefixDir + "/target/include";  if <o:p></o:p></p>
<p>+ (!Args.hasArg(options::OPT_nostdinc) &&<o:p></o:p></p>
<p>+      !Args.hasArg(options::OPT_nostdlibinc) &&<o:p></o:p></p>
<p>+      !Args.hasArg(options::OPT_isysroot) &&<o:p></o:p></p>
<p>+      !Args.hasArg(options::OPT__sysroot_EQ) &&<o:p></o:p></p>
<p>+      !llvm::sys::fs::exists(PS4SDKIncludeDir)) {<o:p></o:p></p>
<p>+    getDriver().Diag(clang::diag::warn_drv_unable_to_find_directory_expected)<o:p></o:p></p>
<p>+        << "PS4 system headers" << PS4SDKIncludeDir;  }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  std::string PS4SDKLibDir = PS4SDKDir + "/target/lib";<o:p></o:p></p>
<p>+  if (!Args.hasArg(options::OPT_nostdlib) &&<o:p></o:p></p>
<p>+      !Args.hasArg(options::OPT_nodefaultlibs) &&<o:p></o:p></p>
<p>+      !Args.hasArg(options::OPT__sysroot_EQ) && !Args.hasArg(options::OPT_E) &&<o:p></o:p></p>
<p>+      !Args.hasArg(options::OPT_c) && !Args.hasArg(options::OPT_S) &&<o:p></o:p></p>
<p>+      !Args.hasArg(options::OPT_emit_ast) &&<o:p></o:p></p>
<p>+      !llvm::sys::fs::exists(PS4SDKLibDir)) {<o:p></o:p></p>
<p>+    getDriver().Diag(clang::diag::warn_drv_unable_to_find_directory_expected)<o:p></o:p></p>
<p>+        << "PS4 system libraries" << PS4SDKLibDir;<o:p></o:p></p>
<p>+    return;<o:p></o:p></p>
<p>+  }<o:p></o:p></p>
<p>+  getFilePaths().push_back(PS4SDKLibDir);<o:p></o:p></p>
<p>+}<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+Tool *PS4CPU::buildAssembler() const {<o:p></o:p></p>
<p>+  return new tools::PS4cpu::Assemble(*this); }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+Tool *PS4CPU::buildLinker() const { return new <o:p></o:p></p>
<p>+tools::PS4cpu::Link(*this); }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+bool PS4CPU::isPICDefault() const { return true; }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+bool PS4CPU::HasNativeLLVMSupport() const { return true; }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+SanitizerMask PS4CPU::getSupportedSanitizers() const {<o:p></o:p></p>
<p>+  SanitizerMask Res = ToolChain::getSupportedSanitizers();<o:p></o:p></p>
<p>+  Res |= SanitizerKind::Address;<o:p></o:p></p>
<p>+  Res |= SanitizerKind::Vptr;<o:p></o:p></p>
<p>+  return Res;<o:p></o:p></p>
<p>+}<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Modified: cfe/trunk/lib/Driver/ToolChains.h<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=248546&r1=248545&r2=248546&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=248546&r1=248545&r2=248546&view=diff</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/lib/Driver/ToolChains.h (original)<o:p></o:p></p>
<p>+++ cfe/trunk/lib/Driver/ToolChains.h Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -1002,6 +1002,27 @@ private:<o:p></o:p></p>
<p>                              llvm::opt::ArgStringList &CC1Args) const override;  };<o:p></o:p></p>
<p>+class LLVM_LIBRARY_VISIBILITY PS4CPU : public Generic_ELF {<o:p></o:p></p>
<p>+public:<o:p></o:p></p>
<p>+  PS4CPU(const Driver &D, const llvm::Triple &Triple,<o:p></o:p></p>
<p>+         const llvm::opt::ArgList &Args);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  bool IsMathErrnoDefault() const override { return false; }  bool <o:p></o:p></p>
<p>+ IsObjCNonFragileABIDefault() const override { return true; }  bool <o:p></o:p></p>
<p>+ HasNativeLLVMSupport() const override;  bool isPICDefault() const <o:p></o:p></p>
<p>+ override;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override {<o:p></o:p></p>
<p>+    return 2; // SSPStrong<o:p></o:p></p>
<p>+  }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  SanitizerMask getSupportedSanitizers() const override;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+protected:<o:p></o:p></p>
<p>+  Tool *buildAssembler() const override;<o:p></o:p></p>
<p>+  Tool *buildLinker() const override;<o:p></o:p></p>
<p>+};<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>} // end namespace toolchains<o:p></o:p></p>
<p>} // end namespace driver<o:p></o:p></p>
<p>} // end namespace clang<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Modified: cfe/trunk/lib/Driver/Tools.cpp<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=248546&r1=248545&r2=248546&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=248546&r1=248545&r2=248546&view=diff</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/lib/Driver/Tools.cpp (original)<o:p></o:p></p>
<p>+++ cfe/trunk/lib/Driver/Tools.cpp Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -3102,15 +3102,23 @@ ParsePICArgs(const ToolChain &ToolChain,<o:p></o:p></p>
<p>             O.matches(options::OPT_fPIE) || O.matches(options::OPT_fPIC);<o:p></o:p></p>
<p>       } else {<o:p></o:p></p>
<p>         PIE = PIC = false;<o:p></o:p></p>
<p>+        if (Triple.isPS4CPU()) {<o:p></o:p></p>
<p>+          Arg *ModelArg = Args.getLastArg(options::OPT_mcmodel_EQ);<o:p></o:p></p>
<p>+          StringRef Model = ModelArg ? ModelArg->getValue() : "";<o:p></o:p></p>
<p>+          if (Model != "kernel") {<o:p></o:p></p>
<p>+            PIC = true;<o:p></o:p></p>
<p>+            ToolChain.getDriver().Diag(diag::warn_drv_ps4_force_pic)<o:p></o:p></p>
<p>+                << LastPICArg->getSpelling();<o:p></o:p></p>
<p>+          }<o:p></o:p></p>
<p>+        }<o:p></o:p></p>
<p>       }<o:p></o:p></p>
<p>     }<o:p></o:p></p>
<p>   }<o:p></o:p></p>
<p>-  // Introduce a Darwin-specific hack. If the default is PIC, but the<o:p></o:p></p>
<p>-  // PIC level would've been set to level 1, force it back to level 2<o:p></o:p></p>
<p>-  // PIC instead. This matches the behavior of Darwin GCC (based on<o:p></o:p></p>
<p>-  // chandlerc's informal testing in 2012).<o:p></o:p></p>
<p>-  if (PIC && ToolChain.getTriple().isOSDarwin())<o:p></o:p></p>
<p>+  // Introduce a Darwin and PS4-specific hack. If the default is PIC, <o:p></o:p></p>
<p>+ but the  // PIC level would've been set to level 1, force it back to <o:p></o:p></p>
<p>+ level 2 PIC  // instead.<o:p></o:p></p>
<p>+  if (PIC && (ToolChain.getTriple().isOSDarwin() || Triple.isPS4CPU()))<o:p></o:p></p>
<p>     IsPICLevelTwo |= ToolChain.isPICDefault();<o:p></o:p></p>
<p>   // This kernel flags are a trump-card: they will disable PIC/PIE @@ -3182,6 +3190,7 @@ void Clang::ConstructJob(Compilation &C,<o:p></o:p></p>
<p>   bool IsWindowsCygnus =<o:p></o:p></p>
<p>       getToolChain().getTriple().isWindowsCygwinEnvironment();<o:p></o:p></p>
<p>   bool IsWindowsMSVC = getToolChain().getTriple().isWindowsMSVCEnvironment();<o:p></o:p></p>
<p>+  bool IsPS4CPU = getToolChain().getTriple().isPS4CPU();<o:p></o:p></p>
<p>   // Check number of inputs for sanity. We need at least one input.<o:p></o:p></p>
<p>   assert(Inputs.size() >= 1 && "Must have at least one input."); @@ -3823,8 +3832,10 @@ void Clang::ConstructJob(Compilation &C,<o:p></o:p></p>
<p>   // We ignore flags -gstrict-dwarf and -grecord-gcc-switches for now.<o:p></o:p></p>
<p>   Args.ClaimAllArgs(options::OPT_g_flags_Group);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  // PS4 defaults to no column info<o:p></o:p></p>
<p>   if (Args.hasFlag(options::OPT_gcolumn_info, options::OPT_gno_column_info,<o:p></o:p></p>
<p>-                   /*Default*/ true))<o:p></o:p></p>
<p>+                   /*Default=*/ !IsPS4CPU))<o:p></o:p></p>
<p>     CmdArgs.push_back("-dwarf-column-info");<o:p></o:p></p>
<p>   // FIXME: Move backend command line options to the module.<o:p></o:p></p>
<p>@@ -3851,7 +3862,8 @@ void Clang::ConstructJob(Compilation &C,<o:p></o:p></p>
<p>   // -gdwarf-aranges turns on the emission of the aranges section in the<o:p></o:p></p>
<p>   // backend.<o:p></o:p></p>
<p>-  if (Args.hasArg(options::OPT_gdwarf_aranges)) {<o:p></o:p></p>
<p>+  // Always enabled on the PS4.<o:p></o:p></p>
<p>+  if (Args.hasArg(options::OPT_gdwarf_aranges) || IsPS4CPU) {<o:p></o:p></p>
<p>     CmdArgs.push_back("-backend-option");<o:p></o:p></p>
<p>     CmdArgs.push_back("-generate-arange-section");<o:p></o:p></p>
<p>   }<o:p></o:p></p>
<p>@@ -9846,3 +9858,320 @@ void tools::Myriad::Linker::ConstructJob<o:p></o:p></p>
<p>   C.addCommand(llvm::make_unique<Command>(JA, *this, Args.MakeArgString(Exec),<o:p></o:p></p>
<p>                                           CmdArgs, Inputs));  }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+void PS4cpu::Assemble::ConstructJob(Compilation &C, const JobAction &JA,<o:p></o:p></p>
<p>+                                    const InputInfo &Output,<o:p></o:p></p>
<p>+                                    const InputInfoList &Inputs,<o:p></o:p></p>
<p>+                                    const ArgList &Args,<o:p></o:p></p>
<p>+                                    const char *LinkingOutput) const {<o:p></o:p></p>
<p>+  claimNoWarnArgs(Args);<o:p></o:p></p>
<p>+  ArgStringList CmdArgs;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, <o:p></o:p></p>
<p>+ options::OPT_Xassembler);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  CmdArgs.push_back("-o");<o:p></o:p></p>
<p>+  CmdArgs.push_back(Output.getFilename());<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  const char *Exec =<o:p></o:p></p>
<p>+      Args.MakeArgString(getToolChain().GetProgramPath("ps4-as"));<o:p></o:p></p>
<p>+  C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, <o:p></o:p></p>
<p>+Inputs)); }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+static void AddPS4ProfileRT(const ToolChain &TC, const ArgList &Args,<o:p></o:p></p>
<p>+                            ArgStringList &CmdArgs) {<o:p></o:p></p>
<p>+  if (!(Args.hasFlag(options::OPT_fprofile_arcs, options::OPT_fno_profile_arcs,<o:p></o:p></p>
<p>+                     false) ||<o:p></o:p></p>
<p>+        Args.hasArg(options::OPT_fprofile_generate) ||<o:p></o:p></p>
<p>+        Args.hasArg(options::OPT_fprofile_instr_generate) ||<o:p></o:p></p>
<p>+        Args.hasArg(options::OPT_fcreate_profile) ||<o:p></o:p></p>
<p>+        Args.hasArg(options::OPT_coverage)))<o:p></o:p></p>
<p>+    return;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  assert(TC.getTriple().isPS4CPU() &&<o:p></o:p></p>
<p>+         "Profiling libraries are only implemented for the PS4 CPU");<o:p></o:p></p>
<p>+  CmdArgs.push_back("-lclang_rt.profile-x86_64");<o:p></o:p></p>
<p>+}<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+static void AddPS4SanitizerArgs(const ToolChain &TC, ArgStringList <o:p></o:p></p>
<p>+&CmdArgs) {<o:p></o:p></p>
<p>+  const SanitizerArgs &SanArgs = TC.getSanitizerArgs();<o:p></o:p></p>
<p>+  if (SanArgs.needsUbsanRt()) {<o:p></o:p></p>
<p>+    CmdArgs.push_back("-lSceDbgUBSanitizer_stub_weak");<o:p></o:p></p>
<p>+  }<o:p></o:p></p>
<p>+  if (SanArgs.needsAsanRt()) {<o:p></o:p></p>
<p>+    CmdArgs.push_back("-lSceDbgAddressSanitizer_stub_weak");<o:p></o:p></p>
<p>+  }<o:p></o:p></p>
<p>+}<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+static void ConstructPS4LinkJob(const Tool &T, Compilation &C,<o:p></o:p></p>
<p>+                                const JobAction &JA, const InputInfo &Output,<o:p></o:p></p>
<p>+                                const InputInfoList &Inputs,<o:p></o:p></p>
<p>+                                const ArgList &Args,<o:p></o:p></p>
<p>+                                const char *LinkingOutput) {<o:p></o:p></p>
<p>+  const toolchains::FreeBSD &ToolChain =<o:p></o:p></p>
<p>+      static_cast<const toolchains::FreeBSD &>(T.getToolChain());<o:p></o:p></p>
<p>+  const Driver &D = ToolChain.getDriver();<o:p></o:p></p>
<p>+  ArgStringList CmdArgs;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  // Silence warning for "clang -g foo.o -o foo"<o:p></o:p></p>
<p>+  Args.ClaimAllArgs(options::OPT_g_Group);<o:p></o:p></p>
<p>+  // and "clang -emit-llvm foo.o -o foo"<o:p></o:p></p>
<p>+  Args.ClaimAllArgs(options::OPT_emit_llvm);<o:p></o:p></p>
<p>+  // and for "clang -w foo.o -o foo". Other warning options are already  <o:p>
</o:p></p>
<p>+ // handled somewhere else.<o:p></o:p></p>
<p>+  Args.ClaimAllArgs(options::OPT_w);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (!D.SysRoot.empty())<o:p></o:p></p>
<p>+    CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (Args.hasArg(options::OPT_pie))<o:p></o:p></p>
<p>+    CmdArgs.push_back("-pie");<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (Args.hasArg(options::OPT_rdynamic))<o:p></o:p></p>
<p>+    CmdArgs.push_back("-export-dynamic");<o:p></o:p></p>
<p>+  if (Args.hasArg(options::OPT_shared))<o:p></o:p></p>
<p>+    CmdArgs.push_back("--oformat=so");<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (Output.isFilename()) {<o:p></o:p></p>
<p>+    CmdArgs.push_back("-o");<o:p></o:p></p>
<p>+    CmdArgs.push_back(Output.getFilename());<o:p></o:p></p>
<p>+  } else {<o:p></o:p></p>
<p>+    assert(Output.isNothing() && "Invalid output.");  }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  Args.AddAllArgs(CmdArgs, options::OPT_L);  Args.AddAllArgs(CmdArgs, <o:p></o:p></p>
<p>+ options::OPT_T_Group);  Args.AddAllArgs(CmdArgs, options::OPT_e);  <o:p></o:p></p>
<p>+ Args.AddAllArgs(CmdArgs, options::OPT_s);  Args.AddAllArgs(CmdArgs, <o:p></o:p></p>
<p>+ options::OPT_t);  Args.AddAllArgs(CmdArgs, options::OPT_r);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (Args.hasArg(options::OPT_Z_Xlinker__no_demangle))<o:p></o:p></p>
<p>+    CmdArgs.push_back("--no-demangle");<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (Args.hasArg(options::OPT_pthread)) {<o:p></o:p></p>
<p>+    CmdArgs.push_back("-lpthread");<o:p></o:p></p>
<p>+  }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  AddPS4ProfileRT(ToolChain, Args, CmdArgs);  <o:p></o:p></p>
<p>+ AddPS4SanitizerArgs(ToolChain, CmdArgs);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  const char *Exec = <o:p></o:p></p>
<p>+ Args.MakeArgString(ToolChain.GetProgramPath("ps4-ld"));<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  C.addCommand(llvm::make_unique<Command>(JA, T, Exec, CmdArgs, <o:p></o:p></p>
<p>+Inputs)); }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+static void ConstructGoldLinkJob(const Tool &T, Compilation &C,<o:p></o:p></p>
<p>+                                 const JobAction &JA, const InputInfo &Output,<o:p></o:p></p>
<p>+                                 const InputInfoList &Inputs,<o:p></o:p></p>
<p>+                                 const ArgList &Args,<o:p></o:p></p>
<p>+                                 const char *LinkingOutput) {<o:p></o:p></p>
<p>+  const toolchains::FreeBSD &ToolChain =<o:p></o:p></p>
<p>+      static_cast<const toolchains::FreeBSD &>(T.getToolChain());<o:p></o:p></p>
<p>+  const Driver &D = ToolChain.getDriver();<o:p></o:p></p>
<p>+  ArgStringList CmdArgs;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  // Silence warning for "clang -g foo.o -o foo"<o:p></o:p></p>
<p>+  Args.ClaimAllArgs(options::OPT_g_Group);<o:p></o:p></p>
<p>+  // and "clang -emit-llvm foo.o -o foo"<o:p></o:p></p>
<p>+  Args.ClaimAllArgs(options::OPT_emit_llvm);<o:p></o:p></p>
<p>+  // and for "clang -w foo.o -o foo". Other warning options are already  <o:p>
</o:p></p>
<p>+ // handled somewhere else.<o:p></o:p></p>
<p>+  Args.ClaimAllArgs(options::OPT_w);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (!D.SysRoot.empty())<o:p></o:p></p>
<p>+    CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (Args.hasArg(options::OPT_pie))<o:p></o:p></p>
<p>+    CmdArgs.push_back("-pie");<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (Args.hasArg(options::OPT_static)) {<o:p></o:p></p>
<p>+    CmdArgs.push_back("-Bstatic");<o:p></o:p></p>
<p>+  } else {<o:p></o:p></p>
<p>+    if (Args.hasArg(options::OPT_rdynamic))<o:p></o:p></p>
<p>+      CmdArgs.push_back("-export-dynamic");<o:p></o:p></p>
<p>+    CmdArgs.push_back("--eh-frame-hdr");<o:p></o:p></p>
<p>+    if (Args.hasArg(options::OPT_shared)) {<o:p></o:p></p>
<p>+      CmdArgs.push_back("-Bshareable");<o:p></o:p></p>
<p>+    } else {<o:p></o:p></p>
<p>+      CmdArgs.push_back("-dynamic-linker");<o:p></o:p></p>
<p>+      CmdArgs.push_back("/libexec/ld-elf.so.1");<o:p></o:p></p>
<p>+    }<o:p></o:p></p>
<p>+    CmdArgs.push_back("--enable-new-dtags");<o:p></o:p></p>
<p>+  }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (Output.isFilename()) {<o:p></o:p></p>
<p>+    CmdArgs.push_back("-o");<o:p></o:p></p>
<p>+    CmdArgs.push_back(Output.getFilename());<o:p></o:p></p>
<p>+  } else {<o:p></o:p></p>
<p>+    assert(Output.isNothing() && "Invalid output.");  }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (!Args.hasArg(options::OPT_nostdlib) &&<o:p></o:p></p>
<p>+      !Args.hasArg(options::OPT_nostartfiles)) {<o:p></o:p></p>
<p>+    const char *crt1 = NULL;<o:p></o:p></p>
<p>+    if (!Args.hasArg(options::OPT_shared)) {<o:p></o:p></p>
<p>+      if (Args.hasArg(options::OPT_pg))<o:p></o:p></p>
<p>+        crt1 = "gcrt1.o";<o:p></o:p></p>
<p>+      else if (Args.hasArg(options::OPT_pie))<o:p></o:p></p>
<p>+        crt1 = "Scrt1.o";<o:p></o:p></p>
<p>+      else<o:p></o:p></p>
<p>+        crt1 = "crt1.o";<o:p></o:p></p>
<p>+    }<o:p></o:p></p>
<p>+    if (crt1)<o:p></o:p></p>
<p>+      <o:p></o:p></p>
<p>+ CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crt1)));<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+    <o:p></o:p></p>
<p>+ CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o")))<o:p></o:p></p>
<p>+ ;<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+    const char *crtbegin = NULL;<o:p></o:p></p>
<p>+    if (Args.hasArg(options::OPT_static))<o:p></o:p></p>
<p>+      crtbegin = "crtbeginT.o";<o:p></o:p></p>
<p>+    else if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))<o:p></o:p></p>
<p>+      crtbegin = "crtbeginS.o";<o:p></o:p></p>
<p>+    else<o:p></o:p></p>
<p>+      crtbegin = "crtbegin.o";<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+    <o:p></o:p></p>
<p>+ CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin)))<o:p></o:p></p>
<p>+ ;<o:p></o:p></p>
<p>+  }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  Args.AddAllArgs(CmdArgs, options::OPT_L);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  const ToolChain::path_list Paths = ToolChain.getFilePaths();  for <o:p></o:p></p>
<p>+ (ToolChain::path_list::const_iterator i = Paths.begin(), e = Paths.end();<o:p></o:p></p>
<p>+       i != e; ++i)<o:p></o:p></p>
<p>+    CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + *i));<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  Args.AddAllArgs(CmdArgs, options::OPT_T_Group);  <o:p></o:p></p>
<p>+ Args.AddAllArgs(CmdArgs, options::OPT_e);  Args.AddAllArgs(CmdArgs, <o:p></o:p></p>
<p>+ options::OPT_s);  Args.AddAllArgs(CmdArgs, options::OPT_t);  <o:p></o:p></p>
<p>+ Args.AddAllArgs(CmdArgs, options::OPT_r);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (Args.hasArg(options::OPT_Z_Xlinker__no_demangle))<o:p></o:p></p>
<p>+    CmdArgs.push_back("--no-demangle");<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (!Args.hasArg(options::OPT_nostdlib) &&<o:p></o:p></p>
<p>+      !Args.hasArg(options::OPT_nodefaultlibs)) {<o:p></o:p></p>
<p>+    // For PS4, we always want to pass libm, libstdc++ and libkernel<o:p></o:p></p>
<p>+    // libraries for both C and C++ compilations.<o:p></o:p></p>
<p>+    CmdArgs.push_back("-lkernel");<o:p></o:p></p>
<p>+    if (D.CCCIsCXX()) {<o:p></o:p></p>
<p>+      ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs);<o:p></o:p></p>
<p>+      if (Args.hasArg(options::OPT_pg))<o:p></o:p></p>
<p>+        CmdArgs.push_back("-lm_p");<o:p></o:p></p>
<p>+      else<o:p></o:p></p>
<p>+        CmdArgs.push_back("-lm");<o:p></o:p></p>
<p>+    }<o:p></o:p></p>
<p>+    // FIXME: For some reason GCC passes -lgcc and -lgcc_s before adding<o:p></o:p></p>
<p>+    // the default system libraries. Just mimic this for now.<o:p></o:p></p>
<p>+    if (Args.hasArg(options::OPT_pg))<o:p></o:p></p>
<p>+      CmdArgs.push_back("-lgcc_p");<o:p></o:p></p>
<p>+    else<o:p></o:p></p>
<p>+      CmdArgs.push_back("-lcompiler_rt");<o:p></o:p></p>
<p>+    if (Args.hasArg(options::OPT_static)) {<o:p></o:p></p>
<p>+      CmdArgs.push_back("-lstdc++");<o:p></o:p></p>
<p>+    } else if (Args.hasArg(options::OPT_pg)) {<o:p></o:p></p>
<p>+      CmdArgs.push_back("-lgcc_eh_p");<o:p></o:p></p>
<p>+    } else {<o:p></o:p></p>
<p>+      CmdArgs.push_back("--as-needed");<o:p></o:p></p>
<p>+      CmdArgs.push_back("-lstdc++");<o:p></o:p></p>
<p>+      CmdArgs.push_back("--no-as-needed");<o:p></o:p></p>
<p>+    }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+    if (Args.hasArg(options::OPT_pthread)) {<o:p></o:p></p>
<p>+      if (Args.hasArg(options::OPT_pg))<o:p></o:p></p>
<p>+        CmdArgs.push_back("-lpthread_p");<o:p></o:p></p>
<p>+      else<o:p></o:p></p>
<p>+        CmdArgs.push_back("-lpthread");<o:p></o:p></p>
<p>+    }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+    if (Args.hasArg(options::OPT_pg)) {<o:p></o:p></p>
<p>+      if (Args.hasArg(options::OPT_shared))<o:p></o:p></p>
<p>+        CmdArgs.push_back("-lc");<o:p></o:p></p>
<p>+      else {<o:p></o:p></p>
<p>+        if (Args.hasArg(options::OPT_static)) {<o:p></o:p></p>
<p>+          CmdArgs.push_back("--start-group");<o:p></o:p></p>
<p>+          CmdArgs.push_back("-lc_p");<o:p></o:p></p>
<p>+          CmdArgs.push_back("-lpthread_p");<o:p></o:p></p>
<p>+          CmdArgs.push_back("--end-group");<o:p></o:p></p>
<p>+        } else {<o:p></o:p></p>
<p>+          CmdArgs.push_back("-lc_p");<o:p></o:p></p>
<p>+        }<o:p></o:p></p>
<p>+      }<o:p></o:p></p>
<p>+      CmdArgs.push_back("-lgcc_p");<o:p></o:p></p>
<p>+    } else {<o:p></o:p></p>
<p>+      if (Args.hasArg(options::OPT_static)) {<o:p></o:p></p>
<p>+        CmdArgs.push_back("--start-group");<o:p></o:p></p>
<p>+        CmdArgs.push_back("-lc");<o:p></o:p></p>
<p>+        CmdArgs.push_back("-lpthread");<o:p></o:p></p>
<p>+        CmdArgs.push_back("--end-group");<o:p></o:p></p>
<p>+      } else {<o:p></o:p></p>
<p>+        CmdArgs.push_back("-lc");<o:p></o:p></p>
<p>+      }<o:p></o:p></p>
<p>+      CmdArgs.push_back("-lcompiler_rt");<o:p></o:p></p>
<p>+    }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+    if (Args.hasArg(options::OPT_static)) {<o:p></o:p></p>
<p>+      CmdArgs.push_back("-lstdc++");<o:p></o:p></p>
<p>+    } else if (Args.hasArg(options::OPT_pg)) {<o:p></o:p></p>
<p>+      CmdArgs.push_back("-lgcc_eh_p");<o:p></o:p></p>
<p>+    } else {<o:p></o:p></p>
<p>+      CmdArgs.push_back("--as-needed");<o:p></o:p></p>
<p>+      CmdArgs.push_back("-lstdc++");<o:p></o:p></p>
<p>+      CmdArgs.push_back("--no-as-needed");<o:p></o:p></p>
<p>+    }<o:p></o:p></p>
<p>+  }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (!Args.hasArg(options::OPT_nostdlib) &&<o:p></o:p></p>
<p>+      !Args.hasArg(options::OPT_nostartfiles)) {<o:p></o:p></p>
<p>+    if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))<o:p></o:p></p>
<p>+      CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtendS.o")));<o:p></o:p></p>
<p>+    else<o:p></o:p></p>
<p>+      CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtend.o")));<o:p></o:p></p>
<p>+    <o:p></o:p></p>
<p>+ CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o")))<o:p></o:p></p>
<p>+ ;<o:p></o:p></p>
<p>+  }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  AddPS4ProfileRT(ToolChain, Args, CmdArgs);  <o:p></o:p></p>
<p>+ AddPS4SanitizerArgs(ToolChain, CmdArgs);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  const char *Exec =<o:p></o:p></p>
<p>+#ifdef LLVM_ON_WIN32<o:p></o:p></p>
<p>+      Args.MakeArgString(ToolChain.GetProgramPath("ps4-ld.gold.exe"));<o:p></o:p></p>
<p>+#else<o:p></o:p></p>
<p>+      Args.MakeArgString(ToolChain.GetProgramPath("ps4-ld"));<o:p></o:p></p>
<p>+#endif<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  C.addCommand(llvm::make_unique<Command>(JA, T, Exec, CmdArgs, <o:p></o:p></p>
<p>+Inputs)); }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+void PS4cpu::Link::ConstructJob(Compilation &C, const JobAction &JA,<o:p></o:p></p>
<p>+                                const InputInfo &Output,<o:p></o:p></p>
<p>+                                const InputInfoList &Inputs,<o:p></o:p></p>
<p>+                                const ArgList &Args,<o:p></o:p></p>
<p>+                                const char *LinkingOutput) const {<o:p></o:p></p>
<p>+  const toolchains::FreeBSD &ToolChain =<o:p></o:p></p>
<p>+      static_cast<const toolchains::FreeBSD &>(getToolChain());<o:p></o:p></p>
<p>+  const Driver &D = ToolChain.getDriver();<o:p></o:p></p>
<p>+  bool PS4Linker;<o:p></o:p></p>
<p>+  StringRef LinkerOptName;<o:p></o:p></p>
<p>+  if (const Arg *A = Args.getLastArg(options::OPT_fuse_ld_EQ)) {<o:p></o:p></p>
<p>+    LinkerOptName = A->getValue();<o:p></o:p></p>
<p>+    if (LinkerOptName != "ps4" && LinkerOptName != "gold")<o:p></o:p></p>
<p>+      D.Diag(diag::err_drv_unsupported_linker) << LinkerOptName;<o:p></o:p></p>
<p>+  }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (LinkerOptName == "gold")<o:p></o:p></p>
<p>+    PS4Linker = false;<o:p></o:p></p>
<p>+  else if (LinkerOptName == "ps4")<o:p></o:p></p>
<p>+    PS4Linker = true;<o:p></o:p></p>
<p>+  else<o:p></o:p></p>
<p>+    PS4Linker = !Args.hasArg(options::OPT_shared);<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  if (PS4Linker)<o:p></o:p></p>
<p>+    ConstructPS4LinkJob(*this, C, JA, Output, Inputs, Args, <o:p></o:p></p>
<p>+LinkingOutput);<o:p></o:p></p>
<p>+  else<o:p></o:p></p>
<p>+    ConstructGoldLinkJob(*this, C, JA, Output, Inputs, Args, <o:p></o:p></p>
<p>+LinkingOutput); }<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Modified: cfe/trunk/lib/Driver/Tools.h<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=248546&r1=248545&r2=248546&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.h?rev=248546&r1=248545&r2=248546&view=diff</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/lib/Driver/Tools.h (original)<o:p></o:p></p>
<p>+++ cfe/trunk/lib/Driver/Tools.h Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -827,6 +827,36 @@ public:<o:p></o:p></p>
<p>};<o:p></o:p></p>
<p>} // end namespace Myriad<o:p></o:p></p>
<p>+namespace PS4cpu {<o:p></o:p></p>
<p>+class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {<o:p></o:p></p>
<p>+public:<o:p></o:p></p>
<p>+  Assemble(const ToolChain &TC)<o:p></o:p></p>
<p>+      : Tool("PS4cpu::Assemble", "assembler", TC, RF_Full) {}<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  virtual bool hasIntegratedCPP() const { return false; }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  virtual void ConstructJob(Compilation &C, const JobAction &JA,<o:p></o:p></p>
<p>+                            const InputInfo &Output,<o:p></o:p></p>
<p>+                            const InputInfoList &Inputs,<o:p></o:p></p>
<p>+                            const llvm::opt::ArgList &TCArgs,<o:p></o:p></p>
<p>+                            const char *LinkingOutput) const; };<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+class LLVM_LIBRARY_VISIBILITY Link : public Tool {<o:p></o:p></p>
<p>+public:<o:p></o:p></p>
<p>+  Link(const ToolChain &TC) : Tool("PS4cpu::Link", "linker", TC, <o:p></o:p></p>
<p>+RF_Full) {}<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  virtual bool hasIntegratedCPP() const { return false; }  virtual bool <o:p>
</o:p></p>
<p>+ isLinkJob() const { return true; }<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+  virtual void ConstructJob(Compilation &C, const JobAction &JA,<o:p></o:p></p>
<p>+                            const InputInfo &Output,<o:p></o:p></p>
<p>+                            const InputInfoList &Inputs,<o:p></o:p></p>
<p>+                            const llvm::opt::ArgList &TCArgs,<o:p></o:p></p>
<p>+                            const char *LinkingOutput) const; }; } // <o:p></o:p></p>
<p>+end namespace PS4cpu<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>} // end namespace tools<o:p></o:p></p>
<p>} // end namespace driver<o:p></o:p></p>
<p>} // end namespace clang<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Modified: cfe/trunk/lib/Frontend/InitHeaderSearch.cpp<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitHeaderSearch.cpp?rev=248546&r1=248545&r2=248546&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitHeaderSearch.cpp?rev=248546&r1=248545&r2=248546&view=diff</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/lib/Frontend/InitHeaderSearch.cpp (original)<o:p></o:p></p>
<p>+++ cfe/trunk/lib/Frontend/InitHeaderSearch.cpp Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -215,6 +215,7 @@ void InitHeaderSearch::AddDefaultCInclud<o:p></o:p></p>
<p>     case llvm::Triple::OpenBSD:<o:p></o:p></p>
<p>     case llvm::Triple::Bitrig:<o:p></o:p></p>
<p>     case llvm::Triple::NaCl:<o:p></o:p></p>
<p>+    case llvm::Triple::PS4:<o:p></o:p></p>
<p>       break;<o:p></o:p></p>
<p>     case llvm::Triple::Win32:<o:p></o:p></p>
<p>       if (triple.getEnvironment() != llvm::Triple::Cygnus) @@ -320,6 +321,28 @@ void InitHeaderSearch::AddDefaultCInclud<o:p></o:p></p>
<p>   case llvm::Triple::RTEMS:<o:p></o:p></p>
<p>   case llvm::Triple::NaCl:<o:p></o:p></p>
<p>     break;<o:p></o:p></p>
<p>+  case llvm::Triple::PS4: {<o:p></o:p></p>
<p>+    // <isysroot> gets prepended later in AddPath().<o:p></o:p></p>
<p>+    std::string BaseSDKPath = "";<o:p></o:p></p>
<p>+    if (!HasSysroot) {<o:p></o:p></p>
<p>+      const char *envValue = getenv("SCE_PS4_SDK_DIR");<o:p></o:p></p>
<p>+      if (envValue)<o:p></o:p></p>
<p>+        BaseSDKPath = envValue;<o:p></o:p></p>
<p>+      else {<o:p></o:p></p>
<p>+        // HSOpts.ResourceDir variable contains the location of Clang's<o:p></o:p></p>
<p>+        // resource files.<o:p></o:p></p>
<p>+        // Assuming that Clang is configured for PS4 without<o:p></o:p></p>
<p>+        // --with-clang-resource-dir option, the location of Clang's resource<o:p></o:p></p>
<p>+        // files is <SDK_DIR>/host_tools/lib/clang<o:p></o:p></p>
<p>+        SmallString<128> P = StringRef(HSOpts.ResourceDir);<o:p></o:p></p>
<p>+        llvm::sys::path::append(P, "../../..");<o:p></o:p></p>
<p>+        BaseSDKPath = P.str();<o:p></o:p></p>
<p>+      }<o:p></o:p></p>
<p>+    }<o:p></o:p></p>
<p>+    AddPath(BaseSDKPath + "/target/include", System, false);<o:p></o:p></p>
<p>+    if (triple.isPS4CPU())<o:p></o:p></p>
<p>+      AddPath(BaseSDKPath + "/target/include_common", System, false);  <o:p></o:p></p>
<p>+ }<o:p></o:p></p>
<p>   default:<o:p></o:p></p>
<p>     AddPath("/usr/include", ExternCSystem, false);<o:p></o:p></p>
<p>     break;<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Added: cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include/.keep<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include/.keep?rev=248546&view=auto" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include/.keep?rev=248546&view=auto</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>    (empty)<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Added: cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/.keep<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/.keep?rev=248546&view=auto" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/.keep?rev=248546&view=auto</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/.keep (added)<o:p></o:p></p>
<p>+++ cfe/trunk/test/Driver/Inputs/scei-ps4_tree/target/include_common/.ke<o:p></o:p></p>
<p>+++ ep Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -0,0 +1 @@<o:p></o:p></p>
<p>+ <o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Modified: cfe/trunk/test/Driver/debug-options.c<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/debug-options.c?rev=248546&r1=248545&r2=248546&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/debug-options.c?rev=248546&r1=248545&r2=248546&view=diff</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/test/Driver/debug-options.c (original)<o:p></o:p></p>
<p>+++ cfe/trunk/test/Driver/debug-options.c Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -27,6 +27,17 @@<o:p></o:p></p>
<p>// RUN: %clang -### -c -ggdb3 %s -target x86_64-apple-darwin 2>&1 \<o:p></o:p></p>
<p>// RUN:             | FileCheck -check-prefix=G_DARWIN %s<o:p></o:p></p>
<p>+// On the PS4, -g defaults to -gno-column-info, and we always generate <o:p></o:p></p>
<p>+the // arange section.<o:p></o:p></p>
<p>+// RUN: %clang -### -c %s -target x86_64-scei-ps4 2>&1 \<o:p></o:p></p>
<p>+// RUN:             | FileCheck -check-prefix=G_PS4 %s<o:p></o:p></p>
<p>+// RUN: %clang -### -c %s -g -target x86_64-scei-ps4 2>&1 \<o:p></o:p></p>
<p>+// RUN:             | FileCheck -check-prefix=G_PS4 %s<o:p></o:p></p>
<p>+// RUN: %clang -### -c %s -g -target x86_64-scei-ps4 2>&1 \<o:p></o:p></p>
<p>+// RUN:             | FileCheck -check-prefix=NOCI %s<o:p></o:p></p>
<p>+// RUN: %clang -### -c %s -g -gcolumn-info -target x86_64-scei-ps4 2>&1 \<o:p></o:p></p>
<p>+// RUN:             | FileCheck -check-prefix=CI %s<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>// 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"<o:p></o:p></p>
<p>// G_DARWIN: "-gdwarf-2"<o:p></o:p></p>
<p>//<o:p></o:p></p>
<p>+// G_PS4: "-cc1"<o:p></o:p></p>
<p>+// G_PS4: "-generate-arange-section"<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>// G_D2: "-cc1"<o:p></o:p></p>
<p>// G_D2: "-gdwarf-2"<o:p></o:p></p>
<p>//<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Added: cfe/trunk/test/Driver/ps4-header-search.c<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-header-search.c?rev=248546&view=auto" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-header-search.c?rev=248546&view=auto</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/test/Driver/ps4-header-search.c (added)<o:p></o:p></p>
<p>+++ cfe/trunk/test/Driver/ps4-header-search.c Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -0,0 +1,10 @@<o:p></o:p></p>
<p>+// REQUIRES: x86-registered-target<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: env SCE_PS4_SDK_DIR=%S/Inputs/scei-ps4_tree %clang -target <o:p></o:p></p>
<p>+x86_64-scei-ps4 -E -v %s 2>&1 | FileCheck %s --check-prefix=ENVPS4 // <o:p></o:p></p>
<p>+ENVPS4: Inputs/scei-ps4_tree/target/include{{$}}<o:p></o:p></p>
<p>+// ENVPS4: Inputs/scei-ps4_tree/target/include_common{{$}}<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: %clang -isysroot %S/Inputs/scei-ps4_tree -target <o:p></o:p></p>
<p>+x86_64-scei-ps4 -E -v %s 2>&1 | FileCheck %s --check-prefix=SYSROOTPS4 // SYSROOTPS4: "{{[^"]*}}clang{{[^"]*}}"<o:p></o:p></p>
<p>+// SYSROOTPS4: Inputs/scei-ps4_tree/target/include{{$}}<o:p></o:p></p>
<p>+// SYSROOTPS4: Inputs/scei-ps4_tree/target/include_common{{$}}<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Added: cfe/trunk/test/Driver/ps4-linker-non-win.c<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-linker-non-win.c?rev=248546&view=auto" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-linker-non-win.c?rev=248546&view=auto</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/test/Driver/ps4-linker-non-win.c (added)<o:p></o:p></p>
<p>+++ cfe/trunk/test/Driver/ps4-linker-non-win.c Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -0,0 +1,18 @@<o:p></o:p></p>
<p>+// UNSUPPORTED: system-windows<o:p></o:p></p>
<p>+// REQUIRES: x86-registered-target<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: touch %T/ps4-ld<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: env "PATH=%T" %clang -### -target x86_64-scei-ps4  %s -linker=gold 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s<o:p></o:p></p>
<p>+// RUN: env "PATH=%T" %clang -### -target x86_64-scei-ps4  %s -shared 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: env "PATH=%T" %clang -### -target x86_64-scei-ps4  %s 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s<o:p></o:p></p>
<p>+// RUN: env "PATH=%T" %clang -### -target x86_64-scei-ps4  %s -linker=ps4 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s<o:p></o:p></p>
<p>+// RUN: env "PATH=%T" %clang -### -target x86_64-scei-ps4  %s -shared \<o:p></o:p></p>
<p>+// RUN:     -linker=ps4 2>&1 | FileCheck --check-prefix=CHECK-PS4-LINKER %s<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// CHECK-PS4-LINKER: ps4-ld<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Added: cfe/trunk/test/Driver/ps4-linker-win.c<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-linker-win.c?rev=248546&view=auto" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-linker-win.c?rev=248546&view=auto</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/test/Driver/ps4-linker-win.c (added)<o:p></o:p></p>
<p>+++ cfe/trunk/test/Driver/ps4-linker-win.c Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -0,0 +1,26 @@<o:p></o:p></p>
<p>+// The full path to the gold linker was not found on Windows because <o:p></o:p></p>
<p>+the // driver fails to add an .exe extension to the name.<o:p></o:p></p>
<p>+// We check that gold linker's full name (with an extension) is <o:p></o:p></p>
<p>+specified // on the command line if -linker=gold, or -shared with no <o:p></o:p></p>
<p>+-linker option // are passed. Otherwise, we check that the PS4's <o:p></o:p></p>
<p>+linker's full name is // specified.<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// REQUIRES: system-windows, x86-registered-target<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: touch %T/ps4-ld.exe<o:p></o:p></p>
<p>+// RUN: touch %T/ps4-ld.gold.exe<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: env "PATH=%T" %clang -target x86_64-scei-ps4  %s -linker=gold -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck --check-prefix=CHECK-PS4-GOLD %s<o:p></o:p></p>
<p>+// RUN: env "PATH=%T" %clang -target x86_64-scei-ps4  %s -shared -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck --check-prefix=CHECK-PS4-GOLD %s<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: env "PATH=%T" %clang -target x86_64-scei-ps4  %s -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s<o:p></o:p></p>
<p>+// RUN: env "PATH=%T" %clang -target x86_64-scei-ps4  %s -linker=ps4 -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck --check-prefix=CHECK-PS4-LINKER %s<o:p></o:p></p>
<p>+// RUN: env "PATH=%T" %clang -target x86_64-scei-ps4  %s -shared \<o:p></o:p></p>
<p>+// RUN:     -linker=ps4 -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-LINKER %s<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// CHECK-PS4-GOLD: ps4-ld.gold.exe<o:p></o:p></p>
<p>+// CHECK-PS4-LINKER: ps4-ld.exe<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Added: cfe/trunk/test/Driver/ps4-pic.c<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-pic.c?rev=248546&view=auto" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-pic.c?rev=248546&view=auto</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/test/Driver/ps4-pic.c (added)<o:p></o:p></p>
<p>+++ cfe/trunk/test/Driver/ps4-pic.c Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -0,0 +1,106 @@<o:p></o:p></p>
<p>+// REQUIRES: x86-registered-target<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// Test the driver's control over the PIC behavior for PS4 compiler.<o:p></o:p></p>
<p>+// These consist of tests of the relocation model flags and the // pic <o:p></o:p></p>
<p>+level flags passed to CC1.<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// CHECK-NO-PIC: "-mrelocation-model" "static"<o:p></o:p></p>
<p>+// CHECK-NO-PIC-NOT: "-pic-level"<o:p></o:p></p>
<p>+// CHECK-NO-PIC-NOT: "-pie-level"<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// CHECK-DYNAMIC-NO-PIC2: unsupported option '-mdynamic-no-pic'<o:p></o:p></p>
<p>+// CHECK-DYNAMIC-NO-PIC2: "-mrelocation-model" "dynamic-no-pic"<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// CHECK-PIC2: "-mrelocation-model" "pic"<o:p></o:p></p>
<p>+// CHECK-PIC2: "-pic-level" "2"<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// CHECK-PIE2: "-mrelocation-model" "pic"<o:p></o:p></p>
<p>+// CHECK-PIE2: "-pie-level" "2"<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// CHECK-NOPIC-IGNORED: using '-fPIC'<o:p></o:p></p>
<p>+// CHECK-NOPIC-IGNORED: "-mrelocation-model" "pic"<o:p></o:p></p>
<p>+// CHECK-NOPIC-IGNORED: "-pic-level" "2"<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// CHECK-DIAG-PIC: option '-fno-PIC' was ignored by the PS4 toolchain, using '-fPIC'<o:p></o:p></p>
<p>+// CHECK-DIAG-PIE: option '-fno-PIE' was ignored by the PS4 toolchain, using '-fPIC'<o:p></o:p></p>
<p>+// CHECK-DIAG-pic: option '-fno-pic' was ignored by the PS4 toolchain, using '-fPIC'<o:p></o:p></p>
<p>+// CHECK-DIAG-pie: option '-fno-pie' was ignored by the PS4 toolchain, using '-fPIC'<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// CHECK-STATIC-ERR: unsupported option '-static' for target 'PS4'<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIC -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpie -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-PIE2<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIE -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-PIE2<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -fno-pic -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIC -fno-PIC -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -fno-PIC -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIC -fno-pic -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpie -fno-pie -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIE -fno-PIE -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpie -fno-PIE -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIE -fno-pie -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpie -fno-pic -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -fno-pie -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -fPIC -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fPIC -fpic -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpic -fPIE -fpie -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-PIE2<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fpie -fPIC -fPIE -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-PIE2<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// Defaults change for PS4.<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-PIC2<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-pic -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-PIC -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NOPIC-IGNORED<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// Disregard any of the PIC-specific flags if we have a trump-card flag.<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -mkernel -fPIC -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -mdynamic-no-pic -fPIC -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC2<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// -static not supported at all.<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -static -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-STATIC-ERR<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// -fno-PIC etc. is obeyed if -mcmodel=kernel is also present.<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -mcmodel=kernel -fno-PIC -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -mcmodel=kernel -fno-PIE -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -mcmodel=kernel -fno-pic -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -mcmodel=kernel -fno-pie -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-NO-PIC<o:p></o:p></p>
<p>+//<o:p></o:p></p>
<p>+// Verify that we reflect the option the user specified, when we ignore it.<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-PIC -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-DIAG-PIC<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-PIE -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-DIAG-PIE<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-pic -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-DIAG-pic<o:p></o:p></p>
<p>+// RUN: %clang -c %s -target x86_64-scei-ps4 -fno-pie -### 2>&1 \<o:p></o:p></p>
<p>+// RUN:   | FileCheck %s --check-prefix=CHECK-DIAG-pie<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Added: cfe/trunk/test/Driver/ps4-sdk-root.c<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-sdk-root.c?rev=248546&view=auto" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/ps4-sdk-root.c?rev=248546&view=auto</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/test/Driver/ps4-sdk-root.c (added)<o:p></o:p></p>
<p>+++ cfe/trunk/test/Driver/ps4-sdk-root.c Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -0,0 +1,48 @@<o:p></o:p></p>
<p>+// REQUIRES: x86-registered-target<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// Check that ps4-clang doesn't report a warning message when locating <o:p></o:p></p>
<p>+// system header files (either by looking at the value of <o:p></o:p></p>
<p>+SCE_PS4_SDK_DIR // or relative to the location of the compiler driver), <o:p>
</o:p></p>
<p>+if "-nostdinc", // "--sysroot" or "-isysroot" option is specified on the command line.<o:p></o:p></p>
<p>+// Otherwise, check that ps4-clang reports a warning.<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// Check that clang doesn't report a warning message when locating // <o:p></o:p></p>
<p>+system libraries (either by looking at the value of SCE_PS4_SDK_DIR // <o:p></o:p></p>
<p>+or relative to the location of the compiler driver), if "-c", "-S", <o:p></o:p></p>
<p>+"-E", // "--sysroot", "-nostdlib" or "-nodefaultlibs" option is <o:p></o:p></p>
<p>+specified on // the command line.<o:p></o:p></p>
<p>+// Otherwise, check that ps4-clang reports a warning.<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// setting up SCE_PS4_SDK_DIR to existing location, which is not a PS4 SDK.<o:p></o:p></p>
<p>+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -target x86_64-scei-ps4 %s <o:p></o:p></p>
<p>+2>&1 | FileCheck -check-prefix=WARN-SYS-HEADERS <o:p></o:p></p>
<p>+-check-prefix=WARN-SYS-LIBS -check-prefix=NO-WARN %s<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -c -target x86_64-scei-ps4 <o:p></o:p></p>
<p>+%s 2>&1 | FileCheck -check-prefix=WARN-SYS-HEADERS <o:p></o:p></p>
<p>+-check-prefix=NO-WARN %s // RUN: env SCE_PS4_SDK_DIR=.. %clang -### -S <o:p></o:p></p>
<p>+-target x86_64-scei-ps4 %s 2>&1 | FileCheck <o:p></o:p></p>
<p>+-check-prefix=WARN-SYS-HEADERS -check-prefix=NO-WARN %s // RUN: env <o:p></o:p></p>
<p>+SCE_PS4_SDK_DIR=.. %clang -### -E -target x86_64-scei-ps4 %s 2>&1 | <o:p></o:p></p>
<p>+FileCheck -check-prefix=WARN-SYS-HEADERS -check-prefix=NO-WARN %s // <o:p></o:p></p>
<p>+RUN: env SCE_PS4_SDK_DIR=.. %clang -### -emit-ast -target <o:p></o:p></p>
<p>+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=WARN-SYS-HEADERS <o:p></o:p></p>
<p>+-check-prefix=NO-WARN %s // RUN: env SCE_PS4_SDK_DIR=.. %clang -### <o:p></o:p></p>
<p>+-isysroot foo -target x86_64-scei-ps4 %s 2>&1 | FileCheck <o:p></o:p></p>
<p>+-check-prefix=WARN-ISYSROOT -check-prefix=WARN-SYS-LIBS <o:p></o:p></p>
<p>+-check-prefix=NO-WARN %s<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -c -nostdinc -target <o:p></o:p></p>
<p>+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN: <o:p></o:p></p>
<p>+env SCE_PS4_SDK_DIR=.. %clang -### -S -nostdinc -target x86_64-scei-ps4 <o:p>
</o:p></p>
<p>+%s 2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN: env <o:p></o:p></p>
<p>+SCE_PS4_SDK_DIR=.. %clang -### -E -nostdinc -target x86_64-scei-ps4 %s <o:p></o:p></p>
<p>+2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN: env <o:p></o:p></p>
<p>+SCE_PS4_SDK_DIR=.. %clang -### -emit-ast -nostdinc -target <o:p></o:p></p>
<p>+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -c --sysroot=foo/ -target <o:p></o:p></p>
<p>+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN: <o:p></o:p></p>
<p>+env SCE_PS4_SDK_DIR=.. %clang -### -S --sysroot=foo/ -target <o:p></o:p></p>
<p>+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN: <o:p></o:p></p>
<p>+env SCE_PS4_SDK_DIR=.. %clang -### -E --sysroot=foo/ -target <o:p></o:p></p>
<p>+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s // RUN: <o:p></o:p></p>
<p>+env SCE_PS4_SDK_DIR=.. %clang -### -emit-ast --sysroot=foo/ -target <o:p></o:p></p>
<p>+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=NO-WARN %s<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -c -isysroot foo -target <o:p></o:p></p>
<p>+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=WARN-ISYSROOT <o:p></o:p></p>
<p>+-check-prefix=NO-WARN %s // RUN: env SCE_PS4_SDK_DIR=.. %clang -### -S <o:p></o:p></p>
<p>+-isysroot foo -target x86_64-scei-ps4 %s 2>&1 | FileCheck <o:p></o:p></p>
<p>+-check-prefix=WARN-ISYSROOT -check-prefix=NO-WARN %s // RUN: env <o:p></o:p></p>
<p>+SCE_PS4_SDK_DIR=.. %clang -### -E -isysroot foo -target x86_64-scei-ps4 <o:p>
</o:p></p>
<p>+%s 2>&1 | FileCheck -check-prefix=WARN-ISYSROOT -check-prefix=NO-WARN <o:p></o:p></p>
<p>+%s // RUN: env SCE_PS4_SDK_DIR=.. %clang -### -emit-ast -isysroot foo <o:p></o:p></p>
<p>+-target x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=WARN-ISYSROOT <o:p>
</o:p></p>
<p>+-check-prefix=NO-WARN %s // RUN: env SCE_PS4_SDK_DIR=.. %clang -### <o:p></o:p></p>
<p>+--sysroot=foo/ -isysroot foo -target x86_64-scei-ps4 %s 2>&1 | <o:p></o:p></p>
<p>+FileCheck -check-prefix=WARN-ISYSROOT -check-prefix=NO-WARN %s<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: env SCE_PS4_SDK_DIR=.. %clang -### -nostdlib -target <o:p></o:p></p>
<p>+x86_64-scei-ps4 %s 2>&1 | FileCheck -check-prefix=WARN-SYS-HEADERS <o:p></o:p></p>
<p>+-check-prefix=NO-WARN %s // RUN: env SCE_PS4_SDK_DIR=.. %clang -### <o:p></o:p></p>
<p>+-nodefaultlibs -target x86_64-scei-ps4 %s 2>&1 | FileCheck <o:p></o:p></p>
<p>+-check-prefix=WARN-SYS-HEADERS -check-prefix=NO-WARN %s<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// NO-WARN-NOT: {{warning:|error:}}<o:p></o:p></p>
<p>+// WARN-SYS-HEADERS: warning: unable to find PS4 system headers <o:p></o:p></p>
<p>+directory // WARN-ISYSROOT: warning: no such sysroot directory: 'foo'<o:p></o:p></p>
<p>+// WARN-SYS-LIBS: warning: unable to find PS4 system libraries <o:p></o:p></p>
<p>+directory // NO-WARN-NOT: {{warning:|error:}}<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Modified: cfe/trunk/test/Driver/rtti-options.cpp<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/rtti-options.cpp?rev=248546&r1=248545&r2=248546&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/rtti-options.cpp?rev=248546&r1=248545&r2=248546&view=diff</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/test/Driver/rtti-options.cpp (original)<o:p></o:p></p>
<p>+++ cfe/trunk/test/Driver/rtti-options.cpp Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -34,7 +34,8 @@<o:p></o:p></p>
<p>// RUN: %clang -x c++ -### -c -target x86_64-unknown-unknown -fexceptions %s 2>&1 | FileCheck -check-prefix=CHECK-OK %s<o:p></o:p></p>
<p> // -frtti + exceptions<o:p></o:p></p>
<p>-// RUN: %clang -### -c -target x86_64-scei-ps4 -fcxx-exceptions -frtti %s 2>&1 | FileCheck -check-prefix=CHECK-OK %s<o:p></o:p></p>
<p>+// ps4 needs -nostdinc due to having warnings if the SDK is not <o:p></o:p></p>
<p>+installed // RUN: %clang -### -c -nostdinc -target x86_64-scei-ps4 <o:p></o:p></p>
<p>+-fcxx-exceptions -frtti %s 2>&1 | FileCheck -check-prefix=CHECK-OK %s<o:p></o:p></p>
<p>// RUN: %clang -### -c -target x86_64-unknown-unknown -fcxx-exceptions -frtti %s 2>&1 | FileCheck -check-prefix=CHECK-OK %s<o:p></o:p></p>
<p> // -f{no-,}rtti/default<o:p></o:p></p>
<p> <o:p></o:p></p>
<p>Modified: cfe/trunk/test/Driver/stack-protector.c<o:p></o:p></p>
<p>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/stack-protector.c?rev=248546&r1=248545&r2=248546&view=diff" target="_blank">
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/stack-protector.c?rev=248546&r1=248545&r2=248546&view=diff</a><o:p></o:p></p>
<p>==============================================================================<o:p></o:p></p>
<p>--- cfe/trunk/test/Driver/stack-protector.c (original)<o:p></o:p></p>
<p>+++ cfe/trunk/test/Driver/stack-protector.c Thu Sep 24 17:06:52 2015<o:p></o:p></p>
<p>@@ -23,3 +23,12 @@<o:p></o:p></p>
<p>// RUN: %clang -fstack-protector-all -### %s 2>&1 | FileCheck %s -check-prefix=SSP-ALL  // SSP-ALL: "-stack-protector" "3"<o:p></o:p></p>
<p>// SSP-ALL-NOT: "-stack-protector-buffer-size" <o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: %clang -target x86_64-scei-ps4 -### %s 2>&1 | FileCheck %s <o:p></o:p></p>
<p>+-check-prefix=SSP-PS4 // RUN: %clang -target x86_64-scei-ps4 <o:p></o:p></p>
<p>+-fstack-protector -### %s 2>&1 | FileCheck %s -check-prefix=SSP-PS4 // SSP-PS4: "-stack-protector" "2"<o:p></o:p></p>
<p>+// SSP-PS4-NOT: "-stack-protector-buffer-size"<o:p></o:p></p>
<p>+<o:p></o:p></p>
<p>+// RUN: %clang -target x86_64-scei-ps4 -fstack-protector --param <o:p></o:p></p>
<p>+ssp-buffer-size=16 -### %s 2>&1 | FileCheck %s -check-prefix=SSP-PS4-BUF // SSP-PS4-BUF: "-stack-protector" "2"<o:p></o:p></p>
<p>+// SSP-PS4-BUF: "-stack-protector-buffer-size" "16"<o:p></o:p></p>
<p> <o:p></o:p></p>
<p> <o:p></o:p></p>
<p>_______________________________________________<o:p></o:p></p>
<p>cfe-commits mailing list<o:p></o:p></p>
<p><a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><o:p></o:p></p>
<p><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;margin-bottom:12.0pt"><br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><o:p></o:p></p>
</blockquote>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal">_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><o:p></o:p></p>
</blockquote>
</div>
</div>
</div>
</body>
</html>