gcc4

Материал из ALT Linux Wiki
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Особенности gcc4

Точнее, gcc4.1 из Sisyphus (уже с включенными по умолчанию -D_FORTIFY_SOURCE=2 -fstack-protector).

missing sentinel in function call

>       execl("/bin/sh", "sh", "-c", cmd, 0);
>       Panic(errno, "/bin/sh");
> cc1: warnings being treated as errors
> fileio.c: In function 'printpipe':
> fileio.c:782: warning: missing sentinel in function call
> 
> Как исправить?
Читать документацию.  Если лень искать, то вторая ссылка в G ведёт на http://www.linuxonly.nl/docs/sentinel/

Так ругается: execl("/bin/sh", "sh", "-c", cmd, 0);

Так не ругается: execl("/bin/sh", "sh", "-c", cmd, NULL);

stack_chk_fail

Вообще говоря, обычно проблемы из-за того, что авторы линкуются напрямую ld, без gcc; в таком случае достаточно исправить линковку на gcc, а передаваемые линкеру опции предварить -Wl, (например, -Wl,--as-needed).

Если программа специфична (realmode или ещё что подобное) или пакет ценен, но возможности исправить сборку в дополнительно защищённый бинарник не получается -- можно отключить stack protector:

%add_optflags -U_FORTIFY_SOURCE -fno-stack-protector

invalid lvalue in assignment

Убери lvalue_cast
- (int)(long)pnew = -1;
+pnew = (void*)-1;

В случае с rpm помогло.
gcc3.4 на эти же строчки выдает warnings, а в gcc4.1 - они уже errors.

(Damir Shayhutdinov)

ссылки