[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH 06/10] hurd: Make sure to not use tcb->self
From: |
Sergey Bugaev |
Subject: |
Re: [RFC PATCH 06/10] hurd: Make sure to not use tcb->self |
Date: |
Fri, 19 May 2023 11:22:10 +0300 |
On Thu, May 18, 2023 at 11:16 PM Joseph Myers <joseph@codesourcery.com> wrote:
> Strictly there are two separate issues: (a) calling an exported symbol
> should be done via a hidden alias, to avoid going via the PLT, and (b)
> functions in a standard namespace should not call names in the user's
> namespace, which requires using a name such as __hurd_thread_self instead
> (which should also be marked hidden to make the call optimally efficient).
While we're talking about this, could you please say if my
understanding below is correct (and correct me if not)?
'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.
'__foo' is a (public? private? semi-private?) symbol, the user code is
not supposed to use it, but it's exported from libc.so for the benefit
of other glibc code that ends up in different DSOs and still wants to
call the original version even when 'foo' gets interposed. Invoked via
PLT from other DSOs, not invoked from libc.so because of...
'__GI___foo' is a private non-exported symbol created by the
hidden_def/hidden_proto macro being used on '__foo', this is what the
code in libc.so (or: whatever DSO the symbol is hidden_def'ed in)
calls to avoid PLT jumps.
Q: why '__foo', why not use hidden_def/hidden_proto on the 'foo' directly?
A: that would only work for code that ends up in libc.so (or rather,
the same DSOs as 'foo'), but we still want other code to also call the
non-interposed, original version of 'foo'
Is that ^^ correct? Should each and every function that is exported to
the user and also used inside libc's own code have '__foo' and
'__GI___foo' versions? What does 'GI' even stand for?
Thanks in advance,
Sergey
- [PATCH 04/10] mach: Add __mach_setup_thread_call (), (continued)
- [PATCH 04/10] mach: Add __mach_setup_thread_call (), Sergey Bugaev, 2023/05/17
- [PATCH 05/10] hurd: Use __mach_setup_thread_call (), Sergey Bugaev, 2023/05/17
- [RFC PATCH 06/10] hurd: Make sure to not use tcb->self, Sergey Bugaev, 2023/05/17
- Re: [RFC PATCH 06/10] hurd: Make sure to not use tcb->self, Samuel Thibault, 2023/05/17
- Re: [RFC PATCH 06/10] hurd: Make sure to not use tcb->self, Joseph Myers, 2023/05/18
- Re: [RFC PATCH 06/10] hurd: Make sure to not use tcb->self, Sergey Bugaev, 2023/05/18
- Re: [RFC PATCH 06/10] hurd: Make sure to not use tcb->self, Joseph Myers, 2023/05/18
- Re: [RFC PATCH 06/10] hurd: Make sure to not use tcb->self, Samuel Thibault, 2023/05/18
- Re: [RFC PATCH 06/10] hurd: Make sure to not use tcb->self,
Sergey Bugaev <=
- Re: [RFC PATCH 06/10] hurd: Make sure to not use tcb->self, Florian Weimer, 2023/05/19
- Re: [RFC PATCH 06/10] hurd: Make sure to not use tcb->self, Joseph Myers, 2023/05/19
- [PATCH] hurd: Fix using interposable hurd_thread_self, Sergey Bugaev, 2023/05/19
- Re: [PATCH] hurd: Fix using interposable hurd_thread_self, Samuel Thibault, 2023/05/19
[PATCH 07/10] hurd: Fix x86_64 _hurd_tls_fork, Sergey Bugaev, 2023/05/17
[PATCH 08/10] hurd: Fix setting up pthreads, Sergey Bugaev, 2023/05/17
[PATCH 09/10] hurd: Also make it possible to call strlen very early, Sergey Bugaev, 2023/05/17