Что делает libc_hidden_proto в стандартных библиотеках glibc?

Я пытался найти прототип функции getpgrp() в unistd.h, но не смог его найти. Единственной строкой, содержащей getpgrp в этом файле, была строка libc_hidden_proto (tcgetpgrp), и я предполагаю, что это макрос, но я не знаю, что он делает.

Я гуглил, но не смог найти в Интернете никаких объяснений того, что на самом деле делает libc_hidden_proto. Буду признателен за любое объяснение цели этого макроса в glibc.


person Jerry Marbas    schedule 18.05.2016    source источник
comment
Какую версию glibc вы используете? У меня нигде нет libc_hidden_proto, но я помню его с давних времен...   -  person o11c    schedule 18.05.2016
comment
Это странно. Я использую glibc 2.19, но я также просматриваю заголовочный файл unistd.h в glibc 2.18, 2.20, 2.21 и 2.23 и вижу libc_hidden_proto во всех этих версиях.   -  person Jerry Marbas    schedule 18.05.2016


Ответы (1)


Вы случайно просмотрели внутреннюю копию (include/unistd.h) вместо общедоступной копии (posix/unistd.h). Нет, я тоже не понимаю, как устроен исходный код glibc.

Из include/libc-symbols.h:

   The following macros are used for PLT bypassing within libc.so
   (and if needed other libraries similarly).
   First of all, you need to have the function prototyped somewhere,
   say in foo/foo.h:
   int foo (int __bar);
   If calls to foo within libc.so should always go to foo defined in libc.so,
   then in include/foo.h you add:
   libc_hidden_proto (foo)
person o11c    schedule 18.05.2016
comment
Спасибо. На самом деле я уже читал, что написано в libc-symbols.h, но я не понял, что такое PLT, и поэтому я не упомянул libc-symbols в своем вопросе. Но +1 за ваш ответ в любом случае. Теперь я пойду читать о файлах PLT, GOT, ELF, компоновщиках, динамической загрузке и остальных миллионах других вещей, о которых я не знаю: P - person Jerry Marbas; 19.05.2016
comment
@jerry в основном, это как -fsemantic-interposition только для этих символов. И это работает только внутри glibc из-за всех остальных сумасшедших вещей, которые они делают. - person o11c; 19.05.2016