[PATCH RFC v2 0/8] termios: support arbitrary baud rates on Linux, minor cleanups, proposed alternative interface
Joseph Myers
josmyers@redhat.com
Mon Apr 28 17:41:08 GMT 2025
On Fri, 25 Apr 2025, H. Peter Anvin wrote:
> 2. When to use __foo() functions. In my patches I have assumed that
> calls internal to glibc.so should be using __foo() not foo(), but I
> got a very muddy reply as to "when things cross namespace
> boundaries", pointing me to a document which brought absolutely no
> clarity to the issue.
There are two separate but sometimes linked issues:
* Namespace issues (mainly for static linking): if e.g. an ISO C function
calls a POSIX one (directly or indirectly), the call needs to use a name
__* in the implementation namespace. The linknamespace tests should
detect violations of this for the standards that they cover. This issue
does not apply if the function being called is in all the standards that
contain the caller.
* PLT avoidance: internal calls within libc.so should not be interposable,
meaning they should use a function name not exported from the library.
This can be achieved via libc_hidden_proto / libc_hidden_def which result
in a hidden alias being used for the calls; if an internal name __* that's
not exported is used, those aren't needed (although they are often used
for such names as well) - but in that case, if not using libc_hidden_*,
the internal name should preferably be declared with attribute_hidden
(since sometimes it's beneficial for code generation for it to be visible
at compile time, not just link time, that the call is to a non-exported
name).
--
Joseph S. Myers
josmyers@redhat.com
More information about the Libc-alpha
mailing list