[-- Attachment #1: Type: text/plain, Size: 806 bytes --] На выходных я занимался toochain'ом для ARM. Правки для binutils и glibc у меня в git. Можно забирать. С gcc всё сложнее. Похоже c++-frontend поломан для ARM. Простой testcase: $ cat 1.cc class a { ~a(); }; a::~a () {} Если собрать его в shared library (-fpic -shared), то с gcc-4.4, получается TEXTREL. С gcc-4.3 всё впорядке. Именно это служит причиной появления TEXTREL в libstdc++. Результат работы для gcc -S -fpic для обоих версий компилятора приаттачен. Буду копать дальше. Может у кого-нибудь есть идеи в какую сторону? ;) [-- Attachment #2: gcc-4.3.s --] [-- Type: application/octet-stream, Size: 1372 bytes --] [-- Attachment #3: gcc-4.4.s --] [-- Type: application/octet-stream, Size: 1544 bytes --]
2009/9/28 Kirill A. Shutemov <kirill@shutemov.name>: > На выходных я занимался toochain'ом для ARM. > > Правки для binutils и glibc у меня в git. Можно забирать. > > С gcc всё сложнее. Похоже c++-frontend поломан для ARM. > > Простой testcase: > > $ cat 1.cc > class a { ~a(); }; > a::~a () {} Ещё более простой testcase: $ cat 1.cc void a(){} т.е. получаем TEXTREL в любом случае. > > Если собрать его в shared library (-fpic -shared), то с gcc-4.4, > получается TEXTREL. С gcc-4.3 всё впорядке. > > Именно это служит причиной появления TEXTREL в libstdc++. > > Результат работы для gcc -S -fpic для обоих версий компилятора > приаттачен. > > Буду копать дальше. Может у кого-нибудь есть идеи в какую > сторону? ;) >
2009/9/28 Kirill A. Shutemov <kirill@shutemov.name>:
> 2009/9/28 Kirill A. Shutemov <kirill@shutemov.name>:
>> На выходных я занимался toochain'ом для ARM.
>>
>> Правки для binutils и glibc у меня в git. Можно забирать.
>>
>> С gcc всё сложнее. Похоже c++-frontend поломан для ARM.
Кажется, разобрался. В gcc-4.4 появилась такая фича:
When the assembler supports it, the compiler will now emit unwind
information using assembler .cfi directives.
Так вот для ARM в случае -fpic/-fpie генерируется неверная директива
.cfi_personality с прямым указанием символа, а не косвенной ссылки
через таблицу, как это происходит на x86. Я постараюсь поправить
gcc. Если не получится, то выключу эту фичу. Если использовать
-fno-dwarf2-cfi-asm, то TEXTREL'ов не наблюдается.
> Кажется, разобрался. В gcc-4.4 появилась такая фича:
>
> When the assembler supports it, the compiler will now emit unwind
> information using assembler .cfi directives.
>
> Так вот для ARM в случае -fpic/-fpie генерируется неверная директива
> .cfi_personality с прямым указанием символа, а не косвенной ссылки
> через таблицу, как это происходит на x86.
Здорово, спасибо!
Антон