Есть либа. В либе никакие функции вообще не экспортируются (ну или допустим 1-2, не суть). Остальные - чисто внутренние. Собирается либа с -fPIC естественно, под x86_32 т.е. -m32. Поэтому в каждой функции имеется в прологе вызов __i686.get_pc_thunk.bx.
Вопрос - как этого избежать, зачем там это нужно? Ну т.е. понятно -fPIC GOT и всё такое, но функция же внутренняя. Либа вообще собирается с -fvisibility=hidden. Я уже и -O3 и -flto и -fwhole-program и gcc 4.7 и --dynamic-list и чего только не пробовал. С -fwhole-program на тестовом примере линкер (?) вообще инлайнит «внутреннюю» функцию прямо в исполняемый main - но и там с этим чортовым thunk-ом. Кстати в тестовом примере и данных-то никаких нет, как и обращения к ним.
А чёрт я тупой, строка для printf-а это ж тоже данные. Получается, никак от GOT и этих вызовов не избавиться? Тогда вопрос - если собрать либу без fPIC, какие будут подводные камни - значительно дольше загрузка (не имеет значения), больше жрать будет памяти...