Тесткейс: static double TABLE[500000000]; int main() { return 0; } Занимает очень много памяти. Воспроизводится на: Alt linux 32 и 64, Debian unstable 32бит, Debian unstable 64бит в Fedora 11 binutils-2.19.51.0.2-17.fc11.i586 в Ubuntu 10.10 Всё работает хорошо (ld не занимает кучу памяти) на: Fedora 10 binutils-2.18.50.0.9-8.fc10.i386, RHEL 5 binutils-2.17.50.0.6-2.el5, Debian testing 32бит
Хочу добавить, что занимаемая линкером память сравнима с размером статического массива. Для приведённого примера линкер занимает около 380 Мб.
Если 32бит тестинг запустить в чруте на 64бит, тоже не работает. Так что есть подозрение, что дело не в версиях софта.
Тесткейс, кстати, для 32бит таргетов не компилится принципиально, просьба заменить на http://pastie.org/1537246
(В ответ на комментарий №3) > Тесткейс, кстати, для 32бит таргетов не компилится принципиально, просьба > заменить на http://pastie.org/1537246 Достаточно заменить double на int в приведённом testcase, это я погорячился. (В ответ на комментарий №2) > Если 32бит тестинг запустить в чруте на 64бит, тоже не работает. Так что есть > подозрение, что дело не в версиях софта. Я всё проверял в OpenVZ на 64-битной машине. Если речь о Debian testing 32bit, то версия binutils не указана, а без этого что говорить.
(В ответ на комментарий №4) > Если речь о Debian testing 32bit, то версия binutils не указана, а без этого > что говорить. Могли бы и сами посмотреть. В testing и unstable 2.20.1, но если поставить 2.21, то ничего не меняется (ни там, где работает, ни там, где не работает).
А есть реальный код, где такое безобразие присутствует?
(В ответ на комментарий №6) > А есть реальный код, где такое безобразие присутствует? Это риторический вопрос?
(In reply to comment #0) > Занимает очень много памяти. Воспроизводится на: > Alt linux 32 и 64, > Debian unstable 32бит, > Debian unstable 64бит > в Fedora 11 binutils-2.19.51.0.2-17.fc11.i586 > в Ubuntu 10.10 > > Всё работает хорошо (ld не занимает кучу памяти) на: > Fedora 10 binutils-2.18.50.0.9-8.fc10.i386, > RHEL 5 binutils-2.17.50.0.6-2.el5, > Debian testing 32бит Похоже на upstream regression. Приведите, пожалуйста, недостающие версии binutils.
Написал для Korinf примерно такой скрипт (багу ловил по длительной задержке линковки): cat >test_ld.c <<EOF static short int TABLE[1000000000]; int main() { return 0; } EOF gcc test_ld.c & CHILDPID=$! sleep 2 kill $CHILDPID 2>/dev/null && echo -n "$INFO BUG: " || echo -n "$INFO OK: " rpmqf ld | grep binutils И получил следующие результаты (LD BUG означает проблему при сборке): ASPLinux/11.2 LD OK: binutils-2.15.94.0.2.2-2.1 ASPLinux/12 LD OK: binutils-2.17.50.0.12-4 ASPLinux/14 LD OK: binutils-2.18.50.0.6-5.0.140asp.i386 CentOS/5 LD OK: binutils-2.17.50.0.6-12.el5 Debian/4.0 LD OK: binutils-2.17-3 Debian/5.0 LD OK: binutils-2.18.1~cvs20080103-7 Debian/6.0 LD BUG: binutils-2.20.1-16 Fedora/7 LD OK: binutils-2.17.50.0.12-4 Fedora/8 LD OK: binutils-2.17.50.0.18-1 Fedora/9 LD OK: binutils-2.18.50.0.6-2.i386 Fedora/10 LD OK: binutils-2.18.50.0.9-8.fc10.i386 Fedora/11 LD BUG: binutils-2.19.51.0.2-17.fc11.i586 Fedora/12 LD BUG: binutils-2.19.51.0.14-34.fc12.i686 Fedora/13 LD BUG: binutils-2.20.51.0.2-20.fc13.i686 Fedora/14 LD BUG: binutils-2.20.51.0.2-20.fc13.i686 Mandriva/2007 LD OK: binutils-2.17.50.0.9-1mdv2007.1 Mandriva/2008 LD OK: binutils-2.17.50.0.12-1mdv2008.0 Mandriva/2009.0 LD OK: binutils-2.18.50.0.8-1mnb2 Mandriva/2009.1 LD OK: binutils-2.19.51.0.2-1mnb2 Mandriva/2010.0 LD OK: binutils-2.19.51.0.2-1mnb2 Mandriva/2010.1 LD OK: binutils-2.20.51.0.7-3mnb2 Mandriva/2010.1 LD OK: binutils-2.20.51.0.7-3mnb2 PCLinux LD OK: binutils-2.19.51.0.2-1pclos2010 PCLinux/2010 LD OK: binutils-2.19.51.0.2-1pclos2010 SUSE/11 LD OK: binutils-2.19-11.28 SUSE/10 LD OK: binutils-2.16.91.0.2-8 SUSE/10.1 LD OK: binutils-2.16.91.0.5-18 SUSE/10.3 LD OK: binutils-2.17.50.20070726-14 SUSE/11 LD OK: binutils-2.18.50.20080409-11.1 SUSE/11.2 LD OK: binutils-2.19.51-10.26.4.i586 SUSE/11.2 LD OK: binutils-2.19.51-6.9 SUSE/11.3 LD OK: binutils-2.20.0-6.10.i586 Ubuntu/10.04 LD BUG: binutils-2.20.1-3ubuntu5 Ubuntu/10.10 LD BUG: binutils-2.20.51.20100908-0ubuntu2 Ubuntu/6.06 LD OK: binutils-2.16.1cvs20060117-1ubuntu2.1 Ubuntu/7.10 LD OK: binutils-2.18-0ubuntu3 Ubuntu/8.04 LD OK: binutils-2.18.1~cvs20080103-0ubuntu1 Ubuntu/8.10 LD OK: binutils-2.18.93.20081009-0ubuntu1 Ubuntu/9.04 LD OK: binutils-2.19.1-0ubuntu3 Ubuntu/9.10 LD BUG: binutils-2.20-0ubuntu2 Получается, что на SUSE и Mandriva проблемы нет на новых версиях binutils.
По крайней мере в p9, где binutils-2.31.1-alt4 проблему не наблюдаю.