[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-devel
Subject: Re: [PATCH 1/3] ntdll: For Mac 64-bit, poke the TEB address to %gs:0x30 and re-enable the inlining o
From: Ken Thomases <ken () codeweavers ! com>
Date: 2016-07-27 16:53:54
Message-ID: 36AE2D94-08F9-40C4-B1F1-FBCAE0D12D3C () codeweavers ! com
[Download RAW message or body]
On Jul 27, 2016, at 11:38 AM, Sebastian Lackner <sebastian@fds-team.de> wrote:
>
> On 27.07.2016 18:30, Ken Thomases wrote:
> > On Jul 27, 2016, at 11:08 AM, Sebastian Lackner <sebastian@fds-team.de> wrote:
> > >
> > > On 27.07.2016 17:42, Ken Thomases wrote:
> > > > 64-bit Windows apps have hard-coded accesses to %gs:0x30 baked into them. \
> > > > They need to find the TEB self pointer there.
> > > >
> > > > Technically, the gsbase register and the memory it points to belong to the
> > > > pthread implementation on macOS. It's used for the pthread TLS \
> > > > implementation. However, study of the sources and experimentation reveal that \
> > > > TLS slot 6 (offset 0x30) is not currently used. Furthermore, Apple has \
> > > > promised to not use that slot in the future. So, we hijack it for our \
> > > > purposes.
> > > > This removes the implementation of NtCurrentTeb() based on \
> > > > pthread_key_create() and pthread_set/getspecific().
> > > >
> > > > Signed-off-by: Ken Thomases <ken@codeweavers.com>
> > > > ---
> > > > dlls/ntdll/ntdll.spec | 2 +-
> > > > dlls/ntdll/signal_x86_64.c | 34 +++-------------------------------
> > > > include/winnt.h | 2 +-
> > > > 3 files changed, 5 insertions(+), 33 deletions(-)
> > >
> > > Nice to hear that Apple agreed to keep that slot reserved. Would it make sense \
> > > to keep the NtCurrentTeb export neverthless, for compatibility with libraries \
> > > compiled against old Wine?
> >
> > Hmm. I don't know. I hadn't considered it. What sorts of libraries? Did you \
> > have some use case in mind? I guess I'd be surprised if there were such \
> > libraries around.
> > -Ken
> >
>
> I'm not sure if there are any important examples, but all libraries / executables
> compiled with the old Wine headers will have references to the NtCurrentTeb export.
> If users should still be able to use any previously compiled code, it would be
> necessary to keep them. Thats also why we decided to keep it in our Staging \
> patchset.
Previously compiled code other than Wine itself, right? I.e. winelib apps. Which \
call NtCurrentTeb(). Built for Mac 64-bit. I guess I don't think that's an \
important case, but if others disagree I can change the patch.
-Ken
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic