یه اصطلاحی هست در مورد gcc که بهش میگن Hardened GCC که ظاهرا فقط باید فایل spec دستکاری بشه تا خروجی کامپایل و لینک یه باینری امن باشه.قبل از هر تغییری خروجی کامپایلر از نظر گزینه های امنیتی به صورت زیر بود :
COMMAND        RELRO               STACK CANARY     NX/PaX          PIE
gpg-agent Partial RELRO Canary found NX enabled No PIE

من spec توکار gcc (ورژن 4.8.2) رو با دستور زیر اکسترکت کردم :

gcc -dumpspecs > /usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/

بعد فایل spec رو تو ادیتور باز کردم و به انتهای گزینه ای که با :link* شروع میشه گزینه زیر رو اضافه کردم :

%{!norelro: -z relro} %{relro: } %{!nonow: -z now} %{now: }

با این تغییر partial relro به full relro تغییر وضعیت پیدا کرد.حالا میخوام pie رو هم فعال کنم که ظاهرا باید ۴ تا رکوردهای spec تغییر کنند : startfile, endfile, cc1 and link_command
تو این لینک نحوه اینکار توضیح داده شده اما فقط تغییر در ۲ گزینه cc1 و link_command آورده شده و هر کاری کردم موقع اجرای configure یا طی لینک ارور میده.
استفاده از پرچم fPIE- یا pie- تو make به صورت سرتاسری باعث مشکل میشه چون shared library باید از پرچم fPIC- استفاده کنه و کتابخانه های استاتیک باید از PIE استفاده کنند.فقط تغییر درست فایل spec میتونه مشکلو حل کنه.
کسی راه حل یا ایده ای داره.