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.