Jinoh Kang (@iamahuman) commented about dlls/ntdll/unix/signal_x86_64.c:
+ __asm__ volatile ("rdgsbase %0" : "=r" (cur_gs)); + else + cur_gs = arch_prctl( ARCH_GET_GS, teb ); +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + amd64_get_gsbase( &cur_gs ); +#elif defined(__NetBSD__) + sysarch( X86_64_GET_GSBASE, &cur_gs ); +#elif defined(__APPLE__) + cur_gs = (ULONG_PTR)mac_thread_gsbase(); +#else +# error Please define getting %gs for your architecture +#endif + + if ((WORD)cur_gs == system_gs) return FALSE; + + TRACE( "%04hx/%04hx at %p, fixing up\n", (WORD)cur_gs, system_gs, instr ); `signal_i386.c check_invalid_gs` had explicit check for GS: prefix. We should do something similar here.
See `is_privileged_instr` for a comprehensive list of prefixes on x86\_64. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/7064#note_91083