From 2b3895a514d7cd3108e9272c1e14a9042486d88d Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 8 Oct 2024 15:38:00 -0700 Subject: [PATCH 1/2] Update xbyak to v7.09 --- External/xbyak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/External/xbyak b/External/xbyak index f17cb9d6b9..c68cc53d18 160000 --- a/External/xbyak +++ b/External/xbyak @@ -1 +1 @@ -Subproject commit f17cb9d6b94c44e0c7f2b569b0e360c416e628d5 +Subproject commit c68cc53d18bd7c242194d56ad276d50ff3c1ae3d From 4a179c8f87d7488c1c15f92f5fee8b2c62fc1551 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 8 Oct 2024 15:39:26 -0700 Subject: [PATCH 2/2] TestHarnessRunner: Fixes FS/GS usage in tests When writing `FEX_bugs/tls_vector_element.asm` I had to switch to using GS segment instead of FS segment because the unittests didn't correctly restore FS after running. This is because GS is unused on Linux applications, but FS would become broken and break glibc cleanup on shutdown. Now that xbyak has been updated to v7.09, it now supports {rd,wr}{fs,gs}base which allows us to save and restore the segments correctly. This lets us drop in TLS tests in to unittests more easily now. Ensured this works by modifying the test temporarily to use fs instead of gs again, seeing it crash before HostRunner changes, and work after HostRunner changes. Fixes #4104 --- .../TestHarnessRunner/TestHarnessRunner/HostRunner.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Source/Tools/TestHarnessRunner/TestHarnessRunner/HostRunner.cpp b/Source/Tools/TestHarnessRunner/TestHarnessRunner/HostRunner.cpp index 0e9b88cca7..9a73b461a7 100644 --- a/Source/Tools/TestHarnessRunner/TestHarnessRunner/HostRunner.cpp +++ b/Source/Tools/TestHarnessRunner/TestHarnessRunner/HostRunner.cpp @@ -51,6 +51,10 @@ class x86HostRunner final : public Xbyak::CodeGenerator { push(r13); push(r14); push(r15); + rdfsbase(rbx); + push(rbx); + rdgsbase(rbx); + push(rbx); sub(rsp, 8); // Save this stack pointer so we can cleanly shutdown the emulation with a long jump @@ -105,6 +109,10 @@ class x86HostRunner final : public Xbyak::CodeGenerator { add(rsp, 8); + pop(rbx); + wrgsbase(rbx); + pop(rbx); + wrfsbase(rbx); pop(r15); pop(r14); pop(r13);