gcc4
Версия от 20:46, 23 декабря 2008; Ilis (обсуждение | вклад)
Особенности 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)