Bug 25042 - Занимаемая ld память зависит от размера статического массива
Summary: Занимаемая ld память зависит от размера статического массива
Status: RESOLVED WORKSFORME
Alias: None
Product: Sisyphus
Classification: Development
Component: binutils (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: Gleb F-Malinovskiy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-02-07 19:16 MSK by Anatoly Lyutin
Modified: 2024-03-28 07:50 MSK (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Anatoly Lyutin 2011-02-07 19:16:29 MSK
Тесткейс:
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бит
Comment 1 Vitaly Lipatov 2011-02-07 19:28:04 MSK
Хочу добавить, что занимаемая линкером память сравнима с размером статического массива. Для приведённого примера линкер занимает около 380 Мб.
Comment 2 Andrey Rahmatullin 2011-02-07 19:52:53 MSK
Если 32бит тестинг запустить в чруте на 64бит, тоже не работает. Так что есть подозрение, что дело не в версиях софта.
Comment 3 Andrey Rahmatullin 2011-02-07 19:54:14 MSK
Тесткейс, кстати, для 32бит таргетов не компилится принципиально, просьба заменить на http://pastie.org/1537246
Comment 4 Vitaly Lipatov 2011-02-07 20:17:27 MSK
(В ответ на комментарий №3)
> Тесткейс, кстати, для 32бит таргетов не компилится принципиально, просьба
> заменить на http://pastie.org/1537246
Достаточно заменить double на int в приведённом testcase, это я погорячился. 

(В ответ на комментарий №2)
> Если 32бит тестинг запустить в чруте на 64бит, тоже не работает. Так что есть
> подозрение, что дело не в версиях софта.
Я всё проверял в OpenVZ на 64-битной машине.
Если речь о Debian testing 32bit, то версия binutils не указана, а без этого что говорить.
Comment 5 Andrey Rahmatullin 2011-02-07 20:46:17 MSK
(В ответ на комментарий №4)
> Если речь о Debian testing 32bit, то версия binutils не указана, а без этого
> что говорить.
Могли бы и сами посмотреть. В testing и unstable 2.20.1, но если поставить 2.21, то ничего не меняется (ни там, где работает, ни там, где не работает).
Comment 6 Kirill A. Shutemov 2011-02-07 21:13:34 MSK
А есть реальный код, где такое безобразие присутствует?
Comment 7 Anatoly Lyutin 2011-02-08 13:48:36 MSK
(В ответ на комментарий №6)
> А есть реальный код, где такое безобразие присутствует?
Это риторический вопрос?
Comment 8 Dmitry V. Levin 2011-02-19 01:52:24 MSK
(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.
Comment 9 Vitaly Lipatov 2011-02-19 15:14:45 MSK
Написал для 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.
Comment 10 Vitaly Lipatov 2024-03-28 07:50:10 MSK
По крайней мере в p9, где binutils-2.31.1-alt4
проблему не наблюдаю.