LINUX.ORG.RU

Вопрос по shared lib / PIC indirection

 , , ,


0

1

Есть либа. В либе никакие функции вообще не экспортируются (ну или допустим 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, какие будут подводные камни - значительно дольше загрузка (не имеет значения), больше жрать будет памяти...

★★★★★

Последнее исправление: queen3 (всего исправлений: 2)
Ответ на: комментарий от anonymous

SO это отстой, там уже давно ничего нормального не подскажут.

queen3 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Спасибо кэп. Это всё понятно, меня интересуют детали, например - «pages that will normally be shared will not be shared» - ну и что с того? Т.е. две проги, будет две копии либы... ОК, если эта либа крутится под апачем, какие последствия? В разных процессах будет две копии страниц кода? Ну ок, т.е. памяти больше будет занимать? ОК, как измерить/прикинуть насколько это страшно?

И т.п., гуглить я и сам умею.

queen3 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.