anonymous@RULINUX.NET~# Last login: 2024-11-16 10:35:07
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

Троллвальдс: твой компилятор чистое и полное *говно*

Очередной поток истерии от Линуса нашего Троллвальдса. На этот раз, древний баг в gcc, который тянется ещё с версий 4.5 привёл к некорректной работе функции балансировки нагрузки.

Вот русский адаптированный перевод:

Ok, я посмотрел на генерацию кода и твой компилятор — чистое и полное дерьмо».

Я включил Якуба в список рассылки, потому что gcc-4.9.0 кажется неизлечимо сломанным.

Вот смотри, твой компилятор делает совершенно невообразимые вещи с вытеснением данных, включая вытеснение константы. Господи, да этому компилятору нельзя ещё выходить из детского сада. Мы говорим о дебиле, которого в детстве уронили головой — такой здесь уровень задержки в развитии:

...
movq $load_balance_mask, -136(%rbp) #, %sfp
subq $184, %rsp #,
movq (%rdx), %rax # sd_22(D)->parent, sd_parent
movl %edi, -144(%rbp) # this_cpu, %sfp
movl %ecx, -140(%rbp) # idle, %sfp
movq %r8, -200(%rbp) # continue_balancing, %sfp
movq %rax, -184(%rbp) # sd_parent, %sfp
movq -136(%rbp), %rax # %sfp, tcp_ptr__
#APP
add %gs:this_cpu_off, %rax # this_cpu_off, tcp_ptr__
#NO_APP
...

Обратите внимание на содержимое -136(%rbp). Реально. Это непосредственная константа, которую компилятор вытеснил.

Кто-то должен оформить это как баг gcc. Потому что это, чёрт возьми, офигенно сумасшедшая хрень.

Но эту часть с вытеснением константы можно считать «слишком тупой, чтобы жить». Настоящий баг здесь:

movq $load_balance_mask, -136(%rbp) #, %sfp
subq $184, %rsp #,

Тут gcc создаёт стековый фрейм после его использования для сохранения константы гораздо дальше стекового фрейма.


Ссылки: рус/eng

PS: баг лечится одной строчкой в gcc:

diff

--- branches/gcc-4_8-branch/gcc/sched-deps.c    2014/07/17 07:48:49     212739
+++ branches/gcc-4_8-branch/gcc/sched-deps.c    2014/07/17 07:49:44     212740
@@ -2744,7 +2744,8 @@
           Consider for instance a volatile asm that changes the fpu rounding
           mode.  An insn should not be moved across this even if it only uses
           pseudo-regs because it might give an incorrectly rounded result.  */
-       if (code != ASM_OPERANDS || MEM_VOLATILE_P (x))
+       if ((code != ASM_OPERANDS || MEM_VOLATILE_P (x))
+           && !DEBUG_INSN_P (insn))
          reg_pending_barrier = TRUE_BARRIER;
 
        /* For all ASM_OPERANDS, we must traverse the vector of input operands.
 

anonymous(*) (2014-07-28 12:38:18)

[Ответить на это сообщение]
avatar
Скрыть

Re:Троллвальдс: твой компилятор чистое и полное *говно*

Что характерно, когда Линус ругался давно была версия 4.9.1 с фиксом.

Dr.uid(*)(2014-07-28 12:53:22)

Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0 Iceweasel/30.0
avatar
Скрыть

Re:Троллвальдс: твой компилятор чистое и полное *говно*

> Что характерно, когда Линус ругался давно была версия 4.9.1 с фиксом.

Господи, да этому Линусу Торвальдсу нельзя ещё выходить из детского сада. Мы говорим о дебиле, которого в детстве уронили головой — такой здесь уровень задержки в развитии!

anonymous(*)(2014-07-28 14:06:59)

avatar
Скрыть

Re:Троллвальдс: твой компилятор чистое и полное *говно*

>была версия 4.9.1


А он ругается на 4.9.0. Какая связь? Ояебу. Если только половая.

Silvy(*)(2014-07-28 22:41:10)
Отредактировано Silvy по причине Охбле, садись, два!
Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0
Этот тред читают 2 пользователя:
Анонимных: 2
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!