From: Joseph Myers <joseph@codesourcery.com>
To: Sergey Bugaev <bugaevc@gmail.com>
Cc: Samuel Thibault <samuel.thibault@gnu.org>,
<libc-alpha@sourceware.org>, <bug-hurd@gnu.org>
Subject: Re: [RFC PATCH 06/10] hurd: Make sure to not use tcb->self
Date: Fri, 19 May 2023 16:50:29 +0000 [thread overview]
Message-ID: <cf94f514-a650-13ae-3af1-495485b485@codesourcery.com> (raw)
In-Reply-To: <CAN9u=HcurRo2LMa_Zjp1NENQik4x7UrJgFRH9Ji4jxM-be+NDw@mail.gmail.com>
On Fri, 19 May 2023, Sergey Bugaev via Libc-alpha wrote:
> 'foo' is a public symbol, to be used by the user, and also
> interposable by the user. Always called via PLT (except from inside
> the user's code when redefined inside the executable, in which case
> the compiler/linker will see that no PLT is needed), and should not be
> called from inside glibc.
Should not be called from within glibc via the PLT within the same
library.
It's OK for foo to be called from bar if foo is part of all the standards
that contain bar. But in that case, if the call is from the same library,
*_hidden_def / *_hidden_proto should be used to avoid calling via the PLT.
If foo is not part of all the standards that contain bar, then glibc code
for bar should use __foo instead to avoid namespace issues, especially for
static linking.
If __foo is needed by executables, *_nonshared.a or other shared
libraries, then it also needs to be exported from the library it's in (in
which case PLT avoidance is also relevant for __foo, so *_hidden_* should
be used for __foo).
If __foo is only used within a single library and doesn't need to be
exported, it's OK to declare it directly with attribute_hidden rather than
using *_hidden_* to create __GI___foo as an alias. (In this case, if you
forget to use attribute_hidden, you won't get test failures - the symbol
in fact won't get exported, because only symbols explicitly listed in the
version maps get exported, and so it won't get a PLT entry. But in some
cases, code generation is more efficient if the compiler knows that the
symbol is hidden. So when you're calling an unexported symbol in the same
library, it's still desirable for it to be declared as hidden in a way
visible to the compiler.) The more complicated hidden_proto / hidden_def
approach also works for unexported symbols used within a single library,
it's just more complicated than necessary in that case.
--
Joseph S. Myers
joseph@codesourcery.com
next prev parent reply other threads:[~2023-05-19 16:50 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-17 19:14 [PATCH 00/10] Stack setup & misc fixes for x86_64-gnu Sergey Bugaev
2023-05-17 19:14 ` [PATCH 01/10] Remove sysdeps/generic/thread_state.h Sergey Bugaev
2023-05-17 20:50 ` Samuel Thibault
2023-05-17 19:14 ` [PATCH 02/10] mach: Define MACHINE_THREAD_STATE_SETUP_CALL Sergey Bugaev
2023-05-17 20:52 ` Samuel Thibault
2023-05-17 19:14 ` [PATCH 03/10] hurd: Use MACHINE_THREAD_STATE_SETUP_CALL Sergey Bugaev
2023-05-17 20:52 ` [PATCH 03/10] hurd: Use MACHINE_THREAD_STATE_SETUP_CALLo Samuel Thibault
2023-05-17 19:14 ` [PATCH 04/10] mach: Add __mach_setup_thread_call () Sergey Bugaev
2023-05-17 20:56 ` Samuel Thibault
2023-05-17 19:14 ` [PATCH 05/10] hurd: Use " Sergey Bugaev
2023-05-17 20:57 ` Samuel Thibault
2023-05-17 19:14 ` [RFC PATCH 06/10] hurd: Make sure to not use tcb->self Sergey Bugaev
2023-05-17 20:59 ` Samuel Thibault
2023-05-18 18:55 ` Joseph Myers
2023-05-18 19:33 ` Sergey Bugaev
2023-05-18 20:16 ` Joseph Myers
2023-05-18 23:47 ` Samuel Thibault
2023-05-19 8:22 ` Sergey Bugaev
2023-05-19 9:39 ` Florian Weimer
2023-05-19 16:50 ` Joseph Myers [this message]
2023-05-19 14:47 ` [PATCH] hurd: Fix using interposable hurd_thread_self Sergey Bugaev
2023-05-19 18:57 ` Samuel Thibault
2023-05-17 19:14 ` [PATCH 07/10] hurd: Fix x86_64 _hurd_tls_fork Sergey Bugaev
2023-05-17 21:01 ` Samuel Thibault
2023-05-17 19:14 ` [PATCH 08/10] hurd: Fix setting up pthreads Sergey Bugaev
2023-05-17 21:02 ` Samuel Thibault
2023-05-17 19:14 ` [PATCH 09/10] hurd: Also make it possible to call strlen very early Sergey Bugaev
2023-05-17 21:04 ` Samuel Thibault
2023-05-17 19:14 ` [RFC PATCH 10/10] hurd: Regenerate errno.h Sergey Bugaev
2023-05-17 19:39 ` Joseph Myers
2023-05-17 21:04 ` Samuel Thibault
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cf94f514-a650-13ae-3af1-495485b485@codesourcery.com \
--to=joseph@codesourcery.com \
--cc=bug-hurd@gnu.org \
--cc=bugaevc@gmail.com \
--cc=libc-alpha@sourceware.org \
--cc=samuel.thibault@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).