[Bug 38719] 64-bit ARM Windows applications from Windows SDK for Windows 10 crash when accessing TEB/PEB members (AArch64 platform specific register X18 must be reserved for TEB)

wine-bugs at winehq.org wine-bugs at winehq.org
Sat Jun 13 06:40:07 CDT 2015


https://bugs.winehq.org/show_bug.cgi?id=38719

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|64-bit ARM Windows          |64-bit ARM Windows
                   |applications from Windows   |applications from Windows
                   |SDK for Windows 10 crash    |SDK for Windows 10 crash
                   |when accessing TEB/PEB      |when accessing TEB/PEB
                   |members (AArch64 platform   |members (AArch64 platform
                   |specific register X18 used  |specific register X18 must
                   |for TEB?)                   |be reserved for TEB)

--- Comment #5 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

I've refined the summary in case it's referred to in mailing lists (distros,
libc).

Example 'ld-linux-aarch64.so.1' (which is 'ld-2.19-2014.08-1-git.so'), taken
from my Linaro aarch64-linux-gnu 4.9 cross toolchain (Linux x86_64 host)

Following X18 references:

--- snip ---
0000000000006790 _dl_rtld_di_serinfo::add_path  MOV  X19, X18
0000000000007E94 _dl_rtld_di_serinfo            MOV  X18, X21
0000000000007EB8 _dl_rtld_di_serinfo            MOV  X18, X21
0000000000007F44 _dl_rtld_di_serinfo            MOV  X18, X21
0000000000007F94 _dl_rtld_di_serinfo            MOV  X18, X21
0000000000007FA4 _dl_rtld_di_serinfo            MOV  X18, X21
0000000000008048 do_lookup_x::check_match       LDR  W2, [X18,#0x3C]
000000000000806C do_lookup_x::check_match       LDR  X0, [X18,#0x28]
0000000000008070 do_lookup_x::check_match       OV   X20, X18
0000000000008080 do_lookup_x::check_match       LDR  X2, [X18,#0x20]
0000000000008084 do_lookup_x::check_match       LDR  X1, [X18,#0x18]
000000000000853C do_lookup_x                    MOV  X18, X23
00000000000086B0 do_lookup_x                    MOV  X18, X23
0000000000015168 _dl_tlsdesc_dynamic            STP  X17, X18,
[SP,#0xA0+var_40]
0000000000015210 _dl_tlsdesc_dynamic            LDP  X17, X18,
[SP,#0xA0+var_40]
0000000000015240 _dl_tlsdesc_resolve_rela       STP  X17, X18,
[SP,#0xA0+var_10]
00000000000152F8 _dl_tlsdesc_resolve_rela       LDP  X17, X18,
[SP,#0xA0+var_10]
0000000000015330 _dl_tlsdesc_resolve_hold       STP  X17, X18,
[SP,#0xB0+var_10]
00000000000153EC _dl_tlsdesc_resolve_hold       LDP  X17, X18,
[SP,#0xB0+var_10]
--- snip ---

No special treatment, it's really used as general purpose register.

The _dl_tlsdesc* X18 references result from NSAVEXREGPAIRS macro usage:

https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/aarch64/dl-tlsdesc.S;h=be9b9b394c1aea8f3dfc1f0a9c4c32e002004822;hb=HEAD

Regards

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list