<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_10_thread_41631"  />
<title>rulinux.net - Форум - Talks - Троллвальдс: твой компилятор чистое и полное *говно*</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Talks - Троллвальдс: твой компилятор чистое и полное *говно*</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Re:Троллвальдс: твой компилятор чистое и полное *говно*</title>
<link>https://rulinux.net/message.php?newsid=41631&amp;page=1#202439</link>
<guid>https://rulinux.net/message.php?newsid=41631&amp;page=1#202439</guid>
<pubDate>Mon, 28 Jul 2014 18:41:10 +0400</pubDate>
<description><![CDATA[<p><i>>была версия 4.9.1 </i><br><br><br>А он ругается на 4.9.0. Какая связь? Ояебу. Если только половая.</p>]]></description>
</item>
<item>
<title>Re:Троллвальдс: твой компилятор чистое и полное *говно*</title>
<link>https://rulinux.net/message.php?newsid=41631&amp;page=1#202407</link>
<guid>https://rulinux.net/message.php?newsid=41631&amp;page=1#202407</guid>
<pubDate>Mon, 28 Jul 2014 10:06:59 +0400</pubDate>
<description><![CDATA[<p>&gt; Что характерно, когда Линус ругался давно была версия 4.9.1 с фиксом.
<br><br>
Господи, да этому Линусу Торвальдсу нельзя ещё выходить из детского сада. Мы говорим о дебиле, которого в детстве уронили головой — такой здесь уровень задержки в развитии!</p>]]></description>
</item>
<item>
<title>Re:Троллвальдс: твой компилятор чистое и полное *говно*</title>
<link>https://rulinux.net/message.php?newsid=41631&amp;page=1#202404</link>
<guid>https://rulinux.net/message.php?newsid=41631&amp;page=1#202404</guid>
<pubDate>Mon, 28 Jul 2014 08:53:22 +0400</pubDate>
<description><![CDATA[<p>Что характерно, когда Линус ругался давно была версия 4.9.1  с фиксом.</p>]]></description>
</item>
<item>
<title>Троллвальдс: твой компилятор чистое и полное *говно*</title>
<link>https://rulinux.net/message.php?newsid=41631&amp;page=1#202402</link>
<guid>https://rulinux.net/message.php?newsid=41631&amp;page=1#202402</guid>
<pubDate>Mon, 28 Jul 2014 08:38:18 +0400</pubDate>
<description><![CDATA[<p>Очередной поток истерии от Линуса нашего Троллвальдса. На этот раз, древний баг в gcc, который тянется ещё с версий 4.5 привёл к некорректной работе функции балансировки нагрузки.<br><br>Вот русский адаптированный перевод:<br><br><div class="quote"><pre>Ok, я посмотрел на генерацию кода и твой компилятор — чистое и полное дерьмо».<br><br>Я включил Якуба в список рассылки, потому что gcc-4.9.0 кажется неизлечимо сломанным.<br><br>Вот смотри, твой компилятор делает совершенно невообразимые вещи с вытеснением данных, включая вытеснение константы. Господи, да этому компилятору нельзя ещё выходить из детского сада. Мы говорим о дебиле, которого в детстве уронили головой — такой здесь уровень задержки в развитии:<br><br>...<br /> movq $load_balance_mask, -136(%rbp) #, %sfp<br /> subq $184, %rsp #,<br /> movq (%rdx), %rax # sd_22(D)-&gt;parent, sd_parent<br /> movl %edi, -144(%rbp) # this_cpu, %sfp<br /> movl %ecx, -140(%rbp) # idle, %sfp<br /> movq %r8, -200(%rbp) # continue_balancing, %sfp<br /> movq %rax, -184(%rbp) # sd_parent, %sfp<br /> movq -136(%rbp), %rax # %sfp, tcp_ptr__<br /> #APP<br /> add %gs:this_cpu_off, %rax # this_cpu_off, tcp_ptr__<br /> #NO_APP<br /> ... <br><br>Обратите внимание на содержимое -136(%rbp). Реально. Это непосредственная константа, которую компилятор вытеснил.<br><br>Кто-то должен оформить это как баг gcc. Потому что это, чёрт возьми, офигенно сумасшедшая хрень.<br><br>Но эту часть с вытеснением константы можно считать «слишком тупой, чтобы жить». Настоящий баг здесь:<br><br>movq $load_balance_mask, -136(%rbp) #, %sfp<br /> subq $184, %rsp #,<br><br>Тут gcc создаёт стековый фрейм после его использования для сохранения константы гораздо дальше стекового фрейма. </pre></div><br><br>Ссылки: <a href="http://habrahabr.ru/post/231243/">рус</a>/<a href="http://lkml.iu.edu//hypermail/linux/kernel/1407.3/00650.html">eng</a><br><br>PS: баг лечится одной строчкой в gcc:<br><br><fieldset><legend>diff</legend><div class="highlight diff"><br />
<span class="re3">--- branches/gcc-<span class="nu0">4</span>_8-branch/gcc/sched-deps.c&nbsp; &nbsp; <span class="nu0">2014</span>/07/<span class="nu0">17</span> 07:<span class="nu0">48</span>:<span class="nu0">49</span> &nbsp; &nbsp; 212739</span><br />
<span class="re4">+++ branches/gcc-<span class="nu0">4</span>_8-branch/gcc/sched-deps.c&nbsp; &nbsp; <span class="nu0">2014</span>/07/<span class="nu0">17</span> 07:<span class="nu0">49</span>:<span class="nu0">44</span> &nbsp; &nbsp; 212740</span><br />
<span class="re6">@@ -<span class="nu0">2744</span>,<span class="nu0">7</span> +<span class="nu0">2744</span>,<span class="nu0">8</span> @@</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Consider for instance a volatile asm that changes the fpu rounding<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mode. &nbsp;An insn should not be moved across this even if it only uses<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pseudo-regs because it might give an incorrectly rounded result. &nbsp;*/<br />
<span class="re7">- &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>code != ASM_OPERANDS || MEM_VOLATILE_P <span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="br0">&#41;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span><span class="br0">&#40;</span>code != ASM_OPERANDS || MEM_VOLATILE_P <span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="br0">&#41;</span></span><br />
<span class="re8">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &amp;&amp; !DEBUG_INSN_P <span class="br0">&#40;</span>insn<span class="br0">&#41;</span><span class="br0">&#41;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reg_pending_barrier = TRUE_BARRIER;<br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; /* For all ASM_OPERANDS, we must traverse the vector of input operands.<br />
&nbsp;</div></fieldset></p>]]></description>
</item>
</channel>
</rss>